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
+