ItEr30S14CUObtencionRequisitosEnProxectoTraballoItEr29S17: Refactoring to assign criterions required to orderElement.

This commit is contained in:
Susana Montes Pedreira 2009-10-27 16:25:14 +01:00 committed by Javier Moran Rua
parent e6fbd02e4b
commit c1079eacc7
16 changed files with 575 additions and 78 deletions

View file

@ -17,17 +17,22 @@
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.navalplanner.business.orders.entities;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.hibernate.validator.NotNull;
import org.navalplanner.business.common.BaseEntity;
import org.navalplanner.business.requirements.entities.CriterionRequirement;
import org.navalplanner.business.requirements.entities.DirectCriterionRequirement;
import org.navalplanner.business.requirements.entities.IndirectCriterionRequirement;
import org.navalplanner.business.resources.entities.Criterion;
import org.navalplanner.business.resources.entities.ICriterionType;
public class HoursGroup extends BaseEntity implements Cloneable {
@ -44,7 +49,7 @@ public class HoursGroup extends BaseEntity implements Cloneable {
private Boolean fixedPercentage = false;
private Set<Criterion> criterions = new HashSet<Criterion>();
private Set<CriterionRequirement> criterionRequirements = new HashSet<CriterionRequirement>();
@NotNull
private OrderLine parentOrderLine;
@ -105,62 +110,87 @@ public class HoursGroup extends BaseEntity implements Cloneable {
return this.fixedPercentage;
}
public void setCriterions(Set<Criterion> criterions) {
this.criterions = criterions;
public void setCriterionRequirements(Set<CriterionRequirement> criterionRequirements) {
this.criterionRequirements = criterionRequirements;
}
public Set<CriterionRequirement> getCriterionRequirements() {
return criterionRequirements;
}
public Set<Criterion> getCriterions() {
return criterions;
}
public void addCriterion(Criterion criterion) {
Criterion oldCriterion = getCriterionByType(criterion.getType());
if (oldCriterion != null) {
removeCriterion(oldCriterion);
Set<Criterion> criterions = new HashSet<Criterion>();
for(CriterionRequirement criterionRequirement: criterionRequirements){
criterions.add(criterionRequirement.getCriterion());
}
criterions.add(criterion);
return Collections.unmodifiableSet(criterions);
}
public void removeCriterion(Criterion criterion) {
criterions.remove(criterion);
public void addCriterionRequirement(CriterionRequirement requirement) {
if (canAddCriterionRequirement(requirement)) {
requirement.setHoursGroup(this);
criterionRequirements.add(requirement);
} else {
throw new IllegalStateException(
" The "
+ requirement.getCriterion().getName()
+ " can not be assigned to this hoursGroup because it already exist in other hoursGroup");
}
}
public Criterion getCriterionByType(ICriterionType<?> type) {
for (Criterion criterion : criterions) {
if (criterion.getType().equals(type)) {
return criterion;
private boolean canAddCriterionRequirement(
CriterionRequirement newRequirement) {
for (CriterionRequirement requirement : criterionRequirements) {
if (requirement.getCriterion()
.equals(newRequirement.getCriterion())) {
return false;
}
}
return true;
}
/* TO REMOVE */
public void removeDirectCriterionRequirement(Criterion criterion){
CriterionRequirement oldCriterionRequirement =
getDirectCriterionRequirementByCriterion(criterion);
if (oldCriterionRequirement != null) {
removeCriterionRequirement(oldCriterionRequirement);
}
}
public void removeCriterionRequirement(CriterionRequirement criterionRequirement) {
criterionRequirements.remove(criterionRequirement);
}
/* TO REMOVE */
public CriterionRequirement getDirectCriterionRequirementByCriterion(
Criterion criterion) {
for (CriterionRequirement requirement : getDirectCriterionRequirement()) {
Criterion oldCriterion = requirement.getCriterion();
if ((oldCriterion != null)
&& (criterion.getId().equals(oldCriterion.getId()))) {
return requirement;
}
}
return null;
}
public Criterion getCriterionByType(String type) {
// TODO: Check if hoursgroup has criterions
for (Criterion criterion : criterions) {
if (criterion.getType().getName().equals(type)) {
return criterion;
}
}
/* TO REMOVE */
public void addDirectRequirementCriterion(Criterion criterion) {
CriterionRequirement newCriterionRequirement =
DirectCriterionRequirement.create(criterion);
addCriterionRequirement(newCriterionRequirement);
}
/* TO REMOVE */
public Criterion getDirectCriterion(Criterion criterion) {
CriterionRequirement requirement = getDirectCriterionRequirementByCriterion(criterion);
if (requirement != null) {
return requirement.getCriterion();
}
return null;
}
public void removeCriterionByType(ICriterionType<?> type) {
Criterion criterion = getCriterionByType(type);
if (criterion != null) {
removeCriterion(criterion);
}
}
public void removeCriterionByType(String type) {
Criterion criterion = getCriterionByType(type);
if (criterion != null) {
removeCriterion(criterion);
}
}
public void setParentOrderLine(OrderLine parentOrderLine) {
this.parentOrderLine = parentOrderLine;
}
@ -169,4 +199,59 @@ public class HoursGroup extends BaseEntity implements Cloneable {
return parentOrderLine;
}
public void updateCriterionRequirements(){
OrderLine newParent = getParentOrderLine();
Set<IndirectCriterionRequirement> currentIndirects =
getCurrentRequirement();
criterionRequirements.removeAll(getIndirectCriterionRequirement());
criterionRequirements.addAll(currentIndirects);
}
private Set<IndirectCriterionRequirement> getCurrentRequirement(){
Set<IndirectCriterionRequirement> currentRequirements =
new HashSet<IndirectCriterionRequirement>();
for(IndirectCriterionRequirement requirement :getIndirectRequirementParent()){
IndirectCriterionRequirement newRequirement = findRequirementByParent(requirement
.getParent());
if(newRequirement == null){
newRequirement = IndirectCriterionRequirement.
create(requirement.getParent(),true);
}
currentRequirements.add(requirement);
}
return currentRequirements;
}
private List<IndirectCriterionRequirement> getIndirectRequirementParent() {
return getParentOrderLine().getIndirectCriterionRequirement();
}
private IndirectCriterionRequirement findRequirementByParent(
CriterionRequirement newParent) {
for (IndirectCriterionRequirement requirement : getIndirectCriterionRequirement()) {
if (requirement.getParent().equals(newParent))
return (IndirectCriterionRequirement) requirement;
}
return null;
}
private List<IndirectCriterionRequirement> getIndirectCriterionRequirement() {
List<IndirectCriterionRequirement> list = new ArrayList<IndirectCriterionRequirement>();
for(CriterionRequirement criterionRequirement : criterionRequirements ){
if(criterionRequirement instanceof IndirectCriterionRequirement){
list.add((IndirectCriterionRequirement) criterionRequirement);
}
}
return list;
}
private List<DirectCriterionRequirement> getDirectCriterionRequirement() {
List<DirectCriterionRequirement> list = new ArrayList<DirectCriterionRequirement>();
for(CriterionRequirement criterionRequirement : criterionRequirements ){
if(criterionRequirement instanceof DirectCriterionRequirement){
list.add((DirectCriterionRequirement) criterionRequirement);
}
}
return list;
}
}

View file

@ -40,6 +40,9 @@ import org.navalplanner.business.advance.exceptions.DuplicateValueTrueReportGlob
import org.navalplanner.business.common.BaseEntity;
import org.navalplanner.business.labels.entities.Label;
import org.navalplanner.business.planner.entities.TaskElement;
import org.navalplanner.business.requirements.entities.CriterionRequirement;
import org.navalplanner.business.requirements.entities.DirectCriterionRequirement;
import org.navalplanner.business.requirements.entities.IndirectCriterionRequirement;
public abstract class OrderElement extends BaseEntity {
@ -65,6 +68,8 @@ public abstract class OrderElement extends BaseEntity {
private Set<TaskElement> taskElements = new HashSet<TaskElement>();
private Set<CriterionRequirement> criterionRequirements = new HashSet<CriterionRequirement>();
protected OrderLineGroup parent;
public OrderLineGroup getParent() {
@ -328,4 +333,85 @@ public abstract class OrderElement extends BaseEntity {
return result;
}
private void setCriterionRequirements(Set<CriterionRequirement> criterionRequirements) {
this.criterionRequirements = criterionRequirements;
}
public Set<CriterionRequirement> getCriterionRequirements() {
return Collections.unmodifiableSet(criterionRequirements);
}
public void updateCriterionRequirements(){
updateCriterionRequirement();
for(OrderElement orderElement : getChildren()){
orderElement.updateCriterionRequirements();
}
}
protected void updateCriterionRequirement() {
OrderElement newParent = this.getParent();
Set<IndirectCriterionRequirement> currentIndirects =
getCurrentIndirectRequirements(newParent);
criterionRequirements.removeAll(getIndirectCriterionRequirement());
criterionRequirements.addAll(currentIndirects);
}
protected Set<IndirectCriterionRequirement> getCurrentIndirectRequirements(
OrderElement newParent){
Set<IndirectCriterionRequirement> currentIndirects =
new HashSet<IndirectCriterionRequirement>();
if(newParent != null){
for(CriterionRequirement requirement :newParent.getCriterionRequirements()){
IndirectCriterionRequirement indirect = getCurrentIndirectRequirement(requirement);
currentIndirects.add(indirect);
}
}
return currentIndirects;
}
protected IndirectCriterionRequirement getCurrentIndirectRequirement(
CriterionRequirement requirement){
IndirectCriterionRequirement indirect;
DirectCriterionRequirement parent;
if(requirement instanceof DirectCriterionRequirement){
parent = (DirectCriterionRequirement)requirement;
indirect = findIndirectRequirementByParent(parent);
}else{
parent = ((IndirectCriterionRequirement)requirement).getParent();
indirect = findIndirectRequirementByParent(parent);
}
if(indirect == null){
indirect = IndirectCriterionRequirement.create(parent,true);
}
return (IndirectCriterionRequirement)indirect;
}
private IndirectCriterionRequirement findIndirectRequirementByParent(
DirectCriterionRequirement newParent) {
for (IndirectCriterionRequirement requirement : getIndirectCriterionRequirement()) {
if (requirement.getParent().equals(newParent))
return requirement;
}
return null;
}
public void removeCriterionRequirement(CriterionRequirement criterionRequirement){
//Remove the criterionRequirement into orderelement.
criterionRequirements.remove(criterionRequirement);
}
public void addCriterionRequirement(CriterionRequirement criterionRequirement){
criterionRequirement.setOrderElement(this);
this.criterionRequirements.add(criterionRequirement);
}
protected List<IndirectCriterionRequirement> getIndirectCriterionRequirement() {
List<IndirectCriterionRequirement> list = new ArrayList<IndirectCriterionRequirement>();
for (CriterionRequirement criterionRequirement : criterionRequirements) {
if (criterionRequirement instanceof IndirectCriterionRequirement) {
list.add((IndirectCriterionRequirement) criterionRequirement);
}
}
return list;
}
}

View file

@ -413,8 +413,13 @@ public class OrderLine extends OrderElement {
return result;
}
}
return result;
}
public void updateCriterionRequirements() {
updateCriterionRequirements();
for (HoursGroup hoursGroup : this.getHoursGroups()) {
hoursGroup.updateCriterionRequirements();
}
}
}

View file

@ -0,0 +1,80 @@
/*
* 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 <http://www.gnu.org/licenses/>.
*/
package org.navalplanner.business.requirements.entities;
import org.hibernate.validator.NotNull;
import org.navalplanner.business.common.BaseEntity;
import org.navalplanner.business.orders.entities.HoursGroup;
import org.navalplanner.business.orders.entities.OrderElement;
import org.navalplanner.business.resources.entities.Criterion;
/**
*
* @author Susana Montes Pedreira <smontes@wirelessgalicia.com>
*/
public class CriterionRequirement extends BaseEntity{
private HoursGroup hoursGroup;
private OrderElement orderElement;
@NotNull
private Criterion criterion;
public CriterionRequirement(){
}
public CriterionRequirement(Criterion criterion){
this.criterion = criterion;
}
public CriterionRequirement(Criterion criterion,
OrderElement orderElement,HoursGroup hoursGroup){
this.criterion = criterion;
this.orderElement = orderElement;
this.hoursGroup = hoursGroup;
}
public Criterion getCriterion() {
return criterion;
}
public void setCriterion(Criterion criterion) {
this.criterion = criterion;
}
public HoursGroup getHoursGroup() {
return hoursGroup;
}
public void setHoursGroup(HoursGroup hoursGroup) {
this.hoursGroup = hoursGroup;
}
public OrderElement getOrderElement() {
return orderElement;
}
public void setOrderElement(OrderElement orderElement) {
this.orderElement = orderElement;
}
}

View file

@ -0,0 +1,81 @@
/*
* 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 <http://www.gnu.org/licenses/>.
*/
package org.navalplanner.business.requirements.entities;
import java.util.HashSet;
import java.util.Set;
import org.navalplanner.business.orders.entities.HoursGroup;
import org.navalplanner.business.orders.entities.OrderElement;
import org.navalplanner.business.resources.entities.Criterion;
/**
*
* @author Susana Montes Pedreira <smontes@wirelessgalicia.com>
*/
public class DirectCriterionRequirement extends CriterionRequirement{
Set<IndirectCriterionRequirement> children =
new HashSet<IndirectCriterionRequirement>();
public static DirectCriterionRequirement create(){
DirectCriterionRequirement result = new DirectCriterionRequirement();
result.setNewObject(true);
return result;
}
public static DirectCriterionRequirement create(Criterion criterion){
DirectCriterionRequirement result = new DirectCriterionRequirement(criterion);
result.setNewObject(true);
return result;
}
public static DirectCriterionRequirement create(Criterion criterion,
OrderElement orderElement,HoursGroup hoursGroup){
DirectCriterionRequirement result = new DirectCriterionRequirement(criterion,
orderElement,hoursGroup);
result.setNewObject(true);
return result;
}
public DirectCriterionRequirement(){
}
public DirectCriterionRequirement(Criterion criterion,
OrderElement orderElement,HoursGroup hoursGroup){
super(criterion,orderElement,hoursGroup);
}
public DirectCriterionRequirement(Criterion criterion){
super(criterion);
}
public Set<IndirectCriterionRequirement> getChildren() {
return children;
}
public void setChildren(Set<IndirectCriterionRequirement>
children) {
this.children = children;
}
}

View file

@ -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 <http://www.gnu.org/licenses/>.
*/
package org.navalplanner.business.requirements.entities;
import org.hibernate.validator.NotNull;
import org.navalplanner.business.resources.entities.Criterion;
import org.navalplanner.business.orders.entities.HoursGroup;
import org.navalplanner.business.orders.entities.OrderElement;
/**
*
* @author Susana Montes Pedreira <smontes@wirelessgalicia.com>
*/
public class IndirectCriterionRequirement extends CriterionRequirement{
@NotNull
private DirectCriterionRequirement parent;
private Boolean isValid = true;
public static IndirectCriterionRequirement create() {
IndirectCriterionRequirement result = new IndirectCriterionRequirement();
result.setNewObject(true);
return result;
}
public static IndirectCriterionRequirement create(DirectCriterionRequirement
parent,Criterion criterion) {
IndirectCriterionRequirement result = new IndirectCriterionRequirement(criterion);
result.setParent(parent);
return result;
}
public static IndirectCriterionRequirement create(DirectCriterionRequirement
parent, Criterion criterion,OrderElement orderElement,HoursGroup hoursGroup){
IndirectCriterionRequirement result = new IndirectCriterionRequirement(parent,criterion,
orderElement,hoursGroup);
result.setNewObject(true);
return result;
}
public static IndirectCriterionRequirement create(DirectCriterionRequirement
parent,Boolean isValid) {
IndirectCriterionRequirement result = create();
result.setParent(parent);
result.setIsValid(isValid);
return result;
}
/**
* Constructor for hibernate. Do not use!
*/
public IndirectCriterionRequirement() {
}
public IndirectCriterionRequirement(Criterion criterion) {
super(criterion);
}
public IndirectCriterionRequirement(DirectCriterionRequirement parent,Criterion criterion,
OrderElement orderElement,HoursGroup hoursGroup){
super(criterion,orderElement,hoursGroup);
}
public DirectCriterionRequirement getParent() {
return parent;
}
public void setParent(DirectCriterionRequirement
directCriterionRequirement) {
this.parent = directCriterionRequirement;
}
public boolean isIsValid() {
return isValid;
}
public void setIsValid(boolean isValid) {
this.isValid = isValid;
}
}

View file

@ -46,6 +46,9 @@
<value>
org/navalplanner/business/labels/entities/Labels.hbm.xml
</value>
<value>
org/navalplanner/business/requirements/entities/Requirements.hbm.xml
</value>
</list>
</property>
</bean>

View file

@ -30,6 +30,11 @@
<many-to-many column="LABEL_ID" class="org.navalplanner.business.labels.entities.Label" />
</set>
<set name="criterionRequirements" access="field" cascade="all,delete-orphan" inverse="true">
<key column="ORDER_ELEMENT_ID" not-null="false"></key>
<one-to-many class="org.navalplanner.business.requirements.entities.CriterionRequirement"/>
</set>
<!-- Inverse navigation from OrderElement to OrderLineGroup -->
<many-to-one name="parent" access="field" cascade="all"/>
@ -76,11 +81,9 @@
<property name="percentage" access="field" />
<property name="fixedPercentage" access="field" />
<set name="criterions" table="CriterionHoursGroup" cascade="all"
access="field" inverse="false">
<key column="hoursGroupId" not-null="false" />
<many-to-many column="criterionId"
class="org.navalplanner.business.resources.entities.Criterion" />
<set name="criterionRequirements" access="field" cascade="all,delete-orphan" inverse="true">
<key column="HOURS_GROUP_ID" not-null="false"></key>
<one-to-many class="org.navalplanner.business.requirements.entities.CriterionRequirement"/>
</set>
<many-to-one name="parentOrderLine" column="PARENT_ORDER_LINE"

View file

@ -0,0 +1,30 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="org.navalplanner.business.requirements.entities">
<class name="CriterionRequirement">
<id access="property" name="id" type="long">
<generator class="hilo">
<param name="max_lo">100</param>
</generator>
</id>
<discriminator column="CRITERION_REQUIREMENT_TYPE" type="string"/>
<version access="property" name="version" type="long"/>
<!-- Inverse navigation from CriterionRequirement to HoursGroup -->
<many-to-one class="org.navalplanner.business.orders.entities.HoursGroup" column="HOURS_GROUP_ID" name="hoursGroup"/>
<!-- Inverse navigation from CriterionRequirement to OrderElement -->
<many-to-one class="org.navalplanner.business.orders.entities.OrderElement" column="ORDER_ELEMENT_ID" name="orderElement"/>
<!-- Inverse navigation from CriterionRequirement to Criterion -->
<many-to-one class="org.navalplanner.business.resources.entities.Criterion" column="CRITERION_ID" name="criterion"/>
<subclass discriminator-value="DIRECT" name="DirectCriterionRequirement">
<set access="field" cascade="all,delete-orphan" inverse="true" name="children">
<key column="parent"/>
<one-to-many class="IndirectCriterionRequirement"/>
</set>
</subclass>
<subclass discriminator-value="INDIRECT" name="IndirectCriterionRequirement">
<many-to-one class="DirectCriterionRequirement" column="parent" name="parent"/>
<property access="field" name="isValid"/>
</subclass>
</class>
</hibernate-mapping>

View file

@ -53,6 +53,9 @@
</value>
<value>
org/navalplanner/business/labels/entities/Labels.hbm.xml
</value>
<value>
org/navalplanner/business/requirements/entities/Requirements.hbm.xml
</value>
<value>
TestEntities.hbm.xml

View file

@ -21,13 +21,15 @@
package org.navalplanner.web.orders;
import java.util.List;
import java.util.Map;
import org.navalplanner.business.common.exceptions.ValidationException;
import org.navalplanner.business.labels.entities.Label;
import org.navalplanner.business.orders.entities.IOrderLineGroup;
import org.navalplanner.business.orders.entities.Order;
import org.navalplanner.business.orders.entities.OrderElement;
import org.navalplanner.business.planner.entities.TaskElement;
import org.navalplanner.business.resources.entities.Criterion;
import org.navalplanner.business.resources.entities.CriterionType;
/**
* Contract for {@link OrderModel}<br />
@ -53,6 +55,10 @@ public interface IOrderModel {
*
* @return
*/
List<Criterion> getCriterionsFor(CriterionType criterionType);
Map<CriterionType, List<Criterion>> getMapCriterions();
List<Label> getLabels();
IOrderLineGroup getOrder();

View file

@ -150,12 +150,12 @@ public class OrderElementController extends GenericForwardComposer {
for (HoursGroup hoursGroup : hoursGroups) {
String key = "";
for (CriterionType criterionType : criterionTypes) {
Criterion criterion = hoursGroup
.getCriterionByType(criterionType);
if (criterion != null) {
key += criterion.getName() + ";";
for (Criterion criterion : criterionType.getCriterions()) {
if(hoursGroup.getDirectCriterion(criterion) != null){
key += criterion.getName() + ";";
} else {
key += ";";
key += ";";
}
}
}
@ -165,8 +165,8 @@ public class OrderElementController extends GenericForwardComposer {
// aggregation that join HoursGroup with the same Criterions
hoursGroupAggregation = new HoursGroup();
hoursGroupAggregation.setWorkingHours(hoursGroup.getWorkingHours());
hoursGroupAggregation.setCriterions(hoursGroup
.getCriterions());
hoursGroupAggregation.setCriterionRequirements(
hoursGroup.getCriterionRequirements());
} else {
Integer newHours = hoursGroupAggregation.getWorkingHours() + hoursGroup.getWorkingHours();
hoursGroupAggregation.setWorkingHours(newHours);
@ -419,7 +419,10 @@ public class OrderElementController extends GenericForwardComposer {
private void removeCriterionsFromHoursGroup(CriterionType type) {
OrderElement orderElement = getOrderElement();
for (HoursGroup hoursGroup : orderElement.getHoursGroups()) {
hoursGroup.removeCriterionByType(type);
for (Criterion criterion : type.getCriterions()) {
hoursGroup
.removeDirectCriterionRequirement(criterion);
}
}
}
@ -433,9 +436,6 @@ public class OrderElementController extends GenericForwardComposer {
@Override
public void render(Listitem item, Object data) throws Exception {
final HoursGroup hoursGroup = (HoursGroup) data;
hoursGroup.getCriterions();
item.setValue(hoursGroup);
Listcell cellWorkingHours = new Listcell();
@ -495,8 +495,7 @@ public class OrderElementController extends GenericForwardComposer {
emptyListitem.setParent(criterionListbox);
// Get the Criterion of the current type in the HoursGroup
final Criterion criterionHoursGroup = hoursGroup
.getCriterionByType(criterionType);
final Criterion criterionHoursGroup = null;
// For each possible Criterion of the current type
for (Criterion criterion : model
@ -632,8 +631,7 @@ public class OrderElementController extends GenericForwardComposer {
emptyListitem.setParent(criterionListbox);
// Get the Criterion of the current type in the HoursGroup
final Criterion criterionHoursGroup = hoursGroup
.getCriterionByType(criterionType);
final Criterion criterionHoursGroup = null;
// For each possible Criterion of the current type
for (Criterion criterion : model
@ -662,11 +660,11 @@ public class OrderElementController extends GenericForwardComposer {
throws Exception {
Criterion criterion = (Criterion) criterionListbox
.getSelectedItem().getValue();
if (criterion == null) {
hoursGroup
.removeCriterion(criterionHoursGroup);
} else {
hoursGroup.addCriterion(criterion);
try {
hoursGroup.addDirectRequirementCriterion(criterion);
} catch (Exception e) {
// At moment it do nothing -- change
// with new interface.
}
}
});

View file

@ -103,6 +103,7 @@ public class OrderElementModel implements IOrderElementModel {
private void loadCriterionTypes() {
for (CriterionType criterionType : criterionTypeDAO.getCriterionTypes()) {
criterionType.getCriterions().size();
mapCriterionTypes.put(criterionType.getName(), criterionType);
}
}

View file

@ -135,6 +135,13 @@ public class OrderModel implements IOrderModel {
}
}
public Map<CriterionType, List<Criterion>> getMapCriterions(){
final Map<CriterionType, List<Criterion>> result =
new HashMap<CriterionType, List<Criterion>>();
result.putAll(mapCriterions);
return result;
}
@Override
@Transactional(readOnly = true)
public void prepareEditFor(Order order) {

View file

@ -59,6 +59,9 @@ import org.navalplanner.business.orders.entities.OrderLineGroup;
import org.navalplanner.business.planner.entities.Task;
import org.navalplanner.business.planner.entities.TaskElement;
import org.navalplanner.business.planner.entities.TaskGroup;
import org.navalplanner.business.requirements.entities.CriterionRequirement;
import org.navalplanner.business.requirements.entities.DirectCriterionRequirement;
import org.navalplanner.business.requirements.entities.IndirectCriterionRequirement;
import org.navalplanner.business.resources.daos.ICriterionTypeDAO;
import org.navalplanner.business.resources.entities.Criterion;
import org.navalplanner.business.resources.entities.CriterionType;
@ -382,37 +385,39 @@ public class OrderModelTest {
hoursGroup2.setWorkingHours(5);
orderLine.addHoursGroup(hoursGroup);
orderLine.addHoursGroup(hoursGroup2);
//orderLine.addHoursGroup(hoursGroup2);
hoursGroup.addCriterion(criterion);
hoursGroup2.addCriterion(criterion);
CriterionRequirement criterionRequirement =
DirectCriterionRequirement.create(criterion);
hoursGroup.addCriterionRequirement(criterionRequirement);
//hoursGroup2.addCriterionRequirement(criterionRequirement);
orderModel.setOrder(order);
orderModel.save();
adHocTransaction.runOnTransaction(new IOnTransaction<Void>() {
@Override
public Void execute() {
try {
sessionFactory.getCurrentSession().flush();
Order reloaded = orderDAO.find(order.getId());
List<OrderElement> orderElements = reloaded
.getOrderElements();
assertThat(orderElements.size(), equalTo(1));
List<HoursGroup> hoursGroups = orderElements.get(0)
.getHoursGroups();
assertThat(hoursGroups.size(), equalTo(2));
assertThat(hoursGroups.size(), equalTo(1));
Set<CriterionRequirement> criterionRequirements = hoursGroups.get(0)
.getCriterionRequirements();
assertThat(criterionRequirements.size(), equalTo(1));
Set<Criterion> criterions = hoursGroups.get(0)
.getCriterions();
assertThat(criterions.size(), equalTo(1));
Criterion criterion = criterions.iterator().next();
assertThat(criterion.getName(),
equalTo(OrderModelTest.this.criterion.getName()));
} catch (InstanceNotFoundException e) {
throw new RuntimeException(e);
}

View file

@ -54,6 +54,9 @@
<value>
org/navalplanner/business/labels/entities/Labels.hbm.xml
</value>
<value>
org/navalplanner/business/requirements/entities/Requirements.hbm.xml
</value>
</list>
</property>