diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/common/Registry.java b/navalplanner-business/src/main/java/org/navalplanner/business/common/Registry.java
index dfdcc7559..76f4dbde5 100644
--- a/navalplanner-business/src/main/java/org/navalplanner/business/common/Registry.java
+++ b/navalplanner-business/src/main/java/org/navalplanner/business/common/Registry.java
@@ -24,6 +24,7 @@ import org.navalplanner.business.advance.daos.IAdvanceTypeDAO;
import org.navalplanner.business.costcategories.daos.ITypeOfWorkHoursDAO;
import org.navalplanner.business.materials.daos.IMaterialCategoryDAO;
import org.navalplanner.business.materials.daos.IMaterialDAO;
+import org.navalplanner.business.qualityforms.daos.IQualityFormDAO;
import org.navalplanner.business.resources.daos.ICriterionTypeDAO;
import org.navalplanner.business.resources.daos.IMachineDAO;
import org.navalplanner.business.users.daos.IUserDAO;
@@ -70,6 +71,9 @@ public class Registry {
@Autowired
private IMaterialCategoryDAO materialCategoryDAO;
+ @Autowired
+ private IQualityFormDAO qualityFormDAO;
+
private Registry() {
}
@@ -108,4 +112,8 @@ public class Registry {
public static IMaterialCategoryDAO getMaterialCategoryDAO() {
return getInstance().materialCategoryDAO;
}
+
+ public static IQualityFormDAO getQualityFormDAO() {
+ return getInstance().qualityFormDAO;
+ }
}
diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/qualityforms/daos/IQualityFormDAO.java b/navalplanner-business/src/main/java/org/navalplanner/business/qualityforms/daos/IQualityFormDAO.java
new file mode 100644
index 000000000..a633a9cfd
--- /dev/null
+++ b/navalplanner-business/src/main/java/org/navalplanner/business/qualityforms/daos/IQualityFormDAO.java
@@ -0,0 +1,52 @@
+/*
+ * 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.qualityforms.daos;
+
+import java.util.List;
+
+import org.hibernate.NonUniqueResultException;
+import org.navalplanner.business.common.daos.IGenericDAO;
+import org.navalplanner.business.common.exceptions.InstanceNotFoundException;
+import org.navalplanner.business.qualityforms.entities.QualityForm;
+import org.navalplanner.business.qualityforms.entities.QualityFormType;
+
+/**
+ * @author Susana Montes Pedreira
+ */
+
+public interface IQualityFormDAO extends IGenericDAO {
+
+ List getAll();
+
+ QualityForm findByNameAndType(String name, QualityFormType type);
+
+ List getAllByType(QualityFormType type);
+
+ QualityForm findUniqueByName(String name)
+ throws InstanceNotFoundException, NonUniqueResultException;
+
+ QualityForm findUniqueByName(QualityForm qualityForm)
+ throws InstanceNotFoundException;
+
+ boolean existsOtherWorkReportTypeByName(QualityForm qualityForm);
+
+ boolean existsByNameAnotherTransaction(QualityForm qualityForm);
+}
diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/qualityforms/daos/QualityFormDAO.java b/navalplanner-business/src/main/java/org/navalplanner/business/qualityforms/daos/QualityFormDAO.java
new file mode 100644
index 000000000..36eafe961
--- /dev/null
+++ b/navalplanner-business/src/main/java/org/navalplanner/business/qualityforms/daos/QualityFormDAO.java
@@ -0,0 +1,105 @@
+/*
+ * 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.qualityforms.daos;
+
+import java.util.List;
+
+import org.apache.commons.lang.Validate;
+import org.hibernate.Criteria;
+import org.hibernate.NonUniqueResultException;
+import org.hibernate.criterion.Restrictions;
+import org.navalplanner.business.common.daos.GenericDAOHibernate;
+import org.navalplanner.business.common.exceptions.InstanceNotFoundException;
+import org.navalplanner.business.qualityforms.entities.QualityForm;
+import org.navalplanner.business.qualityforms.entities.QualityFormType;
+import org.springframework.beans.factory.config.BeanDefinition;
+import org.springframework.context.annotation.Scope;
+import org.springframework.stereotype.Repository;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * DAO for {@link QualityForm}
+ * @author Susana Montes Pedreira
+ */
+
+@Repository
+@Scope(BeanDefinition.SCOPE_SINGLETON)
+public class QualityFormDAO extends GenericDAOHibernate
+ implements IQualityFormDAO {
+
+ @Override
+ public List getAll() {
+ return list(QualityForm.class);
+ }
+
+ @Override
+ public QualityForm findByNameAndType(String name, QualityFormType type) {
+ return (QualityForm) getSession().createCriteria(QualityForm.class)
+ .add(Restrictions.eq("name", name)).add(
+ Restrictions.eq("qualityFormType", type))
+ .uniqueResult();
+ }
+
+ @Override
+ public List getAllByType(QualityFormType type) {
+ Criteria c = getSession().createCriteria(QualityForm.class).add(
+ Restrictions.eq("qualityFormType", type));
+ return ((List) c.list());
+ }
+
+ @Override
+ public QualityForm findUniqueByName(QualityForm qualityForm)
+ throws InstanceNotFoundException {
+ Validate.notNull(qualityForm);
+ return findUniqueByName(qualityForm.getName());
+ }
+
+ @Override
+ public QualityForm findUniqueByName(String name)
+ throws InstanceNotFoundException, NonUniqueResultException {
+ Criteria c = getSession().createCriteria(QualityForm.class);
+ c.add(Restrictions.eq("name", name));
+ QualityForm qualityForm = (QualityForm) c.uniqueResult();
+
+ if (qualityForm == null) {
+ throw new InstanceNotFoundException(null, "QualityForm");
+ }
+ return qualityForm;
+ }
+
+ @Override
+ public boolean existsOtherWorkReportTypeByName(QualityForm qualityForm) {
+ try {
+ QualityForm t = findUniqueByName(qualityForm);
+ return (t != null && t != qualityForm);
+ } catch (InstanceNotFoundException e) {
+ return false;
+ }
+ }
+
+ @Override
+ @Transactional(readOnly = true, propagation = Propagation.REQUIRES_NEW)
+ public boolean existsByNameAnotherTransaction(QualityForm qualityForm) {
+ return existsOtherWorkReportTypeByName(qualityForm);
+ }
+
+}
diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/qualityforms/entities/QualityForm.java b/navalplanner-business/src/main/java/org/navalplanner/business/qualityforms/entities/QualityForm.java
new file mode 100644
index 000000000..2f0e6ed55
--- /dev/null
+++ b/navalplanner-business/src/main/java/org/navalplanner/business/qualityforms/entities/QualityForm.java
@@ -0,0 +1,197 @@
+/*
+ * 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 .
+ */
+
+/**
+ * @author Susana Montes Pedreira
+ */
+package org.navalplanner.business.qualityforms.entities;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.hibernate.NonUniqueResultException;
+import org.hibernate.validator.AssertTrue;
+import org.hibernate.validator.NotEmpty;
+import org.hibernate.validator.NotNull;
+import org.hibernate.validator.Valid;
+import org.navalplanner.business.common.BaseEntity;
+import org.navalplanner.business.common.Registry;
+import org.navalplanner.business.common.exceptions.InstanceNotFoundException;
+import org.navalplanner.business.qualityforms.daos.IQualityFormDAO;
+
+public class QualityForm extends BaseEntity {
+
+ public static QualityForm create() {
+ QualityForm qualityForm = new QualityForm();
+ qualityForm.setNewObject(true);
+ return qualityForm;
+ }
+
+ public static QualityForm create(String name, String description) {
+ QualityForm qualityForm = new QualityForm(name, description);
+ qualityForm.setNewObject(true);
+ return qualityForm;
+ }
+
+ public QualityForm() {
+
+ }
+
+ private QualityForm(String name, String description) {
+ this.name = name;
+ this.description = description;
+ }
+
+ private String name;
+
+ private String description;
+
+ private QualityFormType qualityFormType = QualityFormType.getDefault();
+
+ private List qualityFormItems = new ArrayList();
+
+ @NotEmpty
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+ @NotNull
+ public QualityFormType getQualityFormType() {
+ return qualityFormType;
+ }
+
+ public void setQualityFormType(QualityFormType qualityFormType) {
+ this.qualityFormType = qualityFormType;
+ }
+
+ @Valid
+ public List getQualityFormItems() {
+ return Collections.unmodifiableList(qualityFormItems);
+ }
+
+ void setQualityFormItems(List qualityFormItems) {
+ this.qualityFormItems = qualityFormItems;
+ }
+
+ public boolean addQualityFormItemAtEnd(QualityFormItem qualityFormItem) {
+ if (qualityFormItem != null) {
+ Integer position = this.qualityFormItems.size();
+ qualityFormItem.setPosition(position);
+ this.qualityFormItems.add(qualityFormItem);
+ }
+ return false;
+ }
+
+ public void removeQualityFormItem(QualityFormItem qualityFormItem) {
+ this.qualityFormItems.remove(qualityFormItem);
+ }
+
+ @SuppressWarnings("unused")
+ @AssertTrue(message = "Quality form name is already being used")
+ public boolean checkConstraintUniqueQualityFormName() {
+ IQualityFormDAO qualityFormDAO = Registry.getQualityFormDAO();
+ if (isNewObject()) {
+ return !qualityFormDAO.existsByNameAnotherTransaction(this);
+ } else {
+ try {
+ QualityForm c = qualityFormDAO.findUniqueByName(name);
+ return c.getId().equals(getId());
+ } catch (InstanceNotFoundException e) {
+ return true;
+ } catch (NonUniqueResultException e) {
+ return false;
+ }
+ }
+ }
+
+ @SuppressWarnings("unused")
+ @AssertTrue(message = "The quality item positions must be uniques, consecutives and corrects in function to the percentage.")
+ public boolean validateTheQualityFormItemPositions() {
+ List result = getListToNull(qualityFormItems);
+ for (QualityFormItem qualityFormItem : qualityFormItems) {
+ // Check if index is out of range
+ Integer index = qualityFormItem.getPosition();
+
+ if (index == null) {
+ return false;
+ }
+
+ if ((index.compareTo(0) < 0)
+ || (index.compareTo(result.size()) >= 0)) {
+ return false;
+ }
+ // Check if index is repeated
+ if (result.get(index) != null) {
+ return false;
+ }
+ result.set(index, qualityFormItem);
+ }
+
+ // Check if the indexs are consecutives
+ for (QualityFormItem item : result) {
+ if (item == null) {
+ return false;
+ }
+ }
+
+ // check the position is correct in function to the percentage.
+ for (QualityFormItem item : qualityFormItems) {
+ if (!item.getPosition().equals(getCorrectPosition(item))) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ private Integer getCorrectPosition(QualityFormItem itemToFind) {
+ Integer position = 0;
+ for (QualityFormItem item : qualityFormItems) {
+ if ((!itemToFind.equals(item))
+ && (itemToFind.getPercentage().compareTo(item
+ .getPercentage())) > 0) {
+ position++;
+ }
+ }
+ return position;
+ }
+
+ private List getListToNull(List list) {
+ List result = new ArrayList(list
+ .size());
+ for (int i = 0; i < list.size(); i++) {
+ result.add(null);
+ }
+ return result;
+ }
+
+}
diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/qualityforms/entities/QualityFormItem.java b/navalplanner-business/src/main/java/org/navalplanner/business/qualityforms/entities/QualityFormItem.java
new file mode 100644
index 000000000..eafa05bc1
--- /dev/null
+++ b/navalplanner-business/src/main/java/org/navalplanner/business/qualityforms/entities/QualityFormItem.java
@@ -0,0 +1,101 @@
+/*
+ * 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 .
+ */
+
+/**
+ * @author Susana Montes Pedreira
+ */
+package org.navalplanner.business.qualityforms.entities;
+
+import java.math.BigDecimal;
+
+import org.hibernate.validator.NotEmpty;
+import org.hibernate.validator.NotNull;
+import org.navalplanner.business.INewObject;
+
+public class QualityFormItem implements INewObject {
+
+ public static QualityFormItem create() {
+ QualityFormItem qualityFormItem = new QualityFormItem();
+ qualityFormItem.setNewObject(true);
+ return qualityFormItem;
+ }
+
+ public static QualityFormItem create(String name, Integer position,
+ BigDecimal percentage) {
+ QualityFormItem qualityFormItem = new QualityFormItem(name, position,
+ percentage);
+ qualityFormItem.setNewObject(true);
+ return qualityFormItem;
+ }
+
+ public QualityFormItem() {
+
+ }
+
+ private QualityFormItem(String name, Integer position, BigDecimal percentage) {
+ this.name = name;
+ this.position = position;
+ this.percentage = percentage;
+ }
+
+ private boolean newObject = false;
+
+ private String name;
+
+ private Integer position;
+
+ private BigDecimal percentage;
+
+ @NotEmpty
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ @NotNull
+ public Integer getPosition() {
+ return position;
+ }
+
+ public void setPosition(Integer newPosition) {
+ this.position = newPosition;
+ }
+
+ @NotNull
+ public BigDecimal getPercentage() {
+ return percentage;
+ }
+
+ public void setPercentage(BigDecimal percentage) {
+ this.percentage = percentage;
+ }
+
+ public boolean isNewObject() {
+ return newObject;
+ }
+
+ private void setNewObject(boolean newObject) {
+ this.newObject = newObject;
+ }
+
+}
diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/qualityforms/entities/QualityFormType.java b/navalplanner-business/src/main/java/org/navalplanner/business/qualityforms/entities/QualityFormType.java
new file mode 100644
index 000000000..a877a8309
--- /dev/null
+++ b/navalplanner-business/src/main/java/org/navalplanner/business/qualityforms/entities/QualityFormType.java
@@ -0,0 +1,43 @@
+/*
+ * 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 .
+ */
+
+/**
+ * @author Susana Montes Pedreira
+ */
+package org.navalplanner.business.qualityforms.entities;
+
+public enum QualityFormType {
+
+ BY_PERCENTAGE("By Percentage."), BY_ITEMS("By Items.");
+
+private String description;
+
+ private QualityFormType(String description) {
+this.description = description;
+}
+
+public String toString() {
+return this.description;
+}
+
+ public static QualityFormType getDefault() {
+ return BY_PERCENTAGE;
+}
+}
diff --git a/navalplanner-business/src/main/resources/navalplanner-business-spring-config.xml b/navalplanner-business/src/main/resources/navalplanner-business-spring-config.xml
index 3ebeeb53e..cbdc4a8d2 100644
--- a/navalplanner-business/src/main/resources/navalplanner-business-spring-config.xml
+++ b/navalplanner-business/src/main/resources/navalplanner-business-spring-config.xml
@@ -60,6 +60,9 @@
org/navalplanner/business/costcategories/entities/CostCategories.hbm.xml
+
+ org/navalplanner/business/qualityforms/entities/QualityForms.hbm.xml
+
diff --git a/navalplanner-business/src/main/resources/org/navalplanner/business/qualityforms/entities/QualityForms.hbm.xml b/navalplanner-business/src/main/resources/org/navalplanner/business/qualityforms/entities/QualityForms.hbm.xml
new file mode 100644
index 000000000..24835895f
--- /dev/null
+++ b/navalplanner-business/src/main/resources/org/navalplanner/business/qualityforms/entities/QualityForms.hbm.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+ 100
+
+
+
+
+
+
+
+
+
+ org.navalplanner.business.qualityforms.entities.QualityFormType
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/navalplanner-business/src/test/java/org/navalplanner/business/test/qualityforms/daos/AbstractQualityFormTest.java b/navalplanner-business/src/test/java/org/navalplanner/business/test/qualityforms/daos/AbstractQualityFormTest.java
new file mode 100644
index 000000000..5f2ab205d
--- /dev/null
+++ b/navalplanner-business/src/test/java/org/navalplanner/business/test/qualityforms/daos/AbstractQualityFormTest.java
@@ -0,0 +1,52 @@
+/*
+ * 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.test.qualityforms.daos;
+
+import java.math.BigDecimal;
+import java.util.UUID;
+
+import org.navalplanner.business.qualityforms.daos.IQualityFormDAO;
+import org.navalplanner.business.qualityforms.entities.QualityForm;
+import org.navalplanner.business.qualityforms.entities.QualityFormItem;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * Test for {@QualityDAO}
+ * @author Susana Montes Pedreira
+ */
+public abstract class AbstractQualityFormTest {
+
+ @Autowired
+ IQualityFormDAO qualityFormDAO;
+
+ public QualityForm createValidQualityForm() {
+ QualityForm qualityForm = QualityForm.create(UUID.randomUUID()
+ .toString(), UUID.randomUUID().toString());
+ return qualityForm;
+ }
+
+ public QualityFormItem createValidQualityFormItem() {
+ QualityFormItem qualityFormItem = QualityFormItem.create(UUID
+ .randomUUID().toString(), new Integer(0), new BigDecimal(0));
+ return qualityFormItem;
+ }
+
+}
diff --git a/navalplanner-business/src/test/java/org/navalplanner/business/test/qualityforms/daos/QualityFormDAOTest.java b/navalplanner-business/src/test/java/org/navalplanner/business/test/qualityforms/daos/QualityFormDAOTest.java
new file mode 100644
index 000000000..94882e956
--- /dev/null
+++ b/navalplanner-business/src/test/java/org/navalplanner/business/test/qualityforms/daos/QualityFormDAOTest.java
@@ -0,0 +1,113 @@
+/*
+ * 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.test.qualityforms.daos;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.navalplanner.business.BusinessGlobalNames.BUSINESS_SPRING_CONFIG_FILE;
+import static org.navalplanner.business.test.BusinessGlobalNames.BUSINESS_SPRING_CONFIG_TEST_FILE;
+
+import java.util.List;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.navalplanner.business.common.exceptions.InstanceNotFoundException;
+import org.navalplanner.business.qualityforms.daos.IQualityFormDAO;
+import org.navalplanner.business.qualityforms.entities.QualityForm;
+import org.navalplanner.business.qualityforms.entities.QualityFormItem;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * Test for {@QualityDAO}
+ *
+ * @author Susana Montes Pedreira
+ *
+ */
+
+@RunWith(SpringJUnit4ClassRunner.class)
+@ContextConfiguration(locations = { BUSINESS_SPRING_CONFIG_FILE,
+ BUSINESS_SPRING_CONFIG_TEST_FILE })
+@Transactional
+public class QualityFormDAOTest extends AbstractQualityFormTest {
+
+ @Autowired
+ IQualityFormDAO qualityFormDAO;
+
+ @Test
+ public void testInSpringContainer() {
+ assertNotNull(qualityFormDAO);
+ }
+
+ @Test
+ public void testSaveQualityForm() {
+ QualityForm qualityForm = createValidQualityForm();
+ qualityFormDAO.save(qualityForm);
+ assertTrue(qualityForm.getId() != null);
+ }
+
+ @Test
+ public void testRemoveQualityForm() throws InstanceNotFoundException {
+ QualityForm qualityForm = createValidQualityForm();
+ qualityFormDAO.save(qualityForm);
+ qualityFormDAO.remove(qualityForm.getId());
+ assertFalse(qualityFormDAO.exists(qualityForm.getId()));
+ }
+
+ @Test
+ public void testListQualityForm() {
+ int previous = qualityFormDAO.list(QualityForm.class).size();
+ QualityForm qualityForm = createValidQualityForm();
+ qualityFormDAO.save(qualityForm);
+ List list = qualityFormDAO.list(QualityForm.class);
+ assertEquals(previous + 1, list.size());
+ }
+
+ @Test
+ public void testSaveQualityFormItems() {
+ QualityForm qualityForm = createValidQualityForm();
+ QualityFormItem qualityFormItem = createValidQualityFormItem();
+ qualityForm.addQualityFormItemAtEnd(qualityFormItem);
+ qualityFormDAO.save(qualityForm);
+
+ assertTrue(qualityForm.getId() != null);
+ assertEquals(1, qualityForm.getQualityFormItems().size());
+ }
+
+ @Test
+ public void testSaveAndRemoveQualityFormItem()
+ throws InstanceNotFoundException {
+ QualityForm qualityForm = createValidQualityForm();
+ QualityFormItem qualityFormItem = createValidQualityFormItem();
+ qualityForm.addQualityFormItemAtEnd(qualityFormItem);
+ qualityFormDAO.save(qualityForm);
+
+ assertTrue(qualityForm.getId() != null);
+ assertEquals(1, qualityForm.getQualityFormItems().size());
+
+ qualityForm.removeQualityFormItem(qualityFormItem);
+ assertEquals(0, qualityForm.getQualityFormItems().size());
+ }
+}
diff --git a/navalplanner-business/src/test/java/org/navalplanner/business/test/qualityforms/entities/QualityFormTest.java b/navalplanner-business/src/test/java/org/navalplanner/business/test/qualityforms/entities/QualityFormTest.java
new file mode 100644
index 000000000..f1ff5a8a3
--- /dev/null
+++ b/navalplanner-business/src/test/java/org/navalplanner/business/test/qualityforms/entities/QualityFormTest.java
@@ -0,0 +1,246 @@
+/*
+ * 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.test.qualityforms.entities;
+
+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;
+
+import java.math.BigDecimal;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.navalplanner.business.common.exceptions.ValidationException;
+import org.navalplanner.business.qualityforms.daos.IQualityFormDAO;
+import org.navalplanner.business.qualityforms.entities.QualityForm;
+import org.navalplanner.business.qualityforms.entities.QualityFormItem;
+import org.navalplanner.business.test.qualityforms.daos.AbstractQualityFormTest;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * @author Susana Montes Pedreira
+ */
+
+@RunWith(SpringJUnit4ClassRunner.class)
+@ContextConfiguration(locations = { BUSINESS_SPRING_CONFIG_FILE,
+ BUSINESS_SPRING_CONFIG_TEST_FILE })
+@Transactional
+public class QualityFormTest extends AbstractQualityFormTest {
+
+ @Autowired
+ IQualityFormDAO qualityFormDAO;
+
+ @Test
+ public void checkInvalidNameQualityForm() throws ValidationException {
+ QualityForm qualityForm = createValidQualityForm();
+ qualityForm.setName("");
+ try {
+ qualityFormDAO.save(qualityForm);
+ fail("It should throw an exception");
+ } catch (ValidationException e) {
+ // It should throw an exception
+ }
+
+ qualityForm.setName(null);
+ try {
+ qualityFormDAO.save(qualityForm);
+ fail("It should throw an exception");
+ } catch (ValidationException e) {
+ // It should throw an exception
+ }
+ }
+
+ @Test
+ public void checkInvalidQualityFormType() throws ValidationException {
+ QualityForm qualityForm = createValidQualityForm();
+ qualityForm.setQualityFormType(null);
+ try {
+ qualityFormDAO.save(qualityForm);
+ fail("It should throw an exception");
+ } catch (ValidationException e) {
+ // It should throw an exception
+ }
+ }
+
+ @Test
+ public void checkInvalidRepeatedQualityFormItemPosition()
+ throws ValidationException {
+ QualityForm qualityForm = createValidQualityForm();
+
+ QualityFormItem qualityFormItem1 = createValidQualityFormItem();
+ qualityForm.addQualityFormItemAtEnd(qualityFormItem1);
+
+ QualityFormItem qualityFormItem2 = createValidQualityFormItem();
+ qualityForm.addQualityFormItemAtEnd(qualityFormItem2);
+
+ qualityFormItem1.setPosition(0);
+ qualityFormItem2.setPosition(0);
+
+ try {
+ qualityFormDAO.save(qualityForm);
+ fail("It should throw an exception");
+ } catch (ValidationException e) {
+ // It should throw an exception
+ }
+
+ }
+
+ @Test
+ public void checkInvalidNotConsecutivesQualityFormItemPosition()
+ throws ValidationException {
+ QualityForm qualityForm = createValidQualityForm();
+
+ QualityFormItem qualityFormItem1 = createValidQualityFormItem();
+ qualityForm.addQualityFormItemAtEnd(qualityFormItem1);
+
+ QualityFormItem qualityFormItem2 = createValidQualityFormItem();
+ qualityForm.addQualityFormItemAtEnd(qualityFormItem2);
+
+ qualityFormItem1.setPosition(0);
+ qualityFormItem2.setPosition(2);
+
+ try {
+ qualityFormDAO.save(qualityForm);
+ fail("It should throw an exception");
+ } catch (ValidationException e) {
+ // It should throw an exception
+ }
+
+ }
+
+ @Test
+ public void checkInvalidOutOfRangeQualityFormItemPosition()
+ throws ValidationException {
+ QualityForm qualityForm = createValidQualityForm();
+
+ QualityFormItem qualityFormItem1 = createValidQualityFormItem();
+ qualityForm.addQualityFormItemAtEnd(qualityFormItem1);
+
+ QualityFormItem qualityFormItem2 = createValidQualityFormItem();
+ qualityForm.addQualityFormItemAtEnd(qualityFormItem2);
+
+ qualityFormItem1.setPosition(1);
+ qualityFormItem2.setPosition(2);
+
+
+ try {
+ qualityFormDAO.save(qualityForm);
+ fail("It should throw an exception");
+ } catch (ValidationException e) {
+ // It should throw an exception
+ }
+
+ }
+
+ @Test
+ public void checkInvalidPercentageQualityFormItemPosition()
+ throws ValidationException {
+ QualityForm qualityForm = createValidQualityForm();
+
+ QualityFormItem qualityFormItem1 = createValidQualityFormItem();
+ qualityForm.addQualityFormItemAtEnd(qualityFormItem1);
+
+ QualityFormItem qualityFormItem2 = createValidQualityFormItem();
+ qualityForm.addQualityFormItemAtEnd(qualityFormItem2);
+
+ qualityFormItem1.setPosition(0);
+ qualityFormItem1.setPercentage(new BigDecimal(0));
+ qualityFormItem2.setPosition(1);
+ qualityFormItem2.setPercentage(new BigDecimal(1));
+
+ try {
+ qualityFormDAO.save(qualityForm);
+ } catch (ValidationException e) {
+ fail("It shouldn't throw an exception");
+ }
+
+ qualityFormItem1.setPercentage(new BigDecimal(1));
+ qualityFormItem2.setPercentage(new BigDecimal(0));
+
+ try {
+ qualityFormDAO.save(qualityForm);
+ fail("It should throw an exception");
+ } catch (ValidationException e) {
+ // It should throw an exception
+ }
+ }
+
+ @Test
+ public void checkInvalidQualityFormItemName() throws ValidationException {
+ QualityForm qualityForm = createValidQualityForm();
+ QualityFormItem qualityFormItem = createValidQualityFormItem();
+ qualityForm.addQualityFormItemAtEnd(qualityFormItem);
+ try {
+ qualityFormDAO.save(qualityForm);
+ } catch (ValidationException e) {
+ fail("It should throw an exception");
+ }
+
+ qualityFormItem.setName(null);
+ try {
+ qualityFormDAO.save(qualityForm);
+ fail("It should throw an exception");
+ } catch (ValidationException e) {
+ // It should throw an exception
+ }
+
+ qualityFormItem.setName("");
+ try {
+ qualityFormDAO.save(qualityForm);
+ fail("It should throw an exception");
+ } catch (ValidationException e) {
+ // It should throw an exception
+ }
+ }
+
+ @Test
+ public void checkNotNullQualityFormItemPosition()
+ throws ValidationException {
+ QualityForm qualityForm = createValidQualityForm();
+ QualityFormItem qualityFormItem = createValidQualityFormItem();
+ qualityForm.addQualityFormItemAtEnd(qualityFormItem);
+ qualityFormItem.setPosition(null);
+ try {
+ qualityFormDAO.save(qualityForm);
+ fail("It should throw an exception");
+ } catch (ValidationException e) {
+ // It should throw an exception
+ }
+ }
+
+ @Test
+ public void checkNotNullQualityFormItemPercentage()
+ throws ValidationException {
+ QualityForm qualityForm = createValidQualityForm();
+ QualityFormItem qualityFormItem = createValidQualityFormItem();
+ qualityFormItem.setPercentage(null);
+ qualityForm.addQualityFormItemAtEnd(qualityFormItem);
+ try {
+ qualityFormDAO.save(qualityForm);
+ fail("It should throw an exception");
+ } catch (ValidationException e) {
+ // It should throw an exception
+ }
+ }
+}
diff --git a/navalplanner-business/src/test/resources/navalplanner-business-spring-config-test.xml b/navalplanner-business/src/test/resources/navalplanner-business-spring-config-test.xml
index ffb209cb9..79a2dd2c4 100644
--- a/navalplanner-business/src/test/resources/navalplanner-business-spring-config-test.xml
+++ b/navalplanner-business/src/test/resources/navalplanner-business-spring-config-test.xml
@@ -72,6 +72,9 @@
TestEntities.hbm.xml
+
+ org/navalplanner/business/qualityforms/entities/QualityForms.hbm.xml
+
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 83fa703e1..8736138b4 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
@@ -69,6 +69,9 @@
org/navalplanner/business/costcategories/entities/CostCategories.hbm.xml
+
+ org/navalplanner/business/qualityforms/entities/QualityForms.hbm.xml
+