[Bug #795] Refactor calendar remove dialog box and change it to a MessageBox
FEA: ItEr67S04BugFixing
This commit is contained in:
parent
d5bb6b6f88
commit
65917c3fa4
5 changed files with 81 additions and 96 deletions
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue