From fd9e9feba9a1be98cfe3a2d76c83edf652162bf8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=93scar=20Gonz=C3=A1lez=20Fern=C3=A1ndez?= Date: Thu, 14 May 2009 17:16:01 +0200 Subject: [PATCH] ItEr08S06ArquitecturaClientesItEr07S07: Hibernate validations dependences added. Annotating Worker with. Add facility to show messages to the user, integrated with WorkerCrudController. --- navalplanner-business/pom.xml | 8 + .../business/resources/entities/Worker.java | 47 +- .../services/impl/ResourceServiceImpl.java | 2 - .../navalplanner-business-hibernate.cfg.xml | 8 +- .../services/ResourceServiceTest.java | 32 + ...valplanner-business-hibernate-test.cfg.xml | 9 +- navalplanner-webapp/pom.xml | 100 +-- .../web/common/IMessagesForUser.java | 17 + .../org/navalplanner/web/common/Level.java | 5 + .../web/common/MessagesForUser.java | 102 +++ .../web/resources/WorkerCRUDController.java | 28 +- .../main/webapp/resources/worker/worker.zul | 4 +- .../resources/WorkerCRUDControllerTest.java | 63 +- pom.xml | 766 +++++++++--------- 14 files changed, 728 insertions(+), 463 deletions(-) create mode 100644 navalplanner-webapp/src/main/java/org/navalplanner/web/common/IMessagesForUser.java create mode 100644 navalplanner-webapp/src/main/java/org/navalplanner/web/common/Level.java create mode 100644 navalplanner-webapp/src/main/java/org/navalplanner/web/common/MessagesForUser.java diff --git a/navalplanner-business/pom.xml b/navalplanner-business/pom.xml index d83513774..7dbb859d4 100644 --- a/navalplanner-business/pom.xml +++ b/navalplanner-business/pom.xml @@ -41,6 +41,14 @@ easymock test + + org.hibernate + hibernate-validator + + + org.hibernate + hibernate-annotations + diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/Worker.java b/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/Worker.java index 078ad2284..3946765ed 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/Worker.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/Worker.java @@ -1,64 +1,69 @@ package org.navalplanner.business.resources.entities; +import org.hibernate.validator.Min; +import org.hibernate.validator.NotEmpty; + /** * This class models a worker. - * * @author Fernando Bellas Permuy - * */ public class Worker extends Resource { - + @NotEmpty private String firstName; + + @NotEmpty private String surname; + + @NotEmpty private String nif; + + @Min(0) private int dailyHours; - - public Worker() {} - - public Worker(String firstName, String surname, String nif, - int dailyHours) { - + + public Worker() { + } + + public Worker(String firstName, String surname, String nif, int dailyHours) { this.firstName = firstName; this.surname = surname; this.nif = nif; this.dailyHours = dailyHours; - } - + public String getFirstName() { return firstName; } - + public void setFirstName(String firstName) { this.firstName = firstName; } - + public String getSurname() { return surname; } - + public void setSurname(String surname) { this.surname = surname; - } - + } + public String getNif() { return nif; } - + public void setNif(String nif) { this.nif = nif; } - + public int getDailyHours() { return dailyHours; } - + public void setDailyHours(int dailyHours) { this.dailyHours = dailyHours; } - + public int getDailyCapacity() { return dailyHours; } - + } diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/resources/services/impl/ResourceServiceImpl.java b/navalplanner-business/src/main/java/org/navalplanner/business/resources/services/impl/ResourceServiceImpl.java index 1db5bc9a0..45429a8cc 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/resources/services/impl/ResourceServiceImpl.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/resources/services/impl/ResourceServiceImpl.java @@ -15,9 +15,7 @@ import org.springframework.transaction.annotation.Transactional; /** * Implementation of the resource management service. Resource DAOs are * autowired. - * * @author Fernando Bellas Permuy - * */ @Transactional public class ResourceServiceImpl implements ResourceService { diff --git a/navalplanner-business/src/main/resources/navalplanner-business-hibernate.cfg.xml b/navalplanner-business/src/main/resources/navalplanner-business-hibernate.cfg.xml index 00ed71ef5..32711b976 100644 --- a/navalplanner-business/src/main/resources/navalplanner-business-hibernate.cfg.xml +++ b/navalplanner-business/src/main/resources/navalplanner-business-hibernate.cfg.xml @@ -1,4 +1,4 @@ - @@ -9,5 +9,11 @@ ${hibernate.format_sql} ${hibernate.use_sql_comments} ${hibernate.hbm2ddl.auto} + + + + + + diff --git a/navalplanner-business/src/test/java/org/navalplanner/business/test/resources/services/ResourceServiceTest.java b/navalplanner-business/src/test/java/org/navalplanner/business/test/resources/services/ResourceServiceTest.java index df9ae69f2..38c0c3e8b 100644 --- a/navalplanner-business/src/test/java/org/navalplanner/business/test/resources/services/ResourceServiceTest.java +++ b/navalplanner-business/src/test/java/org/navalplanner/business/test/resources/services/ResourceServiceTest.java @@ -1,5 +1,9 @@ package org.navalplanner.business.test.resources.services; +import org.hibernate.SessionFactory; +import org.hibernate.validator.ClassValidator; +import org.hibernate.validator.InvalidStateException; +import org.hibernate.validator.InvalidValue; import org.junit.Test; import org.junit.runner.RunWith; import org.navalplanner.business.common.exceptions.InstanceNotFoundException; @@ -8,6 +12,7 @@ import org.navalplanner.business.resources.entities.ResourceGroup; import org.navalplanner.business.resources.entities.Worker; import org.navalplanner.business.resources.services.ResourceService; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.annotation.NotTransactional; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.transaction.annotation.Transactional; @@ -16,6 +21,7 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; import static org.navalplanner.business.BusinessGlobalNames.BUSINESS_SPRING_CONFIG_FILE; import static org.navalplanner.business.test.BusinessGlobalNames.BUSINESS_SPRING_CONFIG_TEST_FILE; @@ -36,6 +42,9 @@ public class ResourceServiceTest { @Autowired private IResourceDao resourceDao; + @Autowired + private SessionFactory sessionFactory; + @Test public void testAddResourceToResourceGroup() throws InstanceNotFoundException { @@ -194,4 +203,27 @@ public class ResourceServiceTest { resourceService.getWorkers().size()); } + @Test + @NotTransactional + public void testWorkerValidation() throws Exception { + ClassValidator workerValidator = new ClassValidator( + Worker.class); + Worker[] invalidWorkers = { + new Worker("first name", null, "233233", 3), + new Worker("first name", "second name", "233233", -1), + new Worker(null, "second name", "233233", 3), + new Worker("first name", "second name", null, 3) }; + for (Worker invalidWorker : invalidWorkers) { + InvalidValue[] invalidValues = workerValidator + .getInvalidValues(invalidWorker); + assertEquals(1, invalidValues.length); + try { + resourceService.saveResource(invalidWorker); + fail("must send invalid state exception"); + } catch (InvalidStateException e) { + // ok + } + } + } + } diff --git a/navalplanner-business/src/test/resources/navalplanner-business-hibernate-test.cfg.xml b/navalplanner-business/src/test/resources/navalplanner-business-hibernate-test.cfg.xml index ab90ebbfd..59a91b345 100644 --- a/navalplanner-business/src/test/resources/navalplanner-business-hibernate-test.cfg.xml +++ b/navalplanner-business/src/test/resources/navalplanner-business-hibernate-test.cfg.xml @@ -1,7 +1,6 @@ - - ${hibernate.dialect} @@ -9,5 +8,11 @@ true true update + + + + + + diff --git a/navalplanner-webapp/pom.xml b/navalplanner-webapp/pom.xml index be920e184..6dcb12ba1 100644 --- a/navalplanner-webapp/pom.xml +++ b/navalplanner-webapp/pom.xml @@ -15,57 +15,61 @@ navalplanner-webapp - - - - org.springframework - spring - - - - org.beanshell - bsh - - - - commons-fileupload - commons-fileupload - - - - org.zkoss.zk - zul - - - org.zkoss.zk - zkplus - - - org.zkoss.zk - zk - - - - org.navalplanner - navalplanner-gantt-zk - - - - org.navalplanner - navalplanner-business - - - org.easymock - easymock - - - junit - junit - + + + + org.springframework + spring + + + + org.beanshell + bsh + + + + commons-fileupload + commons-fileupload + + + + org.zkoss.zk + zul + + + org.zkoss.zk + zkplus + + + org.zkoss.zk + zk + + + + org.navalplanner + navalplanner-gantt-zk + + + + org.navalplanner + navalplanner-business + + + org.easymock + easymock + + + junit + junit + + + org.hibernate + hibernate-validator + javax.servlet servlet-api - + diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/common/IMessagesForUser.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/common/IMessagesForUser.java new file mode 100644 index 000000000..11dd6389f --- /dev/null +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/common/IMessagesForUser.java @@ -0,0 +1,17 @@ +package org.navalplanner.web.common; + +import org.hibernate.validator.InvalidValue; + +/** + * Defines the ways in which information messages can be shown to the user
+ * @author Óscar González Fernández + */ +public interface IMessagesForUser { + + void invalidValue(InvalidValue invalidValue); + + void showMessage(Level level, String message); + + void clearMessages(); + +} diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/common/Level.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/common/Level.java new file mode 100644 index 000000000..6c5f612e0 --- /dev/null +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/common/Level.java @@ -0,0 +1,5 @@ +package org.navalplanner.web.common; + +public enum Level { + INFO, WARNING, ERROR; +} \ No newline at end of file diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/common/MessagesForUser.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/common/MessagesForUser.java new file mode 100644 index 000000000..35d5def1d --- /dev/null +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/common/MessagesForUser.java @@ -0,0 +1,102 @@ +package org.navalplanner.web.common; + +import java.util.ArrayList; +import java.util.List; +import java.util.Queue; +import java.util.concurrent.ConcurrentLinkedQueue; + +import org.hibernate.validator.InvalidValue; +import org.zkoss.zk.ui.Component; +import org.zkoss.zk.ui.event.Event; +import org.zkoss.zk.ui.event.EventListener; +import org.zkoss.zk.ui.event.Events; +import org.zkoss.zk.ui.util.EventInterceptor; +import org.zkoss.zk.ui.util.GenericForwardComposer; +import org.zkoss.zul.Label; + +/** + * It shows messages to the user.
+ * @author Óscar González Fernández + */ +public class MessagesForUser extends GenericForwardComposer implements + IMessagesForUser { + + private Component container; + + private Queue pendingToDetach = new ConcurrentLinkedQueue(); + + private static final String DETACH_EVENT_NAME = "onMarkDetached"; + + public MessagesForUser(Component container) { + this.container = container; + container.getPage().getDesktop().addListener(new EventInterceptor() { + + @Override + public void afterProcessEvent(Event event) { + } + + @Override + public Event beforePostEvent(Event event) { + return event; + } + + @Override + public Event beforeProcessEvent(Event event) { + if (event.getName().equals(DETACH_EVENT_NAME) + || pendingToDetach.isEmpty()) { + return event; + } + Component currrent = null; + while ((currrent = pendingToDetach.poll()) != null) { + currrent.detach(); + } + return event; + } + + @Override + public Event beforeSendEvent(Event event) { + return event; + } + }); + } + + @Override + public void invalidValue(InvalidValue invalidValue) { + addMessage(createLabelFor(invalidValue)); + } + + private Component createLabelFor(InvalidValue invalidValue) { + Label result = new Label(); + result.setValue(invalidValue.getPropertyName() + ": " + + invalidValue.getMessage()); + return result; + } + + @Override + public void showMessage(Level level, String message) { + final Label label = new Label(message); + addMessage(label); + } + + private void addMessage(final Component label) { + container.appendChild(label); + Events.echoEvent(DETACH_EVENT_NAME, label, ""); + label.addEventListener(DETACH_EVENT_NAME, new EventListener() { + + @Override + public void onEvent(Event event) throws Exception { + pendingToDetach.offer(label); + } + }); + } + + @Override + public void clearMessages() { + List children = new ArrayList(container.getChildren()); + for (Object child : children) { + Component c = (Component) child; + c.detach(); + } + } + +} diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/WorkerCRUDController.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/WorkerCRUDController.java index 99ac2cde9..91bc69c97 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/WorkerCRUDController.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/WorkerCRUDController.java @@ -4,7 +4,12 @@ import java.util.List; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.hibernate.validator.ClassValidator; +import org.hibernate.validator.InvalidValue; import org.navalplanner.business.resources.entities.Worker; +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; @@ -20,6 +25,9 @@ public class WorkerCRUDController extends GenericForwardComposer { private static final Log LOG = LogFactory .getLog(WorkerCRUDController.class); + private ClassValidator workerValidator = new ClassValidator( + Worker.class); + private Window createWindow; private Window listWindow; @@ -32,16 +40,21 @@ public class WorkerCRUDController extends GenericForwardComposer { private OnlyOneVisible visibility; - public WorkerCRUDController() { + private IMessagesForUser messages; + private Component messagesContainer; + + public WorkerCRUDController() { } public WorkerCRUDController(Window createWindow, Window listWindow, - Window editWindow, IWorkerModel workerModel) { + Window editWindow, IWorkerModel workerModel, + IMessagesForUser messages) { this.createWindow = createWindow; this.listWindow = listWindow; this.editWindow = editWindow; this.workerModel = workerModel; + this.messages = messages; } public Worker getWorker() { @@ -56,9 +69,17 @@ public class WorkerCRUDController extends GenericForwardComposer { } public void save() { + InvalidValue[] invalidValues = workerValidator.getInvalidValues(worker); + if (invalidValues.length > 0) { + for (InvalidValue invalidValue : invalidValues) { + messages.invalidValue(invalidValue); + } + return; + } workerModel.save(worker); getVisibility().showOnly(listWindow); Util.reloadBindings(listWindow); + messages.showMessage(Level.INFO, "traballador gardado"); worker = null; } @@ -86,6 +107,9 @@ public class WorkerCRUDController extends GenericForwardComposer { super.doAfterCompose(comp); comp.setVariable("controller", this, true); getVisibility().showOnly(listWindow); + if (messagesContainer == null) + throw new RuntimeException("messagesContainer is needed"); + messages = new MessagesForUser(messagesContainer); } private OnlyOneVisible getVisibility() { diff --git a/navalplanner-webapp/src/main/webapp/resources/worker/worker.zul b/navalplanner-webapp/src/main/webapp/resources/worker/worker.zul index 1484ec2a8..9f56fa134 100644 --- a/navalplanner-webapp/src/main/webapp/resources/worker/worker.zul +++ b/navalplanner-webapp/src/main/webapp/resources/worker/worker.zul @@ -11,10 +11,12 @@ + + - \ No newline at end of file + diff --git a/navalplanner-webapp/src/test/java/org/navalplanner/web/resources/WorkerCRUDControllerTest.java b/navalplanner-webapp/src/test/java/org/navalplanner/web/resources/WorkerCRUDControllerTest.java index b05a5813f..9f977d749 100644 --- a/navalplanner-webapp/src/test/java/org/navalplanner/web/resources/WorkerCRUDControllerTest.java +++ b/navalplanner-webapp/src/test/java/org/navalplanner/web/resources/WorkerCRUDControllerTest.java @@ -1,9 +1,12 @@ package org.navalplanner.web.resources; import static junit.framework.Assert.assertEquals; +import static junit.framework.Assert.assertFalse; import static org.easymock.EasyMock.createMock; import static org.easymock.EasyMock.createNiceMock; import static org.easymock.EasyMock.expect; +import static org.easymock.EasyMock.expectLastCall; +import static org.easymock.EasyMock.isA; import static org.easymock.EasyMock.replay; import static org.easymock.EasyMock.verify; @@ -11,8 +14,12 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import org.hibernate.validator.ClassValidator; +import org.hibernate.validator.InvalidValue; import org.junit.Test; import org.navalplanner.business.resources.entities.Worker; +import org.navalplanner.web.common.IMessagesForUser; +import org.navalplanner.web.common.Level; import org.zkoss.zul.api.Window; /** @@ -27,31 +34,44 @@ public class WorkerCRUDControllerTest { private WorkerCRUDController createControllerForModel( IWorkerModel workerModel) { + return createControllerForModel(workerModel, null); + } + + private WorkerCRUDController createControllerForModel( + IWorkerModel workerModel, IMessagesForUser messages) { createWindow = createNiceMock(Window.class); listWindow = createNiceMock(Window.class); editWindow = createNiceMock(Window.class); WorkerCRUDController workerCRUDController = new WorkerCRUDController( - createWindow, listWindow, editWindow, workerModel); + createWindow, listWindow, editWindow, workerModel, messages); return workerCRUDController; } @Test public void testSave() throws Exception { IWorkerModel workerModel = createMock(IWorkerModel.class); + IMessagesForUser messagesForUser = createMock(IMessagesForUser.class); Worker workerToReturn = new Worker(); - WorkerCRUDController workerCRUDController = createControllerForModel(workerModel); + WorkerCRUDController workerCRUDController = createControllerForModel( + workerModel, messagesForUser); replay(createWindow, listWindow, editWindow); // expectations expect(workerModel.createNewInstance()).andReturn(workerToReturn); workerModel.save(workerToReturn); - replay(workerModel); + messagesForUser.showMessage(Level.INFO, + isA(String.class)); + replay(workerModel, messagesForUser); // action workerCRUDController.goToCreateForm(); + workerToReturn.setFirstName("first"); + workerToReturn.setSurname("blabla"); + workerToReturn.setNif("11111"); + workerToReturn.setDailyHours(2); workerCRUDController.save(); // verify - verify(workerModel); + verify(workerModel, messagesForUser); } @Test @@ -75,7 +95,9 @@ public class WorkerCRUDControllerTest { @Test public void testEditWorker() throws Exception { IWorkerModel workerModel = createMock(IWorkerModel.class); - WorkerCRUDController workerCRUDController = createControllerForModel(workerModel); + IMessagesForUser messagesForUser = createMock(IMessagesForUser.class); + WorkerCRUDController workerCRUDController = createControllerForModel( + workerModel, messagesForUser); List workersToReturn = new ArrayList(Arrays.asList( new Worker("firstName", "surname", "nif", 4), new Worker( "firstName", "surname", "nif", 4))); @@ -83,13 +105,40 @@ public class WorkerCRUDControllerTest { expect(workerModel.getWorkers()).andReturn(workersToReturn); expect(editWindow.setVisible(true)).andReturn(false); workerModel.save(workersToReturn.get(0)); - replay(createWindow, listWindow, editWindow, workerModel); + messagesForUser.showMessage(Level.INFO, + isA(String.class)); + replay(createWindow, listWindow, editWindow, workerModel, + messagesForUser); // perform actions List workers = workerCRUDController.getWorkers(); assertEquals(workersToReturn, workers); workerCRUDController.goToEditForm(workers.get(0)); workerCRUDController.save(); // verify - verify(workerModel, editWindow); + verify(workerModel, editWindow, messagesForUser); + } + + @Test + public void testWorkerInvalid() { + IWorkerModel workerModel = createMock(IWorkerModel.class); + IMessagesForUser messages = createMock(IMessagesForUser.class); + WorkerCRUDController workerCRUDController = createControllerForModel( + workerModel, messages); + Worker workerToReturn = new Worker(); + // expectations + expect(workerModel.createNewInstance()).andReturn(workerToReturn); + ClassValidator workerValidator = new ClassValidator( + Worker.class); + InvalidValue[] invalidValues = workerValidator + .getInvalidValues(workerToReturn); + assertFalse(invalidValues.length == 0); + messages.invalidValue(isA(InvalidValue.class)); + expectLastCall().times(invalidValues.length); + replay(createWindow, listWindow, editWindow, workerModel, messages); + // perform actions + workerCRUDController.goToCreateForm(); + workerCRUDController.save(); + // verify + verify(messages); } } diff --git a/pom.xml b/pom.xml index f3c556804..e410a74fc 100644 --- a/pom.xml +++ b/pom.xml @@ -1,410 +1,418 @@ + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> - 4.0.0 - org.navalplanner - navalplanner - pom - 1.0.0 - Naval Planner + 4.0.0 + org.navalplanner + navalplanner + pom + 1.0.0 + Naval Planner - - - - navalplanner-business - navalplanner-gantt-zk - navalplanner-webapp - + + + + navalplanner-business + navalplanner-gantt-zk + navalplanner-webapp + - - - - - naval - naval - jdbc/navalplanner-ds - ${dataSource.user} - ${dataSource.password} - + + + + + naval + naval + jdbc/navalplanner-ds + ${dataSource.user} + ${dataSource.password} + - - - + + + - - - dev - - true - - - - dev - - true - true - true - update - - + + + dev + + true + + + + dev + + true + true + true + update + + - - - prod - - - prod - - false - false - false - update - - + + + prod + + + prod + + false + false + false + update + + - - - postgresql - - true - - - - postgresql - postgresql - 8.3-603.jdbc4 - org.postgresql.Driver - - jdbc:postgresql://localhost/naval${navalplanner.mode} - ${dataSource.url}test - - org.hibernate.dialect.PostgreSQLDialect - - + + + postgresql + + true + + + + postgresql + postgresql + 8.3-603.jdbc4 + org.postgresql.Driver + + jdbc:postgresql://localhost/naval${navalplanner.mode} + ${dataSource.url}test + + org.hibernate.dialect.PostgreSQLDialect + + - - - mysql - - - mysql - mysql-connector-java - 5.0.5 - com.mysql.jdbc.Driver - - jdbc:mysql://localhost/naval${navalplanner.mode} - ${dataSource.url}test - - org.hibernate.dialect.MySQLDialect - - + + + mysql + + + mysql + mysql-connector-java + 5.0.5 + com.mysql.jdbc.Driver + + jdbc:mysql://localhost/naval${navalplanner.mode} + ${dataSource.url}test + + org.hibernate.dialect.MySQLDialect + + - - - hsqldb - - - hsqldb - hsqldb - 1.8.0.7 - org.hsqldb.jdbcDriver - - sa - - jdbc:hsqldb:${java.io.tmpdir}/naval${navalplanner.mode};shutdown=true - jdbc:hsqldb:${java.io.tmpdir}/naval${navalplanner.mode}test;shutdown=true - - org.hibernate.dialect.HSQLDialect - - + + + hsqldb + + + hsqldb + hsqldb + 1.8.0.7 + org.hsqldb.jdbcDriver + + sa + + jdbc:hsqldb:${java.io.tmpdir}/naval${navalplanner.mode};shutdown=true + jdbc:hsqldb:${java.io.tmpdir}/naval${navalplanner.mode}test;shutdown=true + + org.hibernate.dialect.HSQLDialect + + - + - - - - - - - ${jdbcDriver.groupId} - ${jdbcDriver.artifactId} - ${jdbcDriver.version} - test - - - - org.hibernate - hibernate - 3.2.6.ga - - - - - junit - junit - 4.4 - test - + + + + + + + ${jdbcDriver.groupId} + ${jdbcDriver.artifactId} + ${jdbcDriver.version} + test + + + + org.hibernate + hibernate + 3.2.6.ga + + + org.hibernate + hibernate-annotations + 3.3.1.GA + + + org.hibernate + hibernate-validator + 3.0.0.ga + + + + + junit + junit + 4.4 + test + - - - org.easymock - easymock - 2.4 - test - + + + org.easymock + easymock + 2.4 + test + - - - org.springframework - spring - 2.5.6 - - - org.springframework - spring-test - 2.5.6 - test - - - - commons-logging - commons-logging - 1.0.4 - - - - org.beanshell - bsh - 2.0b4 - runtime - - - - commons-fileupload - commons-fileupload - 1.2.1 - runtime - - - - org.zkoss.zk - zul - 3.6.1 - - - org.zkoss.zk - zkplus - 3.6.1 - - - org.zkoss.zk - zk - 3.6.1 - - - - org.jgrapht - jgrapht-jdk1.5 - 0.7.3 - - - - org.navalplanner - navalplanner-gantt-zk - 1.0.0 - - - - org.navalplanner - navalplanner-business - 1.0.0 - - - javax.servlet - servlet-api - 2.5 - jar - provided - - - + + + org.springframework + spring + 2.5.6 + + + org.springframework + spring-test + 2.5.6 + test + + + + commons-logging + commons-logging + 1.0.4 + + + + org.beanshell + bsh + 2.0b4 + runtime + + + + commons-fileupload + commons-fileupload + 1.2.1 + runtime + + + + org.zkoss.zk + zul + 3.6.1 + + + org.zkoss.zk + zkplus + 3.6.1 + + + org.zkoss.zk + zk + 3.6.1 + + + + org.jgrapht + jgrapht-jdk1.5 + 0.7.3 + + + + org.navalplanner + navalplanner-gantt-zk + 1.0.0 + + + + org.navalplanner + navalplanner-business + 1.0.0 + + + javax.servlet + servlet-api + 2.5 + jar + provided + + + - + - - - + + + - - - src/main/resources - true - - *spring-config.xml - *hibernate.cfg.xml - - + + + src/main/resources + true + + *spring-config.xml + *hibernate.cfg.xml + + - - - src/main/resources - + + + src/main/resources + - - - ../src/main/jetty - - jetty-env.xml - - ../jetty - true - - + + + ../src/main/jetty + + jetty-env.xml + + ../jetty + true + + - + - - - src/test/resources - true - - *spring-config-test.xml - *hibernate-test.cfg.xml - - + + + src/test/resources + true + + *spring-config-test.xml + *hibernate-test.cfg.xml + + - - - src/test/resources - + + + src/test/resources + - + - + - - - - org.apache.maven.plugins - maven-compiler-plugin - - true - 1.6 - 1.6 - UTF-8 - - + + + + org.apache.maven.plugins + maven-compiler-plugin + + true + 1.6 + 1.6 + UTF-8 + + - - - - maven-assembly-plugin - - - src/main/assembly/src.xml - - - + + + + maven-assembly-plugin + + + src/main/assembly/src.xml + + + - - - + + + - org.mortbay.jetty - maven-jetty-plugin - - 6.1.12.rc2 - - target/jetty/jetty-env.xml - 5 - - - src/main/webapp/WEB-INF - - * - - - + org.mortbay.jetty + maven-jetty-plugin + + 6.1.12.rc2 + + target/jetty/jetty-env.xml + 5 + + + src/main/webapp/WEB-INF + + * + + + - - - - true - - - - - - - ${jdbcDriver.groupId} - ${jdbcDriver.artifactId} - ${jdbcDriver.version} - - - - - - - - + + + + true + + + + + + ${jdbcDriver.groupId} + ${jdbcDriver.artifactId} + ${jdbcDriver.version} + + + + +