diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/common/entities/ConfigurationBootstrap.java b/navalplanner-business/src/main/java/org/navalplanner/business/common/entities/ConfigurationBootstrap.java new file mode 100644 index 000000000..229b81a8a --- /dev/null +++ b/navalplanner-business/src/main/java/org/navalplanner/business/common/entities/ConfigurationBootstrap.java @@ -0,0 +1,78 @@ +/* + * This file is part of ###PROJECT_NAME### + * + * Copyright (C) 2009 Fundación para o Fomento da Calidade Industrial e + * Desenvolvemento Tecnolóxico de Galicia + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package org.navalplanner.business.common.entities; + +import java.util.List; + +import org.navalplanner.business.calendars.daos.IBaseCalendarDAO; +import org.navalplanner.business.calendars.entities.BaseCalendar; +import org.navalplanner.business.calendars.entities.CalendarData.Days; +import org.navalplanner.business.common.daos.IConfigurationDAO; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +/** + * Creates a default {@link Configuration} with a default {@link BaseCalendar}. + * + * @author Manuel Rego Casasnovas + */ +@Component +@Scope("singleton") +public class ConfigurationBootstrap implements IConfigurationBootstrap { + + @Autowired + private IConfigurationDAO configurationDAO; + + @Autowired + private IBaseCalendarDAO baseCalendarDAO; + + @Override + @Transactional + public void loadRequiredData() { + List list = configurationDAO.list(Configuration.class); + if (list.isEmpty()) { + Configuration configuration = Configuration.create(); + configuration.setDefaultCalendar(getDefaultCalendar()); + configurationDAO.save(configuration); + } + } + + private BaseCalendar getDefaultCalendar() { + BaseCalendar calendar = BaseCalendar.create(); + + calendar.setName("Default"); + + calendar.setHours(Days.MONDAY, 8); + calendar.setHours(Days.TUESDAY, 8); + calendar.setHours(Days.WEDNESDAY, 8); + calendar.setHours(Days.THURSDAY, 8); + calendar.setHours(Days.FRIDAY, 8); + calendar.setHours(Days.SATURDAY, 0); + calendar.setHours(Days.SUNDAY, 0); + + baseCalendarDAO.save(calendar); + + return calendar; + } + +} diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/common/entities/IConfigurationBootstrap.java b/navalplanner-business/src/main/java/org/navalplanner/business/common/entities/IConfigurationBootstrap.java new file mode 100644 index 000000000..2ec5c40b7 --- /dev/null +++ b/navalplanner-business/src/main/java/org/navalplanner/business/common/entities/IConfigurationBootstrap.java @@ -0,0 +1,34 @@ +/* + * This file is part of ###PROJECT_NAME### + * + * Copyright (C) 2009 Fundación para o Fomento da Calidade Industrial e + * Desenvolvemento Tecnolóxico de Galicia + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package org.navalplanner.business.common.entities; + +import org.navalplanner.business.IDataBootstrap; + +/** + * Contract for {@link ConfigurationBootstrap}. + * + * @author Manuel Rego Casasnovas + */ +public interface IConfigurationBootstrap extends IDataBootstrap { + + void loadRequiredData(); + +} 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 97a945b6a..3fda03d9c 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 @@ -21,7 +21,6 @@ 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; @@ -259,6 +258,9 @@ public class BaseCalendarDAOTest { @Test public void getBaseCalendarsAndNotResourceCalendars() { + List baseCalendars = baseCalendarDAO.getBaseCalendars(); + int previous = baseCalendars.size(); + BaseCalendar calendar1 = BaseCalendarTest.createBasicCalendar(); calendar1.setName("Test1"); BaseCalendar calendar2 = BaseCalendarTest.createBasicCalendar(); @@ -273,10 +275,8 @@ public class BaseCalendarDAOTest { 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())); + baseCalendars = baseCalendarDAO.getBaseCalendars(); + assertThat(baseCalendars.size(), equalTo(previous + 2)); } } diff --git a/navalplanner-business/src/test/java/org/navalplanner/business/test/orders/entities/AddAdvanceAssignmentsToOrderElementTest.java b/navalplanner-business/src/test/java/org/navalplanner/business/test/orders/entities/AddAdvanceAssignmentsToOrderElementTest.java index d6c16e2b5..e5f5788bf 100644 --- a/navalplanner-business/src/test/java/org/navalplanner/business/test/orders/entities/AddAdvanceAssignmentsToOrderElementTest.java +++ b/navalplanner-business/src/test/java/org/navalplanner/business/test/orders/entities/AddAdvanceAssignmentsToOrderElementTest.java @@ -47,6 +47,7 @@ import org.navalplanner.business.advance.entities.AdvanceType; import org.navalplanner.business.advance.entities.DirectAdvanceAssignment; import org.navalplanner.business.advance.exceptions.DuplicateAdvanceAssignmentForOrderElementException; import org.navalplanner.business.advance.exceptions.DuplicateValueTrueReportGlobalAdvanceException; +import org.navalplanner.business.common.daos.IConfigurationDAO; import org.navalplanner.business.common.exceptions.InstanceNotFoundException; import org.navalplanner.business.orders.daos.IOrderDAO; import org.navalplanner.business.orders.daos.IOrderElementDAO; @@ -74,9 +75,13 @@ public class AddAdvanceAssignmentsToOrderElementTest { @Resource private IDataBootstrap defaultAdvanceTypesBootstrapListener; + @Resource + private IDataBootstrap configurationBootstrap; + @Before public void loadRequiredaData() { defaultAdvanceTypesBootstrapListener.loadRequiredData(); + configurationBootstrap.loadRequiredData(); } @Autowired @@ -94,11 +99,14 @@ public class AddAdvanceAssignmentsToOrderElementTest { @Autowired private IAdvanceTypeDAO advanceTypeDao; + @Autowired + private IConfigurationDAO configurationDAO; + private Session getSession() { return sessionFactory.getCurrentSession(); } - private static Order createValidOrder() { + private Order createValidOrder() { Order order = Order.create(); order.setDescription("description"); order.setCustomer("blabla"); @@ -106,6 +114,8 @@ public class AddAdvanceAssignmentsToOrderElementTest { order.setName("name"); order.setResponsible("responsible"); order.setCode("code"); + order.setCalendar(configurationDAO.getConfiguration() + .getDefaultCalendar()); return order; } diff --git a/navalplanner-business/src/test/java/org/navalplanner/business/test/planner/daos/TaskElementDAOTest.java b/navalplanner-business/src/test/java/org/navalplanner/business/test/planner/daos/TaskElementDAOTest.java index db002ed96..046d353a1 100644 --- a/navalplanner-business/src/test/java/org/navalplanner/business/test/planner/daos/TaskElementDAOTest.java +++ b/navalplanner-business/src/test/java/org/navalplanner/business/test/planner/daos/TaskElementDAOTest.java @@ -43,6 +43,7 @@ import org.junit.runner.RunWith; import org.navalplanner.business.IDataBootstrap; import org.navalplanner.business.common.IAdHocTransactionService; import org.navalplanner.business.common.IOnTransaction; +import org.navalplanner.business.common.daos.IConfigurationDAO; import org.navalplanner.business.common.exceptions.InstanceNotFoundException; import org.navalplanner.business.common.exceptions.ValidationException; import org.navalplanner.business.orders.daos.IOrderDAO; @@ -81,9 +82,13 @@ public class TaskElementDAOTest { @Resource private IDataBootstrap defaultAdvanceTypesBootstrapListener; + @Resource + private IDataBootstrap configurationBootstrap; + @Before public void loadRequiredaData() { defaultAdvanceTypesBootstrapListener.loadRequiredData(); + configurationBootstrap.loadRequiredData(); } @Autowired @@ -101,6 +106,9 @@ public class TaskElementDAOTest { @Autowired private IAdHocTransactionService transactionService; + @Autowired + private IConfigurationDAO configurationDAO; + private HoursGroup associatedHoursGroup; private Task createValidTask() { @@ -126,6 +134,8 @@ public class TaskElementDAOTest { order.setInitDate(new Date()); order.setCode("code"); order.add(orderLine); + order.setCalendar(configurationDAO.getConfiguration() + .getDefaultCalendar()); try { orderDAO.save(order); sessionFactory.getCurrentSession().flush(); diff --git a/navalplanner-webapp/src/test/java/org/navalplanner/web/calendars/BaseCalendarModelTest.java b/navalplanner-webapp/src/test/java/org/navalplanner/web/calendars/BaseCalendarModelTest.java index 697cbd155..b4474726a 100644 --- a/navalplanner-webapp/src/test/java/org/navalplanner/web/calendars/BaseCalendarModelTest.java +++ b/navalplanner-webapp/src/test/java/org/navalplanner/web/calendars/BaseCalendarModelTest.java @@ -59,7 +59,7 @@ public class BaseCalendarModelTest { @Test public void testCreateAndSave() { - assertThat(baseCalendarModel.getBaseCalendars().size(), equalTo(0)); + int previous = baseCalendarModel.getBaseCalendars().size(); baseCalendarModel.initCreate(); BaseCalendar baseCalendar = baseCalendarModel.getBaseCalendar(); baseCalendar.setName("Test"); @@ -67,10 +67,13 @@ public class BaseCalendarModelTest { try { baseCalendarModel.confirmSave(); - assertThat(baseCalendarModel.getBaseCalendars().size(), equalTo(1)); - assertThat(baseCalendarModel.getBaseCalendars().get(0).getId(), + assertThat(baseCalendarModel.getBaseCalendars().size(), + equalTo(previous + 1)); + assertThat(baseCalendarModel.getBaseCalendars().get(previous) + .getId(), equalTo(baseCalendar.getId())); - assertThat(baseCalendarModel.getBaseCalendars().get(0).getHours( + assertThat(baseCalendarModel.getBaseCalendars().get(previous) + .getHours( new Date(), Days.MONDAY), equalTo(8)); } catch (ValidationException e) { fail("It should not throw an exception"); @@ -89,28 +92,31 @@ public class BaseCalendarModelTest { @Test public void testEditAndSave() throws ValidationException { - assertThat(baseCalendarModel.getBaseCalendars().size(), equalTo(0)); + int previous = baseCalendarModel.getBaseCalendars().size(); saveOneCalendar(); - BaseCalendar baseCalendar = baseCalendarModel.getBaseCalendars().get(0); + BaseCalendar baseCalendar = baseCalendarModel.getBaseCalendars().get( + previous); baseCalendarModel.initEdit(baseCalendar); setHours(baseCalendarModel.getBaseCalendar(), 4); baseCalendarModel.confirmSave(); - assertThat(baseCalendarModel.getBaseCalendars().size(), equalTo(1)); - assertThat(baseCalendarModel.getBaseCalendars().get(0).getId(), + assertThat(baseCalendarModel.getBaseCalendars().size(), + equalTo(previous + 1)); + assertThat(baseCalendarModel.getBaseCalendars().get(previous).getId(), equalTo(baseCalendar.getId())); - assertThat(baseCalendarModel.getBaseCalendars().get(0).getHours( + assertThat(baseCalendarModel.getBaseCalendars().get(previous).getHours( new Date(), Days.MONDAY), equalTo(4)); } @Test public void testEditAndNewVersion() { - assertThat(baseCalendarModel.getBaseCalendars().size(), equalTo(0)); + int previous = baseCalendarModel.getBaseCalendars().size(); saveOneCalendar(); - BaseCalendar baseCalendar = baseCalendarModel.getBaseCalendars().get(0); + BaseCalendar baseCalendar = baseCalendarModel.getBaseCalendars().get( + previous); baseCalendarModel.initEdit(baseCalendar); Date date = (new LocalDate()).plusWeeks(1) .toDateTimeAtStartOfDay().toDate(); @@ -119,10 +125,12 @@ public class BaseCalendarModelTest { try { baseCalendarModel.confirmSave(); - assertThat(baseCalendarModel.getBaseCalendars().size(), equalTo(1)); - assertThat(baseCalendarModel.getBaseCalendars().get(0).getHours( + assertThat(baseCalendarModel.getBaseCalendars().size(), + equalTo(previous + 1)); + assertThat(baseCalendarModel.getBaseCalendars().get(previous) + .getHours( date, Days.MONDAY), equalTo(4)); - assertThat(baseCalendarModel.getBaseCalendars().get(0) + assertThat(baseCalendarModel.getBaseCalendars().get(previous) .getCalendarDataVersions().size(), equalTo(2)); } catch (ValidationException e) { fail("It should not throw an exception"); @@ -142,17 +150,21 @@ public class BaseCalendarModelTest { @Test public void testRemove() { - assertThat(baseCalendarModel.getBaseCalendars().size(), equalTo(0)); + int previous = baseCalendarModel.getBaseCalendars().size(); saveOneCalendar(); - BaseCalendar baseCalendar = baseCalendarModel.getBaseCalendars().get(0); + BaseCalendar baseCalendar = baseCalendarModel.getBaseCalendars().get( + previous); baseCalendarModel.initRemove(baseCalendar); baseCalendarModel.confirmRemove(); - assertThat(baseCalendarModel.getBaseCalendars().size(), equalTo(0)); + assertThat(baseCalendarModel.getBaseCalendars().size(), + equalTo(previous)); } @Test public void testPossibleParentCalendars() throws ValidationException { + int previous = baseCalendarModel.getPossibleParentCalendars().size(); + baseCalendarModel.initCreate(); baseCalendarModel.getBaseCalendar().setName("Test"); setHours(baseCalendarModel.getBaseCalendar(), 8); @@ -171,11 +183,12 @@ public class BaseCalendarModelTest { List possibleParentCalendars = baseCalendarModel .getPossibleParentCalendars(); - assertThat(possibleParentCalendars.size(), equalTo(1)); - assertThat(possibleParentCalendars.get(0).getId(), + assertThat(possibleParentCalendars.size(), equalTo(previous + 1)); + assertThat(possibleParentCalendars.get(previous).getId(), equalTo(parentNewVersion.getId())); assertThat( - possibleParentCalendars.get(0).getCalendarDataVersions() + possibleParentCalendars.get(previous) + .getCalendarDataVersions() .size(), equalTo(2)); } diff --git a/navalplanner-webapp/src/test/java/org/navalplanner/web/orders/OrderModelTest.java b/navalplanner-webapp/src/test/java/org/navalplanner/web/orders/OrderModelTest.java index b9495155d..2307e8236 100644 --- a/navalplanner-webapp/src/test/java/org/navalplanner/web/orders/OrderModelTest.java +++ b/navalplanner-webapp/src/test/java/org/navalplanner/web/orders/OrderModelTest.java @@ -45,6 +45,7 @@ import org.junit.runner.RunWith; import org.navalplanner.business.IDataBootstrap; import org.navalplanner.business.common.IAdHocTransactionService; import org.navalplanner.business.common.IOnTransaction; +import org.navalplanner.business.common.daos.IConfigurationDAO; import org.navalplanner.business.common.exceptions.InstanceNotFoundException; import org.navalplanner.business.common.exceptions.ValidationException; import org.navalplanner.business.orders.daos.IOrderDAO; @@ -80,9 +81,13 @@ public class OrderModelTest { @Resource private IDataBootstrap defaultAdvanceTypesBootstrapListener; + @Resource + private IDataBootstrap configurationBootstrap; + @Before public void loadRequiredaData() { defaultAdvanceTypesBootstrapListener.loadRequiredData(); + configurationBootstrap.loadRequiredData(); } public static Date year(int year) { @@ -92,17 +97,6 @@ public class OrderModelTest { return calendar.getTime(); } - private static Order createValidOrder() { - Order order = Order.create(); - order.setDescription("description"); - order.setCustomer("blabla"); - order.setInitDate(year(2000)); - order.setName("name"); - order.setResponsible("responsible"); - order.setCode("code"); - return order; - } - @Autowired private IOrderModel orderModel; @@ -121,12 +115,28 @@ public class OrderModelTest { @Autowired private ICriterionsModel criterionModel; + @Autowired + private IConfigurationDAO configurationDAO; + private Criterion criterion; private Session getSession() { return sessionFactory.getCurrentSession(); } + private Order createValidOrder() { + Order order = Order.create(); + order.setDescription("description"); + order.setCustomer("blabla"); + order.setInitDate(year(2000)); + order.setName("name"); + order.setResponsible("responsible"); + order.setCode("code"); + order.setCalendar(configurationDAO.getConfiguration() + .getDefaultCalendar()); + return order; + } + @Test public void testCreation() throws ValidationException { Order order = createValidOrder(); @@ -187,7 +197,12 @@ public class OrderModelTest { @NotTransactional public void testOrderPreserved() throws ValidationException, InstanceNotFoundException { - final Order order = createValidOrder(); + final Order order = adHocTransaction.runOnReadOnlyTransaction(new IOnTransaction() { + @Override + public Order execute() { + return createValidOrder(); + } + }); final OrderElement[] containers = new OrderLineGroup[10]; for (int i = 0; i < containers.length; i++) { containers[i] = adHocTransaction @@ -272,7 +287,13 @@ public class OrderModelTest { @Test @NotTransactional public void testAddingOrderElement() throws Exception { - final Order order = createValidOrder(); + final Order order = adHocTransaction + .runOnReadOnlyTransaction(new IOnTransaction() { + @Override + public Order execute() { + return createValidOrder(); + } + }); OrderLineGroup container = adHocTransaction .runOnTransaction(new IOnTransaction() { @Override @@ -321,7 +342,13 @@ public class OrderModelTest { @NotTransactional public void testManyToManyHoursGroupCriterionMapping() throws Exception { givenCriterion(); - final Order order = createValidOrder(); + final Order order = adHocTransaction + .runOnReadOnlyTransaction(new IOnTransaction() { + @Override + public Order execute() { + return createValidOrder(); + } + }); OrderLine orderLine = OrderLine.create(); orderLine.setName("Order element"); diff --git a/navalplanner-webapp/src/test/resources/navalplanner-webapp-spring-config-test.xml b/navalplanner-webapp/src/test/resources/navalplanner-webapp-spring-config-test.xml index ae15fb92d..447e88c7a 100644 --- a/navalplanner-webapp/src/test/resources/navalplanner-webapp-spring-config-test.xml +++ b/navalplanner-webapp/src/test/resources/navalplanner-webapp-spring-config-test.xml @@ -57,6 +57,9 @@ org/navalplanner/business/requirements/entities/Requirements.hbm.xml + + org/navalplanner/business/common/entities/Configuration.hbm.xml +