Author: chatellier Date: 2011-06-01 08:58:32 +0000 (Wed, 01 Jun 2011) New Revision: 3346 Log: Add support for discrete equation domain Added: isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/mexico/xml/EquationDiscreteDomainXMLVisitor.java isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/domain/EquationDiscreteDomain.java 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/FactorXMLVisitor.java isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/ui/simulator/SimulAction.java isis-fish/branches/3.3.1/src/test/java/fr/ifremer/isisfish/mexico/MexicoHelperTest.java 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-05-31 15:54:57 UTC (rev 3345) +++ isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/mexico/xml/DomXMLParser.java 2011-06-01 08:58:32 UTC (rev 3346) @@ -27,6 +27,7 @@ import java.util.List; +import org.apache.commons.lang.StringEscapeUtils; import org.dom4j.Element; import org.nuiton.math.matrix.MatrixND; import org.nuiton.topia.TopiaContext; @@ -39,6 +40,7 @@ import fr.ifremer.isisfish.simulator.sensitivity.domain.ContinuousDomain; import fr.ifremer.isisfish.simulator.sensitivity.domain.DiscreteDomain; import fr.ifremer.isisfish.simulator.sensitivity.domain.EquationContinuousDomain; +import fr.ifremer.isisfish.simulator.sensitivity.domain.EquationDiscreteDomain; import fr.ifremer.isisfish.simulator.sensitivity.domain.MatrixContinuousDomain; import fr.ifremer.isisfish.simulator.sensitivity.domain.RuleDiscreteDomain; @@ -505,6 +507,22 @@ factor.setDomain(domain); } factorGroup.addFactor(factor); + } else if ("equation".equals(type)) { + Factor factor = new Factor(name); + factor.setPath(path); + Element fixedElement = factorElement.element("domain").element("fixed"); + if ("discrete".equals(property)) { + EquationDiscreteDomain domain = new EquationDiscreteDomain(); + List<Element> valueElements = fixedElement.element("enumeration").elements("value"); + int label = 0; + for (Element valueElement : valueElements) { + String content = StringEscapeUtils.unescapeXml(valueElement.getText()); + domain.getValues().put(Integer.valueOf(label), content); + ++label; + } + factor.setDomain(domain); + } + factorGroup.addFactor(factor); } } Added: isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/mexico/xml/EquationDiscreteDomainXMLVisitor.java =================================================================== --- isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/mexico/xml/EquationDiscreteDomainXMLVisitor.java (rev 0) +++ isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/mexico/xml/EquationDiscreteDomainXMLVisitor.java 2011-06-01 08:58:32 UTC (rev 3346) @@ -0,0 +1,53 @@ +/* + * #%L + * IsisFish + * + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2011 Ifremer, CodeLutin, Chatellier Eric + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 2 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-2.0.html>. + * #L% + */ + +package fr.ifremer.isisfish.mexico.xml; + +import org.apache.commons.lang.StringEscapeUtils; + +import fr.ifremer.isisfish.simulator.sensitivity.Domain; + +/** + * XML equation discrete domain visitor. + * + * @author chatellier + * @version $Revision$ + * + * Last update : $Date$ + * By : $Author$ + */ +public class EquationDiscreteDomainXMLVisitor extends DiscreteDomainXMLVisitor { + + /** + * {@inheritDoc} + */ + @Override + public void visit(Domain domain, Object label, Object value) { + String content = (String)value; + xmlBuffer.append("<value>"); + xmlBuffer.append(StringEscapeUtils.escapeXml(content)); + xmlBuffer.append("</value>"); + } +} Property changes on: isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/mexico/xml/EquationDiscreteDomainXMLVisitor.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Modified: isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/mexico/xml/FactorXMLVisitor.java =================================================================== --- isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/mexico/xml/FactorXMLVisitor.java 2011-05-31 15:54:57 UTC (rev 3345) +++ isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/mexico/xml/FactorXMLVisitor.java 2011-06-01 08:58:32 UTC (rev 3346) @@ -32,6 +32,7 @@ import fr.ifremer.isisfish.simulator.sensitivity.domain.ContinuousDomain; import fr.ifremer.isisfish.simulator.sensitivity.domain.DiscreteDomain; import fr.ifremer.isisfish.simulator.sensitivity.domain.EquationContinuousDomain; +import fr.ifremer.isisfish.simulator.sensitivity.domain.EquationDiscreteDomain; import fr.ifremer.isisfish.simulator.sensitivity.domain.MatrixContinuousDomain; import fr.ifremer.isisfish.simulator.sensitivity.domain.RuleDiscreteDomain; import fr.ifremer.isisfish.simulator.sensitivity.visitor.FactorVisitor; @@ -93,6 +94,9 @@ else if (factor.getDomain() instanceof RuleDiscreteDomain) { xmlBuffer.append(" type=\"rule\""); } + else if (factor.getDomain() instanceof EquationDiscreteDomain) { + xmlBuffer.append(" type=\"equation\""); + } xmlBuffer.append(">"); // target element xmlBuffer.append("<target>" + factor.getPath() + "</target>"); @@ -112,17 +116,15 @@ DomainXMLVisitor visitor = null; if (factor.getDomain() instanceof MatrixContinuousDomain) { visitor = new MatrixContinuousDomainXMLVisitor(); - } - else if (factor.getDomain() instanceof EquationContinuousDomain) { + } else if (factor.getDomain() instanceof EquationContinuousDomain) { visitor = new EquationContinuousDomainXMLVisitor(); - } - else if (factor.getDomain() instanceof ContinuousDomain) { + } else if (factor.getDomain() instanceof ContinuousDomain) { visitor = new ContinuousDomainXMLVisitor(); - } - else if (factor.getDomain() instanceof RuleDiscreteDomain) { + } else if (factor.getDomain() instanceof RuleDiscreteDomain) { visitor = new RuleDiscreteDomainXMLVisitor(); - } - else if (factor.getDomain() instanceof DiscreteDomain) { + } else if (factor.getDomain() instanceof EquationDiscreteDomain) { + visitor = new EquationDiscreteDomainXMLVisitor(); + } else if (factor.getDomain() instanceof DiscreteDomain) { visitor = new DiscreteDomainXMLVisitor(); } domain.accept(visitor); Added: isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/domain/EquationDiscreteDomain.java =================================================================== --- isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/domain/EquationDiscreteDomain.java (rev 0) +++ isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/domain/EquationDiscreteDomain.java 2011-06-01 08:58:32 UTC (rev 3346) @@ -0,0 +1,46 @@ +/* + * #%L + * IsisFish + * + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2011 Ifremer, CodeLutin, Chatellier Eric + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 2 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-2.0.html>. + * #L% + */ + +package fr.ifremer.isisfish.simulator.sensitivity.domain; + +import fr.ifremer.isisfish.entities.Equation; + +/** + * Factor domain for {@link Equation}s. + * + * @author chatellier + * @version $Revision$ + * + * @since 3.4.0.0 + * + * Last update : $Date$ + * By : $Author$ + */ +public class EquationDiscreteDomain extends DiscreteDomain { + + /** serialVersionUID. */ + private static final long serialVersionUID = -5611785362638191719L; + +} Property changes on: isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/domain/EquationDiscreteDomain.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Modified: isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/ui/simulator/SimulAction.java =================================================================== --- isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/ui/simulator/SimulAction.java 2011-05-31 15:54:57 UTC (rev 3345) +++ isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/ui/simulator/SimulAction.java 2011-06-01 08:58:32 UTC (rev 3346) @@ -92,6 +92,7 @@ import fr.ifremer.isisfish.simulator.sensitivity.domain.ContinuousDomain; import fr.ifremer.isisfish.simulator.sensitivity.domain.DiscreteDomain; import fr.ifremer.isisfish.simulator.sensitivity.domain.EquationContinuousDomain; +import fr.ifremer.isisfish.simulator.sensitivity.domain.EquationDiscreteDomain; import fr.ifremer.isisfish.simulator.sensitivity.domain.MatrixContinuousDomain; import fr.ifremer.isisfish.simulator.sensitivity.domain.RuleDiscreteDomain; import fr.ifremer.isisfish.ui.SimulationUI; @@ -942,16 +943,22 @@ public void addDiscreteFactor(String name, String comment, String path, List<Object> values, boolean exist) { + addDiscreteFactor(new DiscreteDomain(), name, comment, path, values, exist); + } + + public void addDiscreteRuleFactor(String name, String comment, String path, + List<Object> values, boolean exist) { + addDiscreteFactor(new RuleDiscreteDomain(), name, comment, path, values, exist); + } + + public void addDiscreteEquationFactor(String name, String comment, String path, + List<Object> values, boolean exist) { + addDiscreteFactor(new EquationDiscreteDomain(), name, comment, path, values, exist); + } + + protected void addDiscreteFactor(DiscreteDomain domain, String name, String comment, String path, + List<Object> values, boolean exist) { Factor f = new Factor(name); - DiscreteDomain domain = null; - // FIXME echatellier gere le path mieux que ca - if ("parameters.rules".equals(path)) { - domain = new RuleDiscreteDomain(); - } - else { - domain = new DiscreteDomain(); - } - SortedMap<Object, Object> domainValues = new TreeMap<Object, Object>(); int label = 0; for (Object value : values) { 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-05-31 15:54:57 UTC (rev 3345) +++ isis-fish/branches/3.3.1/src/test/java/fr/ifremer/isisfish/mexico/MexicoHelperTest.java 2011-06-01 08:58:32 UTC (rev 3346) @@ -56,6 +56,7 @@ import fr.ifremer.isisfish.simulator.sensitivity.domain.ContinuousDomain; import fr.ifremer.isisfish.simulator.sensitivity.domain.DiscreteDomain; import fr.ifremer.isisfish.simulator.sensitivity.domain.EquationContinuousDomain; +import fr.ifremer.isisfish.simulator.sensitivity.domain.EquationDiscreteDomain; import fr.ifremer.isisfish.simulator.sensitivity.domain.MatrixContinuousDomain; import fr.ifremer.isisfish.simulator.sensitivity.domain.RuleDiscreteDomain; @@ -417,6 +418,43 @@ } /** + * Test l'ajout des nouveaux type de facteurs equation discrete. + * + * @throws IOException + * @throws IsisFishException + */ + @Test + public void testDiscreteEquationFactor() throws IOException, IsisFishException { + + // get test plan and add some STRANGES factors + DesignPlan testDesignPlan = getTestDesignPlan(false); + + // factor x6 + Factor factorEquationDiscrete = new Factor("factor x6"); + EquationDiscreteDomain domain6 = new EquationDiscreteDomain(); + domain6.getValues().put("1", "if ( context.getValue() < 1.0) {\n\treturn 1.0;\n} else {\treturn context.getValue();\n}"); + domain6.getValues().put("2", "if ( context.getValue() < 1.666) {\n\treturn 1.666;\n} else {\treturn context.getValue();\n}"); + factorEquationDiscrete.setDomain(domain6); + factorEquationDiscrete.setPath("fr.ifremer.isisfish.entities.PopulationGroup#1156461521076#0.6526656643346673#maxLength"); + + testDesignPlan.addFactor(factorEquationDiscrete); + + // test write + String content = MexicoHelper.getDesignPlanAsXML(testDesignPlan); + Assert.assertTrue(content.contains("context.getValue() < 1.0")); + + File tempFile = File.createTempFile("testdesignplan", ".xml"); + tempFile.deleteOnExit(); + FileUtils.writeStringToFile(tempFile, content); + + // test to read it and get content + DesignPlan plan = MexicoHelper.getDesignPlanFromXML(tempFile, null); + String reReadContent = MexicoHelper.getDesignPlanAsXML(plan); + + Assert.assertEquals(content, reReadContent); + } + + /** * Test que l'export XML de l'import XML produise le meme xml. * Pareil, mais pour une version v2 du schema xml. *