ItEr30S14CUObtencionRequisitosEnProxectoTraballoItEr29S17: Refactoring to assign criterions required to orderElement.
This commit is contained in:
parent
e6fbd02e4b
commit
c1079eacc7
16 changed files with 575 additions and 78 deletions
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -413,8 +413,13 @@ public class OrderLine extends OrderElement {
|
|||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public void updateCriterionRequirements() {
|
||||
updateCriterionRequirements();
|
||||
for (HoursGroup hoursGroup : this.getHoursGroups()) {
|
||||
hoursGroup.updateCriterionRequirements();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
}
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue