diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/calendars/daos/BaseCalendarDAO.java b/navalplanner-business/src/main/java/org/navalplanner/business/calendars/daos/BaseCalendarDAO.java index fb7918d78..bf22b0e3c 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/calendars/daos/BaseCalendarDAO.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/calendars/daos/BaseCalendarDAO.java @@ -1,5 +1,7 @@ package org.navalplanner.business.calendars.daos; +import java.util.List; + import org.navalplanner.business.calendars.entities.BaseCalendar; import org.navalplanner.business.common.daos.GenericDAOHibernate; import org.springframework.beans.factory.config.BeanDefinition; @@ -16,4 +18,9 @@ import org.springframework.stereotype.Repository; public class BaseCalendarDAO extends GenericDAOHibernate implements IBaseCalendarDAO { + @Override + public List getBaseCalendars() { + return list(BaseCalendar.class); + } + } diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/calendars/daos/IBaseCalendarDAO.java b/navalplanner-business/src/main/java/org/navalplanner/business/calendars/daos/IBaseCalendarDAO.java index f8294fde2..d0325fc55 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/calendars/daos/IBaseCalendarDAO.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/calendars/daos/IBaseCalendarDAO.java @@ -1,8 +1,12 @@ package org.navalplanner.business.calendars.daos; +import java.util.List; + import org.navalplanner.business.calendars.entities.BaseCalendar; import org.navalplanner.business.common.daos.IGenericDAO; public interface IBaseCalendarDAO extends IGenericDAO { + List getBaseCalendars(); + } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/calendars/BaseCalendarCRUDController.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/calendars/BaseCalendarCRUDController.java index e57fe30e5..8fb6b4dc6 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/calendars/BaseCalendarCRUDController.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/calendars/BaseCalendarCRUDController.java @@ -1,7 +1,17 @@ package org.navalplanner.web.calendars; +import java.util.List; + import org.navalplanner.business.calendars.entities.BaseCalendar; +import org.navalplanner.business.common.exceptions.ValidationException; +import org.navalplanner.web.common.IMessagesForUser; +import org.navalplanner.web.common.Level; +import org.navalplanner.web.common.MessagesForUser; +import org.navalplanner.web.common.OnlyOneVisible; +import org.navalplanner.web.common.Util; +import org.zkoss.zk.ui.Component; import org.zkoss.zk.ui.util.GenericForwardComposer; +import org.zkoss.zul.api.Window; /** * Controller for CRUD actions over a {@link BaseCalendar} @@ -10,4 +20,120 @@ import org.zkoss.zk.ui.util.GenericForwardComposer; */ public class BaseCalendarCRUDController extends GenericForwardComposer { + private IBaseCalendarModel baseCalendarModel; + + private Window listWindow; + + private Window createWindow; + + private Window editWindow; + + private Window confirmRemove; + + private boolean confirmingRemove = false; + + private OnlyOneVisible visibility; + + private IMessagesForUser messagesForUser; + + private Component messagesContainer; + + public List getBaseCalendars() { + return baseCalendarModel.getBaseCalendars(); + } + + public BaseCalendar getBaseCalendar() { + return baseCalendarModel.getBaseCalendar(); + } + + @Override + public void doAfterCompose(Component comp) throws Exception { + super.doAfterCompose(comp); + messagesForUser = new MessagesForUser(messagesContainer); + comp.setVariable("controller", this, true); + getVisibility().showOnly(listWindow); + } + + public void cancel() { + goToList(); + } + + public void goToList() { + Util.reloadBindings(listWindow); + getVisibility().showOnly(listWindow); + } + + public void goToEditForm(BaseCalendar BaseCalendar) { + baseCalendarModel.initEdit(BaseCalendar); + getVisibility().showOnly(editWindow); + Util.reloadBindings(editWindow); + } + + public void save() { + try { + baseCalendarModel.save(); + messagesForUser.showMessage(Level.INFO, "base calendar saved"); + goToList(); + } catch (ValidationException e) { + messagesForUser.showInvalidValues(e); + } + } + + public void confirmRemove(BaseCalendar BaseCalendar) { + baseCalendarModel.prepareForRemove(BaseCalendar); + showConfirmingWindow(); + } + + public void cancelRemove() { + confirmingRemove = false; + 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(BaseCalendar BaseCalendar) { + baseCalendarModel.remove(BaseCalendar); + hideConfirmingWindow(); + Util.reloadBindings(listWindow); + messagesForUser.showMessage(Level.INFO, "removed " + + BaseCalendar.getName()); + } + + public void goToEditForm() { + getVisibility().showOnly(editWindow); + Util.reloadBindings(editWindow); + } + + public void goToCreateForm() { + baseCalendarModel.prepareForCreate(); + getVisibility().showOnly(createWindow); + Util.reloadBindings(createWindow); + } + + private OnlyOneVisible getVisibility() { + if (visibility == null) { + visibility = new OnlyOneVisible(listWindow, createWindow, + editWindow); + } + return visibility; + } + } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/calendars/BaseCalendarModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/calendars/BaseCalendarModel.java index c61a788db..035f826e8 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/calendars/BaseCalendarModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/calendars/BaseCalendarModel.java @@ -1,8 +1,19 @@ package org.navalplanner.web.calendars; +import java.util.List; + +import org.apache.commons.lang.Validate; +import org.hibernate.validator.ClassValidator; +import org.hibernate.validator.InvalidValue; +import org.navalplanner.business.calendars.daos.IBaseCalendarDAO; +import org.navalplanner.business.calendars.entities.BaseCalendar; +import org.navalplanner.business.common.exceptions.InstanceNotFoundException; +import org.navalplanner.business.common.exceptions.ValidationException; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; /** @@ -14,4 +25,86 @@ import org.springframework.stereotype.Service; @Scope(BeanDefinition.SCOPE_PROTOTYPE) public class BaseCalendarModel implements IBaseCalendarModel { + private BaseCalendar baseCalendar; + + private boolean editing = false; + + private ClassValidator baseCalendarValidator = new ClassValidator( + BaseCalendar.class); + + @Autowired + private IBaseCalendarDAO baseCalendarDAO; + + @Override + @Transactional(readOnly = true) + public List getBaseCalendars() { + return baseCalendarDAO.getBaseCalendars(); + } + + @Override + public BaseCalendar getBaseCalendar() { + return baseCalendar; + } + + @Override + public void prepareForCreate() { + editing = false; + this.baseCalendar = BaseCalendar.create(); + } + + @Override + @Transactional(readOnly = true) + public void initEdit(BaseCalendar BaseCalendar) { + editing = true; + Validate.notNull(BaseCalendar); + + this.baseCalendar = getFromDB(BaseCalendar); + } + + private BaseCalendar getFromDB(BaseCalendar BaseCalendar) { + return getFromDB(BaseCalendar.getId()); + } + + @Transactional(readOnly = true) + private BaseCalendar getFromDB(Long id) { + try { + BaseCalendar BaseCalendar = baseCalendarDAO.find(id); + return BaseCalendar; + } catch (InstanceNotFoundException e) { + throw new RuntimeException(e); + } + } + + @Override + public void prepareForRemove(BaseCalendar BaseCalendar) { + this.baseCalendar = BaseCalendar; + } + + @Override + @Transactional + public void save() throws ValidationException { + InvalidValue[] invalidValues = baseCalendarValidator + .getInvalidValues(baseCalendar); + if (invalidValues.length > 0) { + throw new ValidationException(invalidValues); + } + + baseCalendarDAO.save(baseCalendar); + } + + @Override + @Transactional + public void remove(BaseCalendar BaseCalendar) { + try { + baseCalendarDAO.remove(baseCalendar.getId()); + } catch (InstanceNotFoundException e) { + throw new RuntimeException(e); + } + } + + @Override + public boolean isEditing() { + return this.editing; + } + } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/calendars/IBaseCalendarModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/calendars/IBaseCalendarModel.java index 582caf18b..4afca8b31 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/calendars/IBaseCalendarModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/calendars/IBaseCalendarModel.java @@ -1,5 +1,10 @@ package org.navalplanner.web.calendars; +import java.util.List; + +import org.navalplanner.business.calendars.entities.BaseCalendar; +import org.navalplanner.business.common.exceptions.ValidationException; + /** * Contract for {@link BaseCalendarModel} * @@ -7,4 +12,20 @@ package org.navalplanner.web.calendars; */ public interface IBaseCalendarModel { + List getBaseCalendars(); + + BaseCalendar getBaseCalendar(); + + void save() throws ValidationException; + + void remove(BaseCalendar BaseCalendar); + + void prepareForCreate(); + + void initEdit(BaseCalendar BaseCalendar); + + void prepareForRemove(BaseCalendar BaseCalendar); + + boolean isEditing(); + } diff --git a/navalplanner-webapp/src/main/webapp/calendars/_edition.zul b/navalplanner-webapp/src/main/webapp/calendars/_edition.zul index 1d6c4448b..18839f89c 100644 --- a/navalplanner-webapp/src/main/webapp/calendars/_edition.zul +++ b/navalplanner-webapp/src/main/webapp/calendars/_edition.zul @@ -9,7 +9,7 @@ diff --git a/navalplanner-webapp/src/main/webapp/calendars/_list.zul b/navalplanner-webapp/src/main/webapp/calendars/_list.zul index d663a1ca4..ebbb1e7dc 100644 --- a/navalplanner-webapp/src/main/webapp/calendars/_list.zul +++ b/navalplanner-webapp/src/main/webapp/calendars/_list.zul @@ -1,12 +1,12 @@ - - + - diff --git a/navalplanner-webapp/src/main/webapp/calendars/calendars.zul b/navalplanner-webapp/src/main/webapp/calendars/calendars.zul index 25beb4101..3c025f8f4 100644 --- a/navalplanner-webapp/src/main/webapp/calendars/calendars.zul +++ b/navalplanner-webapp/src/main/webapp/calendars/calendars.zul @@ -25,12 +25,12 @@