|
From: <de...@us...> - 2016-10-21 14:42:14
|
Revision: 9447
http://sourceforge.net/p/fudaa/svn/9447
Author: deniger
Date: 2016-10-21 14:42:11 +0000 (Fri, 21 Oct 2016)
Log Message:
-----------
Utilisation de la notation diamond
Modified Paths:
--------------
trunk/soft/fudaa-crue/crue-emh/src/main/java/org/fudaa/dodico/crue/metier/helper/OrdCalcCloner.java
trunk/soft/fudaa-crue/crue-emh/src/test/java/org/fudaa/dodico/crue/metier/helper/OrdCalcClonerTest.java
trunk/soft/fudaa-crue/ui-modelling/src/main/java/org/fudaa/fudaa/crue/modelling/calcul/CalculNodeFactory.java
Modified: trunk/soft/fudaa-crue/crue-emh/src/main/java/org/fudaa/dodico/crue/metier/helper/OrdCalcCloner.java
===================================================================
--- trunk/soft/fudaa-crue/crue-emh/src/main/java/org/fudaa/dodico/crue/metier/helper/OrdCalcCloner.java 2016-10-21 09:28:45 UTC (rev 9446)
+++ trunk/soft/fudaa-crue/crue-emh/src/main/java/org/fudaa/dodico/crue/metier/helper/OrdCalcCloner.java 2016-10-21 14:42:11 UTC (rev 9447)
@@ -4,11 +4,14 @@
package org.fudaa.dodico.crue.metier.helper;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
+import java.util.logging.Level;
+import java.util.logging.Logger;
import org.fudaa.dodico.crue.common.transformer.TransformerHelper;
import org.fudaa.dodico.crue.metier.comparator.ObjetNommeByNameComparator;
import org.fudaa.dodico.crue.metier.emh.Calc;
@@ -16,6 +19,9 @@
import org.fudaa.dodico.crue.metier.emh.EMHScenario;
import org.fudaa.dodico.crue.metier.emh.OrdCalc;
import org.fudaa.dodico.crue.metier.emh.OrdCalcScenario;
+import org.fudaa.dodico.crue.metier.emh.ui.CalcOrdCalcUiState;
+import org.fudaa.dodico.crue.metier.emh.ui.OrdCalcScenarioUiState;
+import org.fudaa.dodico.crue.metier.etude.ManagerEMHScenario;
/**
*
@@ -25,21 +31,42 @@
public static class Result {
+ /**
+ * contient les ordre de calcul definit dans le scenario*
+ */
public List<OrdCalc> ordCalcs = new ArrayList<>();
+ /**
+ * contient les ordCalc definit dans le fichier ui ocal persistant les editions de l'utilisateur*
+ */
+ public List<OrdCalc> ordCalcsinUI = new ArrayList<>();
+ /**
+ * les calculs dans l ordre attendu.
+ */
public List<Calc> calcs = new ArrayList<>();
}
- public Result cloneAndSort(EMHScenario scenario) {
- return cloneOrdCalcAndCalc(scenario.getDonCLimMScenario(), scenario.getOrdCalcScenario());
+ public Result cloneAndSort(EMHScenario scenario, ManagerEMHScenario managerEMHScenario) {
+ return cloneOrdCalcAndCalc(scenario.getDonCLimMScenario(), scenario.getOrdCalcScenario(), managerEMHScenario.getUiOCalData());
}
- public Result cloneOrdCalcAndCalc(DonCLimMScenario dclm, OrdCalcScenario ocal) {
- Result res = new Result();
+ public Result cloneOrdCalcAndCalc(DonCLimMScenario dclm, OrdCalcScenario ocal, OrdCalcScenarioUiState uiOCalData) {
List<Calc> calcs = dclm.getCalc();
List<Calc> clonedCalcs = new ArrayList<>();
for (Calc calc : calcs) {
clonedCalcs.add(calc.deepClone());
}
+ Result res = null;
+ if (uiOCalData == null) {
+ res = sortCalcWithNoSavedUi(ocal, clonedCalcs);
+ } else {
+ res = sortCalcWithSavedUi(ocal, clonedCalcs, uiOCalData);
+ }
+ return res;
+
+ }
+
+ protected Result sortCalcWithNoSavedUi(OrdCalcScenario ocal, List<Calc> clonedCalcs) {
+ Result res = new Result();
Map<String, Calc> clonedCalcsByName = TransformerHelper.toMapOfNom(clonedCalcs);
List<OrdCalc> ordCalcs = ocal.getOrdCalc();
List<Calc> pseudoPermActivated = new ArrayList<>();
@@ -47,10 +74,10 @@
List<Calc> transActivated = new ArrayList<>();
List<Calc> transNonActivated = new ArrayList<>();
- Set<String> actifCalc = new HashSet<>();
+ Set<String> namesOfActiveCalcul = new HashSet<>();
for (OrdCalc ordCalc : ordCalcs) {
String calcName = ordCalc.getCalc().getNom();
- actifCalc.add(calcName);
+ namesOfActiveCalcul.add(calcName);
final Calc calc = clonedCalcsByName.get(calcName);
res.ordCalcs.add(ordCalc.deepCloneButNotCalc(calc));
if (ordCalc.isPseudoPermanent()) {
@@ -60,7 +87,7 @@
}
}
for (Calc calc : clonedCalcs) {
- if (!actifCalc.contains(calc.getNom())) {
+ if (!namesOfActiveCalcul.contains(calc.getNom())) {
if (calc.isPermanent()) {
pseudoPermNonActivated.add(calc);
} else {
@@ -78,4 +105,59 @@
res.calcs.addAll(transNonActivated);
return res;
}
+
+ protected Result sortCalcWithSavedUi(OrdCalcScenario ocal, List<Calc> clonedCalcs, OrdCalcScenarioUiState uiOCalData) {
+ Result res = new Result();
+ Map<String, Calc> clonedCalcsByName = TransformerHelper.toMapOfNom(clonedCalcs);
+ final List<String> calcNameInOrder = uiOCalData.getCalcNameInOrder();
+ boolean isCoherent = isUiSavedCalcAccordingToCalcs(clonedCalcs, calcNameInOrder);
+ if (!isCoherent) {
+ Logger.getLogger(OrdCalcCloner.class.getName()).log(Level.WARNING, "The ocal ui file is not coherent with the ocal data");
+ return sortCalcWithNoSavedUi(ocal, clonedCalcs);
+ }
+ List<OrdCalc> ordCalcsInScenario = ocal.getOrdCalc();
+ Set<String> namesOfActiveCalcul = new HashSet<>();
+ for (OrdCalc ordCalc : ordCalcsInScenario) {
+ String calcName = ordCalc.getCalc().getNom();
+ namesOfActiveCalcul.add(calcName);
+ final Calc calc = clonedCalcsByName.get(calcName);
+ res.ordCalcs.add(ordCalc.deepCloneButNotCalc(calc));
+ }
+ final List<CalcOrdCalcUiState> uiStates = uiOCalData.getUiStates();
+ for (CalcOrdCalcUiState uiState : uiStates) {
+ final String calcName = uiState.getCalcId();
+ if (!namesOfActiveCalcul.contains(calcName)) {
+ final OrdCalc ordCalcSaved = uiState.getOrdCalc();
+ final Calc calc = clonedCalcsByName.get(calcName);
+ assert calc != null : "uiOrdCalc: should not be null as the method isUiSavedCalcAccordingToCalcs should have tested it";
+ res.ordCalcsinUI.add(ordCalcSaved.deepCloneButNotCalc(calc));
+ }
+ }
+ for (String calcName : calcNameInOrder) {
+ final Calc calc = clonedCalcsByName.get(calcName);
+ assert calc != null : "should not be null as the method isUiSavedCalcAccordingToCalcs should have tested it";
+ res.calcs.add(calc);
+ }
+ return res;
+ }
+
+ /**
+ *
+ * @param clonedCalcs la liste des calculs presents dans l'etude
+ * @param calcNameInOrder la liste des calculs presents dans le fichier ui-ocal permettant de persister les editions de l'utilisateur
+ * @return true si les 2 données sont coherentes et si on peut les utiliser.
+ */
+ protected boolean isUiSavedCalcAccordingToCalcs(Collection<Calc> clonedCalcs, final Collection<String> calcNameInOrder) {
+ //on va d'abord voir si le tout est cohérent:
+ Map<String, Calc> clonedCalcsByName = TransformerHelper.toMapOfNom(clonedCalcs);
+ if (clonedCalcs.size() == calcNameInOrder.size()) {
+ for (String string : calcNameInOrder) {
+ if (!clonedCalcsByName.containsKey(string)) {
+ return false;
+ }
+ }
+ return true;
+ }
+ return false;
+ }
}
Modified: trunk/soft/fudaa-crue/crue-emh/src/test/java/org/fudaa/dodico/crue/metier/helper/OrdCalcClonerTest.java
===================================================================
--- trunk/soft/fudaa-crue/crue-emh/src/test/java/org/fudaa/dodico/crue/metier/helper/OrdCalcClonerTest.java 2016-10-21 09:28:45 UTC (rev 9446)
+++ trunk/soft/fudaa-crue/crue-emh/src/test/java/org/fudaa/dodico/crue/metier/helper/OrdCalcClonerTest.java 2016-10-21 14:42:11 UTC (rev 9447)
@@ -3,12 +3,19 @@
*/
package org.fudaa.dodico.crue.metier.helper;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.List;
import org.fudaa.dodico.crue.config.ccm.CrueConfigMetierLoaderDefaultTest;
+import org.fudaa.dodico.crue.metier.emh.Calc;
import org.fudaa.dodico.crue.metier.emh.CalcPseudoPerm;
import org.fudaa.dodico.crue.metier.emh.CalcPseudoPermBrancheOrificeManoeuvre;
import org.fudaa.dodico.crue.metier.emh.DonCLimMScenario;
import org.fudaa.dodico.crue.metier.emh.OrdCalcPseudoPermIniCalcCI;
+import org.fudaa.dodico.crue.metier.emh.OrdCalcPseudoPermIniCalcPrecedent;
import org.fudaa.dodico.crue.metier.emh.OrdCalcScenario;
+import org.fudaa.dodico.crue.metier.emh.ui.OrdCalcScenarioUiState;
import org.fudaa.dodico.crue.metier.helper.OrdCalcCloner.Result;
import static org.junit.Assert.*;
import org.junit.Test;
@@ -27,18 +34,96 @@
DonCLimMScenario dclm = new DonCLimMScenario();
OrdCalcScenario ocal = new OrdCalcScenario();
CalcPseudoPerm pseudo = new CalcPseudoPerm();
- final CalcPseudoPermBrancheOrificeManoeuvre calcPseudoPermBrancheOrificeManoeuvre = new CalcPseudoPermBrancheOrificeManoeuvre(CrueConfigMetierLoaderDefaultTest.DEFAULT);
+ final CalcPseudoPermBrancheOrificeManoeuvre calcPseudoPermBrancheOrificeManoeuvre = new CalcPseudoPermBrancheOrificeManoeuvre(
+ CrueConfigMetierLoaderDefaultTest.DEFAULT);
pseudo.addCalcPseudoPermBrancheOrificeManoeuvre(calcPseudoPermBrancheOrificeManoeuvre);
OrdCalcPseudoPermIniCalcCI ci = new OrdCalcPseudoPermIniCalcCI();
ci.setCalcPseudoPerm(pseudo);
dclm.addCalcPseudoPerm(pseudo);
ocal.addOrdCalc(ci);
OrdCalcCloner cloner = new OrdCalcCloner();
- Result cloneOrdCalcAndCalc = cloner.cloneOrdCalcAndCalc(dclm, ocal);
+ Result cloneOrdCalcAndCalc = cloner.cloneOrdCalcAndCalc(dclm, ocal, null);
assertEquals(1, cloneOrdCalcAndCalc.calcs.size());
assertEquals(1, cloneOrdCalcAndCalc.ordCalcs.size());
assertTrue(cloneOrdCalcAndCalc.calcs.get(0) == cloneOrdCalcAndCalc.ordCalcs.get(0).getCalc());
assertFalse(cloneOrdCalcAndCalc.calcs.get(0) == pseudo);
assertFalse(cloneOrdCalcAndCalc.ordCalcs.get(0) == ci);
}
+
+ @Test
+ public void testCloneOrdCalcAndCalcUI() {
+ DonCLimMScenario dclm = new DonCLimMScenario();
+ OrdCalcScenario ocal = new OrdCalcScenario();
+ CalcPseudoPerm pseudo = new CalcPseudoPerm();
+ pseudo.setNom("CC_P1");
+ final CalcPseudoPermBrancheOrificeManoeuvre calcPseudoPermBrancheOrificeManoeuvre = new CalcPseudoPermBrancheOrificeManoeuvre(
+ CrueConfigMetierLoaderDefaultTest.DEFAULT);
+ pseudo.addCalcPseudoPermBrancheOrificeManoeuvre(calcPseudoPermBrancheOrificeManoeuvre);
+ OrdCalcPseudoPermIniCalcCI ordCalc = new OrdCalcPseudoPermIniCalcCI();
+ ordCalc.setCalcPseudoPerm(pseudo);
+ dclm.addCalcPseudoPerm(pseudo);
+ ocal.addOrdCalc(ordCalc);
+
+ CalcPseudoPerm pseudo2 = new CalcPseudoPerm();
+ pseudo2.setNom("CC_P2");
+ dclm.addCalcPseudoPerm(pseudo2);
+
+
+ OrdCalcScenarioUiState ui = new OrdCalcScenarioUiState();
+ //ici dans l'ordre on inverse les calcul
+ ui.addCalcOrdCalcUiStates("CC_P2", new OrdCalcPseudoPermIniCalcPrecedent());
+ ui.addCalcOrdCalcUiStates("CC_P1", new OrdCalcPseudoPermIniCalcPrecedent());
+ //donc
+ int idxCCP2 = 0;
+ int idxCCP1 = 1;
+
+ OrdCalcCloner cloner = new OrdCalcCloner();
+ Result cloneOrdCalcAndCalc = cloner.cloneOrdCalcAndCalc(dclm, ocal, ui);
+ //test des calculs:
+ assertEquals(2, cloneOrdCalcAndCalc.calcs.size());
+ //attention l'ordre est inversion
+ assertTrue(cloneOrdCalcAndCalc.calcs.get(idxCCP2) == cloneOrdCalcAndCalc.ordCalcsinUI.get(0).getCalc());
+ assertFalse(cloneOrdCalcAndCalc.calcs.get(idxCCP2) == pseudo2);
+
+ assertTrue(cloneOrdCalcAndCalc.calcs.get(idxCCP1) == cloneOrdCalcAndCalc.ordCalcs.get(0).getCalc());
+ assertFalse(cloneOrdCalcAndCalc.calcs.get(idxCCP1) == pseudo);
+
+ //les ordres de calcul
+ assertEquals(1, cloneOrdCalcAndCalc.ordCalcs.size());
+ assertEquals("CC_P1", cloneOrdCalcAndCalc.ordCalcs.get(0).getCalc().getId());
+ assertTrue(cloneOrdCalcAndCalc.ordCalcs.get(0) instanceof OrdCalcPseudoPermIniCalcCI);
+ assertFalse(cloneOrdCalcAndCalc.ordCalcs.get(0) == ordCalc);
+ //les ordres de calcul UI
+ assertEquals(1, cloneOrdCalcAndCalc.ordCalcsinUI.size());
+ assertEquals("CC_P2", cloneOrdCalcAndCalc.ordCalcsinUI.get(0).getCalc().getId());
+ assertTrue(cloneOrdCalcAndCalc.ordCalcsinUI.get(0) instanceof OrdCalcPseudoPermIniCalcPrecedent);
+
+ }
+
+ @Test
+ public void testIsUiSavedCalcAccordingToCalcs() {
+ OrdCalcCloner cloner = new OrdCalcCloner();
+ List<String> calcInOrder = Arrays.asList("CC_P1", "CC_P2");
+ Collection<Calc> calcs = createCalcs("CC_P1");
+ assertFalse(cloner.isUiSavedCalcAccordingToCalcs(calcs, calcInOrder));
+ calcs = createCalcs("CC_P1", "CC_P2");
+ assertTrue(cloner.isUiSavedCalcAccordingToCalcs(calcs, calcInOrder));
+ calcs = createCalcs("CC_P1", "CC_P3");
+ assertFalse(cloner.isUiSavedCalcAccordingToCalcs(calcs, calcInOrder));
+ }
+
+ private static Calc createCalc(String id) {
+ CalcPseudoPerm res = new CalcPseudoPerm();
+ res.setNom(id);
+ return res;
+ }
+
+ private static Collection<Calc> createCalcs(String... ids) {
+ List<Calc> calcs = new ArrayList<>();
+ for (String id : ids) {
+ calcs.add(createCalc(id));
+ }
+ return calcs;
+ }
+
}
Modified: trunk/soft/fudaa-crue/ui-modelling/src/main/java/org/fudaa/fudaa/crue/modelling/calcul/CalculNodeFactory.java
===================================================================
--- trunk/soft/fudaa-crue/ui-modelling/src/main/java/org/fudaa/fudaa/crue/modelling/calcul/CalculNodeFactory.java 2016-10-21 09:28:45 UTC (rev 9446)
+++ trunk/soft/fudaa-crue/ui-modelling/src/main/java/org/fudaa/fudaa/crue/modelling/calcul/CalculNodeFactory.java 2016-10-21 14:42:11 UTC (rev 9447)
@@ -47,6 +47,12 @@
private final DonLoiHYConteneur donLoiHYConteneurCloned;
private final Map<String, Loi> clonedLoisByName;
+ public CalculNodeFactory(OutlineView outlineView) {
+ this.outlineView = outlineView;
+ donLoiHYConteneurCloned = (DonLoiHYConteneur) outlineView.getClientProperty(DonLoiHYConteneur.class);
+ clonedLoisByName = TransformerHelper.toMapOfNom(donLoiHYConteneurCloned.getLois());
+ }
+
protected Children createChildren(Calc calc, Map<Calc, OrdCalc> ordCalcByCalcs, DonLoiHYConteneur donLoiHYConteneur) {
List<Node> nodes = new ArrayList<>();
List<DonCLimM> listeDCLM = calc.getlisteDCLM();
@@ -68,19 +74,14 @@
return NodeHelper.createArray(nodes);
}
- public CalculNodeFactory(OutlineView outlineView) {
- this.outlineView = outlineView;
- donLoiHYConteneurCloned = (DonLoiHYConteneur) outlineView.getClientProperty(DonLoiHYConteneur.class);
- clonedLoisByName = TransformerHelper.toMapOfNom(donLoiHYConteneurCloned.getLois());
- }
-
public List<CalculNode> createNodes() {
if (modellingScenarioService.getScenarioLoaded() == null) {
return Collections.emptyList();
}
List<CalculNode> nodes = new ArrayList<>();
OrdCalcCloner cloner = new OrdCalcCloner();
- Result cloneOrdCalcAndCalc = cloner.cloneAndSort(modellingScenarioService.getScenarioLoaded());
+ Result cloneOrdCalcAndCalc = cloner.
+ cloneAndSort(modellingScenarioService.getScenarioLoaded(), modellingScenarioService.getManagerScenarioLoaded());
final Map<Calc, OrdCalc> ordCalcByCalc = CalcHelper.getOrdCalcByCalc(cloneOrdCalcAndCalc.ordCalcs);
//TODO trier les calculs ici:
final CrueConfigMetier ccm = modellingScenarioService.getSelectedProjet().getPropDefinition();
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|