[Bug #795] Refactor calendar remove dialog box and change it to a MessageBox

FEA: ItEr67S04BugFixing
This commit is contained in:
Diego Pino Garcia 2011-01-10 10:06:32 +01:00
parent d5bb6b6f88
commit 65917c3fa4
5 changed files with 81 additions and 96 deletions

View file

@ -38,8 +38,8 @@ import org.zkoss.zk.ui.event.EventListener;
import org.zkoss.zk.ui.event.Events;
import org.zkoss.zk.ui.util.GenericForwardComposer;
import org.zkoss.zul.Button;
import org.zkoss.zul.Grid;
import org.zkoss.zul.Label;
import org.zkoss.zul.Messagebox;
import org.zkoss.zul.SimpleTreeNode;
import org.zkoss.zul.Treecell;
import org.zkoss.zul.Treeitem;
@ -51,6 +51,7 @@ import org.zkoss.zul.api.Window;
* Controller for CRUD actions over a {@link BaseCalendar}
*
* @author Manuel Rego Casasnovas <mrego@igalia.com>
* @author Diego Pino Garcia <dpino@igalia.com>
*/
public class BaseCalendarCRUDController extends GenericForwardComposer {
@ -62,14 +63,8 @@ public class BaseCalendarCRUDController extends GenericForwardComposer {
private Window editWindow;
private Window confirmRemove;
private Window createNewVersion;
private Grid gridCalendarInformation;
private boolean confirmingRemove = false;
private OnlyOneVisible visibility;
private IMessagesForUser messagesForUser;
@ -137,62 +132,6 @@ public class BaseCalendarCRUDController extends GenericForwardComposer {
}
}
public void confirmRemove(BaseCalendar baseCalendar) {
baseCalendarModel.initRemove(baseCalendar);
showConfirmingWindow();
}
public void cancelRemove() {
confirmingRemove = false;
baseCalendarModel.cancel();
confirmRemove.setVisible(false);
Util.reloadBindings(confirmRemove);
}
public boolean isConfirmingRemove() {
return confirmingRemove;
}
private void hideConfirmingWindow() {
confirmingRemove = false;
Util.reloadBindings(confirmRemove);
}
private void showConfirmingWindow() {
confirmingRemove = true;
try {
Util.reloadBindings(confirmRemove);
confirmRemove.doModal();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public void remove() {
String name = baseCalendarModel.getBaseCalendar().getName();
if (baseCalendarModel.isParent()) {
hideConfirmingWindow();
messagesForUser
.showMessage(Level.ERROR,
_("The calendar was not removed because it still has children. "
+ "Some other calendar is derived from this one."));
} else if (baseCalendarModel.isDefaultCalendar(baseCalendarModel
.getBaseCalendar())) {
hideConfirmingWindow();
messagesForUser
.showMessage(
Level.ERROR,
_("The default calendar can not be removed. "
+ "Please, change the default calendar in the Configuration window before."));
} else {
baseCalendarModel.confirmRemove();
hideConfirmingWindow();
Util.reloadBindings(listWindow);
messagesForUser.showMessage(Level.INFO, _(
"Removed calendar \"{0}\"", name));
}
}
public void goToCreateForm() {
baseCalendarModel.initCreate();
assignCreateController();
@ -410,6 +349,58 @@ public class BaseCalendarCRUDController extends GenericForwardComposer {
}
private void confirmRemove(BaseCalendar calendar) {
// Has parent?
if (hasParent(calendar)) {
messagesForUser
.showMessage(
Level.ERROR,
_("Calendar cannot be removed because it still has children. "
+ "Some other calendar is derived from this one."));
return;
}
// Is default calendar?
if (isDefault(calendar)) {
messagesForUser
.showMessage(
Level.ERROR,
_("Default calendar cannot be removed. "
+ "Please, change the default calendar in the Configuration window before."));
return;
}
try {
int status = Messagebox
.show(_("Confirm deleting {0}. Are you sure?",
calendar.getName()), _("Delete"), Messagebox.OK
| Messagebox.CANCEL, Messagebox.QUESTION);
if (Messagebox.OK == status) {
remove(calendar);
}
} catch (InterruptedException e) {
messagesForUser.showMessage(Level.ERROR, e.getMessage());
}
}
private void remove(BaseCalendar calendar) {
final String name = calendar.getName();
baseCalendarModel.confirmRemove(calendar);
messagesForUser.showMessage(Level.INFO,
_("Removed calendar \"{0}\"", name));
Util.reloadBindings(listWindow);
}
public boolean isDefault(BaseCalendar calendar) {
return baseCalendarModel.isDefaultCalendar(calendar);
}
public boolean hasParent(BaseCalendar calendar) {
return baseCalendarModel.isParent(calendar);
}
public BaseCalendarEditionController getEditionController() {
if (isEditing()) {
return editionController;

View file

@ -59,6 +59,7 @@ import org.springframework.transaction.annotation.Transactional;
/**
* Model for UI operations related to {@link BaseCalendar}.
* @author Manuel Rego Casasnovas <mrego@igalia.com>
* @author Diego Pino Garcia <dpino@igalia.com>
*/
@Service
@Scope(BeanDefinition.SCOPE_PROTOTYPE)
@ -384,12 +385,11 @@ public class BaseCalendarModel extends IntegrationEntityModel implements
@Override
@Transactional(readOnly = true)
public boolean isParent() {
if (getBaseCalendar() == null) {
public boolean isParent(BaseCalendar calendar) {
if (calendar == null) {
return false;
}
return !baseCalendarDAO.findByParent(getBaseCalendar()).isEmpty();
return !baseCalendarDAO.findByParent(calendar).isEmpty();
}
@Override
@ -515,9 +515,9 @@ public class BaseCalendarModel extends IntegrationEntityModel implements
@Override
@Transactional
public void confirmRemove() {
public void confirmRemove(BaseCalendar calendar) {
try {
baseCalendarDAO.remove(getBaseCalendar().getId());
baseCalendarDAO.remove(calendar.getId());
} catch (InstanceNotFoundException e) {
throw new RuntimeException(e);
}

View file

@ -26,12 +26,12 @@ import java.util.Set;
import org.joda.time.LocalDate;
import org.navalplanner.business.calendars.entities.BaseCalendar;
import org.navalplanner.business.calendars.entities.BaseCalendar.DayType;
import org.navalplanner.business.calendars.entities.CalendarAvailability;
import org.navalplanner.business.calendars.entities.CalendarData;
import org.navalplanner.business.calendars.entities.CalendarData.Days;
import org.navalplanner.business.calendars.entities.CalendarException;
import org.navalplanner.business.calendars.entities.CalendarExceptionType;
import org.navalplanner.business.calendars.entities.BaseCalendar.DayType;
import org.navalplanner.business.calendars.entities.CalendarData.Days;
import org.navalplanner.business.common.exceptions.ValidationException;
import org.navalplanner.business.workingday.EffortDuration;
import org.navalplanner.web.common.IIntegrationEntityModel;
@ -62,6 +62,7 @@ import org.navalplanner.web.common.IIntegrationEntityModel;
* </ul>
*
* @author Manuel Rego Casasnovas <mrego@igalia.com>
* @author Diego Pino Garcia <dpino@igalia.com>
*/
public interface IBaseCalendarModel extends IIntegrationEntityModel {
@ -132,7 +133,7 @@ public interface IBaseCalendarModel extends IIntegrationEntityModel {
void setParent(BaseCalendar parent);
boolean isParent();
boolean isParent(BaseCalendar calendar);
Date getExpiringDate();
@ -191,7 +192,7 @@ public interface IBaseCalendarModel extends IIntegrationEntityModel {
void confirmSave() throws ValidationException;
void confirmRemove();
void confirmRemove(BaseCalendar calendar);
void cancel();

View file

@ -19,48 +19,40 @@
-->
<?page title="${i18n:_('NavalPlan: Calendars')}"?>
<?init class="org.zkoss.zkplus.databind.AnnotateDataBinderInit" ?>
<?taglib uri="http://www.zkoss.org/dsp/web/core" prefix="c"?>
<?page id="List"?>
<?init class="org.zkoss.zk.ui.util.Composition" arg0="/common/layout/template.zul"?>
<?link rel="stylesheet" type="text/css" href="/common/css/navalplan.css"?>
<?link rel="stylesheet" type="text/css" href="/common/css/navalplan_zk.css"?>
<?link rel="stylesheet" type="text/css" href="/resources/css/resources.css"?>
<?variable-resolver class="org.zkoss.zkplus.spring.DelegatingVariableResolver"?>
<?component name="list" inline="true" macroURI="_list.zul"?>
<?component name="edition" inline="true" macroURI="_edition.zul"?>
<?component name="createNewVersion" inline="true" macroURI="_createNewVersion.zul"?>
<zk>
<zk>
<window self="@{define(content)}"
apply="org.navalplanner.web.calendars.BaseCalendarCRUDController">
<vbox id="messagesContainer"></vbox>
apply="org.navalplanner.web.calendars.BaseCalendarCRUDController">
<vbox id="messagesContainer"></vbox>
<list top_id="listWindow" />
<edition top_id="createWindow" title="${i18n:_('Create Calendar')}"
save_button_label="${i18n:_('Save')}"
save_button_visible="true"
cancel_button_label="${i18n:_('Cancel')}" />
<edition top_id="editWindow" title="${i18n:_('Edit Calendar')}"
save_button_label="${i18n:_('Save')}"
save_button_visible="true"
cancel_button_label="${i18n:_('Cancel')}" />
<window visible="@{calendarController.confirmingRemove}"
id="confirmRemove" title="${i18n:_('Confirmation')}" sizable="true"
position="center">
<vbox align = "center">
<hbox align = "center">
<i18n value="Do you want to delete '{0}'?"
arg0="@{calendarController.baseCalendar.name}"/>
</hbox>
<hbox align = "center">
<button label="${i18n:_('Yes')}"
onClick="calendarController.remove();" />
<button label="${i18n:_('No')}"
onClick="calendarController.cancelRemove();" />
</hbox>
</vbox>
</window>
<createNewVersion />
</window>
</zk>
</zk>

View file

@ -49,6 +49,7 @@ import org.springframework.transaction.annotation.Transactional;
* Tests for {@link BaseCalendarModel}.
*
* @author Manuel Rego Casasnovas <mrego@igalia.com>
* @author Diego Pino Garcia <dpino@igalia.com>
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { BUSINESS_SPRING_CONFIG_FILE,
@ -142,7 +143,7 @@ public class BaseCalendarModelTest {
BaseCalendar baseCalendar = baseCalendarModel.getBaseCalendars().get(
previous);
baseCalendarModel.initRemove(baseCalendar);
baseCalendarModel.confirmRemove();
baseCalendarModel.confirmRemove(baseCalendar);
assertThat(baseCalendarModel.getBaseCalendars().size(),
equalTo(previous));
}