ItEr40S14CUVinculacionFormularioCalidadePlanificacion : Creation of domain classes TaskQualityForm and TaskQualityFormItem and its tests.

This commit is contained in:
Susana Montes Pedreira 2009-12-21 19:57:28 +01:00 committed by Javier Moran Rua
parent bb5a1927ea
commit 553439893e
6 changed files with 317 additions and 0 deletions

View file

@ -31,6 +31,7 @@ import java.util.List;
import java.util.Set;
import org.apache.commons.lang.Validate;
import org.hibernate.validator.InvalidValue;
import org.hibernate.validator.NotEmpty;
import org.hibernate.validator.Valid;
import org.joda.time.LocalDate;
@ -41,6 +42,7 @@ import org.navalplanner.business.advance.entities.IndirectAdvanceAssignment;
import org.navalplanner.business.advance.exceptions.DuplicateAdvanceAssignmentForOrderElementException;
import org.navalplanner.business.advance.exceptions.DuplicateValueTrueReportGlobalAdvanceException;
import org.navalplanner.business.common.BaseEntity;
import org.navalplanner.business.common.exceptions.ValidationException;
import org.navalplanner.business.labels.entities.Label;
import org.navalplanner.business.materials.entities.MaterialAssignment;
import org.navalplanner.business.orders.entities.SchedulingState.ITypeChangedListener;
@ -48,6 +50,8 @@ import org.navalplanner.business.orders.entities.SchedulingState.Type;
import org.navalplanner.business.orders.entities.TaskSource.TaskSourceSynchronization;
import org.navalplanner.business.planner.entities.Task;
import org.navalplanner.business.planner.entities.TaskElement;
import org.navalplanner.business.qualityforms.entities.QualityForm;
import org.navalplanner.business.qualityforms.entities.TaskQualityForm;
import org.navalplanner.business.requirements.entities.CriterionRequirement;
import org.navalplanner.business.requirements.entities.DirectCriterionRequirement;
import org.navalplanner.business.requirements.entities.IndirectCriterionRequirement;
@ -73,6 +77,8 @@ public abstract class OrderElement extends BaseEntity {
private Set<Label> labels = new HashSet<Label>();
private Set<TaskQualityForm> taskQualityForms = new HashSet<TaskQualityForm>();
@NotEmpty(message = "code not specified")
private String code;
@ -693,4 +699,39 @@ public abstract class OrderElement extends BaseEntity {
return null;
}
@Valid
public Set<TaskQualityForm> getTaskQualityForms() {
return Collections.unmodifiableSet(taskQualityForms);
}
public void setTaskQualityFormItems(Set<TaskQualityForm> taskQualityForms) {
this.taskQualityForms = taskQualityForms;
}
public TaskQualityForm addTaskQualityForm(QualityForm qualityForm)
throws ValidationException {
ckeckUniqueQualityForm(qualityForm);
TaskQualityForm taskQualityForm = TaskQualityForm.create(this,
qualityForm);
this.taskQualityForms.add(taskQualityForm);
return taskQualityForm;
}
public void remove(TaskQualityForm taskQualityForm) {
this.taskQualityForms.remove(taskQualityForm);
}
private void ckeckUniqueQualityForm(QualityForm qualityForm)
throws ValidationException, IllegalArgumentException {
Validate.notNull(qualityForm);
for (TaskQualityForm taskQualityForm : getTaskQualityForms()) {
if (qualityForm.equals(taskQualityForm.getQualityForm())) {
throw new ValidationException(new InvalidValue(_(
"{0} already exists", qualityForm.getName()),
QualityForm.class, "name", qualityForm.getName(),
qualityForm));
}
}
}
}

View file

