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 773529872..6dc70ada2 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,11 +1,13 @@ package org.navalplanner.business.calendars.daos; import java.util.ArrayList; +import java.util.Iterator; import java.util.List; import org.hibernate.Criteria; import org.hibernate.criterion.Restrictions; import org.navalplanner.business.calendars.entities.BaseCalendar; +import org.navalplanner.business.calendars.entities.ResourceCalendar; import org.navalplanner.business.common.daos.GenericDAOHibernate; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.context.annotation.Scope; @@ -23,7 +25,19 @@ public class BaseCalendarDAO extends GenericDAOHibernate @Override public List getBaseCalendars() { - return list(BaseCalendar.class); + List list = list(BaseCalendar.class); + removeResourceCalendarInstances(list); + return list; + } + + private void removeResourceCalendarInstances(List list) { + for (Iterator iterator = list.iterator(); iterator + .hasNext();) { + BaseCalendar baseCalendar = iterator.next(); + if (baseCalendar instanceof ResourceCalendar) { + iterator.remove(); + } + } } @Override @@ -36,7 +50,9 @@ public class BaseCalendarDAO extends GenericDAOHibernate .createCriteria("calendarDataVersions", "v"); c.add(Restrictions.eq("v.parent", baseCalendar)); - return (List) c.list(); + List list = (List) c.list(); + removeResourceCalendarInstances(list); + return list; } @Override @@ -48,7 +64,9 @@ public class BaseCalendarDAO extends GenericDAOHibernate Criteria c = getSession().createCriteria(BaseCalendar.class); c.add(Restrictions.eq("name", baseCalendar.getName())); - return (List) c.list(); + List list = (List) c.list(); + removeResourceCalendarInstances(list); + return list; } } diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/calendars/entities/BaseCalendar.java b/navalplanner-business/src/main/java/org/navalplanner/business/calendars/entities/BaseCalendar.java index b42cd58ea..5e876e1b1 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/calendars/entities/BaseCalendar.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/calendars/entities/BaseCalendar.java @@ -28,9 +28,8 @@ public class BaseCalendar extends BaseEntity { private static final Integer DEFAULT_VALUE = 0; public static BaseCalendar create() { - BaseCalendar baseCalendar = new BaseCalendar(); + BaseCalendar baseCalendar = new BaseCalendar(CalendarData.create()); baseCalendar.setNewObject(true); - baseCalendar.calendarDataVersions.add(CalendarData.create()); return baseCalendar; } @@ -51,6 +50,10 @@ public class BaseCalendar extends BaseEntity { public BaseCalendar() { } + protected BaseCalendar(CalendarData calendarData) { + calendarDataVersions.add(calendarData); + } + public void setName(String name) { this.name = name; } diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/calendars/entities/ResourceCalendar.java b/navalplanner-business/src/main/java/org/navalplanner/business/calendars/entities/ResourceCalendar.java index b863e995f..24fd76201 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/calendars/entities/ResourceCalendar.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/calendars/entities/ResourceCalendar.java @@ -9,4 +9,21 @@ import org.navalplanner.business.resources.entities.Resource; */ public class ResourceCalendar extends BaseCalendar { + public static ResourceCalendar create() { + ResourceCalendar resourceCalendar = new ResourceCalendar(CalendarData + .create()); + resourceCalendar.setNewObject(true); + return resourceCalendar; + } + + /** + * Constructor for hibernate. Do not use! + */ + public ResourceCalendar() { + } + + private ResourceCalendar(CalendarData calendarData) { + super(calendarData); + } + } diff --git a/navalplanner-business/src/test/java/org/navalplanner/business/test/calendars/daos/BaseCalendarDAOTest.java b/navalplanner-business/src/test/java/org/navalplanner/business/test/calendars/daos/BaseCalendarDAOTest.java index 4ab4df2a0..f7cf67944 100644 --- a/navalplanner-business/src/test/java/org/navalplanner/business/test/calendars/daos/BaseCalendarDAOTest.java +++ b/navalplanner-business/src/test/java/org/navalplanner/business/test/calendars/daos/BaseCalendarDAOTest.java @@ -1,6 +1,7 @@ package org.navalplanner.business.test.calendars.daos; import static org.hamcrest.CoreMatchers.equalTo; +import static org.hamcrest.CoreMatchers.not; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; @@ -18,6 +19,7 @@ import org.junit.runner.RunWith; import org.navalplanner.business.calendars.daos.BaseCalendarDAO; import org.navalplanner.business.calendars.daos.IBaseCalendarDAO; import org.navalplanner.business.calendars.entities.BaseCalendar; +import org.navalplanner.business.calendars.entities.ResourceCalendar; import org.navalplanner.business.common.exceptions.InstanceNotFoundException; import org.navalplanner.business.test.calendars.entities.BaseCalendarTest; import org.springframework.beans.factory.annotation.Autowired; @@ -275,4 +277,26 @@ public class BaseCalendarDAOTest { assertThat(list.get(0).getId(), equalTo(calendar.getId())); } + @Test + public void getBaseCalendarsAndNotResourceCalendars() { + BaseCalendar calendar1 = BaseCalendarTest.createBasicCalendar(); + calendar1.setName("Test1"); + BaseCalendar calendar2 = BaseCalendarTest.createBasicCalendar(); + calendar1.setName("Test2"); + + ResourceCalendar resourceCalendar = ResourceCalendar.create(); + resourceCalendar.setName("testResourceCalendar"); + BaseCalendarTest.setHoursForAllDays(resourceCalendar, 8); + + baseCalendarDAO.save(calendar1); + baseCalendarDAO.save(calendar2); + baseCalendarDAO.save(resourceCalendar); + baseCalendarDAO.flush(); + + List baseCalendars = baseCalendarDAO.getBaseCalendars(); + assertThat(baseCalendars.size(), equalTo(2)); + assertThat(baseCalendars.get(0).getId(), not(resourceCalendar.getId())); + assertThat(baseCalendars.get(1).getId(), not(resourceCalendar.getId())); + } + }