|
From: <de...@us...> - 2010-03-04 23:48:36
|
Revision: 5703
http://fudaa.svn.sourceforge.net/fudaa/?rev=5703&view=rev
Author: deniger
Date: 2010-03-04 23:48:28 +0000 (Thu, 04 Mar 2010)
Log Message:
-----------
Modified Paths:
--------------
trunk/soft/fudaa-crue/dodico/src/main/java/org/fudaa/dodico/crue/io/neuf/DHReader.java
trunk/soft/fudaa-crue/dodico/src/main/java/org/fudaa/dodico/crue/io/neuf/DHWriter.java
trunk/soft/fudaa-crue/dodico/src/main/java/org/fudaa/dodico/crue/io/neuf/STOReader.java
trunk/soft/fudaa-crue/dodico/src/main/java/org/fudaa/dodico/crue/metier/emh/ElemPdt.java
trunk/soft/fudaa-crue/dodico/src/main/java/org/fudaa/dodico/crue/metier/emh/OrdCalc.java
trunk/soft/fudaa-crue/dodico/src/main/java/org/fudaa/dodico/crue/metier/helper/EMHHelper.java
trunk/soft/fudaa-crue/dodico/src/main/java/org/fudaa/dodico/crue/metier/helper/EMHHelperPredicate.java
trunk/soft/fudaa-crue/dodico/src/main/java/org/fudaa/dodico/crue/projet/ScenarioLoaderCrue9.java
trunk/soft/fudaa-crue/dodico/src/main/java/org/fudaa/dodico/crue/validation/ValidateEMHProperties.java
trunk/soft/fudaa-crue/dodico/src/main/resources/org/fudaa/dodico/crue/common/commonMessages.properties
trunk/soft/fudaa-crue/dodico/src/main/resources/org/fudaa/dodico/crue/io/ioMessages.properties
trunk/soft/fudaa-crue/dodico/src/main/resources/xsd/frag-dcsp-1.0.0.xsd
trunk/soft/fudaa-crue/fudaa/src/main/java/org/fudaa/fudaa/crue/builder/EMHManagerBuilder.java
trunk/soft/fudaa-crue/fudaa/src/main/java/org/fudaa/fudaa/crue/common/CommonGuiLib.java
trunk/soft/fudaa-crue/fudaa/src/main/java/org/fudaa/fudaa/crue/explorer/CrueLauncher.java
Added Paths:
-----------
trunk/soft/fudaa-crue/dodico/src/main/java/org/fudaa/dodico/crue/validation/ContentEMHValidator.java
trunk/soft/fudaa-crue/dodico/src/main/java/org/fudaa/dodico/crue/validation/Crue9Validator.java
trunk/soft/fudaa-crue/dodico/src/main/java/org/fudaa/dodico/crue/validation/IdValidatorForCrue10.java
trunk/soft/fudaa-crue/dodico/src/main/java/org/fudaa/dodico/crue/validation/IdValidatorForCrue9.java
trunk/soft/fudaa-crue/dodico/src/main/java/org/fudaa/dodico/crue/validation/ValueValidator.java
Modified: trunk/soft/fudaa-crue/dodico/src/main/java/org/fudaa/dodico/crue/io/neuf/DHReader.java
===================================================================
--- trunk/soft/fudaa-crue/dodico/src/main/java/org/fudaa/dodico/crue/io/neuf/DHReader.java 2010-03-01 22:40:16 UTC (rev 5702)
+++ trunk/soft/fudaa-crue/dodico/src/main/java/org/fudaa/dodico/crue/io/neuf/DHReader.java 2010-03-04 23:48:28 UTC (rev 5703)
@@ -915,7 +915,7 @@
final CalcPseudoPerm calcPerm = new CalcPseudoPerm();
calcPerm.setNom(CruePrefix.P_CALCUL + "P" + (nbEtatPermanent + 1));
- calcPerm.setDescription("Calcul permanent " + (nbEtatPermanent + 1));
+ calcPerm.setDescription("Calcul pseudo-permanent " + (nbEtatPermanent + 1));
// pour le premier on prend en compte la reprise éventuelle
final boolean first = ocal.getOrdCalc().isEmpty();
if (reprise != null && first) {
@@ -1076,7 +1076,7 @@
}
if (isFine()) {
- LOGGER.debug("Nombre d'états permanents " + nbEtatPermanent);
+ LOGGER.debug("Nombre d'états pseudo-permanents " + nbEtatPermanent);
}
}
Modified: trunk/soft/fudaa-crue/dodico/src/main/java/org/fudaa/dodico/crue/io/neuf/DHWriter.java
===================================================================
--- trunk/soft/fudaa-crue/dodico/src/main/java/org/fudaa/dodico/crue/io/neuf/DHWriter.java 2010-03-01 22:40:16 UTC (rev 5702)
+++ trunk/soft/fudaa-crue/dodico/src/main/java/org/fudaa/dodico/crue/io/neuf/DHWriter.java 2010-03-04 23:48:28 UTC (rev 5703)
@@ -649,7 +649,7 @@
private void writeDonneesPermanentes(final CrueData data, final Map coeffsRuisParCalcPerm) throws IOException {
writeCom("");
- writeCom(" Donnees permanentes");
+ writeCom(" Donnees pseudo-permanentes");
// Ecriture Ligne A
writeCom("");
@@ -726,7 +726,7 @@
// Ecriture Lignes E
writeCom("");
- writeCom(" Valeurs des conditions aux limites (regimes permanents) ");
+ writeCom(" Valeurs des conditions aux limites (regimes pseudo-permanents) ");
for (int i = 0, imax = nomsCalcsPerms.size(); i < imax; i++) {
Modified: trunk/soft/fudaa-crue/dodico/src/main/java/org/fudaa/dodico/crue/io/neuf/STOReader.java
===================================================================
--- trunk/soft/fudaa-crue/dodico/src/main/java/org/fudaa/dodico/crue/io/neuf/STOReader.java 2010-03-01 22:40:16 UTC (rev 5702)
+++ trunk/soft/fudaa-crue/dodico/src/main/java/org/fudaa/dodico/crue/io/neuf/STOReader.java 2010-03-04 23:48:28 UTC (rev 5703)
@@ -400,7 +400,8 @@
cptNbHaut++;
// System.out.print("surfPlan = " + sings[j] + " | ");
} else if (j >= (10 + nbHaut + 1) && j <= (10 + 2 * nbHaut)) {
- if (j >= (10 + nbHaut + 1)) {
+ // on reset pour ce j
+ if (j == (10 + nbHaut + 1)) {
cptNbHaut = 0;
}
surfMouill[cptNbHaut] = sings[j];
Modified: trunk/soft/fudaa-crue/dodico/src/main/java/org/fudaa/dodico/crue/metier/emh/ElemPdt.java
===================================================================
--- trunk/soft/fudaa-crue/dodico/src/main/java/org/fudaa/dodico/crue/metier/emh/ElemPdt.java 2010-03-01 22:40:16 UTC (rev 5702)
+++ trunk/soft/fudaa-crue/dodico/src/main/java/org/fudaa/dodico/crue/metier/emh/ElemPdt.java 2010-03-04 23:48:28 UTC (rev 5703)
@@ -23,6 +23,11 @@
return nbrPdt;
}
+ @Override
+ public String toString() {
+ return " ElemPdt: " + nbrPdt + " * " + dureePdt.getStandardSeconds() + " s";
+ }
+
/**
* @param newNbrPdt
* @pdOid 25e7ccdf-0648-4487-93bc-fb08155d8cca
Modified: trunk/soft/fudaa-crue/dodico/src/main/java/org/fudaa/dodico/crue/metier/emh/OrdCalc.java
===================================================================
--- trunk/soft/fudaa-crue/dodico/src/main/java/org/fudaa/dodico/crue/metier/emh/OrdCalc.java 2010-03-01 22:40:16 UTC (rev 5702)
+++ trunk/soft/fudaa-crue/dodico/src/main/java/org/fudaa/dodico/crue/metier/emh/OrdCalc.java 2010-03-04 23:48:28 UTC (rev 5703)
@@ -12,7 +12,7 @@
*/
public abstract boolean isTransitoire();
- public final boolean isPermanent() {
+ public final boolean isPseudoPermanent() {
return !isTransitoire();
}
Modified: trunk/soft/fudaa-crue/dodico/src/main/java/org/fudaa/dodico/crue/metier/helper/EMHHelper.java
===================================================================
--- trunk/soft/fudaa-crue/dodico/src/main/java/org/fudaa/dodico/crue/metier/helper/EMHHelper.java 2010-03-01 22:40:16 UTC (rev 5702)
+++ trunk/soft/fudaa-crue/dodico/src/main/java/org/fudaa/dodico/crue/metier/helper/EMHHelper.java 2010-03-04 23:48:28 UTC (rev 5703)
@@ -91,13 +91,13 @@
public static final class OrdCalcIsPermanent implements Predicate {
public boolean evaluate(final Object object) {
- return ((OrdCalc) object).isPermanent();
+ return ((OrdCalc) object).isPseudoPermanent();
}
}
public static final class OrdCalcIsPseudoPermanent implements Predicate {
public boolean evaluate(final Object object) {
- return ((OrdCalc) object).isPermanent() && ((OrdCalc) object).getCalc() instanceof CalcPseudoPerm;
+ return ((OrdCalc) object).isPseudoPermanent() && ((OrdCalc) object).getCalc() instanceof CalcPseudoPerm;
}
}
Modified: trunk/soft/fudaa-crue/dodico/src/main/java/org/fudaa/dodico/crue/metier/helper/EMHHelperPredicate.java
===================================================================
--- trunk/soft/fudaa-crue/dodico/src/main/java/org/fudaa/dodico/crue/metier/helper/EMHHelperPredicate.java 2010-03-01 22:40:16 UTC (rev 5702)
+++ trunk/soft/fudaa-crue/dodico/src/main/java/org/fudaa/dodico/crue/metier/helper/EMHHelperPredicate.java 2010-03-04 23:48:28 UTC (rev 5703)
@@ -170,6 +170,36 @@
}
}
+ /**
+ * A utiliser avec RelationEMHContient afin de récupérer les EMH avec un type donne.
+ *
+ * @author deniger
+ */
+ public static class PredicateRelationEMHContientEMHOfClass implements Predicate {
+
+ private final Class type;
+
+ /**
+ * @param type le type recherche.Si null renvoie true pour toutes les relation RelationEMHContient
+ */
+ public PredicateRelationEMHContientEMHOfClass(final Class type) {
+ super();
+ this.type = type;
+ }
+
+ public boolean evaluate(final Object object) {
+ if (object == null) { return false; }
+ if (object.getClass().equals(RelationEMHContient.class)) {
+ if (type == null) { return true; }
+ final RelationEMHContient rel = (RelationEMHContient) object;
+
+ if (rel.getEmh() != null && type.equals(rel.getEmh().getClass())) { return true; }
+
+ }
+ return false;
+ }
+ }
+
private EMHHelperPredicate() {
}
Modified: trunk/soft/fudaa-crue/dodico/src/main/java/org/fudaa/dodico/crue/projet/ScenarioLoaderCrue9.java
===================================================================
--- trunk/soft/fudaa-crue/dodico/src/main/java/org/fudaa/dodico/crue/projet/ScenarioLoaderCrue9.java 2010-03-01 22:40:16 UTC (rev 5702)
+++ trunk/soft/fudaa-crue/dodico/src/main/java/org/fudaa/dodico/crue/projet/ScenarioLoaderCrue9.java 2010-03-04 23:48:28 UTC (rev 5703)
@@ -37,6 +37,8 @@
import org.fudaa.dodico.crue.metier.emh.CatEMHNoeud;
import org.fudaa.dodico.crue.metier.emh.CatEMHSection;
import org.fudaa.dodico.crue.metier.emh.EMHScenario;
+import org.fudaa.dodico.crue.metier.emh.OrdPrtGeoModeleBase;
+import org.fudaa.dodico.crue.metier.emh.PlanimetrageNbrPdzCst;
import org.fudaa.dodico.crue.metier.emh.ResPrtReseau;
import org.fudaa.dodico.crue.metier.helper.EMHHelper;
import org.fudaa.dodico.crue.property.CrueProperties;
@@ -147,7 +149,7 @@
boolean error = false;
for (final EnteteBranche br : res.getContainerBranches().getListData()) {
final String id = br.getNom().toUpperCase();
- CatEMHBranche foundBranche = data.findBrancheByReference(id);
+ final CatEMHBranche foundBranche = data.findBrancheByReference(id);
if (foundBranche == null) {
analyze.addError("res.branche.notFound", id);
error = true;
@@ -157,7 +159,7 @@
}
for (final EnteteNoeud nd : res.getContainerNoeuds().getListData()) {
final String id = nd.getNom().toUpperCase();
- CatEMHNoeud foundNoeud = data.findNoeudByReference(id);
+ final CatEMHNoeud foundNoeud = data.findNoeudByReference(id);
if (foundNoeud == null) {
analyze.addError("res.noeud.notFound", id);
error = true;
@@ -176,7 +178,7 @@
}
}
- ResultatCalculPasDeTemps pdt = res.getPdt();
+ final ResultatCalculPasDeTemps pdt = res.getPdt();
if (pdt != null && pdt.getNbPdt() > 0) {
emh.addInfosEMH(pdt);
}
@@ -301,6 +303,15 @@
if (stoRes != null && stoRes.getMetier() != null) {
data.setSto(stoRes.getMetier());
prt = STOReader.alimenteObjetsMetier(stoRes.getMetier());
+ final int nbhaut = stoRes.getMetier().getParametresGeneraux().getNbhaut();
+ OrdPrtGeoModeleBase ordPrtGeoModeleBase = data.getModele().getOrdPrtGeoModeleBase();
+ if (ordPrtGeoModeleBase == null) {
+ ordPrtGeoModeleBase = new OrdPrtGeoModeleBase(data.getCruePropertyDefinitionContainer());
+ data.getModele().addInfosEMH(ordPrtGeoModeleBase);
+ }
+ final PlanimetrageNbrPdzCst pdz = new PlanimetrageNbrPdzCst(data.getCruePropertyDefinitionContainer());
+ pdz.setNbrPdz(nbhaut);
+ ordPrtGeoModeleBase.setPlanimetrage(pdz);
}
if (!analyze.containsFatalError() && CtuluLibFile.exists(str)) {
@@ -338,7 +349,7 @@
analyze.setDefaultResourceBundle(IOMessages.RESOURCE_BUNDLE);
loadResFile.addAnalyzer(analyze);
final CrueIOResu<FCBSequentialReader> read = Crue9FileFormatFactory.getFCBFileFormat().read(fcb, analyze, data);
- if (read != null) {
+ if (read != null && read.getMetier() != null) {
validFcb(read.getMetier(), data, emh, loadResFile);
}
}
Added: trunk/soft/fudaa-crue/dodico/src/main/java/org/fudaa/dodico/crue/validation/ContentEMHValidator.java
===================================================================
--- trunk/soft/fudaa-crue/dodico/src/main/java/org/fudaa/dodico/crue/validation/ContentEMHValidator.java (rev 0)
+++ trunk/soft/fudaa-crue/dodico/src/main/java/org/fudaa/dodico/crue/validation/ContentEMHValidator.java 2010-03-04 23:48:28 UTC (rev 5703)
@@ -0,0 +1,258 @@
+/**
+ *
+ */
+package org.fudaa.dodico.crue.validation;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.commons.collections.CollectionUtils;
+import org.fudaa.ctulu.CtuluAnalyze;
+import org.fudaa.dodico.crue.metier.emh.CalcTransItem;
+import org.fudaa.dodico.crue.metier.emh.CatEMHBranche;
+import org.fudaa.dodico.crue.metier.emh.CatEMHSection;
+import org.fudaa.dodico.crue.metier.emh.DonCalcSansPrtBrancheBarrageFilEau;
+import org.fudaa.dodico.crue.metier.emh.DonCalcSansPrtBrancheBarrageGenerique;
+import org.fudaa.dodico.crue.metier.emh.DonCalcSansPrtBrancheNiveauxAssocies;
+import org.fudaa.dodico.crue.metier.emh.DonCalcSansPrtBrancheOrifice;
+import org.fudaa.dodico.crue.metier.emh.DonCalcSansPrtBranchePdc;
+import org.fudaa.dodico.crue.metier.emh.DonCalcSansPrtBrancheSaintVenant;
+import org.fudaa.dodico.crue.metier.emh.DonCalcSansPrtBrancheSeuilLateral;
+import org.fudaa.dodico.crue.metier.emh.DonCalcSansPrtBrancheSeuilTransversal;
+import org.fudaa.dodico.crue.metier.emh.DonFrtConteneur;
+import org.fudaa.dodico.crue.metier.emh.DonPrtCIniBrancheOrifice;
+import org.fudaa.dodico.crue.metier.emh.DonPrtCIniBrancheSaintVenant;
+import org.fudaa.dodico.crue.metier.emh.DonPrtCIniNoeudNiveauContinu;
+import org.fudaa.dodico.crue.metier.emh.DonPrtGeoBrancheSaintVenant;
+import org.fudaa.dodico.crue.metier.emh.DonPrtGeoProfilCasier;
+import org.fudaa.dodico.crue.metier.emh.DonPrtGeoProfilSection;
+import org.fudaa.dodico.crue.metier.emh.DonPrtGeoSectionIdem;
+import org.fudaa.dodico.crue.metier.emh.EMH;
+import org.fudaa.dodico.crue.metier.emh.EMHBrancheBarrageFilEau;
+import org.fudaa.dodico.crue.metier.emh.EMHBrancheBarrageGenerique;
+import org.fudaa.dodico.crue.metier.emh.EMHBrancheNiveauxAssocies;
+import org.fudaa.dodico.crue.metier.emh.EMHBrancheOrifice;
+import org.fudaa.dodico.crue.metier.emh.EMHBranchePdc;
+import org.fudaa.dodico.crue.metier.emh.EMHBrancheSaintVenant;
+import org.fudaa.dodico.crue.metier.emh.EMHBrancheSeuilLateral;
+import org.fudaa.dodico.crue.metier.emh.EMHBrancheSeuilTransversal;
+import org.fudaa.dodico.crue.metier.emh.EMHBrancheStrickler;
+import org.fudaa.dodico.crue.metier.emh.EMHCasierProfil;
+import org.fudaa.dodico.crue.metier.emh.EMHModeleBase;
+import org.fudaa.dodico.crue.metier.emh.EMHNoeudNiveauContinu;
+import org.fudaa.dodico.crue.metier.emh.EMHScenario;
+import org.fudaa.dodico.crue.metier.emh.EMHSectionIdem;
+import org.fudaa.dodico.crue.metier.emh.EMHSectionInterpolee;
+import org.fudaa.dodico.crue.metier.emh.EMHSectionProfil;
+import org.fudaa.dodico.crue.metier.emh.EMHSectionSansGeometrie;
+import org.fudaa.dodico.crue.metier.emh.EMHSousModele;
+import org.fudaa.dodico.crue.metier.emh.EnumMethodeInterpolation;
+import org.fudaa.dodico.crue.metier.emh.EnumTypeEMH;
+import org.fudaa.dodico.crue.metier.emh.InfosEMH;
+import org.fudaa.dodico.crue.metier.emh.OrdResScenario;
+import org.fudaa.dodico.crue.metier.emh.ParamCalcScenario;
+import org.fudaa.dodico.crue.metier.emh.ParamNumModeleBase;
+import org.fudaa.dodico.crue.metier.emh.RelationEMHSectionDansBranche;
+import org.fudaa.dodico.crue.metier.helper.EMHHelper;
+import org.fudaa.dodico.crue.metier.helper.EMHHelperPredicate;
+
+class ContentEMHValidator {
+
+ private static class ContentParam {
+ public Class requiredType;
+ public int minOccurence = 1;
+ public int maxOccurence = -1;
+
+ /**
+ * @param requiredType
+ * @param minOccurence
+ * @param maxOccurence
+ */
+ public ContentParam(final Class requiredType, final int minOccurence, final int maxOccurence) {
+ super();
+ this.requiredType = requiredType;
+ this.minOccurence = minOccurence;
+ this.maxOccurence = maxOccurence;
+ }
+
+ public boolean isMaxRespected(final int nbToTest) {
+ return maxOccurence < 0 || nbToTest <= maxOccurence;
+ }
+
+ public boolean isMinRespected(final int nbToTest) {
+ return minOccurence < 0 || nbToTest >= minOccurence;
+ }
+
+ public void addErrorForSectionDansBranche(final int nbToTest, final CtuluAnalyze log, final EMH emh) {
+ if ((isMaxRespected(nbToTest) && isMinRespected(nbToTest))) { return; }
+ if (minOccurence == maxOccurence) {
+ log
+ .addError("validation.branche.nbSectionNotEqualsTo", emh.getId(), maxOccurence, requiredType
+ .getSimpleName());
+ } else {
+ log.addError("validation.branche.nbSectionNotIn", emh.getId(), minOccurence, maxOccurence, requiredType
+ .getSimpleName());
+ }
+ }
+ }
+
+ public static ContentParam canContain(final Class c) {
+ return new ContentParam(c, -1, -1);
+ }
+
+ private static Map<Class, List<ContentParam>> createSectionDansBrancheContents() {
+ final Map<Class, List<ContentParam>> res = new HashMap<Class, List<ContentParam>>();
+ res.put(EMHBranchePdc.class, create(new ContentParam(EMHSectionSansGeometrie.class, 2, 2)));
+ res.put(EMHBrancheSeuilTransversal.class, create(new ContentParam(EMHSectionProfil.class, 0, 2), new ContentParam(
+ EMHSectionIdem.class, 0, 2)));
+ res.put(EMHBrancheSeuilLateral.class, create(new ContentParam(EMHSectionSansGeometrie.class, 2, 2)));
+ res.put(EMHBrancheNiveauxAssocies.class, create(new ContentParam(EMHSectionSansGeometrie.class, 2, 2)));
+ res.put(EMHBrancheOrifice.class, create(new ContentParam(EMHSectionSansGeometrie.class, 2, 2)));
+ res.put(EMHBrancheStrickler.class, create(new ContentParam(EMHSectionProfil.class, 0, 2), new ContentParam(
+ EMHSectionIdem.class, 0, 2)));
+ res.put(EMHBrancheBarrageGenerique.class, create(new ContentParam(EMHSectionSansGeometrie.class, 2, 2)));
+ res.put(EMHBrancheBarrageFilEau.class, create(new ContentParam(EMHSectionProfil.class, 0, 2), new ContentParam(
+ EMHSectionIdem.class, 0, 2)));
+ res.put(EMHBrancheSaintVenant.class, create(canContain(EMHSectionProfil.class), canContain(EMHSectionIdem.class),
+ canContain(EMHSectionInterpolee.class)));
+ return res;
+ }
+
+ Map<Class, List<ContentParam>> relationSectionDansBranche;
+
+ private void validateRelationSectionDansBranche(final CtuluAnalyze emhLog, final EMH emh) {
+ if (emh == null || emh.getCatType() != EnumTypeEMH.BRANCHE) { return; }
+ List<RelationEMHSectionDansBranche> sections = ((CatEMHBranche) emh).getListeSections();
+ if (sections == null) {
+ sections = Collections.emptyList();
+ }
+ final Set<Class> usedClass = new HashSet<Class>(sections.size());
+ for (final RelationEMHSectionDansBranche rel : sections) {
+ usedClass.add(rel.getEmh().getClass());
+
+ }
+ if (relationSectionDansBranche == null) {
+ relationSectionDansBranche = createSectionDansBrancheContents();
+ }
+ List<ContentParam> auth = relationSectionDansBranche.get(emh.getClass());
+ if (auth == null) {
+ auth = Collections.emptyList();
+ }
+ final List<Class> authClass = new ArrayList<Class>(auth.size());
+ for (final ContentParam cp : auth) {
+ authClass.add(cp.requiredType);
+ }
+ usedClass.removeAll(authClass);
+ if (usedClass.size() > 0) {
+ StringBuffer classes = new StringBuffer();
+ boolean first = true;
+ for (Class class1 : usedClass) {
+ if (first) {
+ first = false;
+ } else {
+ classes.append(", ");
+ }
+ classes.append(class1.getSimpleName());
+
+ }
+ emhLog.addFatalError("validation.branche.cantContainsThisSection", emh.getId(), classes);
+ }
+ for (final ContentParam cp : auth) {
+ final int nbDansRelation = CollectionUtils.countMatches(sections,
+ new EMHHelperPredicate.PredicateRelationEMHContientEMHOfClass(cp.requiredType));
+ cp.addErrorForSectionDansBranche(nbDansRelation, emhLog, emh);
+
+ }
+ if (emh.getClass().equals(EMHBrancheBarrageFilEau.class) || emh.getClass().equals(EMHBrancheBarrageGenerique.class)) {
+ CatEMHSection sectionPilote = EMHHelper.getSectionPilote(emh);
+ if (sectionPilote == null) {
+ emhLog.addFatalError("validation.branche.mustContainSectionPilote", emh.getId());
+ }
+ }
+ }
+
+ private static List<ContentParam> create(final ContentParam... params) {
+ return Arrays.asList(params);
+ }
+
+ private final Map<Class<? extends EMH>, Set<Class<? extends InfosEMH>>> neededInfoEMHByEMH = new HashMap<Class<? extends EMH>, Set<Class<? extends InfosEMH>>>();
+
+ public ContentEMHValidator(final EMHModeleBase modele) {
+ // on enregistre pour chaque classe d'EMH, les types d'info nécessaires.
+ add(EMHScenario.class, ParamCalcScenario.class, OrdResScenario.class);
+ add(EMHModeleBase.class, ParamNumModeleBase.class);
+ add(EMHSousModele.class, DonFrtConteneur.class);
+ final EnumMethodeInterpolation methodeInterpol = modele == null ? null : modele.getOrdPrtCIniModeleBase()
+ .getMethodeInterpol();
+ if (methodeInterpol != null) {
+ if (EnumMethodeInterpolation.INTERPOL_ZIMP_AUX_SECTIONS.equals(methodeInterpol)) {
+
+ } else {
+ add(EMHNoeudNiveauContinu.class, DonPrtCIniNoeudNiveauContinu.class);
+ }
+ }
+ add(EMHCasierProfil.class, DonPrtGeoProfilCasier.class);
+ add(EMHBranchePdc.class, DonCalcSansPrtBranchePdc.class);
+ add(EMHBrancheSeuilTransversal.class, DonCalcSansPrtBrancheSeuilTransversal.class);
+ add(EMHBrancheSeuilLateral.class, DonCalcSansPrtBrancheSeuilLateral.class);
+ add(EMHBrancheOrifice.class, DonCalcSansPrtBrancheOrifice.class, DonPrtCIniBrancheOrifice.class);
+ add(EMHBrancheStrickler.class);
+ add(EMHBrancheBarrageGenerique.class, DonCalcSansPrtBrancheBarrageGenerique.class);
+ add(EMHBrancheBarrageFilEau.class, DonCalcSansPrtBrancheBarrageFilEau.class);
+ add(EMHBrancheSaintVenant.class, DonPrtGeoBrancheSaintVenant.class, DonCalcSansPrtBrancheSaintVenant.class,
+ DonPrtCIniBrancheSaintVenant.class);
+ add(EMHBrancheNiveauxAssocies.class, DonCalcSansPrtBrancheNiveauxAssocies.class);
+ add(EMHSectionProfil.class, DonPrtGeoProfilSection.class);
+ add(EMHSectionIdem.class, DonPrtGeoSectionIdem.class);
+
+ }
+
+ private void add(final Class<? extends EMH> emhClass, final Class<? extends InfosEMH>... required) {
+ neededInfoEMHByEMH.put(emhClass, new HashSet<Class<? extends InfosEMH>>(Arrays.asList(required)));
+ }
+
+ public void validate(final CtuluAnalyze emhLog, final EMH emhContenante) {
+
+ final Class emhClass = emhContenante.getClass();
+ final Set<Class<? extends InfosEMH>> expectedInfo = neededInfoEMHByEMH.get(emhClass);
+ if (CollectionUtils.isEmpty(expectedInfo)) { return; }
+ for (final Class infoClass : expectedInfo) {
+ if (!EMHHelper.containsInstanceOf(emhContenante.getInfosEMH(), infoClass)) {
+ emhLog.addError("validation.emh.contains.InfoEMH", emhContenante.getId(), emhContenante.getType(), infoClass
+ .getSimpleName());
+
+ }
+
+ }
+ // TODO a reactiver
+ // validateRelationSectionDansBranche(emhLog, emhContenante);
+ if (emhContenante.getClass().equals(EMHSectionIdem.class)) {
+ EMHSectionIdem id = (EMHSectionIdem) emhContenante;
+ CatEMHSection sectionRef = id.getSectionRef();
+ if (sectionRef == null || !getAuthorizedSectionRef().contains(sectionRef.getClass())) {
+ emhLog.addFatalError("validation.sectionRefWrong", emhContenante.getId());
+ }
+
+ }
+ final List<CalcTransItem> trans = EMHHelper.collectInstanceOf(emhContenante.getDCLM(), CalcTransItem.class);
+ if (trans != null) {
+ for (final CalcTransItem calcTransItem : trans) {
+ if (calcTransItem.getLoi() == null) {
+ emhLog.addFatalError("validation.emh.loi.notFound", emhContenante.getNom(), calcTransItem
+ .getNomCalculParent());
+ }
+ }
+ }
+
+ }
+
+ private List<Class<? extends CatEMHSection>> getAuthorizedSectionRef() {
+ return Arrays.asList(EMHSectionProfil.class, EMHSectionIdem.class, EMHSectionInterpolee.class);
+ }
+}
\ No newline at end of file
Added: trunk/soft/fudaa-crue/dodico/src/main/java/org/fudaa/dodico/crue/validation/Crue9Validator.java
===================================================================
--- trunk/soft/fudaa-crue/dodico/src/main/java/org/fudaa/dodico/crue/validation/Crue9Validator.java (rev 0)
+++ trunk/soft/fudaa-crue/dodico/src/main/java/org/fudaa/dodico/crue/validation/Crue9Validator.java 2010-03-04 23:48:28 UTC (rev 5703)
@@ -0,0 +1,124 @@
+/**
+ *
+ */
+package org.fudaa.dodico.crue.validation;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Set;
+
+import org.apache.commons.collections.CollectionUtils;
+import org.fudaa.ctulu.CtuluAnalyze;
+import org.fudaa.ctulu.CtuluLib;
+import org.fudaa.dodico.crue.common.CommonMessages;
+import org.fudaa.dodico.crue.metier.emh.CalcPseudoPerm;
+import org.fudaa.dodico.crue.metier.emh.CalcPseudoPermBrancheSaintVenantQruis;
+import org.fudaa.dodico.crue.metier.emh.CalcPseudoPermCasierProfilQruis;
+import org.fudaa.dodico.crue.metier.emh.DonCalcSansPrtBrancheSaintVenant;
+import org.fudaa.dodico.crue.metier.emh.EMH;
+import org.fudaa.dodico.crue.metier.emh.EMHModeleBase;
+import org.fudaa.dodico.crue.metier.emh.OrdCalcScenario;
+import org.fudaa.dodico.crue.metier.helper.EMHHelper;
+import org.fudaa.dodico.crue.property.CrueProperties;
+import org.fudaa.dodico.crue.validation.ValidateEMHProperties.Validator;
+
+public class Crue9Validator implements Validator {
+
+ private final CtuluAnalyze res = new CtuluAnalyze();
+ private final List<CtuluAnalyze> lst = Arrays.asList(res);
+
+ boolean isBetaFound;
+ boolean isQdmDifferent;
+
+ final double defaultBeta;
+ final double defaultQruis;
+ final double defaultQdm;
+ final double epsBeta;
+ final double epsQdm;
+ final CrueProperties props;
+
+ final boolean export;
+ boolean coefRuisQdmInit = false;
+
+ double coefRuisQdm;
+
+ public Crue9Validator(final CrueProperties props, final boolean export) {
+ super();
+ this.export = export;
+ this.props = props;
+ res.setDefaultResourceBundle(CommonMessages.RESOURCE_BUNDLE);
+ res.setDesc(CommonMessages.getString("validation.crue9"));
+ defaultBeta = props.getDefaultDoubleValue("coefBeta");
+ defaultQruis = props.getDefaultDoubleValue("qRuis");
+ defaultQdm = props.getDefaultDoubleValue("coefRuisQdm");
+ epsQdm = props.getEpsilon("coefRuisQdm");
+ epsBeta = props.getEpsilon("coefBeta");
+ }
+
+ private void addMessage(final String m, final Object... params) {
+ if (export) {
+ res.addError(m, params);
+ } else {
+ res.addWarn(m, params);
+ }
+ }
+
+ private void computeQruis(final Object o) {
+ if (!(o instanceof OrdCalcScenario)) { return; }
+ final OrdCalcScenario ocal = (OrdCalcScenario) o;
+ final List<CalcPseudoPerm> calcPseudoPerm = EMHHelper.collectCalcPseudoPerm(ocal.getOrdCalc());
+ for (final CalcPseudoPerm calcPerm : calcPseudoPerm) {
+ // Il faut au moins une branche saint venant pour considérer qu'il y a un débit de ruissellement (identique)
+ final List<CalcPseudoPermBrancheSaintVenantQruis> calcQruis = calcPerm
+ .getCalcPseudoPermBrancheSaintVenantQruis();
+ final List<CalcPseudoPermCasierProfilQruis> calcCasierQruis = calcPerm.getCalcPseudoPermCasierProfilQruis();
+ if (CollectionUtils.isNotEmpty(calcQruis) || CollectionUtils.isNotEmpty(calcCasierQruis)) {
+ final Double qruis = EMHHelper.isQruisConstant(calcPerm, props);
+ if (qruis == null) {
+ addMessage("crue9.compatible.Qruis.NotConstant", Double.toString(defaultQruis), calcPerm.getNom());
+ }
+ }
+ }
+
+ }
+
+ private void computeQruisQDM(final Object o) {
+ if (isQdmDifferent) { return; }
+ if (o instanceof DonCalcSansPrtBrancheSaintVenant) {
+ final DonCalcSansPrtBrancheSaintVenant donCalcSansPrtBrancheSaintVenant = (DonCalcSansPrtBrancheSaintVenant) o;
+ if (!donCalcSansPrtBrancheSaintVenant.getActivated()) { return; }
+ final double value = donCalcSansPrtBrancheSaintVenant.getCoefRuisQdm();
+ if (!coefRuisQdmInit) {
+ coefRuisQdm = value;
+ coefRuisQdmInit = true;
+ } else if (!CtuluLib.isEquals(value, coefRuisQdm, epsQdm)) {
+ isQdmDifferent = true;
+ addMessage("crue9.compatible.coefRuisQdm.notConstant", Double.toString(defaultQdm));
+ }
+ }
+ }
+
+ public void findBeta(final Object o) {
+ if (isBetaFound) { return; }
+ if (o instanceof DonCalcSansPrtBrancheSaintVenant) {
+ final DonCalcSansPrtBrancheSaintVenant dcsp = (DonCalcSansPrtBrancheSaintVenant) o;
+ if (!CtuluLib.isEquals(defaultBeta, dcsp.getCoefBeta(), epsBeta)) {
+ isBetaFound = true;
+ addMessage("crue9.compatible.coefBeta");
+
+ }
+ }
+ }
+
+ public List<CtuluAnalyze> getLogs() {
+ return lst;
+ }
+
+ public void validate(final Set<Object> o, final EMH emh, final EMHModeleBase modeleParent) {
+ for (final Object object : o) {
+ findBeta(object);
+ computeQruisQDM(object);
+ computeQruis(object);
+ }
+ }
+}
\ No newline at end of file
Added: trunk/soft/fudaa-crue/dodico/src/main/java/org/fudaa/dodico/crue/validation/IdValidatorForCrue10.java
===================================================================
--- trunk/soft/fudaa-crue/dodico/src/main/java/org/fudaa/dodico/crue/validation/IdValidatorForCrue10.java (rev 0)
+++ trunk/soft/fudaa-crue/dodico/src/main/java/org/fudaa/dodico/crue/validation/IdValidatorForCrue10.java 2010-03-04 23:48:28 UTC (rev 5703)
@@ -0,0 +1,80 @@
+package org.fudaa.dodico.crue.validation;
+
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.fudaa.ctulu.CtuluAnalyze;
+import org.fudaa.dodico.crue.common.CommonMessages;
+import org.fudaa.dodico.crue.metier.emh.EMH;
+import org.fudaa.dodico.crue.metier.emh.EMHModeleBase;
+import org.fudaa.dodico.crue.metier.emh.ObjetNomme;
+import org.fudaa.dodico.crue.validation.ValidateEMHProperties.Validator;
+
+/**
+ * Le validation des id.
+ *
+ * @author deniger
+ */
+public class IdValidatorForCrue10 implements Validator {
+ boolean isCrue10Compatible = true;
+
+ private final CtuluAnalyze res = new CtuluAnalyze();
+
+ private final List<CtuluAnalyze> lst = Arrays.asList(res);
+ private final Map<String, Object> used = new HashMap<String, Object>();
+
+ public IdValidatorForCrue10() {
+ super();
+ res.setDefaultResourceBundle(CommonMessages.RESOURCE_BUNDLE);
+ res.setDesc(CommonMessages.getString("validation.noms"));
+ }
+
+ public List<CtuluAnalyze> getLogs() {
+ return lst;
+ }
+
+ /**
+ * @return the res
+ */
+ public CtuluAnalyze getRes() {
+ return res;
+ }
+
+ /**
+ * @return the isCrue10Compatible
+ */
+ public boolean isCrue10Compatible() {
+ return isCrue10Compatible;
+ }
+
+ public void validate(final Object o) {
+ // noeud,strickler,litNomme
+ if (o instanceof ObjetNomme) {
+ final String id = ((ObjetNomme) o).getId();
+ final String nom = ((ObjetNomme) o).getNom();
+ final int length = id.length();
+ if (length > CruePrefix.NB_CAR_MAX) {
+ isCrue10Compatible = false;
+ res.addFatalError("valid.nom.tooLong", nom);
+ }
+ final Object usedObject = used.get(id);
+ if (usedObject == null) {
+ used.put(id, o);
+ } else if (!usedObject.equals(o)) {
+ res.addFatalError("valid.nom.notUnique", nom);
+ }
+
+ }
+
+ }
+
+ public void validate(final Set<Object> o, final EMH emh, final EMHModeleBase modeleContenant) {
+ for (final Object object : o) {
+ validate(object);
+ }
+
+ }
+}
\ No newline at end of file
Added: trunk/soft/fudaa-crue/dodico/src/main/java/org/fudaa/dodico/crue/validation/IdValidatorForCrue9.java
===================================================================
--- trunk/soft/fudaa-crue/dodico/src/main/java/org/fudaa/dodico/crue/validation/IdValidatorForCrue9.java (rev 0)
+++ trunk/soft/fudaa-crue/dodico/src/main/java/org/fudaa/dodico/crue/validation/IdValidatorForCrue9.java 2010-03-04 23:48:28 UTC (rev 5703)
@@ -0,0 +1,100 @@
+package org.fudaa.dodico.crue.validation;
+
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.fudaa.ctulu.CtuluAnalyze;
+import org.fudaa.dodico.crue.common.CommonMessages;
+import org.fudaa.dodico.crue.metier.emh.CatEMHBranche;
+import org.fudaa.dodico.crue.metier.emh.CatEMHNoeud;
+import org.fudaa.dodico.crue.metier.emh.CatEMHSection;
+import org.fudaa.dodico.crue.metier.emh.EMH;
+import org.fudaa.dodico.crue.metier.emh.EMHCasierProfil;
+import org.fudaa.dodico.crue.metier.emh.EMHModeleBase;
+import org.fudaa.dodico.crue.metier.emh.LitNomme;
+import org.fudaa.dodico.crue.metier.emh.ObjetNomme;
+import org.fudaa.dodico.crue.validation.ValidateEMHProperties.Validator;
+
+/**
+ * Le validation des id.
+ *
+ * @author deniger
+ */
+public class IdValidatorForCrue9 implements Validator {
+ boolean isCrue9Compatible = true;
+
+ private final CtuluAnalyze res = new CtuluAnalyze();
+
+ private final List<CtuluAnalyze> lst = Arrays.asList(res);
+ private final Map<String, Object> used = new HashMap<String, Object>();
+
+ public IdValidatorForCrue9() {
+ super();
+ res.setDefaultResourceBundle(CommonMessages.RESOURCE_BUNDLE);
+ res.setDesc(CommonMessages.getString("validation.noms"));
+ }
+
+ public List<CtuluAnalyze> getLogs() {
+ return lst;
+ }
+
+ /**
+ * @return the res
+ */
+ public CtuluAnalyze getRes() {
+ return res;
+ }
+
+ /**
+ * @return the isCrue9Compatible
+ */
+ public boolean isCrue9Compatible() {
+ return isCrue9Compatible;
+ }
+
+ /**
+ * @param o l'objet a tester
+ * @return true si ecrit dans les fichier crue 9
+ */
+ private boolean isWrittenByCrue9(final Object o) {
+ return (o instanceof LitNomme) || (o instanceof CatEMHNoeud) || (o instanceof CatEMHBranche)
+ || (o instanceof CatEMHSection);
+
+ }
+
+ public void validate(final Object o) {
+ // noeud,strickler,litNomme
+ if (o instanceof ObjetNomme) {
+ final String id = ((ObjetNomme) o).getId();
+ final String nom = ((ObjetNomme) o).getNom();
+ final int length = id.length();
+ if (length > CruePrefix.NB_CAR_MAX_CRUE9_CASIER_PROFIL && o instanceof EMHCasierProfil) {
+ isCrue9Compatible = false;
+ res.addWarn("valid.nomProfil.tooLong.crue9", nom);
+ } else if (length > CruePrefix.NB_CAR_MAX_CRUE9 && isWrittenByCrue9(o)) {
+ isCrue9Compatible = false;
+ res.addWarn("valid.nom.tooLong.crue9", nom);
+
+ }
+
+ final Object usedObject = used.get(id);
+ if (usedObject == null) {
+ used.put(id, o);
+ } else if (!usedObject.equals(o)) {
+ res.addFatalError("valid.nom.notUnique", nom);
+ }
+
+ }
+
+ }
+
+ public void validate(final Set<Object> o, final EMH emh, final EMHModeleBase modeleContenant) {
+ for (final Object object : o) {
+ validate(object);
+ }
+
+ }
+}
\ No newline at end of file
Modified: trunk/soft/fudaa-crue/dodico/src/main/java/org/fudaa/dodico/crue/validation/ValidateEMHProperties.java
===================================================================
--- trunk/soft/fudaa-crue/dodico/src/main/java/org/fudaa/dodico/crue/validation/ValidateEMHProperties.java 2010-03-01 22:40:16 UTC (rev 5702)
+++ trunk/soft/fudaa-crue/dodico/src/main/java/org/fudaa/dodico/crue/validation/ValidateEMHProperties.java 2010-03-04 23:48:28 UTC (rev 5703)
@@ -13,68 +13,24 @@
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.fudaa.ctulu.CtuluAnalyze;
-import org.fudaa.ctulu.CtuluLib;
import org.fudaa.dodico.crue.common.CommonMessages;
import org.fudaa.dodico.crue.io.neuf.FCBSequentialReader.ResultatCalcul;
import org.fudaa.dodico.crue.io.neuf.FCBSequentialReader.ResultatCalculPasDeTemps;
-import org.fudaa.dodico.crue.metier.emh.CalcPseudoPerm;
-import org.fudaa.dodico.crue.metier.emh.CalcPseudoPermBrancheSaintVenantQruis;
-import org.fudaa.dodico.crue.metier.emh.CalcPseudoPermCasierProfilQruis;
-import org.fudaa.dodico.crue.metier.emh.CalcTransItem;
-import org.fudaa.dodico.crue.metier.emh.CatEMHBranche;
-import org.fudaa.dodico.crue.metier.emh.CatEMHNoeud;
-import org.fudaa.dodico.crue.metier.emh.CatEMHSection;
-import org.fudaa.dodico.crue.metier.emh.DonCalcSansPrtBrancheBarrageFilEau;
-import org.fudaa.dodico.crue.metier.emh.DonCalcSansPrtBrancheBarrageGenerique;
-import org.fudaa.dodico.crue.metier.emh.DonCalcSansPrtBrancheNiveauxAssocies;
-import org.fudaa.dodico.crue.metier.emh.DonCalcSansPrtBrancheOrifice;
-import org.fudaa.dodico.crue.metier.emh.DonCalcSansPrtBranchePdc;
-import org.fudaa.dodico.crue.metier.emh.DonCalcSansPrtBrancheSaintVenant;
-import org.fudaa.dodico.crue.metier.emh.DonCalcSansPrtBrancheSeuilLateral;
-import org.fudaa.dodico.crue.metier.emh.DonCalcSansPrtBrancheSeuilTransversal;
import org.fudaa.dodico.crue.metier.emh.DonFrt;
-import org.fudaa.dodico.crue.metier.emh.DonFrtConteneur;
-import org.fudaa.dodico.crue.metier.emh.DonFrtManning;
-import org.fudaa.dodico.crue.metier.emh.DonFrtStrickler;
import org.fudaa.dodico.crue.metier.emh.DonLoiHYConteneur;
-import org.fudaa.dodico.crue.metier.emh.DonPrtCIniBrancheOrifice;
-import org.fudaa.dodico.crue.metier.emh.DonPrtCIniBrancheSaintVenant;
-import org.fudaa.dodico.crue.metier.emh.DonPrtCIniNoeudNiveauContinu;
-import org.fudaa.dodico.crue.metier.emh.DonPrtGeoBrancheSaintVenant;
import org.fudaa.dodico.crue.metier.emh.DonPrtGeoProfilCasier;
-import org.fudaa.dodico.crue.metier.emh.DonPrtGeoProfilSection;
-import org.fudaa.dodico.crue.metier.emh.DonPrtGeoSectionIdem;
import org.fudaa.dodico.crue.metier.emh.EMH;
-import org.fudaa.dodico.crue.metier.emh.EMHBrancheBarrageFilEau;
-import org.fudaa.dodico.crue.metier.emh.EMHBrancheBarrageGenerique;
-import org.fudaa.dodico.crue.metier.emh.EMHBrancheNiveauxAssocies;
-import org.fudaa.dodico.crue.metier.emh.EMHBrancheOrifice;
-import org.fudaa.dodico.crue.metier.emh.EMHBranchePdc;
-import org.fudaa.dodico.crue.metier.emh.EMHBrancheSaintVenant;
-import org.fudaa.dodico.crue.metier.emh.EMHBrancheSeuilLateral;
-import org.fudaa.dodico.crue.metier.emh.EMHBrancheSeuilTransversal;
-import org.fudaa.dodico.crue.metier.emh.EMHBrancheStrickler;
-import org.fudaa.dodico.crue.metier.emh.EMHCasierProfil;
import org.fudaa.dodico.crue.metier.emh.EMHModeleBase;
-import org.fudaa.dodico.crue.metier.emh.EMHNoeudNiveauContinu;
import org.fudaa.dodico.crue.metier.emh.EMHScenario;
-import org.fudaa.dodico.crue.metier.emh.EMHSectionIdem;
-import org.fudaa.dodico.crue.metier.emh.EMHSectionProfil;
import org.fudaa.dodico.crue.metier.emh.EMHSousModele;
import org.fudaa.dodico.crue.metier.emh.ElemPdt;
-import org.fudaa.dodico.crue.metier.emh.EnumMethodeInterpolation;
import org.fudaa.dodico.crue.metier.emh.EnumTypeLoi;
import org.fudaa.dodico.crue.metier.emh.InfosEMH;
-import org.fudaa.dodico.crue.metier.emh.LitNomme;
import org.fudaa.dodico.crue.metier.emh.LitNumerote;
import org.fudaa.dodico.crue.metier.emh.Loi;
import org.fudaa.dodico.crue.metier.emh.LoiDF;
import org.fudaa.dodico.crue.metier.emh.LoiFF;
-import org.fudaa.dodico.crue.metier.emh.ObjetNomme;
-import org.fudaa.dodico.crue.metier.emh.OrdCalcScenario;
import org.fudaa.dodico.crue.metier.emh.OrdPrtGeoModeleBase;
-import org.fudaa.dodico.crue.metier.emh.OrdResScenario;
-import org.fudaa.dodico.crue.metier.emh.ParamCalcScenario;
import org.fudaa.dodico.crue.metier.emh.ParamNumModeleBase;
import org.fudaa.dodico.crue.metier.emh.PdtVar;
import org.fudaa.dodico.crue.metier.emh.Point2D;
@@ -86,7 +42,6 @@
import org.fudaa.dodico.crue.metier.emh.ValParam;
import org.fudaa.dodico.crue.metier.emh.ValParamDouble;
import org.fudaa.dodico.crue.metier.emh.ValParamEntier;
-import org.fudaa.dodico.crue.metier.helper.EMHHelper;
import org.fudaa.dodico.crue.property.CrueProperties;
import org.fudaa.dodico.crue.property.PropertyValidator;
@@ -102,320 +57,8 @@
void getObjects(T in, Set<Object> collector);
}
- private static class ContentEMHValidator {
+ interface Validator {
- private final Map<Class<? extends EMH>, Set<Class<? extends InfosEMH>>> neededInfoEMHByEMH = new HashMap<Class<? extends EMH>, Set<Class<? extends InfosEMH>>>();
-
- public ContentEMHValidator(final EMHModeleBase modele) {
- // on enregistre pour chaque classe d'EMH, les types d'info nécessaires.
- add(EMHScenario.class, ParamCalcScenario.class, OrdResScenario.class);
- add(EMHModeleBase.class, ParamNumModeleBase.class);
- add(EMHSousModele.class, DonFrtConteneur.class);
- final EnumMethodeInterpolation methodeInterpol = modele == null ? null : modele.getOrdPrtCIniModeleBase()
- .getMethodeInterpol();
- if (methodeInterpol != null) {
- if (EnumMethodeInterpolation.INTERPOL_ZIMP_AUX_SECTIONS.equals(methodeInterpol)) {
-
- } else {
- add(EMHNoeudNiveauContinu.class, DonPrtCIniNoeudNiveauContinu.class);
- }
- }
- add(EMHCasierProfil.class, DonPrtGeoProfilCasier.class);
- add(EMHBranchePdc.class, DonCalcSansPrtBranchePdc.class);
- add(EMHBrancheSeuilTransversal.class, DonCalcSansPrtBrancheSeuilTransversal.class);
- add(EMHBrancheSeuilLateral.class, DonCalcSansPrtBrancheSeuilLateral.class);
- add(EMHBrancheOrifice.class, DonCalcSansPrtBrancheOrifice.class, DonPrtCIniBrancheOrifice.class);
- add(EMHBrancheStrickler.class);
- add(EMHBrancheBarrageGenerique.class, DonCalcSansPrtBrancheBarrageGenerique.class);
- add(EMHBrancheBarrageFilEau.class, DonCalcSansPrtBrancheBarrageFilEau.class);
- add(EMHBrancheSaintVenant.class, DonPrtGeoBrancheSaintVenant.class, DonCalcSansPrtBrancheSaintVenant.class,
- DonPrtCIniBrancheSaintVenant.class);
- add(EMHBrancheNiveauxAssocies.class, DonCalcSansPrtBrancheNiveauxAssocies.class);
- add(EMHSectionProfil.class, DonPrtGeoProfilSection.class);
- add(EMHSectionIdem.class, DonPrtGeoSectionIdem.class);
-
- }
-
- private void add(final Class<? extends EMH> emhClass, final Class<? extends InfosEMH>... required) {
- neededInfoEMHByEMH.put(emhClass, new HashSet<Class<? extends InfosEMH>>(Arrays.asList(required)));
- }
-
- public void validate(final CtuluAnalyze emhLog, final EMH emhContenante) {
- final Class emhClass = emhContenante.getClass();
- final Set<Class<? extends InfosEMH>> expectedInfo = neededInfoEMHByEMH.get(emhClass);
- if (CollectionUtils.isEmpty(expectedInfo)) { return; }
- for (final Class infoClass : expectedInfo) {
- if (!EMHHelper.containsInstanceOf(emhContenante.getInfosEMH(), infoClass)) {
- emhLog.addError("validation.emh.contains.InfoEMH", emhContenante.getNom(), emhContenante.getType(), infoClass
- .getSimpleName());
-
- }
-
- }
- final List<CalcTransItem> trans = EMHHelper.collectInstanceOf(emhContenante.getDCLM(), CalcTransItem.class);
- if (trans != null) {
- for (final CalcTransItem calcTransItem : trans) {
- if (calcTransItem.getLoi() == null) {
- emhLog.addFatalError("validation.emh.loi.notFound", emhContenante.getNom(), calcTransItem
- .getNomCalculParent());
- }
- }
- }
-
- }
-
- }
-
- public static class Crue9Validator implements Validator {
-
- private final CtuluAnalyze res = new CtuluAnalyze();
- private final List<CtuluAnalyze> lst = Arrays.asList(res);
-
- boolean isBetaFound;
- boolean isQdmDifferent;
-
- final double defaultBeta;
- final double defaultQruis;
- final double defaultQdm;
- final double epsBeta;
- final double epsQdm;
- final CrueProperties props;
-
- final boolean export;
- boolean coefRuisQdmInit = false;
-
- double coefRuisQdm;
-
- public Crue9Validator(final CrueProperties props, final boolean export) {
- super();
- this.export = export;
- this.props = props;
- res.setDefaultResourceBundle(CommonMessages.RESOURCE_BUNDLE);
- res.setDesc(CommonMessages.getString("validation.crue9"));
- defaultBeta = props.getDefaultDoubleValue("coefBeta");
- defaultQruis = props.getDefaultDoubleValue("qRuis");
- defaultQdm = props.getDefaultDoubleValue("coefRuisQdm");
- epsQdm = props.getEpsilon("coefRuisQdm");
- epsBeta = props.getEpsilon("coefBeta");
- }
-
- private void addMessage(final String m, final Object... params) {
- if (export) {
- res.addError(m, params);
- } else {
- res.addWarn(m, params);
- }
- }
-
- private void computeQruis(final Object o) {
- if (!(o instanceof OrdCalcScenario)) { return; }
- final OrdCalcScenario ocal = (OrdCalcScenario) o;
- final List<CalcPseudoPerm> calcPseudoPerm = EMHHelper.collectCalcPseudoPerm(ocal.getOrdCalc());
- for (final CalcPseudoPerm calcPerm : calcPseudoPerm) {
- // Il faut au moins une branche saint venant pour considérer qu'il y a un débit de ruissellement (identique)
- final List<CalcPseudoPermBrancheSaintVenantQruis> calcQruis = calcPerm
- .getCalcPseudoPermBrancheSaintVenantQruis();
- final List<CalcPseudoPermCasierProfilQruis> calcCasierQruis = calcPerm.getCalcPseudoPermCasierProfilQruis();
- if (CollectionUtils.isNotEmpty(calcQruis) || CollectionUtils.isNotEmpty(calcCasierQruis)) {
- final Double qruis = EMHHelper.isQruisConstant(calcPerm, props);
- if (qruis == null) {
- addMessage("crue9.compatible.Qruis.NotConstant", Double.toString(defaultQruis), calcPerm.getNom());
- }
- }
- }
-
- }
-
- private void computeQruisQDM(final Object o) {
- if (isQdmDifferent) { return; }
- if (o instanceof DonCalcSansPrtBrancheSaintVenant) {
- final DonCalcSansPrtBrancheSaintVenant donCalcSansPrtBrancheSaintVenant = (DonCalcSansPrtBrancheSaintVenant) o;
- if (!donCalcSansPrtBrancheSaintVenant.getActivated()) { return; }
- final double value = donCalcSansPrtBrancheSaintVenant.getCoefRuisQdm();
- if (!coefRuisQdmInit) {
- coefRuisQdm = value;
- coefRuisQdmInit = true;
- } else if (!CtuluLib.isEquals(value, coefRuisQdm, epsQdm)) {
- isQdmDifferent = true;
- addMessage("crue9.compatible.coefRuisQdm.notConstant", Double.toString(defaultQdm));
- }
- }
- }
-
- public void findBeta(final Object o) {
- if (isBetaFound) { return; }
- if (o instanceof DonCalcSansPrtBrancheSaintVenant) {
- final DonCalcSansPrtBrancheSaintVenant dcsp = (DonCalcSansPrtBrancheSaintVenant) o;
- if (!CtuluLib.isEquals(defaultBeta, dcsp.getCoefBeta(), epsBeta)) {
- isBetaFound = true;
- addMessage("crue9.compatible.coefBeta");
-
- }
- }
- }
-
- public List<CtuluAnalyze> getLogs() {
- return lst;
- }
-
- public void validate(final Set<Object> o, final EMH emh, final EMHModeleBase modeleParent) {
- for (final Object object : o) {
- findBeta(object);
- computeQruisQDM(object);
- computeQruis(object);
- }
- }
- }
-
- /**
- * Le validation des id.
- *
- * @author deniger
- */
- public class IdValidatorForCrue10 implements Validator {
- boolean isCrue10Compatible = true;
-
- private final CtuluAnalyze res = new CtuluAnalyze();
-
- private final List<CtuluAnalyze> lst = Arrays.asList(res);
- private final Map<String, Object> used = new HashMap<String, Object>();
-
- public IdValidatorForCrue10() {
- super();
- res.setDefaultResourceBundle(CommonMessages.RESOURCE_BUNDLE);
- res.setDesc(CommonMessages.getString("validation.noms"));
- }
-
- public List<CtuluAnalyze> getLogs() {
- return lst;
- }
-
- /**
- * @return the res
- */
- public CtuluAnalyze getRes() {
- return res;
- }
-
- /**
- * @return the isCrue10Compatible
- */
- public boolean isCrue10Compatible() {
- return isCrue10Compatible;
- }
-
- public void validate(final Object o) {
- // noeud,strickler,litNomme
- if (o instanceof ObjetNomme) {
- final String id = ((ObjetNomme) o).getId();
- final String nom = ((ObjetNomme) o).getNom();
- final int length = id.length();
- if (length > CruePrefix.NB_CAR_MAX) {
- isCrue10Compatible = false;
- res.addFatalError("valid.nom.tooLong", nom);
- }
- final Object usedObject = used.get(id);
- if (usedObject == null) {
- used.put(id, o);
- } else if (!usedObject.equals(o)) {
- res.addFatalError("valid.nom.notUnique", nom);
- }
-
- }
-
- }
-
- public void validate(final Set<Object> o, final EMH emh, final EMHModeleBase modeleContenant) {
- for (final Object object : o) {
- validate(object);
- }
-
- }
- }
-
- /**
- * Le validation des id.
- *
- * @author deniger
- */
- public class IdValidatorForCrue9 implements Validator {
- boolean isCrue9Compatible = true;
-
- private final CtuluAnalyze res = new CtuluAnalyze();
-
- private final List<CtuluAnalyze> lst = Arrays.asList(res);
- private final Map<String, Object> used = new HashMap<String, Object>();
-
- public IdValidatorForCrue9() {
- super();
- res.setDefaultResourceBundle(CommonMessages.RESOURCE_BUNDLE);
- res.setDesc(CommonMessages.getString("validation.noms"));
- }
-
- public List<CtuluAnalyze> getLogs() {
- return lst;
- }
-
- /**
- * @return the res
- */
- public CtuluAnalyze getRes() {
- return res;
- }
-
- /**
- * @return the isCrue9Compatible
- */
- public boolean isCrue9Compatible() {
- return isCrue9Compatible;
- }
-
- /**
- * @param o l'objet a tester
- * @return true si ecrit dans les fichier crue 9
- */
- private boolean isWrittenByCrue9(final Object o) {
- return (o instanceof LitNomme) || (o instanceof CatEMHNoeud) || (o instanceof CatEMHBranche)
- || (o instanceof CatEMHSection);
-
- }
-
- public void validate(final Object o) {
- // noeud,strickler,litNomme
- if (o instanceof ObjetNomme) {
- final String id = ((ObjetNomme) o).getId();
- final String nom = ((ObjetNomme) o).getNom();
- final int length = id.length();
- if (length > CruePrefix.NB_CAR_MAX_CRUE9_CASIER_PROFIL && o instanceof EMHCasierProfil) {
- isCrue9Compatible = false;
- res.addWarn("valid.nomProfil.tooLong.crue9", nom);
- } else if (length > CruePrefix.NB_CAR_MAX_CRUE9 && isWrittenByCrue9(o)) {
- isCrue9Compatible = false;
- res.addWarn("valid.nom.tooLong.crue9", nom);
-
- }
-
- final Object usedObject = used.get(id);
- if (usedObject == null) {
- used.put(id, o);
- } else if (!usedObject.equals(o)) {
- res.addFatalError("valid.nom.notUnique", nom);
- }
-
- }
-
- }
-
- public void validate(final Set<Object> o, final EMH emh, final EMHModeleBase modeleContenant) {
- for (final Object object : o) {
- validate(object);
- }
-
- }
- }
-
- private interface Validator {
-
List<CtuluAnalyze> getLogs();
/**
@@ -426,69 +69,6 @@
void validate(Set<Object> childs, EMH emh, EMHModeleBase modeleBase);
}
- private class ValueValidator implements Validator {
-
- private final CrueProperties props;
- List<CtuluAnalyze> all = new ArrayList<CtuluAnalyze>();
-
- public ValueValidator(final CrueProperties cruePropertyDefinitionContainer) {
- super();
- this.props = cruePropertyDefinitionContainer;
- }
-
- public List<CtuluAnalyze> getLogs() {
- return all;
- }
-
- public void validate(final Object o, final List<CtuluAnalyze> all, final CtuluAnalyze emhAnalyze,
- final EMH emhContenante) {
- // a revoir
- final Class clazz = o.getClass();
- // if (DonLoiHYConteneur.class.equals(clazz)) {
- // System.err.println("ici");
- // }
- if (LoiDF.class.equals(clazz)) {
- addAnalyze(all, validateLoiDF((LoiDF) o, props));
- } else if (LoiFF.class.equals(clazz)) {
- addAnalyze(all, validateLoiFF((LoiFF) o, props));
- } else if (DonPrtGeoProfilSection.class.equals(clazz)) {
- addAnalyze(all, validateDonPrtGeoProfilSection((DonPrtGeoProfilSection) o, props));
- } else if (DonPrtGeoProfilCasier.class.equals(clazz)) {
- addAnalyze(all, validateDonPrtGeoProfilCasier((DonPrtGeoProfilCasier) o, props));
- } else if (DonFrtStrickler.class.equals(clazz)) {
- addAnalyze(all, validateDonFrt((DonFrtStrickler) o, props));
- } else if (DonFrtManning.class.equals(clazz)) {
- addAnalyze(all, validateDonFrt((DonFrtManning) o, props));
- } else if (OrdPrtGeoModeleBase.class.equals(clazz)) {
- addAnalyze(all, validateOrdPrtGeoModeleBase((OrdPrtGeoModeleBase) o, props));
- } else {
- String prefix = (o == emhContenante) ? null : StringUtils.substringAfterLast(o.getClass().toString(), ".");
- if (o != emhContenante && o instanceof RelationEMH) {
- prefix = CommonMessages.getString("valide.relation", ((RelationEMH) o).getEmh().getNom());
- }
- validateObject(prefix, emhAnalyze, o, props);
- }
- }
-
- public void validate(final Set<Object> o, final EMH emhContenante, final EMHModeleBase modeleBase) {
- final CtuluAnalyze emhAnalyze = new CtuluAnalyze();
- all.add(emhAnalyze);
- emhAnalyze.setDesc("Validation de " + emhContenante.getNom());
- emhAnalyze.setResource(emhContenante.getClass().toString());
- emhAnalyze.setDefaultResourceBundle(CommonMessages.RESOURCE_BUNDLE);
- final ContentEMHValidator contentValidator = new ContentEMHValidator(modeleBase);
- contentValidator.validate(emhAnalyze, emhContenante);
- for (final Object oToTest : o) {
- validate(oToTest, all, emhAnalyze, emhContenante);
- }
- if (emhAnalyze.isEmpty()) {
- all.remove(emhAnalyze);
- }
-
- }
-
- }
-
protected static void addAnalyze(final List<CtuluAnalyze> res, final CtuluAnalyze ana) {
if (ana != null && !ana.isEmpty()) {
res.add(ana);
@@ -606,7 +186,7 @@
validateListPt2d(ptEvolutionFF, props.getLoiAbscisseValidator(in), props.getLoiOrdonneeValidator(in), res, pref);
}
- private static void validePtProfil(final List<PtProfil> in, final CrueProperties validator, final CtuluAnalyze res,
+ static void validePtProfil(final List<PtProfil> in, final CrueProperties validator, final CtuluAnalyze res,
final String pref) {
final PropertyValidator abs = validator.getLoiAbscisseValidator(EnumTypeLoi.LoiPtProfil);
final PropertyValidator ord = validator.getLoiOrdonneeValidator(EnumTypeLoi.LoiPtProfil);
@@ -668,7 +248,7 @@
}
}
- private String getNomLit(final LitNumerote it) {
+ protected static String getNomLit(final LitNumerote it) {
String nomLit = null;
if (it.getNomLit() != null) {
nomLit = it.getNomLit().getNom();
@@ -732,18 +312,19 @@
return log.isEmpty() ? null : log;
}
- public CtuluAnalyze validateDonFrt(final DonFrt cont, final CrueProperties props) {
+ public static CtuluAnalyze validateDonFrt(final DonFrt cont, final CrueProperties props) {
final CtuluAnalyze res = new CtuluAnalyze();
res.setDesc(cont.getNom());
valideLoi(cont.getLoi(), props, res, null);
return res;
}
- public void validateDonFrt(final DonFrt cont, final CrueProperties props, final CtuluAnalyze res, final String prefix) {
+ public static void validateDonFrt(final DonFrt cont, final CrueProperties props, final CtuluAnalyze res,
+ final String prefix) {
valideLoi(cont.getLoi(), props, res, prefix);
}
- protected CtuluAnalyze validateDonPrtGeoProfilCasier(final DonPrtGeoProfilCasier section,
+ protected static CtuluAnalyze validateDonPrtGeoProfilCasier(final DonPrtGeoProfilCasier section,
final CrueProperties validator) {
final CtuluAnalyze res = new CtuluAnalyze();
res.setDesc(section.getNom());
@@ -752,49 +333,9 @@
return res;
}
- protected CtuluAnalyze validateDonPrtGeoProfilSection(final DonPrtGeoProfilSection section, final CrueProperties props) {
+ protected static CtuluAnalyze validateLoiDF(final LoiDF loi, final CrueProperties map) {
final CtuluAnalyze res = new CtuluAnalyze();
- res.setDesc(section.getNom());
- validateObject(null, res, section, props);
- if (section.getFente() != null) {
- validateObject(null, res, section.getFente(), props);
- }
- validePtProfil(section.getPtProfil(), props, res, CommonMessages.getString("validate.pref.profile"));
- // on valide les litNumerotes.
- for (final LitNumerote it : section.getLitNumerote()) {
- if (it.getIsLitActif()) {
- final String nomLit = getNomLit(it);
- validateDonFrt(it.getFrot(), props, res, CommonMessages.getString("validate.frt.forLit", nomLit, it.getFrot()
- .getNom()));
- } else {
- final DonFrt frot = it.getFrot();
- final List<PtEvolutionFF> ptEvolutionFF = frot.getLoi().getEvolutionFF().getPtEvolutionFF();
- boolean err = false;
- if (ptEvolutionFF.size() > 1) {
- err = true;
- } else if (ptEvolutionFF.size() == 1) {
- final PtEvolutionFF pt = ptEvolutionFF.get(0);
- if (!CtuluLib.isZero(pt.getAbscisse(), props.getLoiAbscisseEps(frot.getLoi()))) {
- err = true;
- } else if (!CtuluLib.isZero(pt.getOrdonnee(), props.getLoiOrdonneeEps(frot.getLoi()))) {
- err = true;
- }
- if (err) {
- res.addFatalError(CommonMessages.getString("validate.frt.forLitNonActif.noNull", frot.getNom(),
- getNomLit(it)));
- }
- }
-
- }
-
- }
- return res;
- }
-
- protected CtuluAnalyze validateLoiDF(final LoiDF loi, final CrueProperties map) {
- final CtuluAnalyze res = new CtuluAnalyze();
-
res.setDesc(loi.getNom());
valideLoi(loi, map, res, null);
return res;
@@ -802,14 +343,14 @@
// EMHScenario scenario;
- protected CtuluAnalyze validateLoiFF(final LoiFF loi, final CrueProperties validator) {
+ protected static CtuluAnalyze validateLoiFF(final LoiFF loi, final CrueProperties validator) {
final CtuluAnalyze res = new CtuluAnalyze();
res.setDesc(loi.getNom());
valideLoi(loi, validator, res, null);
return res;
}
- private List<CtuluAnalyze> validateModele(final List<EMH> emhs, final EMHModeleBase modele, final Validator value) {
+ List<CtuluAnalyze> validateModele(final List<EMH> emhs, final EMHModeleBase modele, final Validator value) {
final List<EMHSousModele> sousModele = modele.getSousModele();
final List<EMH> all = new ArrayList<EMH>(emhs.size() + (sousModele == null ? 0 : sousModele.size()) + 1);
all.add(modele);
Added: trunk/soft/fudaa-crue/dodico/src/main/java/org/fudaa/dodico/crue/validation/ValueValidator.java
===================================================================
--- trunk/soft/fudaa-crue/dodico/src/main/java/org/fudaa/dodico/crue/validation/ValueValidator.java (rev 0)
+++ trunk/soft/fudaa-crue/dodico/src/main/java/org/fudaa/dodico/crue/validation/ValueValidator.java 2010-03-04 23:48:28 UTC (rev 5703)
@@ -0,0 +1,153 @@
+/**
+ *
+ */
+package org.fudaa.dodico.crue.validation;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+
+import org.apache.common...
[truncated message content] |