package module.mission.domain; import java.util.ArrayList; import java.util.List; import jvstm.cps.ConsistencyPredicate; import org.fenixedu.bennu.core.domain.Bennu; import pt.ist.expenditureTrackingSystem._development.Bundle; import pt.ist.expenditureTrackingSystem.domain.util.DomainException; import pt.ist.fenixframework.dml.runtime.Relation; import pt.ist.fenixframework.dml.runtime.RelationAdapter; public class MissionProcessAssociation extends MissionProcessAssociation_Base { static { MissionProcess.getRelationMissionProcessAssociationMissionProcess().addListener( new RelationAdapter<MissionProcess, MissionProcessAssociation>() { @Override public void afterAdd(Relation<MissionProcess, MissionProcessAssociation> relation, MissionProcess process, MissionProcessAssociation association) { if (!association.checkHasNoRepeatedMissionSystems()) { throw new DomainException(Bundle.MISSION, "error.cannot.associate.MissionProcesses.from.same.system"); } } }); MissionProcess.getRelationMissionProcessAssociationMissionProcess().addListener( new RelationAdapter<MissionProcess, MissionProcessAssociation>() { @Override public void afterAdd(Relation<MissionProcess, MissionProcessAssociation> relation, MissionProcess process, MissionProcessAssociation association) { if (!association.checkAllMissionProcessesOfSameType()) { throw new DomainException(Bundle.MISSION, "error.cannot.associate.MissionProcesses.of.diferent.types"); } } }); } public MissionProcessAssociation() { super(); } public MissionProcessAssociation(MissionProcess... missionProcesses) { this(); setBennu(Bennu.getInstance()); for (MissionProcess process : missionProcesses) { addMissionProcesses(process); } } @ConsistencyPredicate public boolean checkHasAtLeastTwoMissionProcesses() { return getMissionProcessesSet().size() >= 2; } @ConsistencyPredicate public boolean checkHasMyOrg() { return hasMyOrg(); } //@ConsistencyPredicate public boolean checkHasNoRepeatedMissionSystems() { List<MissionSystem> systemsFound = new ArrayList<MissionSystem>(); for (MissionProcess process : getMissionProcessesSet()) { if (systemsFound.contains(process.getMissionSystem())) { return false; } systemsFound.add(process.getMissionSystem()); } return true; } //@ConsistencyPredicate public boolean checkAllMissionProcessesOfSameType() { Boolean isGrantOwnerType = getMissionProcessesSet().iterator().next().getMission().getGrantOwnerEquivalence(); for (MissionProcess process : getMissionProcessesSet()) { if (!process.getMission().getGrantOwnerEquivalence().equals(isGrantOwnerType)) { return false; } } return true; } public void delete() { for (MissionProcess process : getMissionProcessesSet()) { removeMissionProcesses(process); } setBennu(null); deleteDomainObject(); } @Deprecated public java.util.Set<module.mission.domain.MissionProcess> getMissionProcesses() { return getMissionProcessesSet(); } @Deprecated public boolean hasAnyMissionProcesses() { return !getMissionProcessesSet().isEmpty(); } @Deprecated public boolean hasMyOrg() { return getBennu() != null; } }