Author: chatellier Date: 2011-04-26 12:34:57 +0000 (Tue, 26 Apr 2011) New Revision: 3288 Log: Rechargement des facteurs (pourcentage/min-max) + test unitaire Modified: isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/mexico/xml/ContinuousDomainXMLVisitor.java isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/mexico/xml/DomXMLParser.java isis-fish/branches/3.3.1/src/test/java/fr/ifremer/isisfish/mexico/MexicoHelperTest.java isis-fish/branches/3.3.1/src/test/resources/mexico/mexicohelper_designplan.xml isis-fish/branches/3.3.1/src/test/resources/mexico/mexicohelper_factorgroupdp.xml Modified: isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/mexico/xml/ContinuousDomainXMLVisitor.java =================================================================== --- isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/mexico/xml/ContinuousDomainXMLVisitor.java 2011-04-26 12:34:21 UTC (rev 3287) +++ isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/mexico/xml/ContinuousDomainXMLVisitor.java 2011-04-26 12:34:57 UTC (rev 3288) @@ -50,7 +50,16 @@ ContinuousDomain cDomain = (ContinuousDomain)domain; xmlBuffer.append(" cardinality=\"" + cDomain.getCardinality() + "\">"); - xmlBuffer.append("<range min=\"" + cDomain.getMinBound() + "\" max=\"" + cDomain.getMaxBound() + "\" />"); + // facteur continue pourcentage + if (cDomain.getOperator() != null) { + xmlBuffer.append("<percentage coefficient=\"" + cDomain.getCoefficient() + "\""); + xmlBuffer.append(" operator=\"" + cDomain.getOperator() + "\""); + xmlBuffer.append(" reference=\"" + cDomain.getReferenceValue() + "\" />"); + } + else { + // facteur continue min/max + xmlBuffer.append("<range min=\"" + cDomain.getMinBound() + "\" max=\"" + cDomain.getMaxBound() + "\" />"); + } } /** Modified: isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/mexico/xml/DomXMLParser.java =================================================================== --- isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/mexico/xml/DomXMLParser.java 2011-04-26 12:34:21 UTC (rev 3287) +++ isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/mexico/xml/DomXMLParser.java 2011-04-26 12:34:57 UTC (rev 3288) @@ -147,14 +147,22 @@ else { // continous domain domain = new ContinuousDomain(); + + Element percentageElement = fixedElement.element("percentage"); + if (percentageElement != null) { + domain.setCoefficient(Double.valueOf(percentageElement.attributeValue("coefficient"))); + domain.setOperator(percentageElement.attributeValue("operator")); + domain.setReferenceValue(Double.valueOf(percentageElement.attributeValue("reference"))); + } + else { + // <range max="1.0" min="0.0"/> + Element rangeElement = fixedElement.element("range"); + domain.setMinBound(Double.valueOf(rangeElement.attributeValue("min"))); + domain.setMaxBound(Double.valueOf(rangeElement.attributeValue("max"))); + } } - + domain.setCardinality(Integer.valueOf(fixedElement.attributeValue("cardinality"))); - - // <range max="1.0" min="0.0"/> - Element rangeElement = fixedElement.element("range"); - domain.setMinBound(Double.valueOf(rangeElement.attributeValue("min"))); - domain.setMaxBound(Double.valueOf(rangeElement.attributeValue("max"))); factor.setDomain(domain); } else if ("discrete".equals(property)) { @@ -210,15 +218,24 @@ else { // continous domain domain = new ContinuousDomain(); + + Element percentageElement = fixedElement.element("percentage"); + if (percentageElement != null) { + domain.setCoefficient(Double.valueOf(percentageElement.attributeValue("coefficient"))); + domain.setOperator(percentageElement.attributeValue("operator")); + domain.setReferenceValue(Double.valueOf(percentageElement.attributeValue("reference"))); + } + else { + // <range max="1" min="3"/> + Element rangeElement = fixedElement.element("range"); + domain.setMinBound(Integer.valueOf(rangeElement.attributeValue("min"))); + domain.setMaxBound(Integer.valueOf(rangeElement.attributeValue("max"))); + } + } domain.setCardinality(Integer.valueOf(fixedElement.attributeValue("cardinality"))); - // <range max="1" min="3"/> - Element rangeElement = fixedElement.element("range"); - domain.setMinBound(Integer.valueOf(rangeElement.attributeValue("min"))); - domain.setMaxBound(Integer.valueOf(rangeElement.attributeValue("max"))); - factor.setDomain(domain); } else if ("discrete".equals(property)) { DiscreteDomain domain = new DiscreteDomain(); Modified: isis-fish/branches/3.3.1/src/test/java/fr/ifremer/isisfish/mexico/MexicoHelperTest.java =================================================================== --- isis-fish/branches/3.3.1/src/test/java/fr/ifremer/isisfish/mexico/MexicoHelperTest.java 2011-04-26 12:34:21 UTC (rev 3287) +++ isis-fish/branches/3.3.1/src/test/java/fr/ifremer/isisfish/mexico/MexicoHelperTest.java 2011-04-26 12:34:57 UTC (rev 3288) @@ -28,6 +28,7 @@ import java.io.File; import java.io.IOException; import java.util.Arrays; +import java.util.List; import java.util.Properties; import java.util.SortedMap; import java.util.TreeMap; @@ -158,18 +159,30 @@ domain5.setOperator("-"); factorEquationContinuous.setDomain(domain5); factorEquationContinuous.setPath("fr.ifremer.isisfish.entities.PopulationGroup#1156461521076#0.6526656643346673#maxLength"); - - // factor 6 : rule factor - Factor factorRuleDiscrete = new Factor("factor 6 (RuleDiscrete)"); - RuleDomain domain6 = new RuleDomain(); - SortedMap<Object, Object> rules = new TreeMap<Object, Object>(); - rules.put("ruleset1", Arrays.asList(ruleTacPoids, ruleTailleMin)); - rules.put("ruleset2", Arrays.asList(ruleTailleMin)); - domain6.setValues(rules); - factorRuleDiscrete.setDomain(domain6); - + + // factor 1 + Factor factorContinuousPercentage = new Factor("factor 6 (double continuous percentage)"); + ContinuousDomain domain6 = new ContinuousDomain(); + domain6.setCoefficient(5.0); + domain6.setReferenceValue(14.0); + domain6.setOperator("*"); + domain6.setCardinality(5); + factorContinuousPercentage.setDomain(domain6); + factorContinuousPercentage.setPath("fr.ifremer.isisfish.entities.PopulationGroup#1142003453434#0.223499349929004#size"); + // 3.4.0.0 if (useGroupAndRule) { + + // factor 7 : rule factor + Factor factorRuleDiscrete = new Factor("factor 7 (RuleDiscrete)"); + RuleDomain domain7 = new RuleDomain(); + SortedMap<Object, Object> rules = new TreeMap<Object, Object>(); + rules.put("ruleset1", Arrays.asList(ruleTacPoids, ruleTailleMin)); + rules.put("ruleset2", Arrays.asList(ruleTailleMin)); + domain7.setValues(rules); + factorRuleDiscrete.setDomain(domain7); + factorRuleDiscrete.setPath("parameters.rules"); + FactorGroup group1 = new FactorGroup("discretegrp"); group1.addFactor(factorDiscrete); group1.addFactor(factorRuleDiscrete); @@ -189,6 +202,7 @@ designPlan.addFactor(factorContinuous2); designPlan.addFactor(factorMatrixContinuous); designPlan.addFactor(factorEquationContinuous); + designPlan.addFactor(factorContinuousPercentage); } return designPlan; @@ -242,13 +256,20 @@ File testFile = new File("src/test/resources/mexico/mexicohelper_designplan.xml"); // topia context can be null in tests DesignPlan plan = MexicoHelper.getDesignPlanFromXML(testFile, null); + List<Factor> factors = plan.getFactors(); - Assert.assertEquals(5, plan.getFactors().size()); + Assert.assertEquals(6, factors.size()); String xml = MexicoHelper.getDesignPlanAsXML(plan); if (log.isDebugEnabled()) { log.debug("testGetDesignPlanFromXML xml = " + xml); } + + // assert on continuous factor (percentage, non percentage) (3.4.0.0) + ContinuousDomain domain1 = (ContinuousDomain)factors.get(0).getDomain(); + Assert.assertNull(domain1.getOperator()); + ContinuousDomain domain6 = (ContinuousDomain)factors.get(5).getDomain(); + Assert.assertNotNull(domain6.getOperator()); } /** Modified: isis-fish/branches/3.3.1/src/test/resources/mexico/mexicohelper_designplan.xml =================================================================== --- isis-fish/branches/3.3.1/src/test/resources/mexico/mexicohelper_designplan.xml 2011-04-26 12:34:21 UTC (rev 3287) +++ isis-fish/branches/3.3.1/src/test/resources/mexico/mexicohelper_designplan.xml 2011-04-26 12:34:57 UTC (rev 3288) @@ -97,5 +97,13 @@ </fixed> </domain> </factor> + <factor name="factor 6 (double continuous percentage)" property="continuous" type="real"> + <target>fr.ifremer.isisfish.entities.PopulationGroup#1142003453434#0.223499349929004#size</target> + <domain> + <fixed cardinality="5"> + <percentage operator="*" coefficient="5" reference="14"/> + </fixed> + </domain> + </factor> </factors> </experimentalDesign> \ No newline at end of file Modified: isis-fish/branches/3.3.1/src/test/resources/mexico/mexicohelper_factorgroupdp.xml =================================================================== --- isis-fish/branches/3.3.1/src/test/resources/mexico/mexicohelper_factorgroupdp.xml 2011-04-26 12:34:21 UTC (rev 3287) +++ isis-fish/branches/3.3.1/src/test/resources/mexico/mexicohelper_factorgroupdp.xml 2011-04-26 12:34:57 UTC (rev 3288) @@ -87,8 +87,8 @@ </fixed> </domain> </factor> - <factor name="factor 6 (RuleDiscrete)" property="discrete" type="rule"> - <target>null</target> + <factor name="factor 7 (RuleDiscrete)" property="discrete" type="rule"> + <target>parameters.rules</target> <domain> <fixed cardinality="2"> <enumeration>