@ -0,0 +1,77 @@
package org.navalplanner.business.qualityforms.entities;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.apache.commons.lang.Validate;
import org.hibernate.validator.NotNull;
import org.hibernate.validator.Valid;
import org.navalplanner.business.common.BaseEntity;
import org.navalplanner.business.orders.entities.OrderElement;
public class TaskQualityForm extends BaseEntity {
public static TaskQualityForm create(OrderElement orderElement,
QualityForm qualityForm) {
TaskQualityForm taskQualityForm = new TaskQualityForm(orderElement,
qualityForm);
taskQualityForm.setNewObject(true);
return taskQualityForm;
}
protected TaskQualityForm() {
}
private TaskQualityForm(OrderElement orderElement, QualityForm qualityForm) {
this.orderElement = orderElement;
this.qualityForm = qualityForm;
createTaskQualityFormItems();
}
private OrderElement orderElement;
private QualityForm qualityForm;
private List<TaskQualityFormItem> taskQualityFormItems = new ArrayList<TaskQualityFormItem>();
@Valid
public List<TaskQualityFormItem> getTaskQualityFormItems() {
return Collections.unmodifiableList(taskQualityFormItems);
}
public void setTaskQualityFormItems(
List<TaskQualityFormItem> taskQualityFormItems) {
this.taskQualityFormItems = taskQualityFormItems;
}
@NotNull
public OrderElement getOrderElement() {
return orderElement;
}
public void setOrderElement(OrderElement orderElement) {
this.orderElement = orderElement;
}
@NotNull
public QualityForm getQualityForm() {
return qualityForm;
}
public void setQualityForm(QualityForm qualityForm) {
this.qualityForm = qualityForm;
}
private void createTaskQualityFormItems() {
Validate.notNull(qualityForm);
for (QualityFormItem qualityFormItem : qualityForm
.getQualityFormItems()) {
TaskQualityFormItem taskQualityFormItem = TaskQualityFormItem
.create(qualityFormItem);
taskQualityFormItems.add(taskQualityFormItem);
}
}
}

View file

