|
From: <de...@us...> - 2012-10-08 20:22:18
|
Revision: 7727
http://fudaa.svn.sourceforge.net/fudaa/?rev=7727&view=rev
Author: deniger
Date: 2012-10-08 20:22:12 +0000 (Mon, 08 Oct 2012)
Log Message:
-----------
CRUE-306
Modified Paths:
--------------
trunk/soft/fudaa-crue/crue-server/src/main/java/org/fudaa/dodico/crue/metier/helper/LitNommeIndexed.java
trunk/soft/fudaa-crue/crue-server/src/main/java/org/fudaa/dodico/crue/metier/helper/LitNumeroteIndex.java
trunk/soft/fudaa-crue/crue-server/src/main/java/org/fudaa/dodico/crue/validation/ValidateAndRebuildProfilSection.java
trunk/soft/fudaa-crue/crue-server/src/test/java/org/fudaa/dodico/crue/metier/helper/LitNumeroteIndexTest.java
trunk/soft/fudaa-crue/crue-server/src/test/java/org/fudaa/dodico/crue/validation/ValidateAndRebuildProfilSectionTest.java
trunk/soft/fudaa-crue/crue-server/src/test/resources/crue9/201.dc
Added Paths:
-----------
trunk/soft/fudaa-crue/crue-server/src/main/java/org/fudaa/dodico/crue/metier/helper/LitNumeroteIndexComparator.java
Modified: trunk/soft/fudaa-crue/crue-server/src/main/java/org/fudaa/dodico/crue/metier/helper/LitNommeIndexed.java
===================================================================
--- trunk/soft/fudaa-crue/crue-server/src/main/java/org/fudaa/dodico/crue/metier/helper/LitNommeIndexed.java 2012-10-08 19:31:50 UTC (rev 7726)
+++ trunk/soft/fudaa-crue/crue-server/src/main/java/org/fudaa/dodico/crue/metier/helper/LitNommeIndexed.java 2012-10-08 20:22:12 UTC (rev 7727)
@@ -23,17 +23,28 @@
public LitNommeIndexed(LitNomme litNomme) {
this.litNomme = litNomme;
}
-
- public boolean contains(int position){
- return position>=getFirstIdx() && position<=getlastIdx();
+
+ public boolean contains(int position) {
+ return position >= getFirstIdx() && position <= getlastIdx();
}
public List<LitNumeroteIndex> getLitNumerotes() {
return Collections.unmodifiableList(litNumerotes);
}
-
-
+ /**
+ * elimination des lits numerotes vides: le premier est conservé.
+ */
+ public void cleanEmptyLitNumerote() {
+ if (litNumerotes.size() > 0) {
+ for (int i = litNumerotes.size() - 1; i >= 0; i--) {//on part de la fin pour éventuellement le premier lit numerote.
+ if (litNumerotes.get(i).isEmpty() && litNumerotes.size() > 1) {
+ litNumerotes.remove(i);
+ }
+ }
+ }
+ }
+
public int getFirstIdx() {
return litNumerotes.get(0).getIdxStart();
}
Modified: trunk/soft/fudaa-crue/crue-server/src/main/java/org/fudaa/dodico/crue/metier/helper/LitNumeroteIndex.java
===================================================================
--- trunk/soft/fudaa-crue/crue-server/src/main/java/org/fudaa/dodico/crue/metier/helper/LitNumeroteIndex.java 2012-10-08 19:31:50 UTC (rev 7726)
+++ trunk/soft/fudaa-crue/crue-server/src/main/java/org/fudaa/dodico/crue/metier/helper/LitNumeroteIndex.java 2012-10-08 20:22:12 UTC (rev 7727)
@@ -17,6 +17,9 @@
int idxStart;
int idxEnd;
+ public LitNumeroteIndex() {
+ }
+
public int getIdxEnd() {
return idxEnd;
}
@@ -100,9 +103,9 @@
}
/**
- *
+ *
* @param position
- * @return true si idxStart <= postion <= idxEnd
+ * @return true si idxStart <= postion <= idxEnd
*/
public boolean contains(int position) {
return position >= getIdxStart() && position <= getIdxEnd();
Added: trunk/soft/fudaa-crue/crue-server/src/main/java/org/fudaa/dodico/crue/metier/helper/LitNumeroteIndexComparator.java
===================================================================
--- trunk/soft/fudaa-crue/crue-server/src/main/java/org/fudaa/dodico/crue/metier/helper/LitNumeroteIndexComparator.java (rev 0)
+++ trunk/soft/fudaa-crue/crue-server/src/main/java/org/fudaa/dodico/crue/metier/helper/LitNumeroteIndexComparator.java 2012-10-08 20:22:12 UTC (rev 7727)
@@ -0,0 +1,34 @@
+/*
+ GPL 2
+ */
+package org.fudaa.dodico.crue.metier.helper;
+
+import gnu.trove.TObjectIntHashMap;
+import java.util.List;
+import org.fudaa.dodico.crue.common.SafeComparator;
+
+/**
+ *
+ * @author Frederic Deniger
+ */
+public class LitNumeroteIndexComparator extends SafeComparator<LitNumeroteIndex> {
+
+ TObjectIntHashMap<LitNumeroteIndex> positions = new TObjectIntHashMap<LitNumeroteIndex>();
+
+ public LitNumeroteIndexComparator(List<LitNumeroteIndex> list) {
+ for (int i = 0; i < list.size(); i++) {
+ LitNumeroteIndex litNumeroteIndex = list.get(i);
+ positions.put(litNumeroteIndex, i);
+
+ }
+ }
+
+ @Override
+ protected int compareSafe(LitNumeroteIndex o1, LitNumeroteIndex o2) {
+ int compareTo = o1.compareTo(o2);
+ if (compareTo == 0 && o1 != o2) {
+ compareTo = positions.get(o1) - positions.get(o2);
+ }
+ return compareTo;
+ }
+}
Modified: trunk/soft/fudaa-crue/crue-server/src/main/java/org/fudaa/dodico/crue/validation/ValidateAndRebuildProfilSection.java
===================================================================
--- trunk/soft/fudaa-crue/crue-server/src/main/java/org/fudaa/dodico/crue/validation/ValidateAndRebuildProfilSection.java 2012-10-08 19:31:50 UTC (rev 7726)
+++ trunk/soft/fudaa-crue/crue-server/src/main/java/org/fudaa/dodico/crue/validation/ValidateAndRebuildProfilSection.java 2012-10-08 20:22:12 UTC (rev 7727)
@@ -35,6 +35,7 @@
import org.fudaa.dodico.crue.metier.helper.EtiquetteIndexed;
import org.fudaa.dodico.crue.metier.helper.LitNommeIndexed;
import org.fudaa.dodico.crue.metier.helper.LitNumeroteIndex;
+import org.fudaa.dodico.crue.metier.helper.LitNumeroteIndexComparator;
import org.fudaa.dodico.crue.metier.transformer.EnumToString;
/**
@@ -209,7 +210,7 @@
if (res.containsSevereError()) {
return res;
}
- Collections.sort(litNumeroteIndexed);
+ Collections.sort(litNumeroteIndexed, new LitNumeroteIndexComparator(litNumeroteIndexed));
rebuildLits(section, litNumeroteIndexed, res, parent);
//on valide les frottements:
validateFrottement(section, res);
@@ -221,20 +222,20 @@
*/
Map<String, DonFrt> emptyDonFrtBySousModeleName = new HashMap<String, DonFrt>();
- private LitNumeroteIndex createNewLitNumerote(final DonPrtGeoProfilSection section, int idx, LitNommeIndexed lit, int i,
+ private LitNumeroteIndex createNewLitNumerote(final DonPrtGeoProfilSection section, int ptProfilIdx, LitNommeIndexed lit, int idForLitNomme,
CtuluLog log, EMHSousModele parent) {
List<PtProfil> ptProfil = section.getPtProfil();
LitNumerote litNumerote = new LitNumerote();
DonFrt donFrt = findEmptyDonFrt(log, lit.getLitNomme().getNom(), parent);
litNumerote.setFrot(donFrt);
- litNumerote.setLimDeb(ptProfil.get(idx));
- litNumerote.setLimFin(ptProfil.get(idx));
+ litNumerote.setLimDeb(ptProfil.get(ptProfilIdx));
+ litNumerote.setLimFin(ptProfil.get(ptProfilIdx));
litNumerote.setNomLit(lit.getLitNomme());
- litNumerote.setIsLitActif(i == CrueConfigMetierLitNomme.MAJEUR_END || i == CrueConfigMetierLitNomme.MAJEUR_START);
+ litNumerote.setIsLitActif(idForLitNomme == CrueConfigMetierLitNomme.MAJEUR_END || idForLitNomme == CrueConfigMetierLitNomme.MAJEUR_START);
LitNumeroteIndex index = new LitNumeroteIndex();
index.setLitNumerote(litNumerote);
- index.setIdxEnd(idx);
- index.setIdxStart(idx);
+ index.setIdxEnd(ptProfilIdx);
+ index.setIdxStart(ptProfilIdx);
lit.addLitNumerote(index);
return index;
}
@@ -286,6 +287,11 @@
if (res.containsSevereError()) {
return false;
}
+ //nettoyage des lit numerotes vides: un lit numerote vide est utile que si c'est le seul lit d'un lit nommé.
+ for (LitNommeIndexed litNommeIndexed : litNommeIndexeds) {
+ litNommeIndexed.cleanEmptyLitNumerote();
+ }
+
int litMineur = CrueConfigMetierLitNomme.MINEUR;
//on part du lit mineur pour construire eventuellement les nouveaux Litnumerotes
for (int i = litMineur + 1; i < litNommeIndexeds.size(); i++) {
Modified: trunk/soft/fudaa-crue/crue-server/src/test/java/org/fudaa/dodico/crue/metier/helper/LitNumeroteIndexTest.java
===================================================================
--- trunk/soft/fudaa-crue/crue-server/src/test/java/org/fudaa/dodico/crue/metier/helper/LitNumeroteIndexTest.java 2012-10-08 19:31:50 UTC (rev 7726)
+++ trunk/soft/fudaa-crue/crue-server/src/test/java/org/fudaa/dodico/crue/metier/helper/LitNumeroteIndexTest.java 2012-10-08 20:22:12 UTC (rev 7727)
@@ -32,7 +32,6 @@
public void tearDown() {
}
-
/**
* Test of isEmpty method, of class LitNumeroteIndex.
*/
@@ -112,8 +111,10 @@
LitNumeroteIndex o = new LitNumeroteIndex();
o.setIdxStart(4);
o.setIdxEnd(7);
- assertTrue( instance.compareTo(o)<0);
- assertTrue(o.compareTo(instance)>0);
+ assertTrue(instance.compareTo(o) < 0);
+ assertTrue(o.compareTo(instance) > 0);
assertEquals(0, o.compareTo(o));
+
+
}
}
Modified: trunk/soft/fudaa-crue/crue-server/src/test/java/org/fudaa/dodico/crue/validation/ValidateAndRebuildProfilSectionTest.java
===================================================================
--- trunk/soft/fudaa-crue/crue-server/src/test/java/org/fudaa/dodico/crue/validation/ValidateAndRebuildProfilSectionTest.java 2012-10-08 19:31:50 UTC (rev 7726)
+++ trunk/soft/fudaa-crue/crue-server/src/test/java/org/fudaa/dodico/crue/validation/ValidateAndRebuildProfilSectionTest.java 2012-10-08 20:22:12 UTC (rev 7727)
@@ -32,8 +32,23 @@
*/
public class ValidateAndRebuildProfilSectionTest extends AbstractTestCase {
+ public void testRebuildOn201Profil4() {
+ EMHSectionProfil section = getSectionProfil3();
+ DonPrtGeoProfilSection profilSection = DonPrtHelper.getProfilSection(section);
+ List<LitNumerote> litNumerotes = profilSection.getLitNumerote();
+ assertEquals(5, litNumerotes.size());
+ int nbSto = 2;
+ int i = 0;
+ for (i = 0; i < nbSto; i++) {
+ assertEquals("Fk_K0", litNumerotes.get(i).getFrot().getNom());
+ }
+ assertEquals("Fk_PROF3BMIN", litNumerotes.get(i++).getFrot().getNom());
+ for (; i < litNumerotes.size(); i++) {
+ assertEquals("Fk_K0", litNumerotes.get(i).getFrot().getNom());
+ }
+ }
+
public void testRebuildOn201() {
-
EMHSectionProfil section = getSectionProfil();
DonPrtGeoProfilSection profilSection = DonPrtHelper.getProfilSection(section);
assertNotNull(profilSection);
@@ -107,6 +122,14 @@
}
protected EMHSectionProfil getSectionProfil() {
+ return getSectionProfil("St_PROF1");
+ }
+
+ protected EMHSectionProfil getSectionProfil3() {
+ return getSectionProfil("St_PROF2");
+ }
+
+ private EMHSectionProfil getSectionProfil(final String sectionName) {
CtuluLog log = new CtuluLog();
CrueIOResu<CrueData> read = ReadHelper.readModeleAndDefaultORES(log, "/crue9/201.dc", "/crue9/201.dh");
assertFalse(log.containsErrorOrSevereError());
@@ -116,7 +139,7 @@
new ValidateAndRebuildProfilSection(CrueConfigMetierLoaderDefaultTest.DEFAULT, modifiedState).validateScenario(scenario);
assertTrue(modifiedState.isProfilModified());
Map<String, CatEMHSection> toMapOfNom = TransformerHelper.toMapOfNom(scenario.getSections());
- EMHSectionProfil section = (EMHSectionProfil) toMapOfNom.get("St_PROF1");
+ EMHSectionProfil section = (EMHSectionProfil) toMapOfNom.get(sectionName);
return section;
}
}
Modified: trunk/soft/fudaa-crue/crue-server/src/test/resources/crue9/201.dc
===================================================================
--- trunk/soft/fudaa-crue/crue-server/src/test/resources/crue9/201.dc 2012-10-08 19:31:50 UTC (rev 7726)
+++ trunk/soft/fudaa-crue/crue-server/src/test/resources/crue9/201.dc 2012-10-08 20:22:12 UTC (rev 7727)
@@ -80,14 +80,13 @@
* 3 lits, 1 actif, pas de lit nomm�
* On doit aboutir � 5 lits, 3 actifs, 1 mineur, 5 lits nomm�s
PROFIL St_PROF2
-FENTE 0.05 10.0
-LIMITEJ 1 3 8 10
-STRIC Fk_K0 Fk_PROF2MIN Fk_K0
-X/Z 0.0 5.4 2.0 4.4 32.0 3.4
-X/Z 62.0 2.4 66.0 0.4 86.0 0.4
-X/Z 90.0 2.4 120.0 3.4 150.0 4.4
-X/Z 152.0 5.4
-ACTIF 2
+LIMITEJ 1 1 1 10 10 10
+STRIC FkSto_K0 Fk_PROF3BMAJ Fk_PROF3BMIN Fk_PROF3BMAJ FkSto_K0
+X/Z 0.0 5.3 2.0 4.3 32.0 3.3
+X/Z 62.0 2.3 66.0 0.3 86.0 0.3
+X/Z 90.0 2.3 120.0 3.3 150.0 4.3
+X/Z 152.0 5.3
+ACTIF 1 2 3 4 5
*
* 5 lits, 3 actifs, un lit nomm� "mineur"
* On doit aboutir � 5 lits, 3 actifs, 1 mineur, 5 lits nomm�s
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|