@ -0,0 +1,112 @@
package org.navalplanner.business.qualityforms.entities;
import java.math.BigDecimal;
import java.util.Date;
import org.apache.commons.lang.Validate;
import org.hibernate.validator.AssertTrue;
import org.hibernate.validator.NotEmpty;
import org.hibernate.validator.NotNull;
import org.navalplanner.business.INewObject;
public class TaskQualityFormItem implements INewObject {
public final static String propertyName = "name";
public final static String propertyPercentage = "percentage";
static TaskQualityFormItem create(QualityFormItem qualityFormItem) {
TaskQualityFormItem taskQualityFormItem = new TaskQualityFormItem(
qualityFormItem);
taskQualityFormItem.setNewObject(true);
return taskQualityFormItem;
}
public TaskQualityFormItem() {
}
private TaskQualityFormItem(QualityFormItem qualityFormItem) {
Validate.notNull(qualityFormItem);
setName(qualityFormItem.getName());
setPosition(qualityFormItem.getPosition());
setPercentage(qualityFormItem.getPercentage());
}
private boolean newObject = false;
private String name;
private BigDecimal percentage;
private Integer position;
private Boolean passed = false;
private Date date;
@NotEmpty
public String getName() {
return name;
}
private void setName(String name) {
this.name = name;
}
@NotNull
public BigDecimal getPercentage() {
return percentage;
}
private void setPercentage(BigDecimal percentage) {
this.percentage = percentage;
}
@NotNull
public Integer getPosition() {
return position;
}
private void setPosition(Integer position) {
this.position = position;
}
@NotNull
public Boolean getPassed() {
return passed == null ? false : passed;
}
public void setPassed(Boolean passed) {
this.passed = passed;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
public boolean isNewObject() {
return newObject;
}
private void setNewObject(boolean newObject) {
this.newObject = newObject;
}
@SuppressWarnings("unused")
@AssertTrue(message = "percentage should be greater than 0% and less than 100%")
public boolean checkConstraintQualityFormItemPercentage() {
if (percentage == null)
return true;
if ((percentage.compareTo(new BigDecimal(100).setScale(2)) <= 0)
&& (percentage.compareTo(new BigDecimal(0).setScale(2)) > 0)) {
return true;
}
return false;
}
}

View file

@ -42,6 +42,11 @@
<one-to-many class="org.navalplanner.business.materials.entities.MaterialAssignment" />
</set>
<set name="taskQualityForms" cascade="all-delete-orphan" inverse="true">
<key column="ORDER_ELEMENT_ID" not-null="true" />
<one-to-many class="org.navalplanner.business.qualityforms.entities.TaskQualityForm" />
</set>
<!-- Inverse navigation from OrderElement to OrderLineGroup -->
<many-to-one name="parent" access="field" cascade="all"/>

View file

@ -31,4 +31,30 @@
</list>
</class>
<!-- TaskQualityForm -->
<class name="TaskQualityForm" table="TASK_QUALITY_FORM">
<id name="id" type="long" access="property">
<generator class="hilo">
<param name="max_lo">100</param>
</generator>
</id>
<version name="version" access="property" type="long" />
<many-to-one name="qualityForm" class="QualityForm" column="QUALITY_FORM_ID"/>
<many-to-one name="orderElement" class="org.navalplanner.business.orders.entities.OrderElement" column="ORDER_ELEMENT_ID"/>
<list name="taskQualityFormItems" table="TASK_QUALITY_FORM_ITEMS">
<key column="TASK_QUALITY_FORM_ID"/>
<index column="idx"/>
<composite-element class="org.navalplanner.business.qualityforms.entities.TaskQualityFormItem">
<property name="name" access="field"/>
<property name="percentage" access="field"/>
<property name="position" access="field"/>
<property name="passed" access="field"/>
<property name="date" access="field"/>
</composite-element>
</list>
</class>
</hibernate-mapping>

View file

@ -49,10 +49,14 @@ 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.exceptions.InstanceNotFoundException;
import org.navalplanner.business.common.exceptions.ValidationException;
import org.navalplanner.business.orders.daos.IOrderElementDAO;
import org.navalplanner.business.orders.entities.OrderElement;
import org.navalplanner.business.orders.entities.OrderLine;
import org.navalplanner.business.orders.entities.OrderLineGroup;
import org.navalplanner.business.qualityforms.daos.IQualityFormDAO;
import org.navalplanner.business.qualityforms.entities.QualityForm;
import org.navalplanner.business.qualityforms.entities.TaskQualityForm;
import org.navalplanner.business.test.orders.entities.OrderElementTest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
@ -76,6 +80,9 @@ public class OrderElementDAOTest {
defaultAdvanceTypesBootstrapListener.loadRequiredData();
}
@Autowired
IQualityFormDAO qualityFormDAO;
@Autowired
private IOrderElementDAO orderElementDAO;
@ -334,4 +341,53 @@ public class OrderElementDAOTest {
assertNull(found);
}
@Test
public void testSaveAndRemoveTaskQualityForm() {
OrderElement orderElement = OrderElementTest
.givenOrderLineGroupWithTwoOrderLines(2000, 3000);
QualityForm qualityForm = QualityForm.create(UUID.randomUUID()
.toString(), UUID.randomUUID().toString());
qualityFormDAO.save(qualityForm);
TaskQualityForm taskQualityForm = orderElement
.addTaskQualityForm(qualityForm);
orderElementDAO.save(orderElement);
orderElementDAO.flush();
assertThat(orderElement.getTaskQualityForms().size(), equalTo(1));
orderElement.remove(taskQualityForm);
orderElementDAO.save(orderElement);
orderElementDAO.flush();
assertThat(orderElement.getTaskQualityForms().size(), equalTo(0));
}
@Test
public void testCheckUniqueQualityForm() {
OrderElement orderElement = OrderElementTest
.givenOrderLineGroupWithTwoOrderLines(2000, 3000);
QualityForm qualityForm = QualityForm.create(UUID.randomUUID()
.toString(), UUID.randomUUID().toString());
qualityFormDAO.save(qualityForm);
orderElement.addTaskQualityForm(qualityForm);
orderElementDAO.save(orderElement);
orderElementDAO.flush();
assertThat(orderElement.getTaskQualityForms().size(), equalTo(1));
try {
orderElement.addTaskQualityForm(null);
fail("It should throw an exception");
} catch (IllegalArgumentException e) {
//
}
try {
orderElement.addTaskQualityForm(qualityForm);
fail("It should throw an exception");
} catch (ValidationException e) {
//
}
}
}