Isis-fish-commits
Threads by month
- ----- 2026 -----
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
March 2012
- 2 participants
- 47 discussions
r3659 - in branches/4.0.1/src: main/java/fr/ifremer/isisfish/mexico main/java/fr/ifremer/isisfish/mexico/xml test/java/fr/ifremer/isisfish/mexico
by echatellier@users.forge.codelutin.com 15 Mar '12
by echatellier@users.forge.codelutin.com 15 Mar '12
15 Mar '12
Author: echatellier
Date: 2012-03-15 18:43:01 +0100 (Thu, 15 Mar 2012)
New Revision: 3659
Url: http://forge.codelutin.com/repositories/revision/isis-fish/3659
Log:
Fix design plan V1 & V2 import and begin V3 import
Removed:
branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/xml/ScenarioXMLVisitor.java
branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/xml/SensitivityScenariosXMLVisitor.java
Modified:
branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/package-info.java
branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/xml/AbstractXMLVisitor.java
branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/xml/ContinuousDomainXMLVisitor.java
branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/xml/DesignPlanXMLVisitor.java
branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/xml/DiscreteDomainXMLVisitor.java
branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/xml/DomXMLParser.java
branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/xml/DomainXMLVisitor.java
branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/xml/EquationDiscreteDomainXMLVisitor.java
branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/xml/FactorGroupXMLVisitor.java
branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/xml/FactorXMLVisitor.java
branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/xml/RuleDiscreteDomainXMLVisitor.java
branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/xml/package-info.java
branches/4.0.1/src/test/java/fr/ifremer/isisfish/mexico/MexicoHelperTest.java
Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/package-info.java
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/package-info.java 2012-03-15 15:26:06 UTC (rev 3658)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/package-info.java 2012-03-15 17:43:01 UTC (rev 3659)
@@ -5,7 +5,7 @@
* $Id$
* $HeadURL$
* %%
- * Copyright (C) 1999 - 2011 Ifremer, CodeLutin, Chatellier Eric
+ * Copyright (C) 1999 - 2012 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
Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/xml/AbstractXMLVisitor.java
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/xml/AbstractXMLVisitor.java 2012-03-15 15:26:06 UTC (rev 3658)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/xml/AbstractXMLVisitor.java 2012-03-15 17:43:01 UTC (rev 3659)
@@ -3,7 +3,7 @@
* $Id$
* $HeadURL$
* %%
- * Copyright (C) 2011 Ifremer, Codelutin, Chatellier Eric
+ * Copyright (C) 2011 - 2012 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
Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/xml/ContinuousDomainXMLVisitor.java
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/xml/ContinuousDomainXMLVisitor.java 2012-03-15 15:26:06 UTC (rev 3658)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/xml/ContinuousDomainXMLVisitor.java 2012-03-15 17:43:01 UTC (rev 3659)
@@ -49,28 +49,15 @@
*/
@Override
public void start(Domain domain) {
- super.start(domain);
-
ContinuousDomain cDomain = (ContinuousDomain)domain;
- appendDomain(cDomain);
- }
-
- /**
- * Default ContinuousDomain implementation for double.
- * Maybe overridden by specific continuous domains.
- *
- * @param domain domain to print
- */
- protected void appendDomain(ContinuousDomain domain) {
- xmlBuffer.append("<distribution name=\"" + domain.getDistribution().toString().toLowerCase() + "\">");
- for (Entry<String, Object> distributionParameterEntry : domain.getDistributionParameters().entrySet()) {
+ xmlBuffer.append("<domain distribution=\"" + cDomain.getDistribution().toString().toLowerCase() + "\">");
+ for (Entry<String, Object> distributionParameterEntry : cDomain.getDistributionParameters().entrySet()) {
String name = distributionParameterEntry.getKey();
Object value = distributionParameterEntry.getValue();
xmlBuffer.append("<distributionParameter name=\"" + name + "\"");
appendParamValue(xmlBuffer, value);
xmlBuffer.append("</distributionParameter>");
}
- xmlBuffer.append("</distribution>");
}
/**
@@ -80,7 +67,6 @@
* @param value value to append
*/
protected void appendParamValue(StringBuffer xmlBuffer, Object value) {
-
if (value instanceof MatrixND) {
xmlBuffer.append(" type=\"matrix\">");
xmlBuffer.append(MexicoHelper.getMatrixAsXML((MatrixND)value));
@@ -88,7 +74,6 @@
xmlBuffer.append(" type=\"double\">");
xmlBuffer.append(value.toString());
}
-
}
/**
@@ -98,4 +83,12 @@
public void visit(Domain domain, Object label, Object value) {
}
+
+ /*
+ * @see fr.ifremer.isisfish.simulator.sensitivity.visitor.DomainVisitor#end(fr.ifremer.isisfish.simulator.sensitivity.Domain)
+ */
+ @Override
+ public void end(Domain domain) {
+ xmlBuffer.append("</domain>");
+ }
}
Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/xml/DesignPlanXMLVisitor.java
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/xml/DesignPlanXMLVisitor.java 2012-03-15 15:26:06 UTC (rev 3658)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/xml/DesignPlanXMLVisitor.java 2012-03-15 17:43:01 UTC (rev 3659)
@@ -68,7 +68,10 @@
int dateIndex = ArrayUtils.indexOf(args, "date");
int idIndex = ArrayUtils.indexOf(args, "id");
- xmlBuffer.append("<experimentalDesign version=\"3\"");
+ xmlBuffer.append("<experimentalDesign");
+ // for validation (tests)
+ xmlBuffer.append(" xmlns='http://www.reseau-mexico.fr/sites/reseau-mexico.fr/files/expDesign.xsd'");
+ xmlBuffer.append(" version=\"3\"");
xmlBuffer.append(" author=\"" + (authorIndex != -1 ? args[authorIndex + 1] : "") + "\"");
xmlBuffer.append(" license=\"" + (licenseIndex != -1 ? args[licenseIndex + 1] : "") + "\"");
xmlBuffer.append(" date=\"" + (dateIndex != -1 ? args[dateIndex + 1] : new Date()) + "\"");
@@ -79,11 +82,12 @@
* {@inheritDoc}
*/
@Override
- public void visit(DesignPlan designPlan,
- FactorGroup factorGroup) {
+ public void visit(DesignPlan designPlan, FactorGroup factorGroup) {
+ xmlBuffer.append("<factors>");
FactorGroupXMLVisitor visitor = new FactorGroupXMLVisitor();
factorGroup.accept(visitor);
xmlBuffer.append(visitor.getXML());
+ xmlBuffer.append("</factors>");
}
/**
Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/xml/DiscreteDomainXMLVisitor.java
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/xml/DiscreteDomainXMLVisitor.java 2012-03-15 15:26:06 UTC (rev 3658)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/xml/DiscreteDomainXMLVisitor.java 2012-03-15 17:43:01 UTC (rev 3659)
@@ -39,6 +39,16 @@
*/
public class DiscreteDomainXMLVisitor extends DomainXMLVisitor {
+ /*
+ * @see fr.ifremer.isisfish.simulator.sensitivity.visitor.DomainVisitor#start(fr.ifremer.isisfish.simulator.sensitivity.Domain)
+ */
+ @Override
+ public void start(Domain domain) {
+ // lorsque le facteur est catégoriel, la liste de ses niveaux, par une
+ // liste ouverte d'éléments 'level', d'attributs 'value' et 'weight')
+ xmlBuffer.append("<domain distributionName=\"categorical\" type=\"todo\"");
+ }
+
/**
* {@inheritDoc}
*/
@@ -46,6 +56,14 @@
public void visit(Domain domain, Object label, Object value) {
xmlBuffer.append("<level name=\"" + label + "\">");
xmlBuffer.append(MexicoHelper.getStringFromObject(value));
- xmlBuffer.append("<level>");
+ xmlBuffer.append("</level>");
}
+
+ /*
+ * @see fr.ifremer.isisfish.simulator.sensitivity.visitor.DomainVisitor#end(fr.ifremer.isisfish.simulator.sensitivity.Domain)
+ */
+ @Override
+ public void end(Domain domain) {
+ xmlBuffer.append("</domain>");
+ }
}
Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/xml/DomXMLParser.java
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/xml/DomXMLParser.java 2012-03-15 15:26:06 UTC (rev 3658)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/xml/DomXMLParser.java 2012-03-15 17:43:01 UTC (rev 3659)
@@ -25,10 +25,14 @@
package fr.ifremer.isisfish.mexico.xml;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang3.StringEscapeUtils;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
import org.dom4j.Element;
import org.nuiton.math.matrix.MatrixND;
import org.nuiton.topia.TopiaContext;
@@ -36,6 +40,8 @@
import fr.ifremer.isisfish.mexico.MexicoHelper;
import fr.ifremer.isisfish.rule.Rule;
import fr.ifremer.isisfish.simulator.sensitivity.DesignPlan;
+import fr.ifremer.isisfish.simulator.sensitivity.Distribution;
+import fr.ifremer.isisfish.simulator.sensitivity.Domain;
import fr.ifremer.isisfish.simulator.sensitivity.Factor;
import fr.ifremer.isisfish.simulator.sensitivity.FactorGroup;
import fr.ifremer.isisfish.simulator.sensitivity.domain.ContinuousDomain;
@@ -56,32 +62,7 @@
*/
public class DomXMLParser {
- public static final String DISCRETE = "discrete";
- public static final String ENUMERATION = "enumeration";
- public static final String DOMAIN = "domain";
- public static final String FIXED = "fixed";
- public static final String VALUE = "value";
- public static final String RULE = "rule";
- public static final String RULES = "rules";
- public static final String VERSION = "version";
- public static final String NAME = "name";
- public static final String TYPE = "type";
- public static final String PROPERTY = "property";
- public static final String TARGET = "target";
- public static final String CONTINUOUS = "continuous";
- public static final String MATRIXCONTINUOUS = "matrixcontinuous";
- public static final String COEFFICIENT = "coefficient";
- public static final String EQUATIONCONTINUOUS = "equationcontinuous";
- public static final String EQUATION = "equation";
- public static final String VARIABLE = "variable";
- public static final String PERCENTAGE = "percentage";
- public static final String REFERENCE = "reference";
- public static final String RANGE = "range";
- public static final String MIN = "min";
- public static final String MAX = "max";
- public static final String CARDINALITY = "cardinality";
- public static final String INTEGER = "integer";
- public static final String MX = "mx";
+ private static Log log = LogFactory.getLog(DomXMLParser.class);
/**
* Parse element root node as Design plan.
@@ -95,7 +76,7 @@
DesignPlan plan = new DesignPlan();
// could return "2" or null
- String version = rootElement.attributeValue(VERSION);
+ String version = rootElement.attributeValue("version");
List<Element> factorGroupElements = rootElement.selectNodes("child::factors");
FactorGroup factorGroup = null;
@@ -128,12 +109,12 @@
@Deprecated
protected static FactorGroup parseFactorGroup(Element fgElement, TopiaContext topiaContext) {
- String factorGroupName = fgElement.attributeValue(NAME);
+ String factorGroupName = fgElement.attributeValue("name");
String factorGroupType = fgElement.attributeValue("type");
boolean continuous = "continuous".equalsIgnoreCase(factorGroupType);
FactorGroup factorGroup = new FactorGroup(factorGroupName, continuous);
- /*// sub factor group
+ // sub factor group
List<Element> factorGroupElements = fgElement.selectNodes("child::factors");
for (Element factorGroupElement : factorGroupElements) {
FactorGroup subFactorGroup = parseFactorGroup(factorGroupElement, topiaContext);
@@ -144,141 +125,136 @@
List<Element> factorElements = fgElement.selectNodes("child::factor");
for (Element factorElement : factorElements) {
- String type = factorElement.attributeValue(TYPE);
- String name = factorElement.attributeValue(NAME);
- String property = factorElement.attributeValue(PROPERTY);
- String path = factorElement.element(TARGET).getText().trim();
+ String type = factorElement.attributeValue("type");
+ String name = factorElement.attributeValue("name");
+ String property = factorElement.attributeValue("property");
+ String path = factorElement.element("target").getTextTrim();
// double
if ("real".equals(type)) {
Factor factor = new Factor(name);
factor.setPath(path);
- Element fixedElement = factorElement.element(DOMAIN).element(FIXED);
+ Element fixedElement = factorElement.element("domain").element("fixed");
// tous les domaines continues
- if (property.endsWith(CONTINUOUS)) {
+ if (property.endsWith("continuous")) {
ContinuousDomain domain;
- if (property.equals(MATRIXCONTINUOUS)) {
+ if (property.equals("matrixcontinuous")) {
// matrix specific
// <coefficient operator="-" value="0.799"/>
- MatrixContinuousDomain mdomain = new MatrixContinuousDomain(true);
- Element coefficientElement = fixedElement.element(COEFFICIENT);
- mdomain.setCoefficient(Double.valueOf(coefficientElement.attributeValue(VALUE)));
+ domain = new ContinuousDomain(Distribution.QUNIFPC);
+ Element coefficientElement = fixedElement.element("coefficient");
+ domain.addDistributionParam("coefficient", Double.valueOf(coefficientElement.attributeValue("value")));
// <mx name="test1" step="0">...
- Element matrixElement = fixedElement.element(MX);
+ Element matrixElement = fixedElement.element("mx");
MatrixND matrix = MexicoHelper.getMatrixFromXml(matrixElement, topiaContext);
- mdomain.setReferenceValue(matrix);
-
- domain = mdomain;
+ domain.addDistributionParam("reference", matrix);
}
- else if (property.equals(EQUATIONCONTINUOUS)) {
+ else if (property.equals("equationcontinuous")) {
// equation specific
- EquationContinuousDomain edomain = new EquationContinuousDomain(true);
- Element coefficientElement = fixedElement.element(COEFFICIENT);
- edomain.setCoefficient(Double.valueOf(coefficientElement.attributeValue(VALUE)));
+ domain = new ContinuousDomain(Distribution.QUNIFPC);
+ Element coefficientElement = fixedElement.element("coefficient");
+ domain.addDistributionParam("coefficient", Double.valueOf(coefficientElement.attributeValue("value")));
- Element equationElement = fixedElement.element(EQUATION);
- edomain.setReferenceValue(Double.valueOf(equationElement.attributeValue(REFERENCE)));
- edomain.setVariableName(equationElement.attributeValue(VARIABLE));
+ Element equationElement = fixedElement.element("equation");
+ domain.addDistributionParam("reference", Double.valueOf(equationElement.attributeValue("reference")));
+ String variable = equationElement.attributeValue("variable");
+ factor.setEquationVariableName(variable);
+ // hack since 4.0.1, factor name doesn't contains variable
+ name = StringUtils.removeEnd(name, "." + variable);
+ factor.setName(name);
- domain = edomain;
}
else {
// continous domain
- domain = new ContinuousDomain();
- Element percentageElement = fixedElement.element(PERCENTAGE);
+ Element percentageElement = fixedElement.element("percentage");
if (percentageElement != null) {
- domain.setCoefficient(Double.valueOf(percentageElement.attributeValue(COEFFICIENT)));
- domain.setReferenceValue(Double.valueOf(percentageElement.attributeValue(REFERENCE)));
- domain.setPercentageType(true);
+ domain = new ContinuousDomain(Distribution.QUNIFPC);
+ domain.addDistributionParam("coefficient", Double.valueOf(percentageElement.attributeValue("coefficient")));
+ domain.addDistributionParam("reference", 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 = new ContinuousDomain(Distribution.QUNIFMM);
+ Element rangeElement = fixedElement.element("range");
+ domain.addDistributionParam("min", Double.valueOf(rangeElement.attributeValue("min")));
+ domain.addDistributionParam("max", Double.valueOf(rangeElement.attributeValue("max")));
}
}
- factor.setCardinality(Integer.valueOf(fixedElement.attributeValue(CARDINALITY)));
+ factor.setCardinality(Integer.valueOf(fixedElement.attributeValue("cardinality")));
factor.setDomain(domain);
- } else if (DISCRETE.equals(property)) {
+ } else if ("discrete".equals(property)) {
DiscreteDomain domain = new DiscreteDomain();
- List<Element> valueElements = fixedElement.element(
- ENUMERATION).elements(VALUE);
+ List<Element> valueElements = fixedElement.element("enumeration").elements("value");
int label = 0;
for (Element valueElement : valueElements) {
- domain.getValues().put(label,
- Double.valueOf(valueElement.getTextTrim()));
+ domain.getValues().put(label, Double.valueOf(valueElement.getTextTrim()));
++label;
}
factor.setDomain(domain);
}
factorGroup.addFactor(factor);
- } else if (INTEGER.equals(type)) {
+ } else if ("integer".equals(type)) {
Factor factor = new Factor(name);
factor.setPath(path);
- Element fixedElement = factorElement.element(DOMAIN).element(FIXED);
- if (CONTINUOUS.equals(property)) {
+ Element fixedElement = factorElement.element("domain").element("fixed");
+ if ("continuous".equals(property)) {
ContinuousDomain domain;
- if(property.equals(MATRIXCONTINUOUS)) {
+ if(property.equals("matrixcontinuous")) {
// matrix specific
- MatrixContinuousDomain mdomain = new MatrixContinuousDomain(true);
+ domain = new ContinuousDomain(Distribution.QUNIFPC);
- Element coefficientElement = fixedElement.element(COEFFICIENT);
- mdomain.setCoefficient(Double.valueOf(coefficientElement.attributeValue(VALUE)));
+ Element coefficientElement = fixedElement.element("coefficient");
+ domain.addDistributionParam("coefficient", Double.valueOf(coefficientElement.attributeValue("value")));
// matrix specific
- Element matrixElement = fixedElement.element(MX);
+ Element matrixElement = fixedElement.element("mx");
MatrixND matrix = MexicoHelper.getMatrixFromXml(matrixElement, topiaContext);
- mdomain.setReferenceValue(matrix);
-
- domain = mdomain;
+ domain.addDistributionParam("reference", matrix);
}
- else if (property.equals(EQUATIONCONTINUOUS)) {
+ else if (property.equals("equationcontinuous")) {
// equation specific
-
- EquationContinuousDomain edomain = new EquationContinuousDomain(true);
-
- Element coefficientElement = fixedElement.element(COEFFICIENT);
- edomain.setCoefficient(Double.valueOf(coefficientElement.attributeValue(VALUE)));
-
- Element equationElement = fixedElement.element(EQUATION);
- edomain.setReferenceValue(Double.valueOf(equationElement.attributeValue(REFERENCE)));
- edomain.setVariableName(equationElement.attributeValue(VARIABLE));
+ domain = new ContinuousDomain(Distribution.QUNIFPC);
+ Element coefficientElement = fixedElement.element("coefficient");
+ domain.addDistributionParam("coefficient", Double.valueOf(coefficientElement.attributeValue("value")));
- domain = edomain;
+ Element equationElement = fixedElement.element("equation");
+ domain.addDistributionParam("reference", Double.valueOf(equationElement.attributeValue("reference")));
+ String variable = equationElement.attributeValue("variable");
+ factor.setEquationVariableName(variable);
+ // hack since 4.0.1, factor name doesn't contains variable
+ name = StringUtils.removeEnd(name, "." + variable);
+ factor.setName(name);
}
else {
// continous domain
- domain = new ContinuousDomain();
-
- Element percentageElement = fixedElement.element(PERCENTAGE);
+ Element percentageElement = fixedElement.element("percentage");
if (percentageElement != null) {
- domain.setCoefficient(Double.valueOf(percentageElement.attributeValue(COEFFICIENT)));
- domain.setReferenceValue(Double.valueOf(percentageElement.attributeValue(REFERENCE)));
- domain.setPercentageType(true);
+ domain = new ContinuousDomain(Distribution.QUNIFPC);
+ domain.addDistributionParam("coefficient", Double.valueOf(percentageElement.attributeValue("coefficient")));
+ domain.addDistributionParam("reference", 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 = new ContinuousDomain(Distribution.QUNIFMM);
+ Element rangeElement = fixedElement.element("range");
+ domain.addDistributionParam("min", Integer.valueOf(rangeElement.attributeValue("min")));
+ domain.addDistributionParam("max", Integer.valueOf(rangeElement.attributeValue("max")));
}
-
}
- factor.setCardinality(Integer.valueOf(fixedElement.attributeValue(CARDINALITY)));
+ factor.setCardinality(Integer.valueOf(fixedElement.attributeValue("cardinality")));
factor.setDomain(domain);
- } else if (DISCRETE.equals(property)) {
+ } else if ("discrete".equals(property)) {
DiscreteDomain domain = new DiscreteDomain();
List<Element> valueElements = fixedElement.element(
- ENUMERATION).elements(VALUE);
+ "enumeration").elements("value");
int label = 0;
for (Element valueElement : valueElements) {
domain.getValues().put(label,
@@ -288,16 +264,16 @@
factor.setDomain(domain);
}
factorGroup.addFactor(factor);
- } else if (RULE.equals(type)) {
+ } else if ("rule".equals(type)) {
Factor factor = new Factor(name);
factor.setPath(path);
- Element fixedElement = factorElement.element(DOMAIN).element(FIXED);
- if (DISCRETE.equals(property)) {
+ Element fixedElement = factorElement.element("domain").element("fixed");
+ if ("discrete".equals(property)) {
RuleDiscreteDomain domain = new RuleDiscreteDomain();
- List<Element> valueElements = fixedElement.element(ENUMERATION).elements(VALUE);
+ List<Element> valueElements = fixedElement.element("enumeration").elements("value");
int label = 0;
for (Element valueElement : valueElements) {
- Element rulesElement = valueElement.element(RULES);
+ Element rulesElement = valueElement.element("rules");
List<Rule> rulesValue = MexicoHelper.getRulesFromXml(rulesElement, topiaContext);
domain.getValues().put(label, rulesValue);
++label;
@@ -306,7 +282,7 @@
}
factorGroup.addFactor(factor);
}
- }*/
+ }
return factorGroup;
}
@@ -327,12 +303,12 @@
*/
protected static FactorGroup parseFactorGroupV2(Element fgElement, TopiaContext topiaContext) {
- String factorGroupName = fgElement.attributeValue(NAME);
+ String factorGroupName = fgElement.attributeValue("name");
String factorGroupType = fgElement.attributeValue("type");
boolean continuous = "continuous".equalsIgnoreCase(factorGroupType);
FactorGroup factorGroup = new FactorGroup(factorGroupName, continuous);
- /*// sub factor group
+ // sub factor group
List<Element> factorGroupElements = fgElement.selectNodes("child::factors");
for (Element factorGroupElement : factorGroupElements) {
FactorGroup subFactorGroup = parseFactorGroupV2(factorGroupElement, topiaContext);
@@ -343,11 +319,11 @@
List<Element> factorElements = fgElement.selectNodes("child::factor");
for (Element factorElement : factorElements) {
- String type = factorElement.attributeValue(TYPE);
- String name = factorElement.attributeValue(NAME);
- String property = factorElement.attributeValue(PROPERTY);
- String path = factorElement.element(TARGET).getText().trim();
- String cardinalityString = factorElement.attributeValue(CARDINALITY);
+ String type = factorElement.attributeValue("type");
+ String name = factorElement.attributeValue("name");
+ String property = factorElement.attributeValue("property");
+ String path = factorElement.element("target").getTextTrim();
+ String cardinalityString = factorElement.attributeValue("cardinality");
Integer cardinality = 0;
if (StringUtils.isNotEmpty(cardinalityString)) {
cardinality = Integer.valueOf(cardinalityString);
@@ -357,82 +333,83 @@
if ("real".equals(type)) {
Factor factor = new Factor(name);
factor.setPath(path);
- Element fixedElement = factorElement.element(DOMAIN).element(FIXED);
+ Element fixedElement = factorElement.element("domain").element("fixed");
// tous les domaines continues
- if (property.endsWith(CONTINUOUS)) {
+ if (property.endsWith("continuous")) {
ContinuousDomain domain;
- if(property.equals(MATRIXCONTINUOUS)) {
-
- MatrixContinuousDomain mdomain = new MatrixContinuousDomain();
- Element referenceElement = fixedElement.element(REFERENCE);
+ if(property.equals("matrixcontinuous")) {
+
+ Element referenceElement = fixedElement.element("reference");
if (referenceElement != null) {
+ domain = new ContinuousDomain(Distribution.QUNIFPC);
// matrix specific
// <coefficient operator="-" value="0.799"/>
- mdomain.setCoefficient(Double.valueOf(referenceElement.attributeValue(COEFFICIENT)));
+ domain.addDistributionParam("coefficient", Double.valueOf(referenceElement.attributeValue("coefficient")));
// <mx name="test1" step="0">...
- Element matrixElement = referenceElement.element(MX);
+ Element matrixElement = referenceElement.element("mx");
MatrixND matrix = MexicoHelper.getMatrixFromXml(matrixElement, topiaContext);
- mdomain.setReferenceValue(matrix);
- mdomain.setPercentageType(true);
+ domain.addDistributionParam("reference", matrix);
}
else {
- Element rangeElement = fixedElement.element(RANGE);
- Element minElement = rangeElement.element(MIN);
- Element maxElement = rangeElement.element(MAX);
- MatrixND minMatrix = MexicoHelper.getMatrixFromXml(minElement.element(MX), topiaContext);
- MatrixND maxMatrix = MexicoHelper.getMatrixFromXml(maxElement.element(MX), topiaContext);
- mdomain.setMinBound(minMatrix);
- mdomain.setMaxBound(maxMatrix);
+ domain = new ContinuousDomain(Distribution.QUNIFMM);
+ Element rangeElement = fixedElement.element("range");
+ Element minElement = rangeElement.element("min");
+ Element maxElement = rangeElement.element("max");
+ MatrixND minMatrix = MexicoHelper.getMatrixFromXml(minElement.element("mx"), topiaContext);
+ MatrixND maxMatrix = MexicoHelper.getMatrixFromXml(maxElement.element("mx"), topiaContext);
+ domain.addDistributionParam("min", minMatrix);
+ domain.addDistributionParam("max", maxMatrix);
}
-
- domain = mdomain;
}
- else if (property.equals(EQUATIONCONTINUOUS)) {
+ else if (property.equals("equationcontinuos")) {
// equation specific
- EquationContinuousDomain edomain = new EquationContinuousDomain();
- edomain.setVariableName(fixedElement.attributeValue(VARIABLE));
- Element referenceElement = fixedElement.element(REFERENCE);
+
+ String variable = fixedElement.attributeValue("variable");
+ factor.setEquationVariableName(variable);
+ // hack since 4.0.1, factor name doesn't contains variable
+ name = StringUtils.removeEnd(name, "." + variable);
+ factor.setName(name);
+
+ Element referenceElement = fixedElement.element("reference");
if (referenceElement != null) {
- edomain.setCoefficient(Double.valueOf(referenceElement.attributeValue(COEFFICIENT)));
- edomain.setReferenceValue(Double.valueOf(referenceElement.getTextTrim()));
- edomain.setPercentageType(true);
+ domain = new ContinuousDomain(Distribution.QUNIFPC);
+ domain.addDistributionParam("coefficient", Double.valueOf(referenceElement.attributeValue("coefficient")));
+ domain.addDistributionParam("reference", Double.valueOf(referenceElement.getTextTrim()));
}
else {
- Element rangeElement = fixedElement.element(RANGE);
- Element minElement = rangeElement.element(MIN);
- Element maxElement = rangeElement.element(MAX);
- edomain.setMinBound(Double.valueOf(minElement.getTextTrim()));
- edomain.setMaxBound(Double.valueOf(maxElement.getTextTrim()));
+ domain = new ContinuousDomain(Distribution.QUNIFMM);
+ Element rangeElement = fixedElement.element("range");
+ Element minElement = rangeElement.element("min");
+ Element maxElement = rangeElement.element("max");
+ domain.addDistributionParam("min", minElement.getTextTrim());
+ domain.addDistributionParam("max", maxElement.getTextTrim());
}
-
- domain = edomain;
}
else {
// continous domain
- domain = new ContinuousDomain();
-
- Element referenceElement = fixedElement.element(REFERENCE);
+ Element referenceElement = fixedElement.element("reference");
if (referenceElement != null) {
- domain.setCoefficient(Double.valueOf(referenceElement.attributeValue(COEFFICIENT)));
- domain.setReferenceValue(Double.valueOf(referenceElement.getTextTrim()));
- domain.setPercentageType(true);
+ domain = new ContinuousDomain(Distribution.QUNIFPC);
+ domain.addDistributionParam("coefficient", Double.valueOf(referenceElement.attributeValue("coefficient")));
+ domain.addDistributionParam("reference", Double.valueOf(referenceElement.getTextTrim()));
}
else {
// <range max="1.0" min="0.0"/>
- Element rangeElement = fixedElement.element(RANGE);
- Element minElement = rangeElement.element(MIN);
- Element maxElement = rangeElement.element(MAX);
- domain.setMinBound(Double.valueOf(minElement.getTextTrim()));
- domain.setMaxBound(Double.valueOf(maxElement.getTextTrim()));
+ domain = new ContinuousDomain(Distribution.QUNIFMM);
+ Element rangeElement = fixedElement.element("range");
+ Element minElement = rangeElement.element("min");
+ Element maxElement = rangeElement.element("max");
+ domain.addDistributionParam("min", Double.valueOf(minElement.getTextTrim()));
+ domain.addDistributionParam("max", Double.valueOf(maxElement.getTextTrim()));
}
}
factor.setDomain(domain);
- } else if (DISCRETE.equals(property)) {
+ } else if ("discrete".equals(property)) {
DiscreteDomain domain = new DiscreteDomain();
List<Element> valueElements = fixedElement.element(
- ENUMERATION).elements(VALUE);
+ "enumeration").elements("value");
int label = 0;
for (Element valueElement : valueElements) {
domain.getValues().put(label,
@@ -443,84 +420,85 @@
}
factor.setCardinality(cardinality);
factorGroup.addFactor(factor);
- } else if (INTEGER.equals(type)) {
+ } else if ("integer".equals(type)) {
Factor factor = new Factor(name);
factor.setPath(path);
- Element fixedElement = factorElement.element(DOMAIN).element(FIXED);
- if (CONTINUOUS.equals(property)) {
+ Element fixedElement = factorElement.element("domain").element("fixed");
+ if ("continuous".equals(property)) {
ContinuousDomain domain;
- if(property.equals(MATRIXCONTINUOUS)) {
+ if(property.equals("matrixcontinuous")) {
- MatrixContinuousDomain mdomain = new MatrixContinuousDomain();
- Element referenceElement = fixedElement.element(REFERENCE);
+
+ Element referenceElement = fixedElement.element("reference");
if (referenceElement != null) {
+ domain = new ContinuousDomain(Distribution.QUNIFPC);
// matrix specific
// <coefficient operator="-" value="0.799"/>
- mdomain.setCoefficient(Double.valueOf(referenceElement.attributeValue(COEFFICIENT)));
+ domain.addDistributionParam("coefficient", Double.valueOf(referenceElement.attributeValue("coefficient")));
// <mx name="test1" step="0">...
- Element matrixElement = referenceElement.element(MX);
+ Element matrixElement = referenceElement.element("mx");
MatrixND matrix = MexicoHelper.getMatrixFromXml(matrixElement, topiaContext);
- mdomain.setReferenceValue(matrix);
- mdomain.setPercentageType(true);
+ domain.addDistributionParam("reference", matrix);
}
else {
- Element rangeElement = fixedElement.element(RANGE);
- Element minElement = rangeElement.element(MIN);
- Element maxElement = rangeElement.element(MAX);
- MatrixND minMatrix = MexicoHelper.getMatrixFromXml(minElement.element(MX), topiaContext);
- MatrixND maxMatrix = MexicoHelper.getMatrixFromXml(maxElement.element(MX), topiaContext);
- mdomain.setMinBound(minMatrix);
- mdomain.setMaxBound(maxMatrix);
+ domain = new ContinuousDomain(Distribution.QUNIFMM);
+ Element rangeElement = fixedElement.element("range");
+ Element minElement = rangeElement.element("min");
+ Element maxElement = rangeElement.element("max");
+ MatrixND minMatrix = MexicoHelper.getMatrixFromXml(minElement.element("mx"), topiaContext);
+ MatrixND maxMatrix = MexicoHelper.getMatrixFromXml(maxElement.element("mx"), topiaContext);
+ domain.addDistributionParam("min", minMatrix);
+ domain.addDistributionParam("max", maxMatrix);
}
-
- domain = mdomain;
}
- else if (property.equals(EQUATIONCONTINUOUS)) {
+ else if (property.equals("equationcontinuous")) {
// equation specific
- EquationContinuousDomain edomain = new EquationContinuousDomain();
- edomain.setVariableName(fixedElement.attributeValue(VARIABLE));
- Element referenceElement = fixedElement.element(REFERENCE);
+ String variable = fixedElement.attributeValue("variable");
+ factor.setEquationVariableName(variable);
+ // hack since 4.0.1, factor name doesn't contains variable
+ name = StringUtils.removeEnd(name, "." + variable);
+ factor.setName(name);
+
+ Element referenceElement = fixedElement.element("reference");
if (referenceElement != null) {
- edomain.setCoefficient(Double.valueOf(referenceElement.attributeValue(COEFFICIENT)));
- edomain.setReferenceValue(Double.valueOf(referenceElement.getTextTrim()));
- edomain.setPercentageType(true);
+ domain = new ContinuousDomain(Distribution.QUNIFPC);
+ domain.addDistributionParam("coefficient", Double.valueOf(referenceElement.attributeValue("coefficient")));
+ domain.addDistributionParam("reference", Double.valueOf(referenceElement.getTextTrim()));
}
else {
- Element rangeElement = fixedElement.element(RANGE);
- Element minElement = rangeElement.element(MIN);
- Element maxElement = rangeElement.element(MAX);
- edomain.setMinBound(Double.valueOf(minElement.getTextTrim()));
- edomain.setMaxBound(Double.valueOf(maxElement.getTextTrim()));
+ domain = new ContinuousDomain(Distribution.QUNIFMM);
+ Element rangeElement = fixedElement.element("range");
+ Element minElement = rangeElement.element("min");
+ Element maxElement = rangeElement.element("max");
+ domain.addDistributionParam("min", Double.valueOf(minElement.getTextTrim()));
+ domain.addDistributionParam("max", Double.valueOf(maxElement.getTextTrim()));
}
-
- domain = edomain;
}
else {
// continous domain
- domain = new ContinuousDomain();
-
- Element referenceElement = fixedElement.element(REFERENCE);
+ Element referenceElement = fixedElement.element("reference");
if (referenceElement != null) {
- domain.setCoefficient(Double.valueOf(referenceElement.attributeValue(COEFFICIENT)));
- domain.setReferenceValue(Double.valueOf(referenceElement.getTextTrim()));
- domain.setPercentageType(true);
+ domain = new ContinuousDomain(Distribution.QUNIFPC);
+ domain.addDistributionParam("coefficient", Double.valueOf(referenceElement.attributeValue("coefficient")));
+ domain.addDistributionParam("reference", Double.valueOf(referenceElement.getTextTrim()));
}
else {
// <range max="1.0" min="0.0"/>
- Element rangeElement = fixedElement.element(RANGE);
- Element minElement = rangeElement.element(MIN);
- Element maxElement = rangeElement.element(MAX);
- domain.setMinBound(Integer.valueOf(minElement.getTextTrim()));
- domain.setMaxBound(Integer.valueOf(maxElement.getTextTrim()));
+ domain = new ContinuousDomain(Distribution.QUNIFMM);
+ Element rangeElement = fixedElement.element("range");
+ Element minElement = rangeElement.element("min");
+ Element maxElement = rangeElement.element("max");
+ domain.addDistributionParam("min", Integer.valueOf(minElement.getTextTrim()));
+ domain.addDistributionParam("max", Integer.valueOf(maxElement.getTextTrim()));
}
}
factor.setDomain(domain);
- } else if (DISCRETE.equals(property)) {
+ } else if ("discrete".equals(property)) {
DiscreteDomain domain = new DiscreteDomain();
List<Element> valueElements = fixedElement.element(
- ENUMERATION).elements(VALUE);
+ "enumeration").elements("value");
int label = 0;
for (Element valueElement : valueElements) {
domain.getValues().put(label,
@@ -531,16 +509,16 @@
}
factor.setCardinality(cardinality);
factorGroup.addFactor(factor);
- } else if (RULE.equals(type)) {
+ } else if ("rule".equals(type)) {
Factor factor = new Factor(name);
factor.setPath(path);
- Element fixedElement = factorElement.element(DOMAIN).element(FIXED);
- if (DISCRETE.equals(property)) {
+ Element fixedElement = factorElement.element("domain").element("fixed");
+ if ("discrete".equals(property)) {
RuleDiscreteDomain domain = new RuleDiscreteDomain();
- List<Element> valueElements = fixedElement.element(ENUMERATION).elements(VALUE);
+ List<Element> valueElements = fixedElement.element("enumeration").elements("value");
int label = 0;
for (Element valueElement : valueElements) {
- Element rulesElement = valueElement.element(RULES);
+ Element rulesElement = valueElement.element("rules");
List<Rule> rulesValue = MexicoHelper.getRulesFromXml(rulesElement, topiaContext);
domain.getValues().put(label, rulesValue);
++label;
@@ -549,13 +527,13 @@
}
factor.setCardinality(cardinality);
factorGroup.addFactor(factor);
- } else if (EQUATION.equals(type)) {
+ } else if ("equation".equals(type)) {
Factor factor = new Factor(name);
factor.setPath(path);
- Element fixedElement = factorElement.element(DOMAIN).element(FIXED);
- if (DISCRETE.equals(property)) {
+ Element fixedElement = factorElement.element("domain").element("fixed");
+ if ("discrete".equals(property)) {
EquationDiscreteDomain domain = new EquationDiscreteDomain();
- List<Element> valueElements = fixedElement.element(ENUMERATION).elements(VALUE);
+ List<Element> valueElements = fixedElement.element("enumeration").elements("value");
int label = 0;
for (Element valueElement : valueElements) {
String content = StringEscapeUtils.unescapeXml(valueElement.getText());
@@ -569,10 +547,10 @@
} else if ("string".equals(type)) {
Factor factor = new Factor(name);
factor.setPath(path);
- Element fixedElement = factorElement.element(DOMAIN).element(FIXED);
- if (DISCRETE.equals(property)) {
+ Element fixedElement = factorElement.element("domain").element("fixed");
+ if ("discrete".equals(property)) {
DiscreteDomain domain = new DiscreteDomain();
- List<Element> valueElements = fixedElement.element(ENUMERATION).elements(VALUE);
+ List<Element> valueElements = fixedElement.element("enumeration").elements("value");
int label = 0;
for (Element valueElement : valueElements) {
String content = valueElement.getText();
@@ -585,17 +563,20 @@
factor.setCardinality(cardinality);
factorGroup.addFactor(factor);
}
- }*/
+ }
return factorGroup;
}
/**
- * Recursive parse of factor group elements (>factors<).
+ * Non recursive parse of factor group elements (>factors<).
*
* This version handle xml file distribution definition in each continuous
* factors.
*
+ * The parsing is more complicated here because mexico file format is a bit
+ * hard too read (factor groups, features...)
+ *
* @param fgElement factor group element (>factors<)
* @param topiaContext context
* @return factor group
@@ -603,266 +584,65 @@
*/
protected static FactorGroup parseFactorGroupV3(Element fgElement, TopiaContext topiaContext) {
- String factorGroupName = fgElement.attributeValue(NAME);
- String factorGroupType = fgElement.attributeValue("type");
- boolean continuous = "continuous".equalsIgnoreCase(factorGroupType);
- FactorGroup factorGroup = new FactorGroup(factorGroupName, continuous);
+ FactorGroup rootGroup = new FactorGroup(null); // root group
+ Map<String, FactorGroup> groups = new HashMap<String, FactorGroup>();
- /*// sub factor group
- List<Element> factorGroupElements = fgElement.selectNodes("child::factors");
- for (Element factorGroupElement : factorGroupElements) {
- FactorGroup subFactorGroup = parseFactorGroupV3(factorGroupElement, topiaContext);
- factorGroup.addFactor(subFactorGroup);
- }
-
// normal factors
List<Element> factorElements = fgElement.selectNodes("child::factor");
-
for (Element factorElement : factorElements) {
- String type = factorElement.attributeValue(TYPE);
- String name = factorElement.attributeValue(NAME);
- String property = factorElement.attributeValue(PROPERTY);
- String path = factorElement.element(TARGET).getText().trim();
- String cardinalityString = factorElement.attributeValue(CARDINALITY);
- Integer cardinality = 0;
+ String name = factorElement.attributeValue("name");
+ String cardinalityString = fgElement.element("child::feature[@name='cardinality']").getTextTrim();
+ String path = fgElement.element("child::feature[@name='target']").getTextTrim();
+ String groupName = fgElement.element("child::feature[@name='group']").getTextTrim();
+ String groupType = fgElement.element("child::feature[@name='grouptype']").getTextTrim();
+
+ Factor factor = new Factor(name);
+ factor.setPath(path);
if (StringUtils.isNotEmpty(cardinalityString)) {
- cardinality = Integer.valueOf(cardinalityString);
+ factor.setCardinality(Integer.valueOf(cardinalityString));
}
- // double
- if ("real".equals(type)) {
- Factor factor = new Factor(name);
- factor.setPath(path);
- Element fixedElement = factorElement.element(DOMAIN).element(FIXED);
- // tous les domaines continues
- if (property.endsWith(CONTINUOUS)) {
-
- ContinuousDomain domain;
- if(property.equals(MATRIXCONTINUOUS)) {
-
- MatrixContinuousDomain mdomain = new MatrixContinuousDomain();
- Element referenceElement = fixedElement.element(REFERENCE);
- if (referenceElement != null) {
- // matrix specific
- // <coefficient operator="-" value="0.799"/>
- mdomain.setCoefficient(Double.valueOf(referenceElement.attributeValue(COEFFICIENT)));
- // <mx name="test1" step="0">...
- Element matrixElement = referenceElement.element(MX);
- MatrixND matrix = MexicoHelper.getMatrixFromXml(matrixElement, topiaContext);
- mdomain.setReferenceValue(matrix);
- mdomain.setPercentageType(true);
- }
- else {
- Element rangeElement = fixedElement.element(RANGE);
- Element minElement = rangeElement.element(MIN);
- Element maxElement = rangeElement.element(MAX);
- MatrixND minMatrix = MexicoHelper.getMatrixFromXml(minElement.element(MX), topiaContext);
- MatrixND maxMatrix = MexicoHelper.getMatrixFromXml(maxElement.element(MX), topiaContext);
- mdomain.setMinBound(minMatrix);
- mdomain.setMaxBound(maxMatrix);
- }
-
- domain = mdomain;
+ // parse domain
+ Element domainElement = factorElement.element("domain");
+ String distributionName = domainElement.attributeValue("distributionName");
+ String type = domainElement.attributeValue("type");
+ Domain domain;
+ // facteur discret
+ if ("categorical".equals(distributionName)) {
+ if ("rule".equals(type)) {
+
+ }
+ } else if ("sequence".equals(distributionName)) {
+ // can happen in mexico, but not in isis
+ // skip this one
+ if (log.isInfoEnabled()) {
+ log.info(String.format("Skip factor %s : unknown distribution name : %s !", name, distributionName));
+ }
+ } else {
+ // facteur continuous with custom distribution
+ Distribution distribution = Distribution.valueOf(distributionName.toUpperCase());
+ if (distribution == null) {
+ if (log.isWarnEnabled()) {
+ log.warn(String.format("Skip factor %s : can't found distribution name : %s !", name, distributionName));
}
- else if (property.equals(EQUATIONCONTINUOUS)) {
- // equation specific
- EquationContinuousDomain edomain = new EquationContinuousDomain();
- edomain.setVariableName(fixedElement.attributeValue(VARIABLE));
- Element referenceElement = fixedElement.element(REFERENCE);
- if (referenceElement != null) {
- edomain.setCoefficient(Double.valueOf(referenceElement.attributeValue(COEFFICIENT)));
- edomain.setReferenceValue(Double.valueOf(referenceElement.getTextTrim()));
- edomain.setPercentageType(true);
- }
- else {
- Element rangeElement = fixedElement.element(RANGE);
- Element minElement = rangeElement.element(MIN);
- Element maxElement = rangeElement.element(MAX);
- edomain.setMinBound(Double.valueOf(minElement.getTextTrim()));
- edomain.setMaxBound(Double.valueOf(maxElement.getTextTrim()));
- }
-
- domain = edomain;
- }
- else {
- // continous domain
- domain = new ContinuousDomain();
-
- Element referenceElement = fixedElement.element(REFERENCE);
- if (referenceElement != null) {
- domain.setCoefficient(Double.valueOf(referenceElement.attributeValue(COEFFICIENT)));
- domain.setReferenceValue(Double.valueOf(referenceElement.getTextTrim()));
- domain.setPercentageType(true);
- }
- else {
- // <range max="1.0" min="0.0"/>
- Element rangeElement = fixedElement.element(RANGE);
- Element minElement = rangeElement.element(MIN);
- Element maxElement = rangeElement.element(MAX);
- domain.setMinBound(Double.valueOf(minElement.getTextTrim()));
- domain.setMaxBound(Double.valueOf(maxElement.getTextTrim()));
- }
- }
-
- factor.setDomain(domain);
- } else if (DISCRETE.equals(property)) {
- DiscreteDomain domain = new DiscreteDomain();
- List<Element> valueElements = fixedElement.element(
- ENUMERATION).elements(VALUE);
- int label = 0;
- for (Element valueElement : valueElements) {
- domain.getValues().put(label,
- Double.valueOf(valueElement.getTextTrim()));
- ++label;
- }
- factor.setDomain(domain);
+ continue;
}
- factor.setCardinality(cardinality);
- factorGroup.addFactor(factor);
- } else if (INTEGER.equals(type)) {
- Factor factor = new Factor(name);
- factor.setPath(path);
- Element fixedElement = factorElement.element(DOMAIN).element(FIXED);
- if (CONTINUOUS.equals(property)) {
- ContinuousDomain domain;
+ }
- if(property.equals(MATRIXCONTINUOUS)) {
-
- MatrixContinuousDomain mdomain = new MatrixContinuousDomain();
- Element referenceElement = fixedElement.element(REFERENCE);
- if (referenceElement != null) {
- // matrix specific
- // <coefficient operator="-" value="0.799"/>
- mdomain.setCoefficient(Double.valueOf(referenceElement.attributeValue(COEFFICIENT)));
- // <mx name="test1" step="0">...
- Element matrixElement = referenceElement.element(MX);
- MatrixND matrix = MexicoHelper.getMatrixFromXml(matrixElement, topiaContext);
- mdomain.setReferenceValue(matrix);
- mdomain.setPercentageType(true);
- }
- else {
- Element rangeElement = fixedElement.element(RANGE);
- Element minElement = rangeElement.element(MIN);
- Element maxElement = rangeElement.element(MAX);
- MatrixND minMatrix = MexicoHelper.getMatrixFromXml(minElement.element(MX), topiaContext);
- MatrixND maxMatrix = MexicoHelper.getMatrixFromXml(maxElement.element(MX), topiaContext);
- mdomain.setMinBound(minMatrix);
- mdomain.setMaxBound(maxMatrix);
- }
- domain = mdomain;
- }
- else if (property.equals(EQUATIONCONTINUOUS)) {
- // equation specific
- EquationContinuousDomain edomain = new EquationContinuousDomain();
- edomain.setVariableName(fixedElement.attributeValue(VARIABLE));
- Element referenceElement = fixedElement.element(REFERENCE);
- if (referenceElement != null) {
- edomain.setCoefficient(Double.valueOf(referenceElement.attributeValue(COEFFICIENT)));
- edomain.setReferenceValue(Double.valueOf(referenceElement.getTextTrim()));
- edomain.setPercentageType(true);
- }
- else {
- Element rangeElement = fixedElement.element(RANGE);
- Element minElement = rangeElement.element(MIN);
- Element maxElement = rangeElement.element(MAX);
- edomain.setMinBound(Double.valueOf(minElement.getTextTrim()));
- edomain.setMaxBound(Double.valueOf(maxElement.getTextTrim()));
- }
-
- domain = edomain;
- }
- else {
- // continous domain
- domain = new ContinuousDomain();
-
- Element referenceElement = fixedElement.element(REFERENCE);
- if (referenceElement != null) {
- domain.setCoefficient(Double.valueOf(referenceElement.attributeValue(COEFFICIENT)));
- domain.setReferenceValue(Double.valueOf(referenceElement.getTextTrim()));
- domain.setPercentageType(true);
- }
- else {
- // <range max="1.0" min="0.0"/>
- Element rangeElement = fixedElement.element(RANGE);
- Element minElement = rangeElement.element(MIN);
- Element maxElement = rangeElement.element(MAX);
- domain.setMinBound(Integer.valueOf(minElement.getTextTrim()));
- domain.setMaxBound(Integer.valueOf(maxElement.getTextTrim()));
- }
- }
-
- factor.setDomain(domain);
- } else if (DISCRETE.equals(property)) {
- DiscreteDomain domain = new DiscreteDomain();
- List<Element> valueElements = fixedElement.element(
- ENUMERATION).elements(VALUE);
- int label = 0;
- for (Element valueElement : valueElements) {
- domain.getValues().put(label,
- Integer.valueOf(valueElement.getTextTrim()));
- ++label;
- }
- factor.setDomain(domain);
+ // add factor to existing or new group
+ FactorGroup group = rootGroup;
+ if (StringUtils.isNotBlank(groupName)) {
+ group = groups.get(group);
+ if (group == null) {
+ group = new FactorGroup(groupName, "continuous".equals(groupType));
+ groups.put(groupName, group);
+ rootGroup.addFactor(group);
}
- factor.setCardinality(cardinality);
- factorGroup.addFactor(factor);
- } else if (RULE.equals(type)) {
- Factor factor = new Factor(name);
- factor.setPath(path);
- Element fixedElement = factorElement.element(DOMAIN).element(FIXED);
- if (DISCRETE.equals(property)) {
- RuleDiscreteDomain domain = new RuleDiscreteDomain();
- List<Element> valueElements = fixedElement.element(ENUMERATION).elements(VALUE);
- int label = 0;
- for (Element valueElement : valueElements) {
- Element rulesElement = valueElement.element(RULES);
- List<Rule> rulesValue = MexicoHelper.getRulesFromXml(rulesElement, topiaContext);
- domain.getValues().put(label, rulesValue);
- ++label;
- }
- factor.setDomain(domain);
- }
- factor.setCardinality(cardinality);
- 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(label, content);
- ++label;
- }
- factor.setDomain(domain);
- }
- factor.setCardinality(cardinality);
- factorGroup.addFactor(factor);
- } else if ("string".equals(type)) {
- Factor factor = new Factor(name);
- factor.setPath(path);
- Element fixedElement = factorElement.element(DOMAIN).element(FIXED);
- if (DISCRETE.equals(property)) {
- DiscreteDomain domain = new DiscreteDomain();
- List<Element> valueElements = fixedElement.element(ENUMERATION).elements(VALUE);
- int label = 0;
- for (Element valueElement : valueElements) {
- String content = valueElement.getText();
- Object object = MexicoHelper.getObjectFromString(content, topiaContext);
- domain.getValues().put(label, object);
- ++label;
- }
- factor.setDomain(domain);
- }
- factor.setCardinality(cardinality);
- factorGroup.addFactor(factor);
}
- }*/
+ group.addFactor(factor);
+ }
- return factorGroup;
+ return rootGroup;
}
}
Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/xml/DomainXMLVisitor.java
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/xml/DomainXMLVisitor.java 2012-03-15 15:26:06 UTC (rev 3658)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/xml/DomainXMLVisitor.java 2012-03-15 17:43:01 UTC (rev 3659)
@@ -25,7 +25,6 @@
package fr.ifremer.isisfish.mexico.xml;
-import fr.ifremer.isisfish.simulator.sensitivity.Domain;
import fr.ifremer.isisfish.simulator.sensitivity.visitor.DomainVisitor;
/**
@@ -39,19 +38,4 @@
*/
public abstract class DomainXMLVisitor extends AbstractXMLVisitor implements DomainVisitor {
- /**
- * {@inheritDoc}
- */
- @Override
- public void start(Domain domain) {
- xmlBuffer.append("<domain>");
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public void end(Domain domain) {
- xmlBuffer.append("</domain>");
- }
}
Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/xml/EquationDiscreteDomainXMLVisitor.java
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/xml/EquationDiscreteDomainXMLVisitor.java 2012-03-15 15:26:06 UTC (rev 3658)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/xml/EquationDiscreteDomainXMLVisitor.java 2012-03-15 17:43:01 UTC (rev 3659)
@@ -40,6 +40,13 @@
*/
public class EquationDiscreteDomainXMLVisitor extends DiscreteDomainXMLVisitor {
+ @Override
+ public void start(Domain domain) {
+ // lorsque le facteur est catégoriel, la liste de ses niveaux, par une
+ // liste ouverte d'éléments 'level', d'attributs 'value' et 'weight')
+ xmlBuffer.append("<domain distributionName=\"categorical\" type=\"equation\"");
+ }
+
/**
* {@inheritDoc}
*/
Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/xml/FactorGroupXMLVisitor.java
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/xml/FactorGroupXMLVisitor.java 2012-03-15 15:26:06 UTC (rev 3658)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/xml/FactorGroupXMLVisitor.java 2012-03-15 17:43:01 UTC (rev 3659)
@@ -5,7 +5,7 @@
* $Id$
* $HeadURL$
* %%
- * Copyright (C) 2011 Ifremer, CodeLutin, Chatellier Eric
+ * Copyright (C) 2011 - 2012 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
@@ -45,16 +45,7 @@
*/
@Override
public void start(FactorGroup factorGroup) {
- xmlBuffer.append("<factors");
- if (factorGroup.getName() != null) {
- xmlBuffer.append(" name=\"" + factorGroup.getName() + "\"");
- }
- if (factorGroup.isContinuous()) {
- xmlBuffer.append(" type=\"continuous\"");
- } else {
- xmlBuffer.append(" type=\"discrete\"");
- }
- xmlBuffer.append(">");
+
}
/*
@@ -64,12 +55,10 @@
public void visit(FactorGroup factorGroup, Factor factor) {
if (factor instanceof FactorGroup) {
FactorGroup factorGroup2 = (FactorGroup)factor;
- FactorGroupXMLVisitor visitor = new FactorGroupXMLVisitor();
- factorGroup2.accept(visitor);
- xmlBuffer.append(visitor.getXML());
+ factorGroup2.accept(this);
}
else {
- FactorXMLVisitor visitor = new FactorXMLVisitor();
+ FactorXMLVisitor visitor = new FactorXMLVisitor(factorGroup);
factor.accept(visitor);
xmlBuffer.append(visitor.getXML());
}
@@ -80,6 +69,6 @@
*/
@Override
public void end(FactorGroup factorGroup) {
- xmlBuffer.append("</factors>");
+
}
}
Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/xml/FactorXMLVisitor.java
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/xml/FactorXMLVisitor.java 2012-03-15 15:26:06 UTC (rev 3658)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/xml/FactorXMLVisitor.java 2012-03-15 17:43:01 UTC (rev 3659)
@@ -5,7 +5,7 @@
* $Id$
* $HeadURL$
* %%
- * Copyright (C) 2009 - 2010 Ifremer, CodeLutin, Chatellier Eric
+ * Copyright (C) 2009 - 2012 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
@@ -25,8 +25,11 @@
package fr.ifremer.isisfish.mexico.xml;
+import org.apache.commons.lang3.StringUtils;
+
import fr.ifremer.isisfish.simulator.sensitivity.Domain;
import fr.ifremer.isisfish.simulator.sensitivity.Factor;
+import fr.ifremer.isisfish.simulator.sensitivity.FactorGroup;
import fr.ifremer.isisfish.simulator.sensitivity.domain.ContinuousDomain;
import fr.ifremer.isisfish.simulator.sensitivity.domain.DiscreteDomain;
import fr.ifremer.isisfish.simulator.sensitivity.domain.EquationDiscreteDomain;
@@ -44,28 +47,57 @@
*/
public class FactorXMLVisitor extends AbstractXMLVisitor implements FactorVisitor {
+ protected FactorGroup group;
+
+ /**
+ * Factor constructor with group (for mexico features).
+ *
+ * @param group group
+ */
+ public FactorXMLVisitor(FactorGroup group) {
+ this.group = group;
+ }
+
/*
* @see fr.ifremer.isisfish.simulator.sensitivity.visitor.FactorVisitor#start(fr.ifremer.isisfish.simulator.sensitivity.Factor)
*/
@Override
public void start(Factor factor) {
+
+ // required by mexico, must be unique, but not used by isis
+ String factorId = factor.getPath();
+ if (StringUtils.isNotBlank(factor.getEquationVariableName())) {
+ factorId += "." + factor.getEquationVariableName();
+ }
+
xmlBuffer.append("<factor");
+ xmlBuffer.append(" id=\"").append(factorId).append("\"");
xmlBuffer.append(" name=\"").append(factor.getName()).append("\"");
+ if (StringUtils.isNotBlank(factor.getComment())) {
+ xmlBuffer.append(" description=\"").append(factor.getComment()).append("\"");
+ }
+ xmlBuffer.append(">");
+ // other things are features
//cardinality
- xmlBuffer.append(" cardinality=\"");
- xmlBuffer.append(factor.getCardinality());
- xmlBuffer.append("\"");
-
- xmlBuffer.append(">");
- // target element
- xmlBuffer.append("<target>").append(factor.getPath()).append("</target>");
- // value element
- /* TODO value should be only in simulation export,
- not in design plan export
- if (factor.getValue() != null) {
- xmlBuffer.append("<value>" + factor.getValue() + "</value>");
- }*/
+ xmlBuffer.append("<feature name=\"cardinality\">" + factor.getCardinality() + "</feature>");
+ // group
+ if (StringUtils.isNotBlank(group.getName())) {
+ xmlBuffer.append("<feature name=\"group\">" + group.getName() + "</feature>");
+ xmlBuffer.append("<feature name=\"grouptype\">");
+ if (group.isContinuous()) {
+ xmlBuffer.append("continous");
+ } else {
+ xmlBuffer.append("discrete");
+ }
+ xmlBuffer.append("</feature>");
+ }
+ //path
+ xmlBuffer.append("<feature name=\"target\">" + factor.getPath() + "</feature>");
+ // equation variable name
+ if (StringUtils.isNotBlank(factor.getEquationVariableName())) {
+ xmlBuffer.append("<feature name=\"equationVariableName\">" + factor.getEquationVariableName() + "</feature>");
+ }
}
/*
Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/xml/RuleDiscreteDomainXMLVisitor.java
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/xml/RuleDiscreteDomainXMLVisitor.java 2012-03-15 15:26:06 UTC (rev 3658)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/xml/RuleDiscreteDomainXMLVisitor.java 2012-03-15 17:43:01 UTC (rev 3659)
@@ -5,7 +5,7 @@
* $Id$
* $HeadURL$
* %%
- * Copyright (C) 2011 Ifremer, CodeLutin, Chatellier Eric
+ * Copyright (C) 2011 - 2012 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
@@ -42,6 +42,13 @@
*/
public class RuleDiscreteDomainXMLVisitor extends DiscreteDomainXMLVisitor {
+ @Override
+ public void start(Domain domain) {
+ // lorsque le facteur est catégoriel, la liste de ses niveaux, par une
+ // liste ouverte d'éléments 'level', d'attributs 'value' et 'weight')
+ xmlBuffer.append("<domain distributionName=\"categorical\" type=\"rule\"");
+ }
+
/**
* {@inheritDoc}
*/
Deleted: branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/xml/ScenarioXMLVisitor.java
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/xml/ScenarioXMLVisitor.java 2012-03-15 15:26:06 UTC (rev 3658)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/xml/ScenarioXMLVisitor.java 2012-03-15 17:43:01 UTC (rev 3659)
@@ -1,68 +0,0 @@
-/*
- * #%L
- * IsisFish
- *
- * $Id$
- * $HeadURL$
- * %%
- * Copyright (C) 2009 - 2010 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 fr.ifremer.isisfish.simulator.sensitivity.Factor;
-import fr.ifremer.isisfish.simulator.sensitivity.Scenario;
-import fr.ifremer.isisfish.simulator.sensitivity.visitor.ScenarioVisitor;
-
-/**
- * XML domain visitor.
- *
- * @author chatellier
- * @version $Revision: 1.0 $
- *
- * Last update : $Date: 5 mars 2009 $
- * By : $Author: chatellier $
- */
-public class ScenarioXMLVisitor extends AbstractXMLVisitor implements ScenarioVisitor {
-
- /**
- * {@inheritDoc}
- */
- @Override
- public void start(Scenario scenario) {
- xmlBuffer.append("<scenario>");
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public void visit(Scenario scenario, Factor factor) {
- FactorXMLVisitor visitor = new FactorXMLVisitor();
- factor.accept(visitor);
- xmlBuffer.append(visitor.getXML());
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public void end(Scenario scenario) {
- xmlBuffer.append("</scenario>");
- }
-}
Deleted: branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/xml/SensitivityScenariosXMLVisitor.java
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/xml/SensitivityScenariosXMLVisitor.java 2012-03-15 15:26:06 UTC (rev 3658)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/xml/SensitivityScenariosXMLVisitor.java 2012-03-15 17:43:01 UTC (rev 3659)
@@ -1,70 +0,0 @@
-/*
- * #%L
- * IsisFish
- *
- * $Id$
- * $HeadURL$
- * %%
- * Copyright (C) 2009 - 2010 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 fr.ifremer.isisfish.simulator.sensitivity.Scenario;
-import fr.ifremer.isisfish.simulator.sensitivity.SensitivityScenarios;
-import fr.ifremer.isisfish.simulator.sensitivity.visitor.SensitivityScenariosVisitor;
-
-/**
- * XML sensitivity scenarios visitor.
- *
- * @author chatellier
- * @version $Revision: 1.0 $
- *
- * Last update : $Date: 5 mars 2009 $
- * By : $Author: chatellier $
- */
-public class SensitivityScenariosXMLVisitor extends AbstractXMLVisitor implements SensitivityScenariosVisitor {
-
- /**
- * {@inheritDoc}
- */
- @Override
- public void start(SensitivityScenarios scenarios) {
- xmlBuffer.append("<experimentalScenarios>");
- xmlBuffer.append("<scenarios>");
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public void visit(SensitivityScenarios scenarios, Scenario scenario) {
- ScenarioXMLVisitor visitor = new ScenarioXMLVisitor();
- scenario.accept(visitor);
- xmlBuffer.append(visitor.getXML());
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public void end(SensitivityScenarios scenarios) {
- xmlBuffer.append("</scenarios>");
- xmlBuffer.append("</experimentalScenarios>");
- }
-}
Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/xml/package-info.java
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/xml/package-info.java 2012-03-15 15:26:06 UTC (rev 3658)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/xml/package-info.java 2012-03-15 17:43:01 UTC (rev 3659)
@@ -5,7 +5,7 @@
* $Id$
* $HeadURL$
* %%
- * Copyright (C) 2009 - 2011 Ifremer, CodeLutin, Chatellier Eric
+ * Copyright (C) 2009 - 2012 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
Modified: branches/4.0.1/src/test/java/fr/ifremer/isisfish/mexico/MexicoHelperTest.java
===================================================================
--- branches/4.0.1/src/test/java/fr/ifremer/isisfish/mexico/MexicoHelperTest.java 2012-03-15 15:26:06 UTC (rev 3658)
+++ branches/4.0.1/src/test/java/fr/ifremer/isisfish/mexico/MexicoHelperTest.java 2012-03-15 17:43:01 UTC (rev 3659)
@@ -35,6 +35,7 @@
import java.util.SortedMap;
import java.util.TreeMap;
+import javax.xml.XMLConstants;
import javax.xml.transform.stream.StreamSource;
import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;
@@ -101,11 +102,12 @@
* Get a test design plan composed with all possibles value types.
*
* @param use40Features build design plan with sub factor groups
+ * @param use401Features build plan with distribution definition
* @return a test design plan
* @throws IsisFishException
* @throws TopiaException
*/
- protected DesignPlan getTestDesignPlan(boolean use40Features) throws IsisFishException, TopiaException {
+ protected DesignPlan getTestDesignPlan(boolean use40Features, boolean use401Features) throws IsisFishException, TopiaException {
DesignPlan designPlan = new DesignPlan();
// matrix 1
@@ -248,7 +250,7 @@
@Test
public void testGetDesignPlanAsXML() throws IOException, IsisFishException, TopiaException {
- DesignPlan testDesignPlan = getTestDesignPlan(false);
+ DesignPlan testDesignPlan = getTestDesignPlan(false, false);
// test xml export
String xml = MexicoHelper.getDesignPlanAsXML(testDesignPlan);
@@ -314,7 +316,7 @@
public void testExportImport() throws IOException, IsisFishException, TopiaException {
// first export
- DesignPlan testDesignPlan = getTestDesignPlan(false);
+ DesignPlan testDesignPlan = getTestDesignPlan(false, false);
String xml1 = MexicoHelper.getDesignPlanAsXML(testDesignPlan);
if (log.isDebugEnabled()) {
log.debug("xml 1 = " + xml1);
@@ -342,7 +344,7 @@
@Test
public void testFactorGroupAndRule() throws IOException, IsisFishException, TopiaException {
- DesignPlan testDesignPlan = getTestDesignPlan(true);
+ DesignPlan testDesignPlan = getTestDesignPlan(true, false);
// test xml export
String xml = MexicoHelper.getDesignPlanAsXML(testDesignPlan);
@@ -373,7 +375,7 @@
public void testExportImportWithGroup() throws IOException, IsisFishException, TopiaException {
// first export
- DesignPlan testDesignPlan = getTestDesignPlan(true);
+ DesignPlan testDesignPlan = getTestDesignPlan(true, false);
String xml1 = MexicoHelper.getDesignPlanAsXML(testDesignPlan);
if (log.isDebugEnabled()) {
log.debug("xml 1 = " + xml1);
@@ -404,7 +406,7 @@
@Test
public void testFactorRuleParams() throws IOException, IsisFishException, TopiaException {
- DesignPlan testDesignPlan = getTestDesignPlan(true);
+ DesignPlan testDesignPlan = getTestDesignPlan(true, false);
// test xml export
String xml = MexicoHelper.getDesignPlanAsXML(testDesignPlan);
@@ -432,7 +434,7 @@
public void testPercentageMinMaxFactor() throws IOException, IsisFishException, TopiaException {
// get test plan and add some STRANGES factors
- DesignPlan testDesignPlan = getTestDesignPlan(false);
+ DesignPlan testDesignPlan = getTestDesignPlan(false, false);
// matrix 1
MatrixND matrix1 = MatrixFactory.getInstance().create("test1",
@@ -492,7 +494,7 @@
public void testDiscreteEquationFactor() throws IOException, IsisFishException, TopiaException {
// get test plan and add some STRANGES factors
- DesignPlan testDesignPlan = getTestDesignPlan(false);
+ DesignPlan testDesignPlan = getTestDesignPlan(false, false);
// factor x6
Factor factorEquationDiscrete = new Factor("factor x6");
@@ -531,7 +533,7 @@
public void testExportImportV2() throws IOException, IsisFishException, TopiaException {
// first export
- DesignPlan testDesignPlan = getTestDesignPlan(false);
+ DesignPlan testDesignPlan = getTestDesignPlan(false, false);
String xml1 = MexicoHelper.getDesignPlanAsXML(testDesignPlan);
if (log.isDebugEnabled()) {
log.debug("xml 1 = " + xml1);
@@ -593,13 +595,11 @@
@Test
public void validOutputXml() throws Exception {
- DesignPlan testDesignPlan = getTestDesignPlan(false);
+ DesignPlan testDesignPlan = getTestDesignPlan(true, true);
String xml1 = MexicoHelper.getDesignPlanAsXML(testDesignPlan);
-
URL schemaUrl = MexicoHelperTest.class.getResource("/mexico/expDesign.xsd");
-
- String schemaLang = "http://www.w3.org/2001/XMLSchema";
- SchemaFactory factory = SchemaFactory.newInstance(schemaLang);
+
+ SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Schema schema = factory.newSchema(schemaUrl);
Validator validator = schema.newValidator();
// at last perform validation:
1
0
r3658 - branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/sensitivity
by echatellier@users.forge.codelutin.com 15 Mar '12
by echatellier@users.forge.codelutin.com 15 Mar '12
15 Mar '12
Author: echatellier
Date: 2012-03-15 16:26:06 +0100 (Thu, 15 Mar 2012)
New Revision: 3658
Url: http://forge.codelutin.com/repositories/revision/isis-fish/3658
Log:
Fix test (wrong distribution param)
Modified:
branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/FactorGroup.java
Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/FactorGroup.java
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/FactorGroup.java 2012-03-14 16:26:42 UTC (rev 3657)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/FactorGroup.java 2012-03-15 15:26:06 UTC (rev 3658)
@@ -253,7 +253,7 @@
if (isContinuous()) {
domain = new ContinuousDomain(Distribution.QUNIFMM);
((ContinuousDomain)domain).addDistributionParam("min", 0.0);
- ((ContinuousDomain)domain).addDistributionParam("min", 1.0);
+ ((ContinuousDomain)domain).addDistributionParam("max", 1.0);
}
else if (isDiscrete()) {
// les domaines doivent avoir les même domaines
1
0
14 Mar '12
Author: echatellier
Date: 2012-03-14 17:26:42 +0100 (Wed, 14 Mar 2012)
New Revision: 3657
Url: http://forge.codelutin.com/repositories/revision/isis-fish/3657
Log:
#603 : Rennomer les facteurs discrets en discrets finis
Clean i18n files
Modified:
branches/4.0.1/src/main/resources/i18n/isis-fish_en_GB.properties
branches/4.0.1/src/main/resources/i18n/isis-fish_fr_FR.properties
Modified: branches/4.0.1/src/main/resources/i18n/isis-fish_en_GB.properties
===================================================================
--- branches/4.0.1/src/main/resources/i18n/isis-fish_en_GB.properties 2012-03-14 16:22:25 UTC (rev 3656)
+++ branches/4.0.1/src/main/resources/i18n/isis-fish_en_GB.properties 2012-03-14 16:26:42 UTC (rev 3657)
@@ -637,9 +637,7 @@
isisfish.month.october=october
isisfish.month.september=september
isisfish.params.changeLogLev=Change from level '%1$s' to level '%2$s'
-isisfish.params.clearFilter=Clear filter
isisfish.params.description=Description
-isisfish.params.filter=Filter
isisfish.params.loadOldSimulation=Load old simulation
isisfish.params.nopopulation=No selected population
isisfish.params.numberYear=Number of year
@@ -859,12 +857,9 @@
isisfish.selectivity.title=Selectivity
isisfish.sens.backParameter=Back to parameter tab
isisfish.sens.title=Simulation plan
-isisfish.sensitivity.coefficient=Coefficient (in %)
isisfish.sensitivity.comment=Comment
isisfish.sensitivity.continue=Continuous factor
-isisfish.sensitivity.continuousminmaxtype=Mix/Max type
-isisfish.sensitivity.continuouspercentagetype=Percentage type
-isisfish.sensitivity.discret=Discret factor
+isisfish.sensitivity.discret=Finite discrete factor
isisfish.sensitivity.discretevaluelabel=Value %d
isisfish.sensitivity.displaysecondpass=Display results
isisfish.sensitivity.equation.valid=Valid variable
@@ -873,14 +868,12 @@
isisfish.sensitivity.factor=Factor
isisfish.sensitivity.factor.notvalid=Factor not valid \!
isisfish.sensitivity.factors=Factors
-isisfish.sensitivity.firstValue=First value
isisfish.sensitivity.increment=Cardinality
-isisfish.sensitivity.lastValue=Last value
isisfish.sensitivity.methodfactorsupported=The selected sensitivity method handles factors cardinalities
-isisfish.sensitivity.moveillegal=Can't move discrete factor to continuous group \!
+isisfish.sensitivity.moveillegal=Can't move finite discrete factor to continuous group \!
isisfish.sensitivity.name=Factor name
-isisfish.sensitivity.newfactorcgroup.tip=Add new continuous factor group
-isisfish.sensitivity.newfactordgroup.tip=Add new discrete factor group
+isisfish.sensitivity.newfactorcgroup.tip=Add new continuous factors group
+isisfish.sensitivity.newfactordgroup.tip=Add new finite discrete factors group
isisfish.sensitivity.newfactorname=Factor group name
isisfish.sensitivity.populationfactorname=Population %s
isisfish.sensitivity.ruleparameterfactorname=Param rule %s.%s
@@ -888,7 +881,7 @@
isisfish.sensitivity.secondpass=Analyze results
isisfish.sensitivity.secondpass.title=Analyze results
isisfish.sensitivity.select=Method
-isisfish.sensitivity.selectDiscretNumber=Number of factors
+isisfish.sensitivity.selectDiscretNumber=Number of values \:
isisfish.sensitivity.title=Sensitivity analysis
isisfish.sensitivity.validDiscretNumber=Ok
isisfish.sensitivityChooser.title=Sensitivity method
Modified: branches/4.0.1/src/main/resources/i18n/isis-fish_fr_FR.properties
===================================================================
--- branches/4.0.1/src/main/resources/i18n/isis-fish_fr_FR.properties 2012-03-14 16:22:25 UTC (rev 3656)
+++ branches/4.0.1/src/main/resources/i18n/isis-fish_fr_FR.properties 2012-03-14 16:26:42 UTC (rev 3657)
@@ -637,9 +637,7 @@
isisfish.month.october=octobre
isisfish.month.september=septembre
isisfish.params.changeLogLev=Passe du niveau '%1$s' au niveau '%2$s'
-isisfish.params.clearFilter=Remise à zéro du filtre
isisfish.params.description=Description
-isisfish.params.filter=Filtrer
isisfish.params.loadOldSimulation=Charger une ancienne simulation
isisfish.params.nopopulation=Aucune population sélectionnée
isisfish.params.numberYear=Nombre d'années
@@ -859,12 +857,9 @@
isisfish.selectivity.title=Sélectivité
isisfish.sens.backParameter=Retour aux paramètres
isisfish.sens.title=Plan de simulation
-isisfish.sensitivity.coefficient=Coefficient (en %)
isisfish.sensitivity.comment=Commentaires
isisfish.sensitivity.continue=Facteur continu
-isisfish.sensitivity.continuousminmaxtype=Type min/max
-isisfish.sensitivity.continuouspercentagetype=Type pourcentage
-isisfish.sensitivity.discret=Facteur discret
+isisfish.sensitivity.discret=Facteur discret fini
isisfish.sensitivity.discretevaluelabel=Valeur %d
isisfish.sensitivity.displaysecondpass=Afficher les résultats
isisfish.sensitivity.equation.valid=Valider la variable
@@ -873,23 +868,20 @@
isisfish.sensitivity.factor=Facteur
isisfish.sensitivity.factor.notvalid=Facteur non valide \!
isisfish.sensitivity.factors=Facteurs
-isisfish.sensitivity.firstValue=Première valeur
isisfish.sensitivity.increment=Cardinalité
-isisfish.sensitivity.lastValue=Dernière valeur
isisfish.sensitivity.methodfactorsupported=La méthode de sensibilité choisie gère les cardinalités des facteurs
-isisfish.sensitivity.moveillegal=Impossible d'ajouter un facteur discret dans un groupe continu \!
+isisfish.sensitivity.moveillegal=Impossible d'ajouter un facteur discret fini dans un groupe continu \!
isisfish.sensitivity.name=Nom du facteur
-isisfish.sensitivity.newfactorcgroup.tip=Ajouter un groupe de facteur continu
-isisfish.sensitivity.newfactordgroup.tip=Ajouter un groupe de facteur discret
+isisfish.sensitivity.newfactorcgroup.tip=Ajouter un groupe de facteurs continus
+isisfish.sensitivity.newfactordgroup.tip=Ajouter un groupe de facteurs discrets finis
isisfish.sensitivity.newfactorname=Nom du groupe de facteurs
isisfish.sensitivity.populationfactorname=Population %s
-isisfish.sensitivity.referencevalue=Valeur de référence
isisfish.sensitivity.ruleparameterfactorname=Param regle %s.%s
isisfish.sensitivity.rulesfactorname=Ensemble de règles
isisfish.sensitivity.secondpass=Analyse des résultats
isisfish.sensitivity.secondpass.title=Analyse des résultats
isisfish.sensitivity.select=Méthode
-isisfish.sensitivity.selectDiscretNumber=Nombre de facteurs
+isisfish.sensitivity.selectDiscretNumber=Nombre de valeur \:
isisfish.sensitivity.title=Analyse de sensibilité
isisfish.sensitivity.validDiscretNumber=Valider
isisfish.sensitivityChooser.title=Méthode de la sensibilité
1
0
r3656 - in branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity: model wizard
by echatellier@users.forge.codelutin.com 14 Mar '12
by echatellier@users.forge.codelutin.com 14 Mar '12
14 Mar '12
Author: echatellier
Date: 2012-03-14 17:22:25 +0100 (Wed, 14 Mar 2012)
New Revision: 3656
Url: http://forge.codelutin.com/repositories/revision/isis-fish/3656
Log:
Clean
Modified:
branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/model/FactorTreeModel.java
branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/wizard/EquationContinuousPanelUI.jaxx
branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/wizard/FactorWizardUI.jaxx
branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/wizard/SensitivityWizardHandler.java
Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/model/FactorTreeModel.java
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/model/FactorTreeModel.java 2012-03-14 16:15:33 UTC (rev 3655)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/model/FactorTreeModel.java 2012-03-14 16:22:25 UTC (rev 3656)
@@ -5,7 +5,7 @@
* $Id$
* $HeadURL$
* %%
- * Copyright (C) 2009 - 2011 Ifremer, CodeLutin, Chatellier Eric
+ * Copyright (C) 2009 - 2012 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
@@ -47,9 +47,6 @@
*/
public class FactorTreeModel implements TreeModel {
- /** serialVersionUID. */
- private static final long serialVersionUID = 593284613450915826L;
-
/** Tree model root. */
protected Factor rootFactor;
Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/wizard/EquationContinuousPanelUI.jaxx
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/wizard/EquationContinuousPanelUI.jaxx 2012-03-14 16:15:33 UTC (rev 3655)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/wizard/EquationContinuousPanelUI.jaxx 2012-03-14 16:22:25 UTC (rev 3656)
@@ -25,24 +25,10 @@
<ContinuousPanel layout="{new BorderLayout()}">
<import>
- java.awt.CardLayout
- java.awt.Component
- java.awt.Dimension
- java.beans.PropertyChangeEvent
- java.beans.PropertyChangeListener
java.util.ArrayList
- java.util.EventObject
java.util.List
java.util.regex.Matcher
java.util.regex.Pattern
- javax.swing.table.AbstractTableModel
- javax.swing.table.DefaultTableModel
- javax.swing.table.TableCellEditor
- javax.swing.table.TableModel
- javax.swing.JComboBox
- javax.swing.DefaultCellEditor
- javax.swing.event.CellEditorListener
- fr.ifremer.isisfish.simulator.sensitivity.domain.ContinuousDomain
fr.ifremer.isisfish.simulator.sensitivity.Factor
org.apache.commons.lang3.StringUtils
</import>
Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/wizard/FactorWizardUI.jaxx
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/wizard/FactorWizardUI.jaxx 2012-03-14 16:15:33 UTC (rev 3655)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/wizard/FactorWizardUI.jaxx 2012-03-14 16:22:25 UTC (rev 3656)
@@ -27,7 +27,6 @@
<import>
java.beans.PropertyChangeEvent
java.beans.PropertyChangeListener
- javax.swing.JComponent
java.awt.CardLayout
</import>
Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/wizard/SensitivityWizardHandler.java
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/wizard/SensitivityWizardHandler.java 2012-03-14 16:15:33 UTC (rev 3655)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/wizard/SensitivityWizardHandler.java 2012-03-14 16:22:25 UTC (rev 3656)
@@ -351,12 +351,12 @@
//DefaultContinuousPanelUI ui = new DefaultContinuousPanelUI();
String values = rangeOfValues.getValues();
String min = "0";
- String max = "0";
+ //String max = "0";
if (values.matches("^\\ *[0-9]*\\ *\\-\\ *[0-9]*\\ *$")) {
int first = values.indexOf("-");
if (first != -1) {
min = values.substring(0, first);
- max = values.substring(first + 1);
+ //max = values.substring(first + 1);
}
}
//ui.init(min, max, min, null);
1
0
r3655 - branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/wizard
by echatellier@users.forge.codelutin.com 14 Mar '12
by echatellier@users.forge.codelutin.com 14 Mar '12
14 Mar '12
Author: echatellier
Date: 2012-03-14 17:15:33 +0100 (Wed, 14 Mar 2012)
New Revision: 3655
Url: http://forge.codelutin.com/repositories/revision/isis-fish/3655
Log:
Fix discrete values saving
Modified:
branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/wizard/SensitivityWizardHandler.java
Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/wizard/SensitivityWizardHandler.java
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/wizard/SensitivityWizardHandler.java 2012-03-14 15:56:49 UTC (rev 3654)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/wizard/SensitivityWizardHandler.java 2012-03-14 16:15:33 UTC (rev 3655)
@@ -78,7 +78,6 @@
import fr.ifremer.isisfish.ui.simulator.SimulAction;
import fr.ifremer.isisfish.ui.widget.editor.MonthComponent;
import fr.ifremer.isisfish.ui.widget.editor.StepComponent;
-import freemarker.template.utility.StringUtil;
/**
* Handler for all class in wizard packages.
@@ -182,7 +181,6 @@
if (domain instanceof ContinuousDomain) {
- ContinuousDomain cDomain = (ContinuousDomain) domain;
ContinuousPanel comp = getNewContinuousComponent(factorWizardUI, factor.getPath());
comp.initWithFactor(factor);
factorWizardUI.getContinuousPanelContainer().add(comp, BorderLayout.CENTER);
@@ -821,6 +819,10 @@
boolean equationFactor = false;
for (Component component : components) {
+ if (component instanceof JScrollPane) {
+ component = ((JScrollPane) component).getViewport().getView();
+ }
+
// get internat component value
Object result = null;
if (component instanceof JTextComponent) {
1
0
14 Mar '12
Author: echatellier
Date: 2012-03-14 16:56:49 +0100 (Wed, 14 Mar 2012)
New Revision: 3654
Url: http://forge.codelutin.com/repositories/revision/isis-fish/3654
Log:
Remove equationcontinuousdomain (now useless)
Added:
branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/model/FactorListModel.java
branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/model/FactorListRenderer.java
Removed:
branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/xml/EquationContinuousDomainXMLVisitor.java
branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/domain/EquationContinuousDomain.java
branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/equation/
branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/wizard/MatrixContinuousPanelUI.jaxx
branches/4.0.1/src/test/java/fr/ifremer/isisfish/simulator/sensitivity/domain/
Modified:
branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/xml/DomXMLParser.java
branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/xml/FactorXMLVisitor.java
branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationService.java
branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/Factor.java
branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/model/FactorTreeCellRenderer.java
branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/wizard/ContinuousDistributionPanel.java
branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/wizard/ContinuousPanel.java
branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/wizard/EquationContinuousPanelUI.jaxx
branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/wizard/SensitivityWizardHandler.java
branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/simulator/SimulAction.java
branches/4.0.1/src/main/resources/i18n/isis-fish_en_GB.properties
branches/4.0.1/src/main/resources/i18n/isis-fish_fr_FR.properties
branches/4.0.1/src/test/java/fr/ifremer/isisfish/mexico/MexicoHelperTest.java
branches/4.0.1/src/test/java/fr/ifremer/isisfish/simulator/launcher/SimulationServiceTest.java
branches/4.0.1/src/test/java/fr/ifremer/isisfish/simulator/sensitivity/FactorTest.java
Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/xml/DomXMLParser.java
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/xml/DomXMLParser.java 2012-03-14 14:13:51 UTC (rev 3653)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/xml/DomXMLParser.java 2012-03-14 15:56:49 UTC (rev 3654)
@@ -40,7 +40,6 @@
import fr.ifremer.isisfish.simulator.sensitivity.FactorGroup;
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.RuleDiscreteDomain;
Deleted: branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/xml/EquationContinuousDomainXMLVisitor.java
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/xml/EquationContinuousDomainXMLVisitor.java 2012-03-14 14:13:51 UTC (rev 3653)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/xml/EquationContinuousDomainXMLVisitor.java 2012-03-14 15:56:49 UTC (rev 3654)
@@ -1,57 +0,0 @@
-/*
- * #%L
- * IsisFish
- *
- * $Id$
- * $HeadURL$
- * %%
- * Copyright (C) 1999 - 2012 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 fr.ifremer.isisfish.simulator.sensitivity.Domain;
-import fr.ifremer.isisfish.simulator.sensitivity.domain.EquationContinuousDomain;
-
-/**
- * XML domain visitor for Equation Continous Domain.
- *
- * @author chatellier
- * @version $Revision: 1.0 $
- *
- * Last update : $Date: 30 mars 2009 $
- * By : $Author: chatellier $
- */
-public class EquationContinuousDomainXMLVisitor extends ContinuousDomainXMLVisitor {
-
- /**
- * {@inheritDoc}
- */
- @Override
- public void start(Domain domain) {
- xmlBuffer.append("<domain ");
-
- EquationContinuousDomain eDomain = (EquationContinuousDomain)domain;
- // this version add variable name
- xmlBuffer.append(" variable=\"")
- .append(eDomain.getVariableName())
- .append(">");
-
- appendDomain(eDomain);
- }
-}
Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/xml/FactorXMLVisitor.java
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/xml/FactorXMLVisitor.java 2012-03-14 14:13:51 UTC (rev 3653)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/xml/FactorXMLVisitor.java 2012-03-14 15:56:49 UTC (rev 3654)
@@ -29,7 +29,6 @@
import fr.ifremer.isisfish.simulator.sensitivity.Factor;
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.RuleDiscreteDomain;
import fr.ifremer.isisfish.simulator.sensitivity.visitor.FactorVisitor;
@@ -75,9 +74,7 @@
@Override
public void visit(Factor factor, Domain domain) {
DomainXMLVisitor visitor = null;
- if (factor.getDomain() instanceof EquationContinuousDomain) {
- visitor = new EquationContinuousDomainXMLVisitor();
- } else if (factor.getDomain() instanceof ContinuousDomain) {
+ if (factor.getDomain() instanceof ContinuousDomain) {
visitor = new ContinuousDomainXMLVisitor();
} else if (factor.getDomain() instanceof RuleDiscreteDomain) {
visitor = new RuleDiscreteDomainXMLVisitor();
Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationService.java
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationService.java 2012-03-14 14:13:51 UTC (rev 3653)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationService.java 2012-03-14 15:56:49 UTC (rev 3654)
@@ -43,7 +43,6 @@
import java.util.Map;
import java.util.Properties;
import java.util.Set;
-import java.util.SortedMap;
import java.util.TreeSet;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
@@ -54,7 +53,6 @@
import org.apache.commons.beanutils.ConvertUtils;
import org.apache.commons.beanutils.ConvertUtilsBean;
import org.apache.commons.io.IOUtils;
-import org.apache.commons.lang3.StringEscapeUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.mutable.MutableInt;
import org.apache.commons.lang3.time.DurationFormatUtils;
@@ -67,7 +65,6 @@
import org.nuiton.util.FileUtil;
import org.nuiton.util.ListenerSet;
import org.nuiton.util.ObjectUtil;
-import org.nuiton.util.StringUtil;
import org.nuiton.util.ZipUtil;
import fr.ifremer.isisfish.IsisFish;
@@ -98,7 +95,7 @@
import fr.ifremer.isisfish.simulator.sensitivity.SensitivityAnalysis;
import fr.ifremer.isisfish.simulator.sensitivity.SensitivityScenarios;
import fr.ifremer.isisfish.simulator.sensitivity.SensitivityUtils;
-import fr.ifremer.isisfish.simulator.sensitivity.domain.EquationContinuousDomain;
+import fr.ifremer.isisfish.simulator.sensitivity.domain.ContinuousDomain;
import fr.ifremer.isisfish.simulator.sensitivity.domain.EquationDiscreteDomain;
import fr.ifremer.isisfish.simulator.sensitivity.domain.RuleDiscreteDomain;
import fr.ifremer.isisfish.util.CompileHelper;
@@ -652,7 +649,7 @@
// cas special 3 : facteur sur les parametres des regles
else if (factor.getPath().startsWith("parameters.rule.")) {
// special case for rule parameter with
- Pattern pattern = Pattern.compile("^parameters\\.(rule\\.\\d+\\.parameter\\.\\w+)\\..+$");
+ Pattern pattern = Pattern.compile("^parameters\\.(rule\\.\\d+\\.parameter\\.\\w+)(\\..+)?$");
Matcher matcher = pattern.matcher(factor.getPath());
String paramName = null;
if (matcher.matches()) {
@@ -664,8 +661,8 @@
buffer.append("params.setProperty(\"").append(paramName).append("\",\"").append(stringValue).append("\");\n");
}
// cas special 4 : equation
- else if (factor.getDomain() instanceof EquationContinuousDomain) {
- buffer.append("context.setComputeValue(\"").append(factor.getName());
+ else if (StringUtils.isNotBlank(factor.getEquationVariableName())) {
+ buffer.append("context.setComputeValue(\"").append(factor.getName() + "." + factor.getEquationVariableName());
buffer.append("\",").append(factor.getValue()).append(");\n");
}
// cas pas si special
Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/Factor.java
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/Factor.java 2012-03-14 14:13:51 UTC (rev 3653)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/Factor.java 2012-03-14 15:56:49 UTC (rev 3654)
@@ -5,7 +5,7 @@
* $Id$
* $HeadURL$
* %%
- * Copyright (C) 2009 - 2011 Ifremer, CodeLutin, Chatellier Eric
+ * Copyright (C) 2009 - 2012 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
@@ -27,8 +27,6 @@
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 java.io.Serializable;
import fr.ifremer.isisfish.simulator.sensitivity.visitor.FactorVisitor;
@@ -104,6 +102,9 @@
/** Cardinality */
protected int cardinality;
+ /** Variable name in case of equation factor (must be java valid identifier) */
+ protected String equationVariableName;
+
/**
* Constructor with name.
*
@@ -182,12 +183,13 @@
* @return the value
*/
public Object getDisplayedValue() {
- if (domain instanceof EquationDiscreteDomain ||
+ // FIXME echatellier 20120313 EquationContinuousDomain removed
+ /*if (domain instanceof EquationDiscreteDomain ||
domain instanceof EquationContinuousDomain) {
return "\"" + getValue() + "\"";
- } else {
+ } else {*/
return getValue();
- }
+ //}
}
/**
@@ -240,10 +242,11 @@
}
public int getCardinality() {
+ int result = cardinality;
if (domain instanceof DiscreteDomain) {
- return ((DiscreteDomain)domain).getValues().size();
+ result = ((DiscreteDomain)domain).getValues().size();
}
- return cardinality;
+ return result;
}
public void setCardinality(int cardinality) {
@@ -251,6 +254,24 @@
}
/**
+ * Get variable name.
+ *
+ * @return the variableName
+ */
+ public String getEquationVariableName() {
+ return equationVariableName;
+ }
+
+ /**
+ * Set variable name.
+ *
+ * @param equationVariableName the variableName to set
+ */
+ public void setEquationVariableName(String equationVariableName) {
+ this.equationVariableName = equationVariableName;
+ }
+
+ /**
* Accept a new visitor.
*
* @param visitor
Deleted: branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/domain/EquationContinuousDomain.java
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/domain/EquationContinuousDomain.java 2012-03-14 14:13:51 UTC (rev 3653)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/domain/EquationContinuousDomain.java 2012-03-14 15:56:49 UTC (rev 3654)
@@ -1,98 +0,0 @@
-/*
- * #%L
- * IsisFish
- *
- * $Id$
- * $HeadURL$
- * %%
- * Copyright (C) 2009 - 2012 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 java.util.SortedMap;
-
-import fr.ifremer.isisfish.simulator.sensitivity.Distribution;
-
-/**
- * Domaine continu portant sur variable pouvant prendre différente valeur par
- * rapport à une valeur initiale.
- *
- * @author chatellier
- * @version $Revision: 1.0 $
- *
- * Last update : $Date: 24 févr. 2009 $ By : $Author: chatellier $
- */
-public class EquationContinuousDomain extends ContinuousDomain {
-
- /** serialVersionUID. */
- private static final long serialVersionUID = -2037768174807839046L;
-
- /** Variable name (must be java valid identifier) */
- protected String variableName;
-
- /**
- * Empty constructor.
- */
- public EquationContinuousDomain() {
-
- }
-
- /**
- * COnstructor with distribution.
- *
- * @param distribution distribution
- * @param params parameters
- */
- public EquationContinuousDomain(Distribution distribution, SortedMap<String, Object> params) {
- super(distribution, params);
- }
-
- /**
- * Constructor with distribution.
- *
- * @param distribution distribution
- */
- public EquationContinuousDomain(Distribution distribution) {
- super(distribution);
- }
-
- /**
- * Get variable name.
- *
- * @return the variableName
- */
- public String getVariableName() {
- return variableName;
- }
-
- /**
- * Set variable name.
- *
- * @param variableName the variableName to set
- */
- public void setVariableName(String variableName) {
- this.variableName = variableName;
- }
-
- @Override
- public String toString() {
- String result = super.toString() + ";variableName=" + variableName;
- return result;
- }
-}
Copied: branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/model/FactorListModel.java (from rev 3646, branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/equation/EquationDomainListModel.java)
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/model/FactorListModel.java (rev 0)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/model/FactorListModel.java 2012-03-14 15:56:49 UTC (rev 3654)
@@ -0,0 +1,92 @@
+/*
+ * #%L
+ * IsisFish
+ *
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2011 - 2012 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.ui.sensitivity.model;
+
+import java.util.List;
+
+import javax.swing.DefaultListModel;
+
+import fr.ifremer.isisfish.simulator.sensitivity.Factor;
+
+/**
+ * Model pour la liste des {@link Factor}.
+ *
+ * Pas de selection par defaut.
+ *
+ * @author chatellier
+ * @version $Revision$
+ *
+ * Last update : $Date$
+ * By : $Author$
+ */
+public class FactorListModel extends DefaultListModel {
+
+ /** serialVersionUID. */
+ private static final long serialVersionUID = 2281927104735245489L;
+
+ /** EquationContinuousDomain list */
+ protected List<Factor> factors;
+
+ /**
+ * Constructor with factors list.
+ *
+ * @param factors factors list
+ */
+ public FactorListModel(List<Factor> factors) {
+ this.factors = factors;
+ }
+
+ /**
+ * Change data list and fire data change event.
+ *
+ * @param factors new data list
+ */
+ public void setFactors(List<Factor> factors) {
+ this.factors = factors;
+ fireContentsChanged(this, 0, factors.size());
+ }
+
+ /*
+ * @see javax.swing.ListModel#getElementAt(int)
+ */
+ @Override
+ public Object getElementAt(int index) {
+ return factors.get(index);
+ }
+
+ /*
+ * @see javax.swing.ListModel#getSize()
+ */
+ @Override
+ public int getSize() {
+ int size = 0;
+
+ if (factors != null) {
+ size = factors.size();
+ }
+ return size;
+ }
+}
Copied: branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/model/FactorListRenderer.java (from rev 3646, branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/equation/EquationDomainRenderer.java)
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/model/FactorListRenderer.java (rev 0)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/model/FactorListRenderer.java 2012-03-14 15:56:49 UTC (rev 3654)
@@ -0,0 +1,58 @@
+/*
+ * #%L
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2011 - 2012 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.ui.sensitivity.model;
+
+import java.awt.Component;
+
+import javax.swing.JList;
+
+import org.jdesktop.swingx.renderer.DefaultListRenderer;
+
+import fr.ifremer.isisfish.simulator.sensitivity.Factor;
+
+/**
+ * Renderer for equation factor variables list.
+ * Renderer as variable name string.
+ *
+ * @author chatellier
+ * @version $Revision$
+ *
+ * Last update : $Date$
+ * By : $Author$
+ */
+public class FactorListRenderer extends DefaultListRenderer {
+
+ /** serialVersionUID. */
+ private static final long serialVersionUID = -8210763862382993163L;
+
+ @Override
+ public Component getListCellRendererComponent(JList list, Object value,
+ int index, boolean isSelected, boolean cellHasFocus) {
+
+ Factor factor = (Factor)value;
+ String stringValue = factor.getEquationVariableName();
+ return super.getListCellRendererComponent(list, stringValue, index, isSelected, cellHasFocus);
+ }
+
+}
Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/model/FactorTreeCellRenderer.java
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/model/FactorTreeCellRenderer.java 2012-03-14 14:13:51 UTC (rev 3653)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/model/FactorTreeCellRenderer.java 2012-03-14 15:56:49 UTC (rev 3654)
@@ -36,6 +36,7 @@
import javax.swing.JTree;
import javax.swing.tree.DefaultTreeCellRenderer;
+import org.apache.commons.lang3.StringUtils;
import org.nuiton.util.Resource;
import fr.ifremer.isisfish.simulator.sensitivity.Domain;
@@ -111,6 +112,11 @@
text = factor.getName();
}
+
+ // add equation name if any
+ if (StringUtils.isNotBlank(factor.getEquationVariableName())) {
+ text += "." + factor.getEquationVariableName();
+ }
}
c.setIcon(iconCache.get(icon));
c.setText(text);
Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/wizard/ContinuousDistributionPanel.java
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/wizard/ContinuousDistributionPanel.java 2012-03-14 14:13:51 UTC (rev 3653)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/wizard/ContinuousDistributionPanel.java 2012-03-14 15:56:49 UTC (rev 3654)
@@ -48,6 +48,7 @@
import fr.ifremer.isisfish.simulator.sensitivity.Distribution;
import fr.ifremer.isisfish.simulator.sensitivity.Distribution.DistributionParam;
+import fr.ifremer.isisfish.simulator.sensitivity.Factor;
import fr.ifremer.isisfish.simulator.sensitivity.domain.ContinuousDomain;
/**
@@ -101,19 +102,17 @@
this.originalValue = originalValue;
}
- /**
- * @param domain
- */
@Override
- public void initWithDomain(ContinuousDomain domain) {
- // this fire components list modification
- Distribution distrib = domain.getDistribution();
+ public void initWithFactor(Factor factor) {
- // can be null in creation state
- if (distrib == null) {
+ ContinuousDomain domain = (ContinuousDomain)factor.getDomain();
+ // can happen during factor creation
+ if (domain == null) {
return;
}
+ Distribution distrib = domain.getDistribution();
+ // this fires components list modification
distributionCombo.setSelectedItem(distrib);
DistributionParam[] params = distrib.getDistibutionParams();
Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/wizard/ContinuousPanel.java
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/wizard/ContinuousPanel.java 2012-03-14 14:13:51 UTC (rev 3653)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/wizard/ContinuousPanel.java 2012-03-14 15:56:49 UTC (rev 3654)
@@ -27,7 +27,7 @@
import javax.swing.JPanel;
-import fr.ifremer.isisfish.simulator.sensitivity.domain.ContinuousDomain;
+import fr.ifremer.isisfish.simulator.sensitivity.Factor;
/**
* Common code for all continuous panels:
@@ -66,6 +66,11 @@
this.continuePossible = continuePossible;
firePropertyChange("continuePossible", oldValue, continuePossible);
}
-
- public abstract void initWithDomain(ContinuousDomain domain);
+
+ /**
+ * Init current panel with existing factor.
+ *
+ * @param factor
+ */
+ public abstract void initWithFactor(Factor factor);
}
Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/wizard/EquationContinuousPanelUI.jaxx
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/wizard/EquationContinuousPanelUI.jaxx 2012-03-14 14:13:51 UTC (rev 3653)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/wizard/EquationContinuousPanelUI.jaxx 2012-03-14 15:56:49 UTC (rev 3654)
@@ -43,7 +43,7 @@
javax.swing.DefaultCellEditor
javax.swing.event.CellEditorListener
fr.ifremer.isisfish.simulator.sensitivity.domain.ContinuousDomain
- fr.ifremer.isisfish.simulator.sensitivity.domain.EquationContinuousDomain
+ fr.ifremer.isisfish.simulator.sensitivity.Factor
org.apache.commons.lang3.StringUtils
</import>
@@ -57,45 +57,47 @@
<!-- bean property -->
<fr.ifremer.isisfish.entities.Formule id='formule' javaBean='null'/>
- <Boolean id="selectedDomain" javaBean="false" />
+ <Boolean id="selectedFactor" javaBean="false" />
- <java.util.List id="domains" genericType="EquationContinuousDomain" initializer="new ArrayList<EquationContinuousDomain>()" />
+ <java.util.List id="factors" genericType="Factor" initializer="new ArrayList<Factor>()" />
<script><![CDATA[
@Override
-public void initWithDomain(ContinuousDomain domain) {
- addDomain((EquationContinuousDomain)domain);
+public void initWithFactor(Factor factor) {
+ addFactor(factor);
}
-protected void addDomain(EquationContinuousDomain domain) {
- domains.add(domain);
+protected void addFactor(Factor factor) {
+ factors.add(factor);
// fire data change
- variablesListModel.setDomains(domains);
+ factorsListModel.setFactors(factors);
}
/**
- * Valid selected domain.
+ * Valid selected factor.
*/
-protected void validSelectedDomain() {
+protected void validSelectedFactor() {
// fill selected
- EquationContinuousDomain selectedDomain = (EquationContinuousDomain)variablesList.getSelectedValue();
- selectedDomain.setVariableName(variableNameField.getText().trim());
+ Factor selectedFactor = (Factor)factorsList.getSelectedValue();
+ selectedFactor.setEquationVariableName(variableNameField.getText().trim());
+ selectedFactor.setDomain(distributionPanel.generateDomain());
-
// parse equation content to replace
// double xxx = 4.0;
// by
// double xxx = context.getValueAndCompute("myfactorname.xxx", 4.0)
// if xxx is the variable name to replace
- String variableName = selectedDomain.getVariableName();
+ FactorWizardUI wizard = getParentContainer(FactorWizardUI.class);
+ String factorName = wizard.getFactorNameField().getText().trim();
+ String variableName = selectedFactor.getEquationVariableName();
String[] lines = editor.getEditor().getText().split("\n");
String result = "";
for (String line : lines) {
Pattern p = Pattern.compile("(^.*\\s+" + variableName + "\\s*\\=\\s*)([\\d\\.]+).*\\;$");
Matcher matcher = p.matcher(line);
if (matcher.find()) {
- String fullVariableName = bean.toString() + "." + StringUtils.uncapitalize(beanProperty) + "." + variableName;
+ String fullVariableName = factorName + "." + variableName;
line = matcher.group(1) + "context.getValueAndCompute(\"" + fullVariableName + "\", " + matcher.group(2) + ");";
}
result += line + "\n";
@@ -103,41 +105,44 @@
editor.getEditor().setText(result);
// fire data change
- variablesListModel.setDomains(domains);
+ factorsListModel.setFactors(factors);
}
protected void addNewVariable() {
- EquationContinuousDomain domain = new EquationContinuousDomain();
- domain.setVariableName("X");
- addDomain(domain);
+ Factor factor = new Factor("");
+ factor.setEquationVariableName("X");
+ addFactor(factor);
// auto select
- variablesList.setSelectedValue(domain, true);
+ factorsList.setSelectedValue(factor, true);
}
-protected void displaySelectedDomain() {
- EquationContinuousDomain selectedDomain = (EquationContinuousDomain)variablesList.getSelectedValue();
- variableNameField.setText(selectedDomain.getVariableName());
- distributionPanel.initWithDomain(selectedDomain);
+protected void displaySelectedFactor() {
+ Factor selectedFactor = (Factor)factorsList.getSelectedValue();
+ variableNameField.setText(selectedFactor.getEquationVariableName());
+ distributionPanel.initWithFactor(selectedFactor);
}
protected void removeSelectedVariable() {
- int selectedIndex = variablesList.getSelectedIndex();
- domains.remove(selectedIndex);
+ int selectedIndex = factorsList.getSelectedIndex();
+ factors.remove(selectedIndex);
// fire data change
- variablesList.clearSelection();
- variablesListModel.setDomains(domains);
+ factorsList.clearSelection();
+ factorsListModel.setFactors(factors);
}
@Override
public boolean isFactorValid() {
boolean valid = true;
- for (EquationContinuousDomain domain : domains) {
- if (StringUtils.isBlank(domain.getVariableName())) {
+ for (Factor factor : factors) {
+ if (StringUtils.isBlank(factor.getEquationVariableName())) {
valid = false;
}
+ if (factor.getDomain() == null) {
+ valid = false;
+ }
}
return valid;
@@ -148,12 +153,12 @@
<row>
<cell fill='both' weightx='1' weighty='1'>
<JScrollPane>
- <fr.ifremer.isisfish.ui.sensitivity.equation.EquationDomainListModel
- id="variablesListModel" constructorParams="domains" />
- <JList id="variablesList" model="{variablesListModel}"
- cellRenderer="{new fr.ifremer.isisfish.ui.sensitivity.equation.EquationDomainRenderer()}"/>
- <ListSelectionModel initializer="variablesList.getSelectionModel()"
- onValueChanged="displaySelectedDomain();setSelectedDomain(variablesList.getSelectedIndex() != -1)" />
+ <fr.ifremer.isisfish.ui.sensitivity.model.FactorListModel
+ id="factorsListModel" constructorParams="factors" />
+ <JList id="factorsList" model="{factorsListModel}"
+ cellRenderer="{new fr.ifremer.isisfish.ui.sensitivity.model.FactorListRenderer()}"/>
+ <ListSelectionModel initializer="factorsList.getSelectionModel()"
+ onValueChanged="displaySelectedFactor();setSelectedFactor(factorsList.getSelectedIndex() != -1)" />
</JScrollPane>
</cell>
<cell fill='both' weightx='1' weighty='1'>
@@ -163,10 +168,10 @@
<Table>
<row>
<cell>
- <JLabel text="isisfish.sensitivity.equation.variablename" enabled='{isSelectedDomain()}' />
+ <JLabel text="isisfish.sensitivity.equation.variablename" enabled='{isSelectedFactor()}' />
</cell>
<cell fill="horizontal" weightx='1'>
- <JTextField id="variableNameField" enabled='{isSelectedDomain()}'/>
+ <JTextField id="variableNameField" enabled='{isSelectedFactor()}'/>
</cell>
</row>
</Table>
@@ -174,15 +179,15 @@
</row>
<row>
<cell fill="both" weighty='1' columns="2" weightx='1'>
- <ContinuousDistributionPanel id="distributionPanel" enabled='{isSelectedDomain()}'
+ <ContinuousDistributionPanel id="distributionPanel" enabled='{isSelectedFactor()}'
constructorParams="0.0d"/>
</cell>
</row>
<row>
<cell fill="horizontal" columns="2">
<JButton text="isisfish.sensitivity.equation.valid"
- enabled='{isSelectedDomain()}'
- onActionPerformed='validSelectedDomain()' />
+ enabled='{isSelectedFactor()}'
+ onActionPerformed='validSelectedFactor()' />
</cell>
</row>
</Table>
@@ -195,7 +200,7 @@
</cell>
<cell fill='horizontal'>
<JButton id='remove' text='isisfish.common.remove'
- enabled='{isSelectedDomain()}' onActionPerformed='removeSelectedVariable()'/>
+ enabled='{isSelectedFactor()}' onActionPerformed='removeSelectedVariable()'/>
</cell>
</row>
<row>
Deleted: branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/wizard/MatrixContinuousPanelUI.jaxx
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/wizard/MatrixContinuousPanelUI.jaxx 2012-03-14 14:13:51 UTC (rev 3653)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/wizard/MatrixContinuousPanelUI.jaxx 2012-03-14 15:56:49 UTC (rev 3654)
@@ -1,154 +0,0 @@
-<!--
- #%L
- IsisFish
-
- $Id$
- $HeadURL$
- %%
- Copyright (C) 2009 - 2012 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%
- -->
-<ContinuousPanel>
-
- <Boolean id="percentageTypeFactor" javaBean="true" />
-
- <import>
- org.apache.commons.lang3.StringUtils
- org.nuiton.math.matrix.gui.MatrixPanelEditor
- org.nuiton.math.matrix.MatrixND
- java.awt.CardLayout
- java.beans.PropertyChangeEvent
- java.beans.PropertyChangeListener
- fr.ifremer.isisfish.simulator.sensitivity.domain.ContinuousDomain
- </import>
-
- <script><![CDATA[
-public void init(MatrixND min, MatrixND max, MatrixND referenceValue, String coefficient) {
- minValuePanel.setMatrix(min);
- maxValuePanel.setMatrix(max);
- referenceValuePanel.setMatrix(referenceValue);
- coefficientField.setText(coefficient);
-}
-
-public void initExisting(MatrixND min, MatrixND max, MatrixND referenceValue, String coefficient) {
- init(min, max, referenceValue, coefficient);
- setPercentageTypeFactor(StringUtils.isNotBlank(coefficient));
-}
-
-@Override
-public boolean isFactorValid() {
- boolean valid = false;
-
- /*try {
- if (continueSelected) {
- if (percentageTypeFactor) {
- Double coefficient = Double.parseDouble(coefficientField.getText().trim());
- valid = coefficient != null;
- }
- else {
- valid = true;
- }
- }
- else {
- valid = true;
- }
- }
- catch (NumberFormatException eee) {
- if (log.isWarnEnabled()) {
- log.warn("Double parse error", eee);
- }
- }*/
-
- return valid;
-}
-
-protected void $afterCompleteSetup() {
- addPropertyChangeListener(PROPERTY_PERCENTAGE_TYPE_FACTOR, new PropertyChangeListener() {
- @Override
- public void propertyChange(PropertyChangeEvent evt) {
- if ((Boolean)evt.getNewValue()) {
- ((CardLayout) hidablePanel.getLayout()).show(hidablePanel, "percentageType");
- } else {
- ((CardLayout) hidablePanel.getLayout()).show(hidablePanel, "minMaxType");
- }
- }
- });
-}
-
-@Override
-public void initWithDomain(ContinuousDomain domain) {
-
-}
- ]]></script>
- <JPanel id="content">
- <Table constraints='BorderLayout.CENTER'>
- <row>
- <cell fill='horizontal' weightx='1'>
- <JRadioButton text="isisfish.sensitivity.continuouspercentagetype"
- onActionPerformed="setPercentageTypeFactor(true)"
- selected="{isPercentageTypeFactor()}"/>
- </cell>
- <cell fill='horizontal' weightx='1'>
- <JRadioButton text="isisfish.sensitivity.continuousminmaxtype"
- onActionPerformed="setPercentageTypeFactor(false)"
- selected="{!isPercentageTypeFactor()}"/>
- </cell>
- </row>
- <row>
- <cell fill='both' weightx='1' weighty='1' columns="2">
- <JPanel layout="{new CardLayout()}" id="hidablePanel">
- <Table constraints='"percentageType"' border='{BorderFactory.createTitledBorder("")}'>
- <row>
- <cell fill='horizontal' columns="2">
- <JLabel text='isisfish.sensitivity.referencevalue'/>
- </cell>
- </row>
- <row>
- <cell fill='both' weighty='1' columns="2">
- <MatrixPanelEditor id='referenceValuePanel'/>
- </cell>
- </row>
- <row>
- <cell fill='horizontal'>
- <JLabel text='isisfish.sensitivity.coefficient'/>
- </cell>
- <cell fill='horizontal' weightx='1'>
- <JTextField id='coefficientField'/>
- </cell>
- </row>
- </Table>
-
- <Table constraints='"minMaxType"' border='{BorderFactory.createTitledBorder("")}'>
- <row>
- <cell fill='both' weightx='1' weighty='1'>
- <JTabbedPane>
- <tab title="isisfish.sensitivity.firstValue">
- <MatrixPanelEditor id='minValuePanel'/>
- </tab>
- <tab title="isisfish.sensitivity.lastValue">
- <MatrixPanelEditor id='maxValuePanel'/>
- </tab>
- </JTabbedPane>
- </cell>
- </row>
- </Table>
- </JPanel>
- </cell>
- </row>
- </Table>
- </JPanel>
-</ContinuousPanel>
\ No newline at end of file
Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/wizard/SensitivityWizardHandler.java
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/wizard/SensitivityWizardHandler.java 2012-03-14 14:13:51 UTC (rev 3653)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/wizard/SensitivityWizardHandler.java 2012-03-14 15:56:49 UTC (rev 3654)
@@ -65,7 +65,6 @@
import fr.ifremer.isisfish.simulator.sensitivity.SensitivityUtils;
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.RuleDiscreteDomain;
import fr.ifremer.isisfish.types.Month;
@@ -181,22 +180,11 @@
factorWizardUI.setFactorPath(factorPath);
factorWizardUI.getComment().setText(factor.getComment());
- // dans le cas d'un facteur equation
- // il faut enlever la varible du nom
- // sinon, à la sauvegarde elle sera reajoutée
- if (domain instanceof EquationContinuousDomain) {
- EquationContinuousDomain equationDomain = (EquationContinuousDomain)domain;
- String suffix = equationDomain.getVariableName();
- factorName = StringUtils.removeEnd(factorName, "." + suffix);
- // can be called _xxx after char replacement for R
- factorName = StringUtils.removeEnd(factorName, "_" + suffix);
- }
-
if (domain instanceof ContinuousDomain) {
ContinuousDomain cDomain = (ContinuousDomain) domain;
ContinuousPanel comp = getNewContinuousComponent(factorWizardUI, factor.getPath());
- comp.initWithDomain(cDomain);
+ comp.initWithFactor(factor);
factorWizardUI.getContinuousPanelContainer().add(comp, BorderLayout.CENTER);
factorWizardUI.getContinueRadio().setSelected(true);
@@ -794,10 +782,13 @@
// Save equation
bean.update();
topiaContext.commitTransaction();
-
- List<EquationContinuousDomain> domains = equationPanel.getDomains();
- for (EquationContinuousDomain domain : domains) {
- action.addContinuousEquationFactor(name, comment, path, domain, exist);
+
+ List<Factor> factors = equationPanel.getFactors();
+ for (Factor factor : factors) {
+ factor.setName(name);
+ factor.setComment(comment);
+ factor.setPath(path);
+ action.addContinuousEquationFactor(factor, exist);
}
} catch (Exception ex) {
if (log.isErrorEnabled()) {
Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/simulator/SimulAction.java
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/simulator/SimulAction.java 2012-03-14 14:13:51 UTC (rev 3653)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/simulator/SimulAction.java 2012-03-14 15:56:49 UTC (rev 3654)
@@ -94,7 +94,6 @@
import fr.ifremer.isisfish.simulator.sensitivity.SensitivityUtils;
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.RuleDiscreteDomain;
import fr.ifremer.isisfish.ui.SimulationUI;
@@ -957,17 +956,14 @@
addFactor(f);
}
- public void addContinuousEquationFactor(String name, String comment, String path,
- EquationContinuousDomain domain, boolean exist) {
+ public void addContinuousEquationFactor(Factor f, boolean exist) {
// factor name need to be composed
- Factor f = new Factor(name + "." + domain.getVariableName());
- f.setDomain(domain);
- f.setComment(comment);
- // don't modify path, need to be valid identifier
- //f.setPath(path + domain.getVariableName());
- f.setPath(path);
+ //Factor f = new Factor(name + "." + domain.getVariableName());
+ //f.setDomain(domain);
+ //f.setComment(comment);
+ //f.setPath(path);
if (exist) {
- removeFactor(path);
+ removeFactor(f.getPath());
}
addFactor(f);
}
Modified: branches/4.0.1/src/main/resources/i18n/isis-fish_en_GB.properties
===================================================================
--- branches/4.0.1/src/main/resources/i18n/isis-fish_en_GB.properties 2012-03-14 14:13:51 UTC (rev 3653)
+++ branches/4.0.1/src/main/resources/i18n/isis-fish_en_GB.properties 2012-03-14 15:56:49 UTC (rev 3654)
@@ -713,11 +713,14 @@
isisfish.populationMigration.selectSeason=Select a season
isisfish.populationMigration.title=Migration
isisfish.populationMigration.useEquation=Use equation
+isisfish.populationMigrationEmigration.coefficient=
isisfish.populationMigrationEmigration.departureZone=Departure Zone
isisfish.populationMigrationEmigration.title=Population emigration
isisfish.populationMigrationImmigration.arrivalZone=Arrival Zone
+isisfish.populationMigrationImmigration.coefficient=
isisfish.populationMigrationImmigration.title=Population immigration
isisfish.populationMigrationMigration.arrivalZone=Arrival zone
+isisfish.populationMigrationMigration.coefficient=
isisfish.populationMigrationMigration.departureZone=Departure zone
isisfish.populationMigrationMigration.title=Population migration
isisfish.populationPrice.title=Price
Modified: branches/4.0.1/src/main/resources/i18n/isis-fish_fr_FR.properties
===================================================================
--- branches/4.0.1/src/main/resources/i18n/isis-fish_fr_FR.properties 2012-03-14 14:13:51 UTC (rev 3653)
+++ branches/4.0.1/src/main/resources/i18n/isis-fish_fr_FR.properties 2012-03-14 15:56:49 UTC (rev 3654)
@@ -713,11 +713,14 @@
isisfish.populationMigration.selectSeason=Sélectionnez une saison
isisfish.populationMigration.title=Migration
isisfish.populationMigration.useEquation=Utiliser l'équation
+isisfish.populationMigrationEmigration.coefficient=
isisfish.populationMigrationEmigration.departureZone=Zone de départ
isisfish.populationMigrationEmigration.title=Emmigration
isisfish.populationMigrationImmigration.arrivalZone=Zone d'arrivée
+isisfish.populationMigrationImmigration.coefficient=
isisfish.populationMigrationImmigration.title=Immigration
isisfish.populationMigrationMigration.arrivalZone=Zone d'arrivée
+isisfish.populationMigrationMigration.coefficient=
isisfish.populationMigrationMigration.departureZone=Zone de départ
isisfish.populationMigrationMigration.title=Migration de population
isisfish.populationPrice.title=Prix
Modified: branches/4.0.1/src/test/java/fr/ifremer/isisfish/mexico/MexicoHelperTest.java
===================================================================
--- branches/4.0.1/src/test/java/fr/ifremer/isisfish/mexico/MexicoHelperTest.java 2012-03-14 14:13:51 UTC (rev 3653)
+++ branches/4.0.1/src/test/java/fr/ifremer/isisfish/mexico/MexicoHelperTest.java 2012-03-14 15:56:49 UTC (rev 3654)
@@ -71,7 +71,6 @@
import fr.ifremer.isisfish.simulator.sensitivity.FactorGroup;
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.RuleDiscreteDomain;
import fr.ifremer.isisfish.types.TimeStep;
@@ -171,7 +170,8 @@
// factor 5
Factor factorEquationContinuous = new Factor("factor 5 (EquationContinuous)");
- EquationContinuousDomain domain5 = new EquationContinuousDomain(Distribution.QUNIFPC);
+ factorEquationContinuous.setEquationVariableName("Ktemp");
+ ContinuousDomain domain5 = new ContinuousDomain(Distribution.QUNIFPC);
domain5.addDistributionParam("reference", 0.1);
domain5.addDistributionParam("coefficient", 45.0);
factorEquationContinuous.setDomain(domain5);
@@ -457,10 +457,10 @@
// factor x5
Factor factorEquationContinuous = new Factor("factor x5");
- EquationContinuousDomain domain5 = new EquationContinuousDomain(Distribution.QUNIFMM);
+ ContinuousDomain domain5 = new ContinuousDomain(Distribution.QUNIFMM);
domain5.addDistributionParam("min", 40.0);
domain5.addDistributionParam("max", 50.0);
- domain5.setVariableName("Lx1");
+ factorEquationContinuous.setEquationVariableName("Lx1");
factorEquationContinuous.setDomain(domain5);
factorEquationContinuous.setPath("fr.ifremer.isisfish.entities.PopulationGroup#1156461521076#0.6526656643346673#maxLength");
Modified: branches/4.0.1/src/test/java/fr/ifremer/isisfish/simulator/launcher/SimulationServiceTest.java
===================================================================
--- branches/4.0.1/src/test/java/fr/ifremer/isisfish/simulator/launcher/SimulationServiceTest.java 2012-03-14 14:13:51 UTC (rev 3653)
+++ branches/4.0.1/src/test/java/fr/ifremer/isisfish/simulator/launcher/SimulationServiceTest.java 2012-03-14 15:56:49 UTC (rev 3654)
@@ -67,7 +67,6 @@
import fr.ifremer.isisfish.simulator.sensitivity.SensitivityAnalysisRandomMock;
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.RuleDiscreteDomain;
@@ -332,10 +331,10 @@
// factor
Factor factorEquation = new Factor("test.equation.name.K1");
- EquationContinuousDomain domain1 = new EquationContinuousDomain(Distribution.QUNIFPC);
+ ContinuousDomain domain1 = new ContinuousDomain(Distribution.QUNIFPC);
domain1.addDistributionParam("reference", 10.0);
domain1.addDistributionParam("coefficient", 0.1);
- domain1.setVariableName("K1");
+ factorEquation.setEquationVariableName("K1");
factorEquation.setDomain(domain1);
factorEquation.setPath("fr.ifremer.equation1#testFactorPreScriptEquation");
factorEquation.setValueForIdentifier(0.4);
Modified: branches/4.0.1/src/test/java/fr/ifremer/isisfish/simulator/sensitivity/FactorTest.java
===================================================================
--- branches/4.0.1/src/test/java/fr/ifremer/isisfish/simulator/sensitivity/FactorTest.java 2012-03-14 14:13:51 UTC (rev 3653)
+++ branches/4.0.1/src/test/java/fr/ifremer/isisfish/simulator/sensitivity/FactorTest.java 2012-03-14 15:56:49 UTC (rev 3654)
@@ -39,7 +39,6 @@
import fr.ifremer.isisfish.rule.RuleMock;
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.RuleDiscreteDomain;
/**
@@ -267,10 +266,10 @@
// factor
Factor factor = new Factor("testequation");
- EquationContinuousDomain domain = new EquationContinuousDomain(Distribution.QUNIFPC);
+ ContinuousDomain domain = new ContinuousDomain(Distribution.QUNIFPC);
domain.addDistributionParam("reference", 3.0);
domain.addDistributionParam("coefficient", 0.1);
- domain.setVariableName("Linf");
+ factor.setEquationVariableName("Linf");
factor.setDomain(domain);
factor.setPath("org.nuiton.math.matrix.MatrixND#563456293453#2.456347646#dim");
factor.setValueForIdentifier(0.1);
@@ -281,10 +280,10 @@
// factor 2
Factor factor2 = new Factor("testequation");
- EquationContinuousDomain domain2 = new EquationContinuousDomain(Distribution.QUNIFPC);
+ ContinuousDomain domain2 = new ContinuousDomain(Distribution.QUNIFPC);
domain2.addDistributionParam("reference", 3.0);
domain2.addDistributionParam("coefficient", 0.1);
- domain2.setVariableName("Linf");
+ factor2.setEquationVariableName("Linf");
factor2.setDomain(domain2);
factor2.setPath("org.nuiton.math.matrix.MatrixND#563456293453#2.456347646#dim");
factor2.setValueForIdentifier(0.1);
@@ -295,10 +294,10 @@
// factor 3
Factor factor3 = new Factor("testequation");
- EquationContinuousDomain domain3 = new EquationContinuousDomain(Distribution.QUNIFPC);
+ ContinuousDomain domain3 = new ContinuousDomain(Distribution.QUNIFPC);
domain3.addDistributionParam("reference", 3.0);
domain3.addDistributionParam("coefficient", 0.1);
- domain3.setVariableName("Linf");
+ factor3.setEquationVariableName("Linf");
factor3.setDomain(domain3);
factor3.setPath("org.nuiton.math.matrix.MatrixND#563456293453#2.456347646#dim");
factor3.setValueForIdentifier(0.2);
@@ -309,10 +308,10 @@
// factor 4
Factor factor4 = new Factor("testequation");
- EquationContinuousDomain domain4 = new EquationContinuousDomain(Distribution.QUNIFPC);
+ ContinuousDomain domain4 = new ContinuousDomain(Distribution.QUNIFPC);
domain4.addDistributionParam("reference", 3.0);
domain4.addDistributionParam("coefficient", 0.05);
- domain4.setVariableName("Linf");
+ factor4.setEquationVariableName("Linf");
factor4.setDomain(domain4);
factor4.setPath("org.nuiton.math.matrix.MatrixND#563456293453#2.456347646#dim");
factor4.setValueForIdentifier(0.1);
1
0
14 Mar '12
Author: echatellier
Date: 2012-03-14 15:13:51 +0100 (Wed, 14 Mar 2012)
New Revision: 3653
Url: http://forge.codelutin.com/repositories/revision/isis-fish/3653
Log:
#724 : Choix de la distribution dans les UIs
Refactoring profond de la mise a facteur pour tenir compte de la distribution.
Added:
branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/Distribution.java
branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/wizard/
branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/wizard/ContinuousDistributionPanel.java
branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/wizard/ContinuousPanel.java
branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/wizard/EquationContinuousPanelUI.jaxx
branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/wizard/FactorWizardUI.jaxx
branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/wizard/MatrixContinuousPanelUI.jaxx
branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/wizard/SensitivityWizardHandler.java
branches/4.0.1/src/test/resources/mexico/expDesign.xsd
Removed:
branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/xml/MatrixContinuousDomainXMLVisitor.java
branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/distribution/
branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/domain/MatrixContinuousDomain.java
branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/ContinuousPanelContainerUI.jaxx
branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/DefaultContinuousPanelUI.jaxx
branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/EquationContinuousPanelUI.jaxx
branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/FactorWizardUI.jaxx
branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/MatrixContinuousPanelUI.jaxx
branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityUtils.java
branches/4.0.1/src/test/java/fr/ifremer/isisfish/simulator/sensitivity/domain/MatrixContinuousDomainTest.java
branches/4.0.1/src/test/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityUtilsTest.java
Modified:
branches/4.0.1/src/main/java/fr/ifremer/isisfish/IsisConfig.java
branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/MexicoHelper.java
branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/export/RegionExportFactorXML.java
branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/xml/ContinuousDomainXMLVisitor.java
branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/xml/DesignPlanXMLVisitor.java
branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/xml/DiscreteDomainXMLVisitor.java
branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/xml/DomXMLParser.java
branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/xml/DomainXMLVisitor.java
branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/xml/EquationContinuousDomainXMLVisitor.java
branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/xml/FactorXMLVisitor.java
branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/SimulationParameterImpl.java
branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/AbstractSensitivityAnalysis.java
branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/DesignPlan.java
branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/Factor.java
branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/FactorGroup.java
branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/SensitivityUtils.java
branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/domain/ContinuousDomain.java
branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/domain/EquationContinuousDomain.java
branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/input/InputContentUI.jaxx
branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/input/InputHandler.java
branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityInputHandler.java
branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivitySaveVerifier.java
branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/TableBlockingLayerUI.java
branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/model/FactorTreeCellRenderer.java
branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/simulator/ParamsUI.jaxx
branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/simulator/RuleChooser.jaxx
branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/simulator/SimulAction.java
branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/widget/editor/ScriptParameterDialog.jaxx
branches/4.0.1/src/main/resources/i18n/isis-fish_en_GB.properties
branches/4.0.1/src/main/resources/i18n/isis-fish_fr_FR.properties
branches/4.0.1/src/test/java/fr/ifremer/isisfish/mexico/MexicoHelperTest.java
branches/4.0.1/src/test/java/fr/ifremer/isisfish/mexico/export/RegionExplorerTest.java
branches/4.0.1/src/test/java/fr/ifremer/isisfish/simulator/launcher/SimulationServiceTest.java
branches/4.0.1/src/test/java/fr/ifremer/isisfish/simulator/sensitivity/FactorTest.java
branches/4.0.1/src/test/java/fr/ifremer/isisfish/simulator/sensitivity/SensitivityAnalysisRandomMock.java
branches/4.0.1/src/test/java/fr/ifremer/isisfish/simulator/sensitivity/SensitivityUtilsTest.java
branches/4.0.1/src/test/java/fr/ifremer/isisfish/simulator/sensitivity/domain/EquationContinuousDomainTest.java
branches/4.0.1/src/test/java/fr/ifremer/isisfish/ui/sensitivity/FactorTreeModelTest.java
Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/IsisConfig.java
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/IsisConfig.java 2012-03-09 09:54:32 UTC (rev 3652)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/IsisConfig.java 2012-03-14 14:13:51 UTC (rev 3653)
@@ -119,7 +119,7 @@
* migration de donnees demande automatiquement un changement de version
* d'application.
*/
- protected final static Version version = new Version(4, 0, 0, 3);
+ protected final static Version version = new Version(4, 0, 1, 0);
protected final static Version majorVersion = new Version(version.getNumber(0));
protected final static Version databaseVersion = new Version(
Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/MexicoHelper.java
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/MexicoHelper.java 2012-03-09 09:54:32 UTC (rev 3652)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/MexicoHelper.java 2012-03-14 14:13:51 UTC (rev 3653)
@@ -44,7 +44,6 @@
import javax.xml.transform.stream.StreamResult;
import org.apache.commons.beanutils.BeanUtils;
-import org.apache.commons.beanutils.ConvertUtils;
import org.apache.commons.beanutils.ConvertUtilsBean;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang3.StringEscapeUtils;
@@ -95,11 +94,12 @@
* Get xml representation of a design plan.
*
* @param designPlan design plan
+ * @param args some meta information to put into generated xml (author, date, id, license)
* @return xml design plan representation
*/
- public static String getDesignPlanAsXML(DesignPlan designPlan) {
+ public static String getDesignPlanAsXML(DesignPlan designPlan, String... args) {
- DesignPlanXMLVisitor visitor = new DesignPlanXMLVisitor();
+ DesignPlanXMLVisitor visitor = new DesignPlanXMLVisitor(args);
designPlan.accept(visitor);
String designPlanXml = visitor.getXML();
Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/export/RegionExportFactorXML.java
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/export/RegionExportFactorXML.java 2012-03-09 09:54:32 UTC (rev 3652)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/export/RegionExportFactorXML.java 2012-03-14 14:13:51 UTC (rev 3653)
@@ -44,9 +44,9 @@
import fr.ifremer.isisfish.entities.StrategyMonthInfo;
import fr.ifremer.isisfish.entities.TargetSpecies;
import fr.ifremer.isisfish.mexico.MexicoHelper;
+import fr.ifremer.isisfish.simulator.sensitivity.SensitivityUtils;
import fr.ifremer.isisfish.types.RangeOfValues;
import fr.ifremer.isisfish.types.TimeUnit;
-import fr.ifremer.isisfish.ui.sensitivity.SensitivityUtils;
/**
* Export implementation for factor into xml.
@@ -110,7 +110,6 @@
String factorName = factorClass + "." + propertyName;
// test if factor name is enabled
- // TODO move SensitivityUtils outside of UI
boolean enabled = SensitivityUtils.isSensitivityFactorEnabled(factorName);
if (log.isDebugEnabled()) {
Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/xml/ContinuousDomainXMLVisitor.java
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/xml/ContinuousDomainXMLVisitor.java 2012-03-09 09:54:32 UTC (rev 3652)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/xml/ContinuousDomainXMLVisitor.java 2012-03-14 14:13:51 UTC (rev 3653)
@@ -5,7 +5,7 @@
* $Id$
* $HeadURL$
* %%
- * Copyright (C) 2009 - 2010 Ifremer, Code Lutin, Chatellier Eric
+ * Copyright (C) 2009 - 2012 Ifremer, Code Lutin, 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
@@ -25,6 +25,11 @@
package fr.ifremer.isisfish.mexico.xml;
+import java.util.Map.Entry;
+
+import org.nuiton.math.matrix.MatrixND;
+
+import fr.ifremer.isisfish.mexico.MexicoHelper;
import fr.ifremer.isisfish.simulator.sensitivity.Domain;
import fr.ifremer.isisfish.simulator.sensitivity.domain.ContinuousDomain;
@@ -44,8 +49,7 @@
*/
@Override
public void start(Domain domain) {
- xmlBuffer.append("<domain>");
- xmlBuffer.append("<fixed>");
+ super.start(domain);
ContinuousDomain cDomain = (ContinuousDomain)domain;
appendDomain(cDomain);
@@ -57,36 +61,41 @@
*
* @param domain domain to print
*/
- protected void appendDomain(ContinuousDomain domain) {
- // facteur continue pourcentage
- if (domain.isPercentageType()) {
- xmlBuffer.append("<reference coefficient=\"" + domain.getCoefficient() + "\">");
- xmlBuffer.append(domain.getReferenceValue());
- xmlBuffer.append("</reference>");
+ protected void appendDomain(ContinuousDomain domain) {
+ xmlBuffer.append("<distribution name=\"" + domain.getDistribution().toString().toLowerCase() + "\">");
+ for (Entry<String, Object> distributionParameterEntry : domain.getDistributionParameters().entrySet()) {
+ String name = distributionParameterEntry.getKey();
+ Object value = distributionParameterEntry.getValue();
+ xmlBuffer.append("<distributionParameter name=\"" + name + "\"");
+ appendParamValue(xmlBuffer, value);
+ xmlBuffer.append("</distributionParameter>");
}
- else {
- // facteur continue min/max
- xmlBuffer.append("<range>");
- xmlBuffer.append("<min>" + domain.getMinBound() + "</min>");
- xmlBuffer.append("<max>" + domain.getMaxBound() + "</max>");
- xmlBuffer.append("</range>");
- }
+ xmlBuffer.append("</distribution>");
}
/**
- * {@inheritDoc}
+ * Append value type and value content.
+ *
+ * @param xmlBuffer buffer
+ * @param value value to append
*/
- @Override
- public void visit(Domain domain, Object label, Object value) {
-
+ protected void appendParamValue(StringBuffer xmlBuffer, Object value) {
+
+ if (value instanceof MatrixND) {
+ xmlBuffer.append(" type=\"matrix\">");
+ xmlBuffer.append(MexicoHelper.getMatrixAsXML((MatrixND)value));
+ } else {
+ xmlBuffer.append(" type=\"double\">");
+ xmlBuffer.append(value.toString());
+ }
+
}
/**
* {@inheritDoc}
*/
@Override
- public void end(Domain domain) {
- xmlBuffer.append("</fixed>");
- xmlBuffer.append("</domain>");
+ public void visit(Domain domain, Object label, Object value) {
+
}
}
Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/xml/DesignPlanXMLVisitor.java
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/xml/DesignPlanXMLVisitor.java 2012-03-09 09:54:32 UTC (rev 3652)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/xml/DesignPlanXMLVisitor.java 2012-03-14 14:13:51 UTC (rev 3653)
@@ -5,7 +5,7 @@
* $Id$
* $HeadURL$
* %%
- * Copyright (C) 2009 - 2010 Ifremer, Code Lutin, Chatellier Eric
+ * Copyright (C) 2009 - 2012 Ifremer, Code Lutin, 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
@@ -25,6 +25,10 @@
package fr.ifremer.isisfish.mexico.xml;
+import java.util.Date;
+
+import org.apache.commons.lang3.ArrayUtils;
+
import fr.ifremer.isisfish.simulator.sensitivity.DesignPlan;
import fr.ifremer.isisfish.simulator.sensitivity.FactorGroup;
import fr.ifremer.isisfish.simulator.sensitivity.visitor.DesignPlanVisitor;
@@ -40,17 +44,35 @@
*/
public class DesignPlanXMLVisitor extends AbstractXMLVisitor implements DesignPlanVisitor {
+ protected String[] args;
+
+ public DesignPlanXMLVisitor(String... args) {
+ this.args = args;
+ }
+
/**
* {@inheritDoc}
*
* Changes :
- * v2 : depuis la v2, meilleur gestion des min/max, pourcentage poru quasiment
+ * v3 : depuis la v3, les min/max, pourcentage, coefficient... ont été
+ * remplacé par les distributions et leur parametres
+ * v2 : depuis la v2, meilleur gestion des min/max, pourcentage pour quasiment
* tous les facteurs continue
* v0 : version original
*/
@Override
public void start(DesignPlan designPlan) {
- xmlBuffer.append("<experimentalDesign version=\"2\">");
+
+ int authorIndex = ArrayUtils.indexOf(args, "author");
+ int licenseIndex = ArrayUtils.indexOf(args, "license");
+ int dateIndex = ArrayUtils.indexOf(args, "date");
+ int idIndex = ArrayUtils.indexOf(args, "id");
+
+ xmlBuffer.append("<experimentalDesign version=\"3\"");
+ xmlBuffer.append(" author=\"" + (authorIndex != -1 ? args[authorIndex + 1] : "") + "\"");
+ xmlBuffer.append(" license=\"" + (licenseIndex != -1 ? args[licenseIndex + 1] : "") + "\"");
+ xmlBuffer.append(" date=\"" + (dateIndex != -1 ? args[dateIndex + 1] : new Date()) + "\"");
+ xmlBuffer.append(" id=\"" + (idIndex != -1 ? args[idIndex + 1] : "") + "\">");
}
/**
Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/xml/DiscreteDomainXMLVisitor.java
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/xml/DiscreteDomainXMLVisitor.java 2012-03-09 09:54:32 UTC (rev 3652)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/xml/DiscreteDomainXMLVisitor.java 2012-03-14 14:13:51 UTC (rev 3653)
@@ -5,7 +5,7 @@
* $Id$
* $HeadURL$
* %%
- * Copyright (C) 2009 - 2011 Ifremer, CodeLutin, Chatellier Eric
+ * Copyright (C) 2009 - 2012 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
@@ -43,28 +43,9 @@
* {@inheritDoc}
*/
@Override
- public void start(Domain domain) {
- xmlBuffer.append("<domain>");
- xmlBuffer.append("<fixed>");
- xmlBuffer.append("<enumeration>");
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
public void visit(Domain domain, Object label, Object value) {
- String stringValue = MexicoHelper.getStringFromObject(value);
- xmlBuffer.append("<value>" + stringValue + "</value>");
+ xmlBuffer.append("<level name=\"" + label + "\">");
+ xmlBuffer.append(MexicoHelper.getStringFromObject(value));
+ xmlBuffer.append("<level>");
}
-
- /**
- * {@inheritDoc}
- */
- @Override
- public void end(Domain domain) {
- xmlBuffer.append("</enumeration>");
- xmlBuffer.append("</fixed>");
- xmlBuffer.append("</domain>");
- }
}
Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/xml/DomXMLParser.java
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/xml/DomXMLParser.java 2012-03-09 09:54:32 UTC (rev 3652)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/xml/DomXMLParser.java 2012-03-14 14:13:51 UTC (rev 3653)
@@ -5,7 +5,7 @@
* $Id$
* $HeadURL$
* %%
- * Copyright (C) 2009 - 2011 Ifremer, CodeLutin, Chatellier Eric
+ * Copyright (C) 2009 - 2012 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
@@ -42,7 +42,6 @@
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;
/**
@@ -102,7 +101,9 @@
List<Element> factorGroupElements = rootElement.selectNodes("child::factors");
FactorGroup factorGroup = null;
if (!factorGroupElements.isEmpty()) {
- if ("2".equals(version)) {
+ if ("3".equals(version)) {
+ factorGroup = parseFactorGroupV3(factorGroupElements.get(0), topiaContext);
+ } else if ("2".equals(version)) {
factorGroup = parseFactorGroupV2(factorGroupElements.get(0), topiaContext);
}
else {
@@ -133,7 +134,7 @@
boolean continuous = "continuous".equalsIgnoreCase(factorGroupType);
FactorGroup factorGroup = new FactorGroup(factorGroupName, continuous);
- // sub factor group
+ /*// sub factor group
List<Element> factorGroupElements = fgElement.selectNodes("child::factors");
for (Element factorGroupElement : factorGroupElements) {
FactorGroup subFactorGroup = parseFactorGroup(factorGroupElement, topiaContext);
@@ -306,7 +307,7 @@
}
factorGroup.addFactor(factor);
}
- }
+ }*/
return factorGroup;
}
@@ -320,6 +321,10 @@
* @param fgElement factor group element (>factors<)
* @param topiaContext context
* @return factor group
+ *
+ * @deprecated since 4.0.1.0, this parsing method parse experimentalDesign
+ * in version "2", don't remove for
+ * data reading purpose, but could be removed in a future version
*/
protected static FactorGroup parseFactorGroupV2(Element fgElement, TopiaContext topiaContext) {
@@ -328,7 +333,7 @@
boolean continuous = "continuous".equalsIgnoreCase(factorGroupType);
FactorGroup factorGroup = new FactorGroup(factorGroupName, continuous);
- // sub factor group
+ /*// sub factor group
List<Element> factorGroupElements = fgElement.selectNodes("child::factors");
for (Element factorGroupElement : factorGroupElements) {
FactorGroup subFactorGroup = parseFactorGroupV2(factorGroupElement, topiaContext);
@@ -581,8 +586,284 @@
factor.setCardinality(cardinality);
factorGroup.addFactor(factor);
}
+ }*/
+
+ return factorGroup;
+ }
+
+ /**
+ * Recursive parse of factor group elements (>factors<).
+ *
+ * This version handle xml file distribution definition in each continuous
+ * factors.
+ *
+ * @param fgElement factor group element (>factors<)
+ * @param topiaContext context
+ * @return factor group
+ * @since 4.0.1.0
+ */
+ protected static FactorGroup parseFactorGroupV3(Element fgElement, TopiaContext topiaContext) {
+
+ String factorGroupName = fgElement.attributeValue(NAME);
+ String factorGroupType = fgElement.attributeValue("type");
+ boolean continuous = "continuous".equalsIgnoreCase(factorGroupType);
+ FactorGroup factorGroup = new FactorGroup(factorGroupName, continuous);
+
+ /*// sub factor group
+ List<Element> factorGroupElements = fgElement.selectNodes("child::factors");
+ for (Element factorGroupElement : factorGroupElements) {
+ FactorGroup subFactorGroup = parseFactorGroupV3(factorGroupElement, topiaContext);
+ factorGroup.addFactor(subFactorGroup);
}
+
+ // normal factors
+ List<Element> factorElements = fgElement.selectNodes("child::factor");
+ for (Element factorElement : factorElements) {
+ String type = factorElement.attributeValue(TYPE);
+ String name = factorElement.attributeValue(NAME);
+ String property = factorElement.attributeValue(PROPERTY);
+ String path = factorElement.element(TARGET).getText().trim();
+ String cardinalityString = factorElement.attributeValue(CARDINALITY);
+ Integer cardinality = 0;
+ if (StringUtils.isNotEmpty(cardinalityString)) {
+ cardinality = Integer.valueOf(cardinalityString);
+ }
+
+ // double
+ if ("real".equals(type)) {
+ Factor factor = new Factor(name);
+ factor.setPath(path);
+ Element fixedElement = factorElement.element(DOMAIN).element(FIXED);
+ // tous les domaines continues
+ if (property.endsWith(CONTINUOUS)) {
+
+ ContinuousDomain domain;
+ if(property.equals(MATRIXCONTINUOUS)) {
+
+ MatrixContinuousDomain mdomain = new MatrixContinuousDomain();
+ Element referenceElement = fixedElement.element(REFERENCE);
+ if (referenceElement != null) {
+ // matrix specific
+ // <coefficient operator="-" value="0.799"/>
+ mdomain.setCoefficient(Double.valueOf(referenceElement.attributeValue(COEFFICIENT)));
+ // <mx name="test1" step="0">...
+ Element matrixElement = referenceElement.element(MX);
+ MatrixND matrix = MexicoHelper.getMatrixFromXml(matrixElement, topiaContext);
+ mdomain.setReferenceValue(matrix);
+ mdomain.setPercentageType(true);
+ }
+ else {
+ Element rangeElement = fixedElement.element(RANGE);
+ Element minElement = rangeElement.element(MIN);
+ Element maxElement = rangeElement.element(MAX);
+ MatrixND minMatrix = MexicoHelper.getMatrixFromXml(minElement.element(MX), topiaContext);
+ MatrixND maxMatrix = MexicoHelper.getMatrixFromXml(maxElement.element(MX), topiaContext);
+ mdomain.setMinBound(minMatrix);
+ mdomain.setMaxBound(maxMatrix);
+ }
+
+ domain = mdomain;
+ }
+ else if (property.equals(EQUATIONCONTINUOUS)) {
+ // equation specific
+ EquationContinuousDomain edomain = new EquationContinuousDomain();
+ edomain.setVariableName(fixedElement.attributeValue(VARIABLE));
+ Element referenceElement = fixedElement.element(REFERENCE);
+ if (referenceElement != null) {
+ edomain.setCoefficient(Double.valueOf(referenceElement.attributeValue(COEFFICIENT)));
+ edomain.setReferenceValue(Double.valueOf(referenceElement.getTextTrim()));
+ edomain.setPercentageType(true);
+ }
+ else {
+ Element rangeElement = fixedElement.element(RANGE);
+ Element minElement = rangeElement.element(MIN);
+ Element maxElement = rangeElement.element(MAX);
+ edomain.setMinBound(Double.valueOf(minElement.getTextTrim()));
+ edomain.setMaxBound(Double.valueOf(maxElement.getTextTrim()));
+ }
+
+ domain = edomain;
+ }
+ else {
+ // continous domain
+ domain = new ContinuousDomain();
+
+ Element referenceElement = fixedElement.element(REFERENCE);
+ if (referenceElement != null) {
+ domain.setCoefficient(Double.valueOf(referenceElement.attributeValue(COEFFICIENT)));
+ domain.setReferenceValue(Double.valueOf(referenceElement.getTextTrim()));
+ domain.setPercentageType(true);
+ }
+ else {
+ // <range max="1.0" min="0.0"/>
+ Element rangeElement = fixedElement.element(RANGE);
+ Element minElement = rangeElement.element(MIN);
+ Element maxElement = rangeElement.element(MAX);
+ domain.setMinBound(Double.valueOf(minElement.getTextTrim()));
+ domain.setMaxBound(Double.valueOf(maxElement.getTextTrim()));
+ }
+ }
+
+ factor.setDomain(domain);
+ } else if (DISCRETE.equals(property)) {
+ DiscreteDomain domain = new DiscreteDomain();
+ List<Element> valueElements = fixedElement.element(
+ ENUMERATION).elements(VALUE);
+ int label = 0;
+ for (Element valueElement : valueElements) {
+ domain.getValues().put(label,
+ Double.valueOf(valueElement.getTextTrim()));
+ ++label;
+ }
+ factor.setDomain(domain);
+ }
+ factor.setCardinality(cardinality);
+ factorGroup.addFactor(factor);
+ } else if (INTEGER.equals(type)) {
+ Factor factor = new Factor(name);
+ factor.setPath(path);
+ Element fixedElement = factorElement.element(DOMAIN).element(FIXED);
+ if (CONTINUOUS.equals(property)) {
+ ContinuousDomain domain;
+
+ if(property.equals(MATRIXCONTINUOUS)) {
+
+ MatrixContinuousDomain mdomain = new MatrixContinuousDomain();
+ Element referenceElement = fixedElement.element(REFERENCE);
+ if (referenceElement != null) {
+ // matrix specific
+ // <coefficient operator="-" value="0.799"/>
+ mdomain.setCoefficient(Double.valueOf(referenceElement.attributeValue(COEFFICIENT)));
+ // <mx name="test1" step="0">...
+ Element matrixElement = referenceElement.element(MX);
+ MatrixND matrix = MexicoHelper.getMatrixFromXml(matrixElement, topiaContext);
+ mdomain.setReferenceValue(matrix);
+ mdomain.setPercentageType(true);
+ }
+ else {
+ Element rangeElement = fixedElement.element(RANGE);
+ Element minElement = rangeElement.element(MIN);
+ Element maxElement = rangeElement.element(MAX);
+ MatrixND minMatrix = MexicoHelper.getMatrixFromXml(minElement.element(MX), topiaContext);
+ MatrixND maxMatrix = MexicoHelper.getMatrixFromXml(maxElement.element(MX), topiaContext);
+ mdomain.setMinBound(minMatrix);
+ mdomain.setMaxBound(maxMatrix);
+ }
+
+ domain = mdomain;
+ }
+ else if (property.equals(EQUATIONCONTINUOUS)) {
+ // equation specific
+ EquationContinuousDomain edomain = new EquationContinuousDomain();
+ edomain.setVariableName(fixedElement.attributeValue(VARIABLE));
+ Element referenceElement = fixedElement.element(REFERENCE);
+ if (referenceElement != null) {
+ edomain.setCoefficient(Double.valueOf(referenceElement.attributeValue(COEFFICIENT)));
+ edomain.setReferenceValue(Double.valueOf(referenceElement.getTextTrim()));
+ edomain.setPercentageType(true);
+ }
+ else {
+ Element rangeElement = fixedElement.element(RANGE);
+ Element minElement = rangeElement.element(MIN);
+ Element maxElement = rangeElement.element(MAX);
+ edomain.setMinBound(Double.valueOf(minElement.getTextTrim()));
+ edomain.setMaxBound(Double.valueOf(maxElement.getTextTrim()));
+ }
+
+ domain = edomain;
+ }
+ else {
+ // continous domain
+ domain = new ContinuousDomain();
+
+ Element referenceElement = fixedElement.element(REFERENCE);
+ if (referenceElement != null) {
+ domain.setCoefficient(Double.valueOf(referenceElement.attributeValue(COEFFICIENT)));
+ domain.setReferenceValue(Double.valueOf(referenceElement.getTextTrim()));
+ domain.setPercentageType(true);
+ }
+ else {
+ // <range max="1.0" min="0.0"/>
+ Element rangeElement = fixedElement.element(RANGE);
+ Element minElement = rangeElement.element(MIN);
+ Element maxElement = rangeElement.element(MAX);
+ domain.setMinBound(Integer.valueOf(minElement.getTextTrim()));
+ domain.setMaxBound(Integer.valueOf(maxElement.getTextTrim()));
+ }
+ }
+
+ factor.setDomain(domain);
+ } else if (DISCRETE.equals(property)) {
+ DiscreteDomain domain = new DiscreteDomain();
+ List<Element> valueElements = fixedElement.element(
+ ENUMERATION).elements(VALUE);
+ int label = 0;
+ for (Element valueElement : valueElements) {
+ domain.getValues().put(label,
+ Integer.valueOf(valueElement.getTextTrim()));
+ ++label;
+ }
+ factor.setDomain(domain);
+ }
+ factor.setCardinality(cardinality);
+ factorGroup.addFactor(factor);
+ } else if (RULE.equals(type)) {
+ Factor factor = new Factor(name);
+ factor.setPath(path);
+ Element fixedElement = factorElement.element(DOMAIN).element(FIXED);
+ if (DISCRETE.equals(property)) {
+ RuleDiscreteDomain domain = new RuleDiscreteDomain();
+ List<Element> valueElements = fixedElement.element(ENUMERATION).elements(VALUE);
+ int label = 0;
+ for (Element valueElement : valueElements) {
+ Element rulesElement = valueElement.element(RULES);
+ List<Rule> rulesValue = MexicoHelper.getRulesFromXml(rulesElement, topiaContext);
+ domain.getValues().put(label, rulesValue);
+ ++label;
+ }
+ factor.setDomain(domain);
+ }
+ factor.setCardinality(cardinality);
+ 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(label, content);
+ ++label;
+ }
+ factor.setDomain(domain);
+ }
+ factor.setCardinality(cardinality);
+ factorGroup.addFactor(factor);
+ } else if ("string".equals(type)) {
+ Factor factor = new Factor(name);
+ factor.setPath(path);
+ Element fixedElement = factorElement.element(DOMAIN).element(FIXED);
+ if (DISCRETE.equals(property)) {
+ DiscreteDomain domain = new DiscreteDomain();
+ List<Element> valueElements = fixedElement.element(ENUMERATION).elements(VALUE);
+ int label = 0;
+ for (Element valueElement : valueElements) {
+ String content = valueElement.getText();
+ Object object = MexicoHelper.getObjectFromString(content, topiaContext);
+ domain.getValues().put(label, object);
+ ++label;
+ }
+ factor.setDomain(domain);
+ }
+ factor.setCardinality(cardinality);
+ factorGroup.addFactor(factor);
+ }
+ }*/
+
return factorGroup;
}
}
Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/xml/DomainXMLVisitor.java
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/xml/DomainXMLVisitor.java 2012-03-09 09:54:32 UTC (rev 3652)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/xml/DomainXMLVisitor.java 2012-03-14 14:13:51 UTC (rev 3653)
@@ -5,7 +5,7 @@
* $Id$
* $HeadURL$
* %%
- * Copyright (C) 2009 - 2010 Ifremer, CodeLutin, Chatellier Eric
+ * Copyright (C) 2009 - 2012 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
@@ -25,6 +25,7 @@
package fr.ifremer.isisfish.mexico.xml;
+import fr.ifremer.isisfish.simulator.sensitivity.Domain;
import fr.ifremer.isisfish.simulator.sensitivity.visitor.DomainVisitor;
/**
@@ -38,4 +39,19 @@
*/
public abstract class DomainXMLVisitor extends AbstractXMLVisitor implements DomainVisitor {
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void start(Domain domain) {
+ xmlBuffer.append("<domain>");
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void end(Domain domain) {
+ xmlBuffer.append("</domain>");
+ }
}
Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/xml/EquationContinuousDomainXMLVisitor.java
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/xml/EquationContinuousDomainXMLVisitor.java 2012-03-09 09:54:32 UTC (rev 3652)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/xml/EquationContinuousDomainXMLVisitor.java 2012-03-14 14:13:51 UTC (rev 3653)
@@ -5,7 +5,7 @@
* $Id$
* $HeadURL$
* %%
- * Copyright (C) 1999 - 2011 Ifremer, CodeLutin, Chatellier Eric
+ * Copyright (C) 1999 - 2012 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
@@ -26,7 +26,6 @@
package fr.ifremer.isisfish.mexico.xml;
import fr.ifremer.isisfish.simulator.sensitivity.Domain;
-import fr.ifremer.isisfish.simulator.sensitivity.domain.ContinuousDomain;
import fr.ifremer.isisfish.simulator.sensitivity.domain.EquationContinuousDomain;
/**
@@ -45,44 +44,14 @@
*/
@Override
public void start(Domain domain) {
- xmlBuffer.append("<domain>");
- xmlBuffer.append("<fixed");
+ xmlBuffer.append("<domain ");
EquationContinuousDomain eDomain = (EquationContinuousDomain)domain;
// this version add variable name
xmlBuffer.append(" variable=\"")
.append(eDomain.getVariableName())
- .append("\">");
+ .append(">");
appendDomain(eDomain);
}
-
- /**
- * {@inheritDoc}
- */
- @Override
- protected void appendDomain(ContinuousDomain domain) {
-
- EquationContinuousDomain eDomain = (EquationContinuousDomain)domain;
-
- // facteur continue pourcentage
- if (domain.isPercentageType()) {
- xmlBuffer.append("<reference coefficient=\"")
- .append(eDomain.getCoefficient())
- .append( "\">");
- xmlBuffer.append(eDomain.getReferenceValue());
- xmlBuffer.append("</reference>");
- }
- else {
- // facteur continue min/max
- xmlBuffer.append("<range>");
- xmlBuffer.append("<min>")
- .append(domain.getMinBound())
- .append("</min>");
- xmlBuffer.append("<max>")
- .append(domain.getMaxBound())
- .append("</max>");
- xmlBuffer.append("</range>");
- }
- }
}
Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/xml/FactorXMLVisitor.java
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/xml/FactorXMLVisitor.java 2012-03-09 09:54:32 UTC (rev 3652)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/xml/FactorXMLVisitor.java 2012-03-14 14:13:51 UTC (rev 3653)
@@ -25,20 +25,14 @@
package fr.ifremer.isisfish.mexico.xml;
-import org.nuiton.math.matrix.MatrixND;
-import org.nuiton.topia.persistence.TopiaEntity;
-
import fr.ifremer.isisfish.simulator.sensitivity.Domain;
import fr.ifremer.isisfish.simulator.sensitivity.Factor;
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;
-import fr.ifremer.isisfish.types.Month;
-import fr.ifremer.isisfish.types.TimeStep;
/**
* XML factor visitor.
@@ -58,44 +52,7 @@
public void start(Factor factor) {
xmlBuffer.append("<factor");
xmlBuffer.append(" name=\"").append(factor.getName()).append("\"");
- Object referenceValueForType = null;
- // property attribute
- Domain domain = factor.getDomain();
-
- if (domain instanceof ContinuousDomain) {
- if (domain instanceof MatrixContinuousDomain) {
- xmlBuffer.append(" property=\"matrixcontinuous\"");
- } else if (domain instanceof EquationContinuousDomain) {
- xmlBuffer.append(" property=\"equationcontinuous\"");
- } else {
- xmlBuffer.append(" property=\"continuous\"");
- }
- referenceValueForType = ((ContinuousDomain) domain).getReferenceValue();
- if (referenceValueForType == null) {
- referenceValueForType = ((ContinuousDomain) domain).getMinBound();
- }
- } else if (domain instanceof DiscreteDomain) {
- xmlBuffer.append(" property=\"discrete\"");
- Object firstKey = ((DiscreteDomain) domain).getValues().firstKey();
- referenceValueForType = ((DiscreteDomain) domain).getValues().get(firstKey);
- }
- // type attribute
- if (referenceValueForType instanceof Double || referenceValueForType instanceof Float
- || referenceValueForType instanceof MatrixND) {
- xmlBuffer.append(" type=\"real\"");
- } else if (referenceValueForType instanceof Integer) {
- xmlBuffer.append(" type=\"integer\"");
- } else if (domain instanceof RuleDiscreteDomain) {
- xmlBuffer.append(" type=\"rule\"");
- } else if (domain instanceof EquationDiscreteDomain) {
- xmlBuffer.append(" type=\"equation\"");
- } else if (referenceValueForType instanceof TopiaEntity ||
- referenceValueForType instanceof TimeStep ||
- referenceValueForType instanceof Month) {
- xmlBuffer.append(" type=\"string\"");
- }
-
//cardinality
xmlBuffer.append(" cardinality=\"");
xmlBuffer.append(factor.getCardinality());
@@ -118,9 +75,7 @@
@Override
public void visit(Factor factor, Domain domain) {
DomainXMLVisitor visitor = null;
- if (factor.getDomain() instanceof MatrixContinuousDomain) {
- visitor = new MatrixContinuousDomainXMLVisitor();
- } else if (factor.getDomain() instanceof EquationContinuousDomain) {
+ if (factor.getDomain() instanceof EquationContinuousDomain) {
visitor = new EquationContinuousDomainXMLVisitor();
} else if (factor.getDomain() instanceof ContinuousDomain) {
visitor = new ContinuousDomainXMLVisitor();
Deleted: branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/xml/MatrixContinuousDomainXMLVisitor.java
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/xml/MatrixContinuousDomainXMLVisitor.java 2012-03-09 09:54:32 UTC (rev 3652)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/mexico/xml/MatrixContinuousDomainXMLVisitor.java 2012-03-14 14:13:51 UTC (rev 3653)
@@ -1,73 +0,0 @@
-/*
- * #%L
- * IsisFish
- *
- * $Id$
- * $HeadURL$
- * %%
- * Copyright (C) 2009 - 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.nuiton.math.matrix.MatrixND;
-
-import fr.ifremer.isisfish.mexico.MexicoHelper;
-import fr.ifremer.isisfish.simulator.sensitivity.domain.ContinuousDomain;
-import fr.ifremer.isisfish.simulator.sensitivity.domain.MatrixContinuousDomain;
-
-/**
- * XML domain visitor for Matrix continuous.
- *
- * @author chatellier
- * @version $Revision: 1.0 $
- *
- * Last update : $Date: 5 mars 2009 $
- * By : $Author: chatellier $
- */
-public class MatrixContinuousDomainXMLVisitor extends ContinuousDomainXMLVisitor {
-
- /**
- * {@inheritDoc}
- */
- @Override
- protected void appendDomain(ContinuousDomain domain) {
-
- MatrixContinuousDomain mDomain = (MatrixContinuousDomain)domain;
-
- // facteur continue pourcentage
- if (domain.isPercentageType()) {
- xmlBuffer.append("<reference coefficient=\"")
- .append(mDomain.getCoefficient())
- .append("\">");
- xmlBuffer.append(MexicoHelper.getMatrixAsXML((MatrixND)mDomain.getReferenceValue()));
- xmlBuffer.append("</reference>");
- }
- else {
- // facteur continue min/max
- xmlBuffer.append("<range>");
- xmlBuffer.append("<min>")
- .append(MexicoHelper.getMatrixAsXML((MatrixND)mDomain.getMinBound()))
- .append("</min>");
- xmlBuffer.append("<max>")
- .append(MexicoHelper.getMatrixAsXML((MatrixND)mDomain.getMaxBound()))
- .append("</max>");
- xmlBuffer.append("</range>");
- }
- }
-}
Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/SimulationParameterImpl.java
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/SimulationParameterImpl.java 2012-03-09 09:54:32 UTC (rev 3652)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/SimulationParameterImpl.java 2012-03-14 14:13:51 UTC (rev 3653)
@@ -5,7 +5,7 @@
* $Id$
* $HeadURL$
* %%
- * Copyright (C) 2006 - 2010 Ifremer, Code Lutin, Cédric Pineau, Benjamin Poussin
+ * Copyright (C) 2006 - 2012 Ifremer, Code Lutin, Cédric Pineau, Benjamin Poussin
* %%
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as
Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/AbstractSensitivityAnalysis.java
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/AbstractSensitivityAnalysis.java 2012-03-09 09:54:32 UTC (rev 3652)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/AbstractSensitivityAnalysis.java 2012-03-14 14:13:51 UTC (rev 3653)
@@ -125,12 +125,13 @@
//Binf values
- binfValues += ((ContinuousDomain) factor.getDomain())
+ // FIXME echatellier to replace since 4.0.1
+ /*binfValues += ((ContinuousDomain) factor.getDomain())
.getCalculatorMinBound();
//Bsup values
bsupValues += ((ContinuousDomain) factor.getDomain())
- .getCalculatorMaxBound();
+ .getCalculatorMaxBound();*/
} else {
nominalValues += "\"" + factor.getNominalValue() + "\"";
Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/DesignPlan.java
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/DesignPlan.java 2012-03-09 09:54:32 UTC (rev 3652)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/DesignPlan.java 2012-03-14 14:13:51 UTC (rev 3653)
@@ -5,7 +5,7 @@
* $Id$
* $HeadURL$
* %%
- * Copyright (C) 2009 - 2011 Ifremer, CodeLutin, Chatellier Eric
+ * Copyright (C) 2009 - 2012 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
@@ -34,6 +34,8 @@
/**
* Design plan contenant toutes les valeurs de facteurs possible.
*
+ * It's equivalent to "experimentalDesign" in mexico.
+ *
* @author chatellier
* @version $Revision: 1.0 $
*
Copied: branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/Distribution.java (from rev 3646, branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/distribution/Distribution.java)
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/Distribution.java (rev 0)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/Distribution.java 2012-03-14 14:13:51 UTC (rev 3653)
@@ -0,0 +1,120 @@
+/*
+ * #%L
+ *
+ *
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2012 Ifremer, Codelutin, Chatellier Eric
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation, either version 3 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 Lesser Public License for more details.
+ *
+ * You should have received a copy of the GNU General Lesser Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/lgpl-3.0.html>.
+ * #L%
+ */
+
+package fr.ifremer.isisfish.simulator.sensitivity;
+
+import static org.nuiton.i18n.I18n._;
+
+/**
+ * Distribution used in sensitivity analysis (for continuous domain).
+ *
+ * @author chatellier
+ * @version $Revision$
+ * @since 4.0.1.0
+ *
+ * Last update : $Date$
+ * By : $Author$
+ */
+public enum Distribution {
+
+ QUNIFPC(_("QUnif %"),
+ new DistributionParam("reference", _("Reference value"), true),
+ new DistributionParam("coefficient", _("Coefficient"))),
+ QUNIFMM(_("QUnif Min/Max"),
+ new DistributionParam("min", _("Minimum value"), true),
+ new DistributionParam("max", _("Maximum value"), true)),
+ DBINOM(_("Dbimom"),
+ new DistributionParam("size", _("number of trials (zero or more)")),
+ new DistributionParam("prob", _("probability of success on each trial"))),
+ DCAUCHY(_("dcauchy"),
+ new DistributionParam("location", _("location and scale parameters. (location = 0, scale = 1)")),
+ new DistributionParam("scale", _("location and scale parameters. (location = 0, scale = 1)"))),
+ DCHISQ(_("dchisq"),
+ new DistributionParam("df", _("degrees of freedom (non-negative, but can be non-integer)")),
+ new DistributionParam("ncp", _("non-centrality parameter (non-negative)."))),
+ DEXP(_("dexp"),
+ new DistributionParam("rate", _("vector of rates"))),
+ DF(_("df"),
+ new DistributionParam("df1", _("degrees of freedom. 'Inf' is allowed")),
+ new DistributionParam("df2", _("degrees of freedom. 'Inf' is allowed")),
+ new DistributionParam("ncp", _("non-centrality parameter. If omitted the central F is assumed"))),
+ DGAMMA(_("dgamma"),
+ new DistributionParam("rate", _("an alternative way to specify the scale.")),
+ new DistributionParam("shape", _("shape and scale parameters. Must be positive, 'scale' strictly")),
+ new DistributionParam("scale", _("shape and scale parameters. Must be positive, 'scale' strictly"))),
+ DGEOM(_("dgeom"),
+ new DistributionParam("prob", _("probability of success in each trial. '0 < prob <= 1'"))),
+ DHYPER(_("dhyper"),
+ new DistributionParam("m", _("the number of white balls in the urn.")),
+ new DistributionParam("n", _("the number of black balls in the urn.")),
+ new DistributionParam("k", _("the number of balls drawn from the urn."))),
+ DLNORM(_("dlnorm"),
+ new DistributionParam("meanlog", _("mean and standard deviation of the distribution on the log scale with default values of '0' and '1' respectively.")),
+ new DistributionParam("sdlog", _("mean and standard deviation of the distribution on the log scale with default values of '0' and '1' respectively.")));
+
+ protected String description;
+
+ protected DistributionParam[] params;
+
+ private Distribution(String description, DistributionParam... params) {
+ this.description = description;
+ this.params = params;
+ }
+
+ public DistributionParam[] getDistibutionParams() {
+ return params;
+ }
+
+ public static class DistributionParam {
+ protected String name;
+
+ protected String description;
+
+ /** If original value must be set in UI (matrix). */
+ protected boolean originalValue;
+
+ public DistributionParam(String name, String description, boolean originalValue) {
+ this.name = name;
+ this.description = description;
+ this.originalValue = originalValue;
+ }
+
+ public DistributionParam(String name, String description) {
+ this(name, description, false);
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+
+ public boolean isOriginalValue() {
+ return originalValue;
+ }
+ }
+}
Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/Factor.java
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/Factor.java 2012-03-09 09:54:32 UTC (rev 3652)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/Factor.java 2012-03-14 14:13:51 UTC (rev 3653)
@@ -25,7 +25,6 @@
package fr.ifremer.isisfish.simulator.sensitivity;
-import fr.ifremer.isisfish.simulator.sensitivity.domain.MatrixContinuousDomain;
import fr.ifremer.isisfish.simulator.sensitivity.domain.ContinuousDomain;
import fr.ifremer.isisfish.simulator.sensitivity.domain.DiscreteDomain;
import fr.ifremer.isisfish.simulator.sensitivity.domain.EquationContinuousDomain;
@@ -98,14 +97,14 @@
*
* Par exemple: topiaID#gear aura pour effet de recuperer l'objet
* correspondant au topiaID fournit et d'appeler le propriete
- * <tt>setGear(value)</tt> dessus.
+ * {@code setGear(value)} dessus.
*/
protected String path;
/** Cardinality */
protected int cardinality;
- /**
+ /**
* Constructor with name.
*
* @param name factor name
@@ -183,9 +182,7 @@
* @return the value
*/
public Object getDisplayedValue() {
- if (domain instanceof MatrixContinuousDomain) {
- return identifier;
- } if (domain instanceof EquationDiscreteDomain ||
+ if (domain instanceof EquationDiscreteDomain ||
domain instanceof EquationContinuousDomain) {
return "\"" + getValue() + "\"";
} else {
Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/FactorGroup.java
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/FactorGroup.java 2012-03-09 09:54:32 UTC (rev 3652)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/FactorGroup.java 2012-03-14 14:13:51 UTC (rev 3653)
@@ -5,7 +5,7 @@
* $Id$
* $HeadURL$
* %%
- * Copyright (C) 2009 - 2011 Ifremer, CodeLutin, Chatellier Eric
+ * Copyright (C) 2009 - 2012 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
@@ -251,7 +251,9 @@
public Domain getDomain() {
Domain domain = null;
if (isContinuous()) {
- domain = new ContinuousDomain(0.0, 1.0);
+ domain = new ContinuousDomain(Distribution.QUNIFMM);
+ ((ContinuousDomain)domain).addDistributionParam("min", 0.0);
+ ((ContinuousDomain)domain).addDistributionParam("min", 1.0);
}
else if (isDiscrete()) {
// les domaines doivent avoir les même domaines
Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/SensitivityUtils.java
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/SensitivityUtils.java 2012-03-09 09:54:32 UTC (rev 3652)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/SensitivityUtils.java 2012-03-14 14:13:51 UTC (rev 3653)
@@ -23,8 +23,19 @@
package fr.ifremer.isisfish.simulator.sensitivity;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Properties;
+
import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.nuiton.math.matrix.MatrixND;
+import fr.ifremer.isisfish.entities.Equation;
+import fr.ifremer.isisfish.types.RangeOfValues;
+import fr.ifremer.isisfish.types.TimeUnit;
+
/**
* Utility methods for sensitivity analysis.
*
@@ -36,6 +47,14 @@
*/
public class SensitivityUtils {
+ private static final Log log = LogFactory.getLog(SensitivityUtils.class);
+
+ /** Properties file resource path. */
+ protected final static String PROPERTIES_PATH = "/sensitivity.properties";
+
+ /** Cached properties. */
+ protected static Properties sensitivityProperties;
+
/**
* Escape factor name.
*
@@ -49,4 +68,108 @@
name = name.replaceAll("\\W", "_");
return name;
}
+
+ /**
+ * Is field sensitivity enabled.
+ *
+ * Return true, if field name is present in properties file.
+ *
+ * @param sensitivityFactorName name
+ * @return <tt>true</tt> if factor name is sensitivity enabled
+ */
+ public static boolean isSensitivityFactorEnabled(String sensitivityFactorName) {
+ Properties data = getProperties();
+ return data.getProperty(sensitivityFactorName) != null;
+
+ }
+
+ /**
+ * Return cached properties file.
+ * Load it at first call.
+ *
+ * @return properties
+ */
+ public static Properties getProperties() {
+
+ if (sensitivityProperties == null) {
+ sensitivityProperties = new Properties();
+ InputStream stream = null;
+ try {
+ stream = SensitivityUtils.class.getResourceAsStream(PROPERTIES_PATH);
+ sensitivityProperties.load(stream);
+ } catch (IOException ex) {
+ if (log.isErrorEnabled()) {
+ log.error("Can't load sensitivity properties file", ex);
+ }
+ } finally {
+ try {
+ if (stream != null) {
+ stream.close();
+ }
+ } catch (IOException ex) {
+ if (log.isErrorEnabled()) {
+ log.error("Can't load sensitivity properties file", ex);
+ }
+ }
+ }
+ }
+ return sensitivityProperties;
+ }
+
+ /**
+ * Return true if value can be defined in continuous factor.
+ *
+ * Il serait plus interessant de le faire sur les types et non sur les
+ * valeur mais pour {@link RangeOfValues} par exemple, seule la valeur
+ * a un type Float... donc pas evident.
+ *
+ * @param value value
+ * @return continuous enabled
+ */
+ public static boolean canBeContinue(Object value) {
+ boolean result = false;
+
+ if (value instanceof Double) {
+ result = true;
+ } else if (value instanceof Long) {
+ result = true;
+ } else if (value instanceof Equation) {
+ result = true;
+ } else if (value instanceof MatrixND) {
+ result = true;
+ } else if (value instanceof RangeOfValues) {
+ RangeOfValues rangeOfValues = (RangeOfValues)value;
+ if (rangeOfValues.getType().equals("Float")) {
+ result = true;
+ }
+ } else if (value instanceof TimeUnit) {
+ result = true;
+ } else if (value instanceof String) {
+ // todo fix string value :(
+ result = true;
+ }
+
+ return result;
+ }
+
+ /**
+ * Return if value is is continue factor enable.
+ *
+ * @param value value to test
+ * @return {@code true} if value is is continue factor enable
+ */
+ public static boolean isContinue(Object value) {
+ boolean result = false;
+ if (value instanceof RangeOfValues) {
+ RangeOfValues range = (RangeOfValues)value;
+ if (range.getType().equals(RangeOfValues.TYPE_FLOAT)) {
+ String textValue = range.getValues();
+ // TODO need comment !!!
+ if (textValue.matches("^\\ *[0-9]*\\ *\\-\\ *[0-9]*\\ *$")) {
+ result = true;
+ }
+ }
+ }
+ return result;
+ }
}
Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/domain/ContinuousDomain.java
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/domain/ContinuousDomain.java 2012-03-09 09:54:32 UTC (rev 3652)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/domain/ContinuousDomain.java 2012-03-14 14:13:51 UTC (rev 3653)
@@ -5,7 +5,7 @@
* $Id$
* $HeadURL$
* %%
- * Copyright (C) 2009 - 2011 Ifremer, CodeLutin, Chatellier Eric
+ * Copyright (C) 2009 - 2012 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
@@ -25,25 +25,18 @@
package fr.ifremer.isisfish.simulator.sensitivity.domain;
+import java.util.Map.Entry;
+import java.util.SortedMap;
+import java.util.TreeMap;
+
import fr.ifremer.isisfish.IsisFishRuntimeException;
+import fr.ifremer.isisfish.simulator.sensitivity.Distribution;
+import fr.ifremer.isisfish.simulator.sensitivity.Distribution.DistributionParam;
import fr.ifremer.isisfish.simulator.sensitivity.Domain;
import fr.ifremer.isisfish.simulator.sensitivity.visitor.DomainVisitor;
/**
- *
- * All the continuous domains can be of 2 different types (min/max or
- * percentage).
- *
- * A min/max domain can take 2 values : {@link #minBound} and {@link #maxBound}.
- * A percentage domain got 2 values {@link #coefficient} and
- * {@link #referenceValue} that are the basis to calculate the {@link #minBound}
- * and {@link #maxBound} values.
- *
- * A continuous domain also got a cardinality, either filled in by the user or
- * the sensitivity method if it manages it.
- *
- * To do sensitivity calculations, you MUST use {@link #getCalculatorMinBound()},
- * {@link #getCalculatorMaxBound()}.
+ * All the continuous domains are based on distribution definition.
*
* @author chatellier
* @version $Revision: 1.0 $
@@ -56,189 +49,119 @@
/** serialVersionUID. */
private static final long serialVersionUID = -2037768174807839046L;
- /** Min value. */
- protected Object minBound;
+ /** Continuous domain distribution. */
+ protected Distribution distribution;
- /** Max value. */
- protected Object maxBound;
+ /** Distribution params (param name > param value). */
+ protected SortedMap<String, Object> distributionParameters = new TreeMap<String, Object>();
- /** Value used to create the factor. */
- protected Object referenceValue;
-
- /** Coefficient in percent */
- protected Double coefficient;
-
- /** Flag to know the type of the domain **/
- protected boolean percentageType;
-
/**
- * Min/max type constructor.
+ * Default constructor.
*/
public ContinuousDomain() {
- this(false);
+
}
/**
- * Constructor with bounds.
+ * Constructor with distribution.
*
- * @param minBound min bound
- * @param maxBound max bound
+ * @param distribution distribution
*/
- public ContinuousDomain(Object minBound, Object maxBound) {
+ public ContinuousDomain(Distribution distribution) {
this();
- this.minBound = minBound;
- this.maxBound = maxBound;
+ this.distribution = distribution;
}
/**
- * Constructor with type.
+ * Constructor with distribution and parameters.
*
- * @param percentageType if {@code true} percentage type
+ * @param distribution distribution
+ * @param distributionParameters distribution params
*/
- public ContinuousDomain(boolean percentageType) {
- this.percentageType = percentageType;
+ public ContinuousDomain(Distribution distribution, SortedMap<String, Object> distributionParameters) {
+ this(distribution);
+ setDistributionParams(distributionParameters);
}
/**
- * Return factor type (min/max or percentage).
+ * Get distribution.
*
- * @return {@code true} if percentage type
+ * @return distribution
*/
- public boolean isPercentageType() {
- return percentageType;
+ public Distribution getDistribution() {
+ return distribution;
}
/**
- * Set domain type (min/max or percentage).
+ * Get distribution parameters.
*
- * @param percentageType new type value
+ * @return distribution parameters
*/
- public void setPercentageType(boolean percentageType) {
- this.percentageType = percentageType;
+ public SortedMap<String, Object> getDistributionParameters() {
+ return distributionParameters;
}
-
- /**
- * Return the minimum bound of the domain. Do not use this value for
- * sensitivity calculation, prefer using {@link #getCalculatorMinBound}.
- *
- * @return the minimum bound
- */
- public Object getMinBound() {
- Object result;
- if (isPercentageType()) {
- result = ((Double)referenceValue + (((Double)referenceValue * coefficient) * ((2 * getCalculatorMinBound() - 1))));
- } else {
- result = minBound;
- }
- return result;
- }
-
- /**
- * Return the minimum bound for sensitivity calculators. It always returns 0.
- *
- * @return the minimum bound for sensitivity analysis.
- */
- public double getCalculatorMinBound() {
- return 0;
- }
/**
- * Set the minimum bound of the domain.
+ * Set distribution parameters (clear previous).
*
- * @param minBound the minimum bound.
+ * @param distributionParameters distribution params
*/
- public void setMinBound(Object minBound) {
- this.minBound = minBound;
+ public void setDistributionParams(SortedMap<String, Object> distributionParameters) {
+ distributionParameters.clear();
+ addDistributionParams(distributionParameters);
}
/**
- * Return the maximum bound of the domain. Do not use this value for
- * sensitivity calculation, prefer using {@link #getCalculatorMaxBound}.
+ * Add distribution parameters.
*
- * @return the maximum bound
+ * @param distributionParameters distribution parameters.
*/
- public Object getMaxBound() {
- Object result;
- if (isPercentageType()) {
- result = ((Double) referenceValue +
- (((Double) referenceValue * coefficient)
- * ((2 * getCalculatorMaxBound() - 1))));
- } else {
- result = maxBound;
+ public void addDistributionParams(SortedMap<String, Object> distributionParameters) {
+ for (Entry<String, Object> entry : distributionParameters.entrySet()) {
+ addDistributionParam(entry.getKey(), entry.getValue());
}
- return result;
}
-
- /**
- * Return the minimum bound for sensitivity calculators. It always returns 1.
- *
- * @return the maximum bound for sensitivity analysis.
- */
- public double getCalculatorMaxBound() {
- return 1;
- }
/**
- * Set max value.
+ * Add distribution parameter.
*
- * @param maxBound the maxBound to set
- */
- public void setMaxBound(Object maxBound) {
- this.maxBound = maxBound;
- }
-
-
- /**
- * Get coefficient.
+ * Parameter name must be in current distribution parameter list.
*
- * @return the coefficient
+ * @param name parameter name
+ * @param value parameter value
*/
- public Double getCoefficient() {
- return coefficient;
- }
+ public void addDistributionParam(String name, Object value) {
+
+ if (distribution == null) {
+ throw new IllegalStateException("Distribution not set");
+ }
- /**
- * Set coefficient.
- *
- * @param coefficient the coefficient to set
- */
- public void setCoefficient(Double coefficient) {
- this.coefficient = coefficient;
- }
+ // get current parameter definition
+ DistributionParam defDistribParams = distribution.getDistibutionParams()[distributionParameters.size()];
+ if (!defDistribParams.getName().equals(name)) {
+ throw new IllegalArgumentException(String.format("Wrong parameter name, expected %s, got %s", defDistribParams.getName(), name));
+ }
- /**
- * Get reference value.
- *
- * @return the reference value
- */
- public Object getReferenceValue() {
- return referenceValue;
+ distributionParameters.put(name, value);
}
/**
- * Set reference value.
- *
- * @param referenceValue the reference value.to set
- */
- public void setReferenceValue(Object referenceValue) {
- this.referenceValue = referenceValue;
- }
-
- /**
* {@inheritDoc}.
*/
public Object getValueForIdentifier(Object identifier) {
- Double result;
+ Double result = 0d;
- if (isPercentageType()) {
+ // FIXME
+ /*if (isPercentageType()) {
// since 3.4.0.0, operator is always *
result = ((Double)referenceValue + (((Double)referenceValue * coefficient)
* ((2 * (Double)identifier - 1))));
} else {
result = ((Double)identifier * ((Double)maxBound - (Double)minBound))
+ (Double)minBound;
- }
+ }*/
+
return result;
}
Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/domain/EquationContinuousDomain.java
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/domain/EquationContinuousDomain.java 2012-03-09 09:54:32 UTC (rev 3652)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/domain/EquationContinuousDomain.java 2012-03-14 14:13:51 UTC (rev 3653)
@@ -5,7 +5,7 @@
* $Id$
* $HeadURL$
* %%
- * Copyright (C) 2009 - 2011 Ifremer, CodeLutin, Chatellier Eric
+ * Copyright (C) 2009 - 2012 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
@@ -25,12 +25,14 @@
package fr.ifremer.isisfish.simulator.sensitivity.domain;
+import java.util.SortedMap;
+
+import fr.ifremer.isisfish.simulator.sensitivity.Distribution;
+
/**
- * Domaine continu portant sur variable pouvant prendre diférente valeur par
+ * Domaine continu portant sur variable pouvant prendre différente valeur par
* rapport à une valeur initiale.
*
- * Composé d'un borne min et max et d'un opération.
- *
* @author chatellier
* @version $Revision: 1.0 $
*
@@ -45,22 +47,32 @@
protected String variableName;
/**
- * Min/max type constructor.
+ * Empty constructor.
*/
public EquationContinuousDomain() {
- super();
+
}
-
+
/**
- * Constructor with type.
+ * COnstructor with distribution.
*
- * @param percentageType if {@code true} percentage type
+ * @param distribution distribution
+ * @param params parameters
*/
- public EquationContinuousDomain(boolean percentageType) {
- super(percentageType);
+ public EquationContinuousDomain(Distribution distribution, SortedMap<String, Object> params) {
+ super(distribution, params);
}
/**
+ * Constructor with distribution.
+ *
+ * @param distribution distribution
+ */
+ public EquationContinuousDomain(Distribution distribution) {
+ super(distribution);
+ }
+
+ /**
* Get variable name.
*
* @return the variableName
@@ -79,21 +91,8 @@
}
@Override
- public EquationContinuousDomain clone() {
- EquationContinuousDomain cloned = (EquationContinuousDomain)super.clone();
- cloned.setMaxBound(this.maxBound);
- cloned.setMinBound(this.minBound);
- cloned.setCoefficient(this.coefficient);
- cloned.setReferenceValue(this.referenceValue);
- cloned.setVariableName(this.variableName);
- return cloned;
- }
-
- @Override
public String toString() {
- String result = "variableName=" + variableName +
- " coefficient=" + coefficient + " referenceValue=" + referenceValue +
- " min=" + minBound + "max=" + maxBound;
+ String result = super.toString() + ";variableName=" + variableName;
return result;
}
}
Deleted: branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/domain/MatrixContinuousDomain.java
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/domain/MatrixContinuousDomain.java 2012-03-09 09:54:32 UTC (rev 3652)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/sensitivity/domain/MatrixContinuousDomain.java 2012-03-14 14:13:51 UTC (rev 3653)
@@ -1,132 +0,0 @@
-/*
- * #%L
- * IsisFish
- *
- * $Id$
- * $HeadURL$
- * %%
- * Copyright (C) 2009 - 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 org.nuiton.math.matrix.MapFunction;
-import org.nuiton.math.matrix.MatrixND;
-
-/**
- * Domaine continu portant sur une matrice.
- *
- * @author chatellier
- * @version $Revision: 1.0 $
- *
- * Last update : $Date: 24 févr. 2009 $ By : $Author: chatellier $
- */
-public class MatrixContinuousDomain extends ContinuousDomain {
-
- /** serialVersionUID. */
- private static final long serialVersionUID = -2037768174807839046L;
-
- /**
- * Min/max type constructor.
- */
- public MatrixContinuousDomain() {
- super();
- }
-
- /**
- * Constructor with type.
- *
- * @param percentageType if {@code true} percentage type
- */
- public MatrixContinuousDomain(boolean percentageType) {
- super(percentageType);
- }
-
- @Override
- public Object getValueForIdentifier(Object identifier) {
- return getValueForIdentifier((Double)identifier);
- }
-
- /**
- * In matrix continuous domain, return a new matrix.
- *
- * @param identifier identifier
- * @return a new computed matrix
- */
- public MatrixND getValueForIdentifier(final Double identifier) {
- MatrixND temp = ((MatrixND)getReferenceValue()).copy();
-
- // since 3.4.0.0, operator is always *
- temp.map(new MapFunction() {
- public double apply(double val) {
- return (val + ((val * coefficient) * ((2 * identifier - 1))));
- }
- });
- return temp;
- }
-
- @Override
- public MatrixContinuousDomain clone() {
- MatrixContinuousDomain cloned = (MatrixContinuousDomain)super.clone();
- return cloned;
- }
-
- /**
- * {@inheritDoc}
- *
- * @return the minimum bound
- */
- public Object getMinBound() {
-
- if (minBound == null) {
- MatrixND temp = ((MatrixND) getReferenceValue()).copy();
-
- // since 3.4.0.0, operator is always *
- temp.map(new MapFunction() {
- public double apply(double val) {
- return (val + ((val * coefficient) * ((2 * getCalculatorMinBound() - 1))));
- }
- });
- return temp;
- } else {
- return minBound;
- }
- }
-
- /**
- * {@inheritDoc}
- *
- * @return the maximum bound
- */
- public Object getMaxBound() {
-
- if (maxBound == null) {
- MatrixND temp = ((MatrixND) getReferenceValue()).copy();
-
- // since 3.4.0.0, operator is always *
- temp.map(new MapFunction() {
- public double apply(double val) {
- return (val + ((val * coefficient) * ((2 * getCalculatorMaxBound() - 1))));
- }
- });
- return temp;
- } else {
- return maxBound;
- }
- }
-}
Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/input/InputContentUI.jaxx
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/input/InputContentUI.jaxx 2012-03-09 09:54:32 UTC (rev 3652)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/input/InputContentUI.jaxx 2012-03-14 14:13:51 UTC (rev 3653)
@@ -64,7 +64,7 @@
javax.swing.JComponent
javax.swing.event.ChangeListener
fr.ifremer.isisfish.entities.FisheryRegion
- fr.ifremer.isisfish.ui.sensitivity.SensitivityUtils
+ fr.ifremer.isisfish.simulator.sensitivity.SensitivityUtils
fr.ifremer.isisfish.ui.WelcomePanelUI
org.nuiton.topia.persistence.TopiaEntityContextable
org.nuiton.topia.TopiaContext
Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/input/InputHandler.java
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/input/InputHandler.java 2012-03-09 09:54:32 UTC (rev 3652)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/input/InputHandler.java 2012-03-14 14:13:51 UTC (rev 3653)
@@ -3,7 +3,7 @@
* $Id$
* $HeadURL$
* %%
- * Copyright (C) 2011 Ifremer, Codelutin, Chatellier Eric
+ * Copyright (C) 2011 - 2012 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
@@ -87,8 +87,8 @@
import fr.ifremer.isisfish.ui.input.tree.FisheryTreeSelectionModel;
import fr.ifremer.isisfish.ui.input.tree.loadors.PopulationsNodeLoador;
import fr.ifremer.isisfish.ui.models.common.StringComboModel;
-import fr.ifremer.isisfish.ui.sensitivity.FactorWizardUI;
-import fr.ifremer.isisfish.ui.sensitivity.SensitivityInputHandler;
+import fr.ifremer.isisfish.ui.sensitivity.wizard.FactorWizardUI;
+import fr.ifremer.isisfish.ui.sensitivity.wizard.SensitivityWizardHandler;
import fr.ifremer.isisfish.ui.simulator.filter.SimulationFilterUtil;
import fr.ifremer.isisfish.vcs.VCSException;
@@ -771,7 +771,7 @@
if (bean != null) {
FactorWizardUI factorWizardUI = new FactorWizardUI(inputContentUI);
- SensitivityInputHandler handler = factorWizardUI.getHandler();
+ SensitivityWizardHandler handler = factorWizardUI.getHandler();
handler.initNewFactor(factorWizardUI, bean, sensitivityMethod);
factorWizardUI.pack();
factorWizardUI.setLocationRelativeTo(inputContentUI);
Deleted: branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/ContinuousPanelContainerUI.jaxx
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/ContinuousPanelContainerUI.jaxx 2012-03-09 09:54:32 UTC (rev 3652)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/ContinuousPanelContainerUI.jaxx 2012-03-14 14:13:51 UTC (rev 3653)
@@ -1,41 +0,0 @@
-<!--
- #%L
- IsisFish
-
- $Id$
- $HeadURL$
- %%
- Copyright (C) 2009 - 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%
- -->
-<JPanel layout='{new BorderLayout()}' abstract="true">
-
- <Boolean id='continuePossible' javaBean='true'/>
-
- <Boolean id='continueSelected' javaBean='false'/>
-
- <script><![CDATA[
-/**
- * Return true only if UI component are all filled and value are correct
- * to define new factor.
- */
-public abstract boolean isFactorValid();
- ]]></script>
-
- <JPanel id='content' layout='{new BorderLayout()}' constraints='BorderLayout.CENTER'/>
-
-</JPanel>
\ No newline at end of file
Deleted: branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/DefaultContinuousPanelUI.jaxx
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/DefaultContinuousPanelUI.jaxx 2012-03-09 09:54:32 UTC (rev 3652)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/DefaultContinuousPanelUI.jaxx 2012-03-14 14:13:51 UTC (rev 3653)
@@ -1,158 +0,0 @@
-<!--
- #%L
- IsisFish
-
- $Id$
- $HeadURL$
- %%
- Copyright (C) 2009 - 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%
- -->
-<ContinuousPanelContainerUI>
-
- <Boolean id="percentageTypeFactor" javaBean="true" />
-
- <import>
- org.apache.commons.lang3.StringUtils
- java.beans.PropertyChangeEvent
- java.beans.PropertyChangeListener
- java.awt.CardLayout
- </import>
-
- <script><![CDATA[
-public void init(String min, String max, String referenceValue, String coefficient) {
- continueMin.setText(min);
- continueMax.setText(max);
- referenceValueField.setText(referenceValue);
- coefficientField.setText(coefficient);
-}
-
-public void initExisting(String min, String max, String referenceValue, String coefficient) {
- init(min, max, referenceValue, coefficient);
- setPercentageTypeFactor(StringUtils.isNotBlank(coefficient));
-}
-
-@Override
-public boolean isFactorValid() {
- boolean valid = false;
-
- try {
- if (continueSelected) {
- if (percentageTypeFactor) {
- Double coefficient = Double.parseDouble(coefficientField.getText().trim());
- Double referenceValue = Double.parseDouble(referenceValueField.getText().trim());
- valid = coefficient != null && referenceValue != null;
- }
- else {
- Double minValue = Double.parseDouble(continueMin.getText().trim());
- Double maxValue = Double.parseDouble(continueMax.getText().trim());
- valid = minValue != null && maxValue != null;
- }
- }
- else {
- valid = true;
- }
- }
- catch (NumberFormatException eee) {
- if (log.isWarnEnabled()) {
- log.warn("Double parse error", eee);
- }
- }
-
- return valid;
-}
-
-protected void $afterCompleteSetup() {
- addPropertyChangeListener(PROPERTY_PERCENTAGE_TYPE_FACTOR, new PropertyChangeListener() {
- @Override
- public void propertyChange(PropertyChangeEvent evt) {
- if ((Boolean)evt.getNewValue()) {
- ((CardLayout) hidablePanel.getLayout()).show(hidablePanel, "percentageType");
- } else {
- ((CardLayout) hidablePanel.getLayout()).show(hidablePanel, "minMaxType");
- }
- }
- });
-}
- ]]></script>
- <JPanel id="content">
- <Table constraints='BorderLayout.CENTER'>
- <row>
- <cell fill='horizontal' weightx='1'>
- <JRadioButton text="isisfish.sensitivity.continuouspercentagetype"
- onActionPerformed="setPercentageTypeFactor(true)"
- selected="{isPercentageTypeFactor()}"/>
- </cell>
- <cell fill='horizontal' weightx='1'>
- <JRadioButton text="isisfish.sensitivity.continuousminmaxtype"
- onActionPerformed="setPercentageTypeFactor(false)"
- selected="{!isPercentageTypeFactor()}"/>
- </cell>
- </row>
- <row>
- <cell fill='both' columns="2" weightx='1' weighty='1'>
- <JPanel layout="{new CardLayout()}" id="hidablePanel">
- <Table constraints='"percentageType"' border='{BorderFactory.createTitledBorder("")}'>
- <row>
- <cell fill='horizontal'>
- <JLabel text='isisfish.sensitivity.referencevalue'
- enabled='{isPercentageTypeFactor()}'/>
- </cell>
- <cell fill='horizontal' weightx='0.5'>
- <JTextField id='referenceValueField'
- enabled='{isPercentageTypeFactor()}'/>
- </cell>
- </row>
- <row>
- <cell fill='horizontal'>
- <JLabel text='isisfish.sensitivity.coefficient'
- enabled='{isPercentageTypeFactor()}'/>
- </cell>
- <cell fill='horizontal' weightx='0.5'>
- <JTextField id='coefficientField'
- enabled='{isPercentageTypeFactor()}'/>
- </cell>
- </row>
- </Table>
- <Table constraints='"minMaxType"' border='{BorderFactory.createTitledBorder("")}'>
- <row>
- <cell fill='horizontal'>
- <JLabel text='isisfish.sensitivity.firstValue'
- enabled='{!isPercentageTypeFactor()}'/>
- </cell>
- <cell fill='horizontal' weightx='0.5'>
- <JTextField id='continueMin'
- enabled='{!isPercentageTypeFactor()}'/>
- </cell>
- </row>
- <row>
- <cell fill='horizontal'>
- <JLabel text='isisfish.sensitivity.lastValue'
- enabled='{!isPercentageTypeFactor()}'/>
- </cell>
- <cell fill='horizontal' weightx='0.5'>
- <JTextField id='continueMax'
- enabled='{!isPercentageTypeFactor()}'/>
- </cell>
- </row>
- </Table>
- </JPanel>
- </cell>
- </row>
- </Table>
- </JPanel>
-</ContinuousPanelContainerUI>
\ No newline at end of file
Deleted: branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/EquationContinuousPanelUI.jaxx
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/EquationContinuousPanelUI.jaxx 2012-03-09 09:54:32 UTC (rev 3652)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/EquationContinuousPanelUI.jaxx 2012-03-14 14:13:51 UTC (rev 3653)
@@ -1,328 +0,0 @@
-<!--
- #%L
- IsisFish
-
- $Id$
- $HeadURL$
- %%
- Copyright (C) 2009 - 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%
- -->
-<ContinuousPanelContainerUI>
-
- <import>
- java.awt.Component
- java.awt.Dimension
- java.util.ArrayList
- java.util.EventObject
- java.util.List
- java.util.regex.Matcher
- java.util.regex.Pattern
- javax.swing.table.AbstractTableModel
- javax.swing.table.DefaultTableModel
- javax.swing.table.TableCellEditor
- javax.swing.table.TableModel
- javax.swing.JComboBox
- javax.swing.DefaultCellEditor
- javax.swing.event.CellEditorListener
- fr.ifremer.isisfish.simulator.sensitivity.domain.EquationContinuousDomain
- org.apache.commons.lang3.StringUtils
- java.beans.PropertyChangeEvent
- java.beans.PropertyChangeListener
- java.awt.CardLayout
- </import>
-
- <String id='text' javaBean='null'/>
- <org.nuiton.topia.persistence.TopiaEntityContextable id='bean' javaBean='null'/>
- <String id='beanProperty' javaBean='null'/>
- <!-- For editor doc purpose -->
- <Class id='clazz' javaBean='null'/>
- <String id='formuleCategory' javaBean='null'/>
- <fr.ifremer.isisfish.entities.Equation id='selectedEquation' javaBean='null'/>
- <!-- bean property -->
- <fr.ifremer.isisfish.entities.Formule id='formule' javaBean='null'/>
-
- <Boolean id="selectedDomain" javaBean="false" />
- <Boolean id="percentageTypeDomain" javaBean="false" />
-
- <script><![CDATA[
-
-protected List<EquationContinuousDomain> domains = new ArrayList<EquationContinuousDomain>();
-
-public List<EquationContinuousDomain> getDomains() {
- return domains;
-}
-
-protected void addDomain(EquationContinuousDomain domain) {
- domains.add(domain);
- // fire data change
- variablesListModel.setDomains(domains);
-}
-
-/**
- * Valid selected domain.
- */
-protected void validSelectedDomain() {
- // fill selected
- EquationContinuousDomain selectedDomain = (EquationContinuousDomain)variablesList.getSelectedValue();
- selectedDomain.setVariableName(variableNameField.getText().trim());
- if (isPercentageTypeDomain()) {
- selectedDomain.setPercentageType(true);
- selectedDomain.setReferenceValue(Double.parseDouble(referenceValueField.getText()));
- selectedDomain.setCoefficient(Double.parseDouble(coefficientField.getText()) / 100);
- } else {
- selectedDomain.setPercentageType(false);
- selectedDomain.setMinBound(Double.parseDouble(minBoundField.getText()));
- selectedDomain.setMaxBound(Double.parseDouble(maxBoundField.getText()));
- }
-
-
- // parse equation content to replace
- // double xxx = 4.0;
- // by
- // double xxx = context.getValueAndCompute("myfactorname.xxx", 4.0)
- // if xxx is the variable name to replace
- String variableName = selectedDomain.getVariableName();
- String[] lines = editor.getEditor().getText().split("\n");
- String result = "";
- for (String line : lines) {
- Pattern p = Pattern.compile("(^.*\\s+" + variableName + "\\s*\\=\\s*)([\\d\\.]+).*\\;$");
- Matcher matcher = p.matcher(line);
- if (matcher.find()) {
- String fullVariableName = bean.toString() + "." + StringUtils.uncapitalize(beanProperty) + "." + variableName;
- line = matcher.group(1) + "context.getValueAndCompute(\"" + fullVariableName + "\", " + matcher.group(2) + ");";
- }
- result += line + "\n";
- }
- editor.getEditor().setText(result);
-
- // fire data change
- variablesListModel.setDomains(domains);
-}
-
-protected void addNewVariable() {
- EquationContinuousDomain domain = new EquationContinuousDomain();
- domain.setVariableName("X");
- addDomain(domain);
-
- // auto select
- variablesList.setSelectedValue(domain, true);
-}
-
-protected void displaySelectedDomain() {
- EquationContinuousDomain selectedDomain = (EquationContinuousDomain)variablesList.getSelectedValue();
- if (selectedDomain != null) {
- setSelectedDomain(true);
- variableNameField.setText(selectedDomain.getVariableName());
- setPercentageTypeDomain(selectedDomain.getCoefficient() != null);
- if (selectedDomain.getCoefficient() != null) {
- coefficientField.setText(String.valueOf(selectedDomain.getCoefficient() * 100));
- } else {
- coefficientField.setText("");
- }
- if (selectedDomain.getReferenceValue() != null) {
- referenceValueField.setText(selectedDomain.getReferenceValue().toString());
- } else {
- referenceValueField.setText("");
- }
- if (selectedDomain.getMinBound() != null) {
- minBoundField.setText(selectedDomain.getMinBound().toString());
- } else {
- minBoundField.setText("");
- }
- if (selectedDomain.getMaxBound() != null) {
- maxBoundField.setText(selectedDomain.getMaxBound().toString());
- } else {
- maxBoundField.setText("");
- }
- } else {
- setSelectedDomain(false);
- }
-}
-
-protected void removeSelectedVariable() {
- int selectedIndex = variablesList.getSelectedIndex();
- domains.remove(selectedIndex);
-
- // fire data change
- variablesList.clearSelection();
- variablesListModel.setDomains(domains);
-}
-
-@Override
-public boolean isFactorValid() {
- boolean valid = true;
-
- try {
- for (EquationContinuousDomain domain : domains) {
- if (StringUtils.isBlank(domain.getVariableName())) {
- valid = false;
- }
- else if (domain.getCoefficient() == null) {
- valid = domain.getMinBound() != null && domain.getMaxBound() != null;
- }
- else {
- valid = domain.getReferenceValue() != null;
- }
- }
- } catch (NumberFormatException ex) {
- valid = false;
- }
-
- return valid;
-}
-
-protected void $afterCompleteSetup() {
- addPropertyChangeListener(PROPERTY_PERCENTAGE_TYPE_DOMAIN, new PropertyChangeListener() {
- @Override
- public void propertyChange(PropertyChangeEvent evt) {
- if ((Boolean)evt.getNewValue()) {
- ((CardLayout) hidablePanel.getLayout()).show(hidablePanel, "percentageType");
- } else {
- ((CardLayout) hidablePanel.getLayout()).show(hidablePanel, "minMaxType");
- }
- }
- });
-}
- ]]></script>
- <JPanel id='content'>
- <JScrollPane constraints='BorderLayout.CENTER'>
- <Table>
- <row>
- <cell fill='both' weightx='1' weighty='1'>
- <JScrollPane preferredSize="{new Dimension(200, 150)}">
- <fr.ifremer.isisfish.ui.sensitivity.equation.EquationDomainListModel
- id="variablesListModel" constructorParams="domains" />
- <JList id="variablesList" model="{variablesListModel}"
- cellRenderer="{new fr.ifremer.isisfish.ui.sensitivity.equation.EquationDomainRenderer()}"/>
- <ListSelectionModel initializer="variablesList.getSelectionModel()"
- onValueChanged="displaySelectedDomain();setSelectedDomain(variablesList.getSelectedIndex() != -1)" />
- </JScrollPane>
- </cell>
- <cell fill='both' weightx='1' weighty='1'>
- <Table>
- <row>
- <cell fill="horizontal" columns="2">
- <Table>
- <row>
- <cell>
- <JLabel text="isisfish.sensitivity.equation.variablename" enabled='{isSelectedDomain()}' />
- </cell>
- <cell fill="horizontal" weightx='1'>
- <JTextField id="variableNameField" enabled='{isSelectedDomain()}'/>
- </cell>
- </row>
- </Table>
- </cell>
- </row>
- <row>
- <cell fill="horizontal" weightx='1'>
- <JRadioButton id="minMaxButton" text="isisfish.sensitivity.continuousminmaxtype"
- onActionPerformed="setPercentageTypeDomain(!minMaxButton.isSelected())"
- selected="{!isPercentageTypeDomain()}"
- enabled='{isSelectedDomain()}'/>
- </cell>
- <cell fill="horizontal" weightx='1'>
- <JRadioButton id="percentageTypeButton" text="isisfish.sensitivity.continuouspercentagetype"
- onActionPerformed="setPercentageTypeDomain(percentageTypeButton.isSelected())"
- selected="{isPercentageTypeDomain()}"
- enabled='{isSelectedDomain()}'/>
- </cell>
- </row>
- <row>
- <cell fill="both" weighty='1' columns="2">
- <JPanel layout="{new CardLayout()}" id="hidablePanel">
- <Table border='{BorderFactory.createTitledBorder("")}' constraints='"minMaxType"'>
- <row>
- <cell fill='horizontal'>
- <JLabel text='isisfish.sensitivity.firstValue'
- enabled='{isSelectedDomain()}'/>
- </cell>
- <cell fill='horizontal' weightx='0.5'>
- <JTextField id='minBoundField'
- enabled='{isSelectedDomain()}'/>
- </cell>
- </row>
- <row>
- <cell fill='horizontal'>
- <JLabel text='isisfish.sensitivity.lastValue'
- enabled='{isSelectedDomain()}'/>
- </cell>
- <cell fill='horizontal' weightx='0.5'>
- <JTextField id='maxBoundField'
- enabled='{isSelectedDomain()}'/>
- </cell>
- </row>
- </Table>
- <Table border='{BorderFactory.createTitledBorder("")}' constraints='"percentageType"'>
- <row>
- <cell fill='horizontal'>
- <JLabel text='isisfish.sensitivity.referencevalue'
- enabled='{isSelectedDomain()}'/>
- </cell>
- <cell fill='horizontal' weightx='0.5'>
- <JTextField id='referenceValueField'
- enabled='{isSelectedDomain()}'/>
- </cell>
- </row>
- <row>
- <cell fill='horizontal'>
- <JLabel text='isisfish.sensitivity.coefficient'
- enabled='{isSelectedDomain()}'/>
- </cell>
- <cell fill='horizontal' weightx='0.5'>
- <JTextField id='coefficientField'
- enabled='{isSelectedDomain()}'/>
- </cell>
- </row>
- </Table>
- </JPanel>
- </cell>
- </row>
- <row>
- <cell fill="horizontal" columns="2">
- <JButton text="isisfish.sensitivity.equation.valid"
- enabled='{isSelectedDomain()}'
- onActionPerformed='validSelectedDomain()' />
- </cell>
- </row>
- </Table>
- </cell>
- </row>
- <row>
- <cell fill='horizontal'>
- <JButton id='add' text='isisfish.common.add' visible='{isContinuePossible()}'
- onActionPerformed='addNewVariable()'/>
- </cell>
- <cell fill='horizontal'>
- <JButton id='remove' text='isisfish.common.remove' visible='{isContinuePossible()}'
- enabled='{isSelectedDomain()}' onActionPerformed='removeSelectedVariable()'/>
- </cell>
- </row>
- <row>
- <cell fill='both' columns='2' weightx='1' weighty='1'>
- <fr.ifremer.isisfish.ui.input.InputOneEquationUI id='editor' constructorParams='this'
- autoSaveModification="false" formule='{getFormule()}' text='{getText()}'
- bean='{getBean()}' clazz='{getClazz()}' beanProperty='{getBeanProperty()}'
- formuleCategory='{getFormuleCategory()}' selectedEquation='{getSelectedEquation()}'
- visible='{isContinuePossible()}' active="true" />
- </cell>
- </row>
- </Table>
- </JScrollPane>
- </JPanel>
-</ContinuousPanelContainerUI>
Deleted: branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/FactorWizardUI.jaxx
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/FactorWizardUI.jaxx 2012-03-09 09:54:32 UTC (rev 3652)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/FactorWizardUI.jaxx 2012-03-14 14:13:51 UTC (rev 3653)
@@ -1,188 +0,0 @@
-<!--
- #%L
- IsisFish
-
- $Id$
- $HeadURL$
- %%
- Copyright (C) 2009 - 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%
- -->
-<JDialog title='isisfish.sensitivity.title' modal='{true}' layout='{new BorderLayout()}'>
-
- <import>
- org.apache.commons.lang3.StringUtils
- org.nuiton.topia.persistence.TopiaEntityContextable
- fr.ifremer.isisfish.ui.SimulationUI
- fr.ifremer.isisfish.ui.simulator.SimulAction
- fr.ifremer.isisfish.ui.input.InputSaveVerifier
- fr.ifremer.isisfish.simulator.sensitivity.Factor
- fr.ifremer.isisfish.simulator.sensitivity.Domain
- fr.ifremer.isisfish.simulator.sensitivity.domain.ContinuousDomain
- fr.ifremer.isisfish.simulator.sensitivity.domain.EquationContinuousDomain
- fr.ifremer.isisfish.simulator.sensitivity.domain.DiscreteDomain
- java.beans.PropertyChangeEvent
- java.beans.PropertyChangeListener
- java.util.SortedMap
- javax.swing.JComponent
- java.awt.CardLayout
- </import>
-
- <SensitivityInputHandler id="handler" />
-
- <Boolean id='continuePossible' javaBean='false'/>
-
- <Boolean id='continueSelected' javaBean='false'/>
-
- <Boolean id='existingValue' javaBean='false'/>
-
- <String id="factorPath" javaBean="null"/>
-
- <script><![CDATA[
-
-protected java.util.List<JComponent> discretComponents = new ArrayList<JComponent>();
-protected ContinuousPanelContainerUI continuousPanel = null;
-
-/*protected void $afterCompleteSetup() {
- addPropertyChangeListener(PROPERTY_CONTINUE_POSSIBLE, new PropertyChangeListener() {
- @Override
- public void propertyChange(PropertyChangeEvent evt) {
- if (continuousPanel != null) {
- continuousPanel.setContinuePossible((Boolean)evt.getNewValue());
- }
- }
- });
-
- addPropertyChangeListener(PROPERTY_CONTINUE_SELECTED, new PropertyChangeListener() {
- @Override
- public void propertyChange(PropertyChangeEvent evt) {
- if (continuousPanel != null) {
- continuousPanel.setContinueSelected((Boolean)evt.getNewValue());
- }
- }
- });
-}*/
-
-protected void $afterCompleteSetup() {
- addPropertyChangeListener(PROPERTY_CONTINUE_SELECTED, new PropertyChangeListener() {
- @Override
- public void propertyChange(PropertyChangeEvent evt) {
- if ((Boolean)evt.getNewValue()) {
- ((CardLayout) hidablePanel.getLayout()).show(hidablePanel, "continuousPanelContainer");
- } else {
- ((CardLayout) hidablePanel.getLayout()).show(hidablePanel, "discretePanelContainer");
- }
-
- // necessary for validation
- if (continuousPanel != null) {
- continuousPanel.setContinueSelected((Boolean)evt.getNewValue());
- }
- }
- });
-}
-
-protected SimulAction getSimulAction() {
- return getContextValue(SimulAction.class);
-}
- ]]></script>
- <Table constraints='BorderLayout.CENTER'>
- <row>
- <cell columns='4' fill='horizontal'>
- <Table>
- <row>
- <cell fill='horizontal'>
- <JLabel text='isisfish.sensitivity.name'/>
- </cell>
- <cell weightx='1' fill='horizontal'>
- <JTextField id='factorNameField'/>
- </cell>
- </row>
- </Table>
- </cell>
- </row>
- <row>
- <cell fill='horizontal' weightx='1' columns='2'>
- <JRadioButton id='discret' text='isisfish.sensitivity.discret'
- selected='{true}' buttonGroup='factorType'
- onActionPerformed='setContinueSelected(continueRadio.isSelected())'/>
- </cell>
- <cell fill='horizontal' weightx='1' columns='2'>
- <JRadioButton id='continueRadio' text='isisfish.sensitivity.continue'
- buttonGroup='factorType' selected='{false}' visible='{isContinuePossible()}'
- onActionPerformed='setContinueSelected(continueRadio.isSelected())'/>
- </cell>
- </row>
- <row>
- <cell columns='4' fill='both' weightx='1' weighty='3'>
- <JPanel layout="{new CardLayout()}" id="hidablePanel">
-
- <!-- discrete -->
- <Table id='discretePanelContainer' border='{BorderFactory.createTitledBorder("")}'
- constraints='"discretePanelContainer"'>
- <row>
- <cell fill='horizontal'>
- <JLabel text='isisfish.sensitivity.selectDiscretNumber'/>
- </cell>
- <cell fill='horizontal' weightx='1'>
- <JTextField id='discretNumber'/>
- </cell>
- <cell fill='horizontal'>
- <JButton text='isisfish.sensitivity.validDiscretNumber'
- onActionPerformed='getHandler().addTabs(this)'/>
- </cell>
- </row>
- <row>
- <cell columns='3' fill='both' weightx='1' weighty='2' anchor="north">
- <JTabbedPane id='tabPane'/>
- </cell>
- </row>
- </Table>
-
- <!-- continous -->
- <JPanel id='continuousPanelContainer' layout='{new BorderLayout()}'
- border='{BorderFactory.createTitledBorder("")}'
- constraints='"continuousPanelContainer"' />
- </JPanel>
- </cell>
- </row>
- <row>
- <cell columns='4' fill='horizontal'>
- <JLabel text='isisfish.sensitivity.comment'/>
- </cell>
- </row>
- <row>
- <cell columns='4' fill='both' weighty='1'>
- <JScrollPane>
- <JTextArea id='comment'/>
- </JScrollPane>
- </cell>
- </row>
- <row>
- <cell fill='horizontal'>
- <JButton id='cancel' text='isisfish.common.cancel' onActionPerformed='dispose()'/>
- </cell>
- <cell fill='horizontal' columns='2'>
- <JButton id='remove' text='isisfish.common.remove' visible='{isExistingValue()}'
- onActionPerformed='getHandler().remove(this)'/>
- </cell>
- <cell fill='horizontal'>
- <JButton id='save' text='isisfish.common.save' enabled='{!getFactorNameField().getText().isEmpty()}'
- onActionPerformed='getHandler().save(this)'/>
- </cell>
- </row>
- </Table>
-</JDialog>
\ No newline at end of file
Deleted: branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/MatrixContinuousPanelUI.jaxx
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/MatrixContinuousPanelUI.jaxx 2012-03-09 09:54:32 UTC (rev 3652)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/MatrixContinuousPanelUI.jaxx 2012-03-14 14:13:51 UTC (rev 3653)
@@ -1,148 +0,0 @@
-<!--
- #%L
- IsisFish
-
- $Id$
- $HeadURL$
- %%
- Copyright (C) 2009 - 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%
- -->
-<ContinuousPanelContainerUI>
-
- <Boolean id="percentageTypeFactor" javaBean="true" />
-
- <import>
- org.apache.commons.lang3.StringUtils
- org.nuiton.math.matrix.gui.MatrixPanelEditor
- org.nuiton.math.matrix.MatrixND
- java.awt.CardLayout
- java.beans.PropertyChangeEvent
- java.beans.PropertyChangeListener
- </import>
-
- <script><![CDATA[
-public void init(MatrixND min, MatrixND max, MatrixND referenceValue, String coefficient) {
- minValuePanel.setMatrix(min);
- maxValuePanel.setMatrix(max);
- referenceValuePanel.setMatrix(referenceValue);
- coefficientField.setText(coefficient);
-}
-
-public void initExisting(MatrixND min, MatrixND max, MatrixND referenceValue, String coefficient) {
- init(min, max, referenceValue, coefficient);
- setPercentageTypeFactor(StringUtils.isNotBlank(coefficient));
-}
-
-@Override
-public boolean isFactorValid() {
- boolean valid = false;
-
- try {
- if (continueSelected) {
- if (percentageTypeFactor) {
- Double coefficient = Double.parseDouble(coefficientField.getText().trim());
- valid = coefficient != null;
- }
- else {
- valid = true;
- }
- }
- else {
- valid = true;
- }
- }
- catch (NumberFormatException eee) {
- if (log.isWarnEnabled()) {
- log.warn("Double parse error", eee);
- }
- }
-
- return valid;
-}
-
-protected void $afterCompleteSetup() {
- addPropertyChangeListener(PROPERTY_PERCENTAGE_TYPE_FACTOR, new PropertyChangeListener() {
- @Override
- public void propertyChange(PropertyChangeEvent evt) {
- if ((Boolean)evt.getNewValue()) {
- ((CardLayout) hidablePanel.getLayout()).show(hidablePanel, "percentageType");
- } else {
- ((CardLayout) hidablePanel.getLayout()).show(hidablePanel, "minMaxType");
- }
- }
- });
-}
- ]]></script>
- <JPanel id="content">
- <Table constraints='BorderLayout.CENTER'>
- <row>
- <cell fill='horizontal' weightx='1'>
- <JRadioButton text="isisfish.sensitivity.continuouspercentagetype"
- onActionPerformed="setPercentageTypeFactor(true)"
- selected="{isPercentageTypeFactor()}"/>
- </cell>
- <cell fill='horizontal' weightx='1'>
- <JRadioButton text="isisfish.sensitivity.continuousminmaxtype"
- onActionPerformed="setPercentageTypeFactor(false)"
- selected="{!isPercentageTypeFactor()}"/>
- </cell>
- </row>
- <row>
- <cell fill='both' weightx='1' weighty='1' columns="2">
- <JPanel layout="{new CardLayout()}" id="hidablePanel">
- <Table constraints='"percentageType"' border='{BorderFactory.createTitledBorder("")}'>
- <row>
- <cell fill='horizontal' columns="2">
- <JLabel text='isisfish.sensitivity.referencevalue'/>
- </cell>
- </row>
- <row>
- <cell fill='both' weighty='1' columns="2">
- <MatrixPanelEditor id='referenceValuePanel'/>
- </cell>
- </row>
- <row>
- <cell fill='horizontal'>
- <JLabel text='isisfish.sensitivity.coefficient'/>
- </cell>
- <cell fill='horizontal' weightx='1'>
- <JTextField id='coefficientField'/>
- </cell>
- </row>
- </Table>
-
- <Table constraints='"minMaxType"' border='{BorderFactory.createTitledBorder("")}'>
- <row>
- <cell fill='both' weightx='1' weighty='1'>
- <JTabbedPane>
- <tab title="isisfish.sensitivity.firstValue">
- <MatrixPanelEditor id='minValuePanel'/>
- </tab>
- <tab title="isisfish.sensitivity.lastValue">
- <MatrixPanelEditor id='maxValuePanel'/>
- </tab>
- </JTabbedPane>
- </cell>
- </row>
- </Table>
- </JPanel>
- </cell>
- </row>
- </Table>
- </JPanel>
-</ContinuousPanelContainerUI>
\ No newline at end of file
Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityInputHandler.java
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityInputHandler.java 2012-03-09 09:54:32 UTC (rev 3652)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityInputHandler.java 2012-03-14 14:13:51 UTC (rev 3653)
@@ -3,7 +3,7 @@
* $Id$
* $HeadURL$
* %%
- * Copyright (C) 2011 Ifremer, Codelutin, Chatellier Eric
+ * Copyright (C) 2011 - 2012 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
@@ -29,59 +29,33 @@
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
-import java.lang.reflect.Method;
-import java.util.ArrayList;
import java.util.List;
-import java.util.SortedMap;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPopupMenu;
-import javax.swing.JScrollPane;
-import javax.swing.JTextField;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.text.JTextComponent;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreeModel;
import javax.swing.tree.TreePath;
-import jaxx.runtime.context.JAXXInitialContext;
-
import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.nuiton.math.matrix.MatrixND;
import org.nuiton.math.matrix.gui.MatrixPanelEditor;
import org.nuiton.topia.TopiaContext;
-import org.nuiton.topia.TopiaException;
import org.nuiton.topia.persistence.TopiaEntity;
import org.nuiton.topia.persistence.TopiaEntityContextable;
import fr.ifremer.isisfish.IsisFishRuntimeException;
-import fr.ifremer.isisfish.datastore.RegionStorage;
-import fr.ifremer.isisfish.entities.Equation;
import fr.ifremer.isisfish.entities.FisheryRegion;
-import fr.ifremer.isisfish.rule.Rule;
-import fr.ifremer.isisfish.simulator.sensitivity.Domain;
import fr.ifremer.isisfish.simulator.sensitivity.Factor;
import fr.ifremer.isisfish.simulator.sensitivity.FactorGroup;
-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.types.Month;
-import fr.ifremer.isisfish.types.RangeOfValues;
import fr.ifremer.isisfish.types.TimeStep;
-import fr.ifremer.isisfish.types.TimeUnit;
-import fr.ifremer.isisfish.ui.SimulationUI;
-import fr.ifremer.isisfish.ui.input.InputAction;
import fr.ifremer.isisfish.ui.input.InputContentUI;
import fr.ifremer.isisfish.ui.input.InputHandler;
import fr.ifremer.isisfish.ui.input.InputOneEquationUI;
@@ -89,10 +63,9 @@
import fr.ifremer.isisfish.ui.input.tree.FisheryTreeHelper;
import fr.ifremer.isisfish.ui.input.tree.FisheryTreeNode;
import fr.ifremer.isisfish.ui.input.tree.FisheryTreeRenderer;
+import fr.ifremer.isisfish.ui.sensitivity.wizard.FactorWizardUI;
+import fr.ifremer.isisfish.ui.sensitivity.wizard.SensitivityWizardHandler;
import fr.ifremer.isisfish.ui.simulator.RuleChooser;
-import fr.ifremer.isisfish.ui.simulator.SimulAction;
-import fr.ifremer.isisfish.ui.widget.editor.StepComponent;
-import fr.ifremer.isisfish.ui.widget.editor.MonthComponent;
/**
* Handler for sensitivity tab ui (fishery region factors).
@@ -296,7 +269,7 @@
if (!(selectedObject instanceof FactorGroup)) {
Factor selectedFactor = (Factor)selectedObject;
FactorWizardUI factorWizardUI = new FactorWizardUI(sensitivityTabUI);
- SensitivityInputHandler handler = factorWizardUI.getHandler();
+ SensitivityWizardHandler handler = factorWizardUI.getHandler();
handler.initExistingFactor(factorWizardUI, selectedFactor);
factorWizardUI.pack();
factorWizardUI.setLocationRelativeTo(sensitivityTabUI);
@@ -335,246 +308,6 @@
}
/**
- * Un init new se fait toujours sur une entité.
- *
- * On recupere des info sur le type correspondant à la proprieté a mettre
- * en facteur pour savoir le composant d'edition et s'il peut etre continue
- * ou pas.
- *
- * @param factorWizardUI factorWizardUI
- * @param bean bean in current ui
- * @param property bean property to edit
- */
- public void initNewFactor(FactorWizardUI factorWizardUI, TopiaEntityContextable bean, String property) {
-
- // path is topiaId#property
- // ex : fwn#fsd#0.3425345#name
- // for JAXX : cOrigine start with upper case
- // for commons beanutils : must be lower case
- String beanProperty = StringUtils.uncapitalize(property);
- String path = bean.getTopiaId() + "#" + beanProperty;
- factorWizardUI.setFactorPath(path);
- factorWizardUI.getFactorNameField().setText(bean.toString() + "." + beanProperty);
-
- // get value for pointed path
- //TopiaContext topiaContext = factorWizardUI.getContextValue(TopiaContext.class);
- //Class<?> classForPath = getPropertyClass(path, topiaContext);
- // peut etre pas une bonne idée que ce soit basé sur les valeurs
- // au lieu des types (mais pour RangeOfValues, pas evident)
- Object valueForPath = getPropertyValue(bean, beanProperty);
- boolean continuePossible = canBeContinue(valueForPath);
- boolean continueSelected = isContinue(valueForPath);
-
- // init panel
- if (continuePossible) {
- factorWizardUI.continuousPanel = getContinuousPanel(valueForPath, bean, property);
- factorWizardUI.getContinuousPanelContainer().add(factorWizardUI.continuousPanel, BorderLayout.CENTER);
- }
-
- // after, for binding on continuePossible, continueSelected to work
- factorWizardUI.setContinuePossible(continuePossible);
- factorWizardUI.setContinueSelected(continueSelected);
- factorWizardUI.getContinueRadio().setSelected(continueSelected);
- }
-
- /**
- * Permet d'intialiser le wizard avec une valeur independante de la
- * provenance (utile pour les facteurs sur les parametres de regles).
- *
- * TODO chatellier : ne doit pas fonctionner pour des equations.
- *
- * @param factorWizardUI factorWizardUI
- * @param value value
- */
- public void initNewFactorWithValue(FactorWizardUI factorWizardUI, Object value) {
- boolean continuePossible = canBeContinue(value);
- boolean continueSelected = isContinue(value);
-
- // init panel
- if (continuePossible) {
- factorWizardUI.continuousPanel = getContinuousPanel(value, null, null);
- factorWizardUI.getContinuousPanelContainer().add(factorWizardUI.continuousPanel, BorderLayout.CENTER);
- }
-
- // after, for binding on continuePossible, continueSelected to work
- factorWizardUI.setContinuePossible(continuePossible);
- factorWizardUI.setContinueSelected(continueSelected);
- factorWizardUI.getContinueRadio().setSelected(continueSelected);
- }
-
- /**
- * Reaffiche un facteur existant.
- *
- * @param factorWizardUI
- * @param factor factor
- */
- public void initExistingFactor(FactorWizardUI factorWizardUI, Factor factor) {
-
- factorWizardUI.setExistingValue(true);
- String factorPath = factor.getPath();
- Domain domain = factor.getDomain();
- String factorName = factor.getName();
- factorWizardUI.setFactorPath(factorPath);
- factorWizardUI.getComment().setText(factor.getComment());
-
- // dans le cas d'un facteur equation
- // il faut enlever la varible du nom
- // sinon, à la sauvegarde elle sera reajoutée
- if (domain instanceof EquationContinuousDomain) {
- EquationContinuousDomain equationDomain = (EquationContinuousDomain)domain;
- String suffix = equationDomain.getVariableName();
- factorName = StringUtils.removeEnd(factorName, "." + suffix);
- // can be called _xxx after char remplacement for R
- factorName = StringUtils.removeEnd(factorName, "_" + suffix);
- }
-
- if (domain instanceof ContinuousDomain) {
-
- ContinuousDomain cDomain = (ContinuousDomain) domain;
-
- TopiaContext topiaContext = factorWizardUI.getContextValue(TopiaContext.class);
- factorWizardUI.continuousPanel = getContinuousPanelWithValue(factor, cDomain, topiaContext);
- factorWizardUI.getContinuousPanelContainer().add(factorWizardUI.continuousPanel, BorderLayout.CENTER);
-
- factorWizardUI.getContinueRadio().setSelected(true);
- factorWizardUI.setContinueSelected(true);
- factorWizardUI.setContinuePossible(true);
- } else {
-
- // restaure discrete domain
- DiscreteDomain dDomain = (DiscreteDomain)domain;
-
- int nb = dDomain.getValues().size();
- factorWizardUI.getDiscretNumber().setText(String.valueOf(nb));
- factorWizardUI.discretComponents.clear();
- factorWizardUI.getTabPane().removeAll();
-
- SortedMap<Object, Object> values = dDomain.getValues();
- int i = 0;
- for (Object o : values.values()) {
- i++;
- JComponent c = null;
- if (o != null) {
- c = getEditorWithValue(factorWizardUI, factor, dDomain, o);
- }
- else {
- if (log.isWarnEnabled()) {
- log.warn("Null value in factor");
- }
- }
- factorWizardUI.discretComponents.add(c);
- JScrollPane js = new JScrollPane(c);
- String tabName = _("isisfish.sensitivity.discretevaluelabel", i);
- factorWizardUI.getTabPane().addTab(tabName, js);
- }
-
- // init non selected continous panel
- if (factorPath.indexOf('#') != -1) {
- try {
- // get initial value in database
- String topiaId = factorPath.substring(0, factorPath.lastIndexOf('#'));
- String property = factorPath.substring(factorPath.lastIndexOf('#') + 1);
- TopiaContext topiaContext = factorWizardUI.getContextValue(TopiaContext.class);
- TopiaEntityContextable entity = (TopiaEntityContextable)topiaContext.findByTopiaId(topiaId);
- String getter = "get" + StringUtils.capitalize(property);
- Method m = entity.getClass().getMethod(getter);
- Object valueForPath = m.invoke(entity);
-
- boolean continuePossible = canBeContinue(valueForPath);
- factorWizardUI.setContinuePossible(continuePossible);
- if (continuePossible) {
- factorWizardUI.continuousPanel = getContinuousPanel(valueForPath, entity, property);
- factorWizardUI.getContinuousPanelContainer().add(factorWizardUI.continuousPanel, BorderLayout.CENTER);
- }
- } catch (Exception ex) {
- throw new IsisFishRuntimeException("Can't get factor path database value", ex);
- }
- }
- }
-
- factorWizardUI.getFactorNameField().setText(factorName);
- }
-
- /**
- * Refresh tab for discrete factor numbers.
- *
- * @param factorWizardUI factorWizardUI
- */
- public void addTabs(FactorWizardUI factorWizardUI) {
- String discreteNumber = factorWizardUI.getDiscretNumber().getText();
- int nbTab = Integer.parseInt(discreteNumber);
- factorWizardUI.discretComponents.clear();
- factorWizardUI.getTabPane().removeAll();
- for (int i = 1; i <= nbTab ; i++) {
- JComponent c = getNewDiscreteComponent(factorWizardUI);
- factorWizardUI.discretComponents.add(c);
- String tabName = _("isisfish.sensitivity.discretevaluelabel", i);
- factorWizardUI.getTabPane().addTab(tabName, c);
- }
- factorWizardUI.pack();
- }
-
- /**
- * Retourne le type de valeur pointé par le path du facteur.
- *
- * Il vaut mieux recuperer le type de la propriété a mettre en facteur
- * que la valeur elle meme; elle peut être null et on ne peut pas en
- * deduire sont type.
- *
- * @param factorPath factor path
- * @param context context
- * @return class
- */
- protected Class<?> getPropertyClass(String factorPath, TopiaContext context) {
- Class<?> result = null;
- if (factorPath.indexOf('#') != -1) {
- String topiaId = factorPath.substring(0, factorPath.lastIndexOf('#'));
- String property = factorPath.substring(factorPath.lastIndexOf('#') + 1);
-
- try {
- TopiaEntity entity = context.findByTopiaId(topiaId);
-
- if (log.isDebugEnabled()) {
- log.debug("Factor path " + factorPath + " denoted entity " + entity);
- }
-
- String getter = "get" + StringUtils.capitalize(property);
- Method method = entity.getClass().getMethod(getter);
- result = method.getReturnType();
-
- } catch (Exception ex) {
- if (log.isErrorEnabled()) {
- log.error("Can't find entity for " + topiaId, ex);
- }
- }
- }
- return result;
- }
-
- /**
- * Get value for fieldName in entity.
- *
- * @param entity
- * @param fieldName
- * @return method return value
- */
- protected Object getPropertyValue(Object entity, String fieldName) {
- Object result = null;
- try {
- // fieldName maybe be sometime lower case
- String getMethod = "get" + StringUtils.capitalize(fieldName);
-
- Method m = entity.getClass().getMethod(getMethod);
- result = m.invoke(entity);
- } catch (Exception ex) {
- if (log.isErrorEnabled()) {
- log.error("Can't get entity value", ex);
- }
- }
- return result;
- }
-
- /**
* Return if type can be defined as a factor.
*
* @param type type
@@ -599,634 +332,6 @@
}
/**
- * Return true if value can be defined in continuous factor.
- *
- * Il serait plus interessant de le faire sur les types et non sur les
- * valeur mais pour {@link RangeOfValues} par exemple, seule la valeur
- * a un type Float... donc pas evident.
- *
- * @param value value
- * @return continuous enabled
- */
- public boolean canBeContinue(Object value) {
- boolean result = false;
-
- if (value instanceof Double) {
- result = true;
- } else if (value instanceof Long) {
- result = true;
- } else if (value instanceof Equation) {
- result = true;
- } else if (value instanceof MatrixND) {
- result = true;
- } else if (value instanceof RangeOfValues) {
- RangeOfValues rangeOfValues = (RangeOfValues)value;
- if (rangeOfValues.getType().equals("Float")) {
- result = true;
- }
- } else if (value instanceof TimeUnit) {
- result = true;
- } else if (value instanceof String) {
- // todo fix string value :(
- result = true;
- }
-
- return result;
- }
-
- /**
- * Return if value is is continue factor enable.
- *
- * @param value value to test
- * @return {@code true} if value is is continue factor enable
- */
- public boolean isContinue(Object value) {
- boolean result = false;
- if (value instanceof RangeOfValues) {
- RangeOfValues range = (RangeOfValues)value;
- if (range.getType().equals(RangeOfValues.TYPE_FLOAT)) {
- String textValue = range.getValues();
- // TODO need comment !!!
- if (textValue.matches("^\\ *[0-9]*\\ *\\-\\ *[0-9]*\\ *$")) {
- result = true;
- }
- }
- }
- return result;
- }
-
- /**
- * Get copy of component with original entity value as default value.
- *
- * @param value value
- * @param bean bean
- * @param property property
- * @return component copy
- */
- public ContinuousPanelContainerUI getContinuousPanel(Object value, TopiaEntityContextable bean, String property) {
- ContinuousPanelContainerUI result;
-
- if (value instanceof RangeOfValues) {
- RangeOfValues rangeOfValues = (RangeOfValues)value;
- DefaultContinuousPanelUI ui = new DefaultContinuousPanelUI();
- String values = rangeOfValues.getValues();
- String min = "0";
- String max = "0";
- if (values.matches("^\\ *[0-9]*\\ *\\-\\ *[0-9]*\\ *$")) {
- int first = values.indexOf("-");
- if (first != -1) {
- min = values.substring(0, first);
- max = values.substring(first + 1);
- }
- }
- ui.init(min, max, min, null);
- result = ui;
- }
- else if (value instanceof Equation) {
- Equation equation = (Equation)value;
- EquationContinuousPanelUI ui = new EquationContinuousPanelUI(new JAXXInitialContext().add(new InputAction()));
- ui.setSelectedEquation(equation);
- ui.setText(_("isisfish.common.equation")); // can't get real name
- ui.setFormuleCategory(equation.getCategory());
- ui.setClazz(equation.getClass());
- ui.setBeanProperty(property);
- ui.setBean(bean);
- result = ui;
- } else if (value instanceof MatrixND) {
- MatrixND matrix = (MatrixND)value;
- MatrixContinuousPanelUI matrixPanel = new MatrixContinuousPanelUI();
- matrixPanel.init(matrix.clone(), matrix.clone(), matrix.clone(), null);
- result = matrixPanel;
- } else if (value instanceof TimeUnit) {
- TimeUnit timeUnit = (TimeUnit)value;
- DefaultContinuousPanelUI ui = new DefaultContinuousPanelUI();
- ui.init(String.valueOf(timeUnit.getTime()), String.valueOf(timeUnit.getTime()),
- String.valueOf(timeUnit.getTime()), null);
- result = ui;
- } else {
- DefaultContinuousPanelUI ui = new DefaultContinuousPanelUI();
- ui.init(String.valueOf(value), String.valueOf(value), String.valueOf(value), null);
- result = ui;
- }
-
- if (log.isDebugEnabled()) {
- log.debug("Component for " + value + " (" + bean + ", " + property + ")");
- log.debug(" > " + result);
- }
-
- return result;
- }
-
- /**
- * Get continuous editor for component with given value.
- *
- * @param domain domain
- * @param factor factor
- * @param topiaContext context used to get database value in case of equation factors
- * @return component copy
- */
- public ContinuousPanelContainerUI getContinuousPanelWithValue(Factor factor, ContinuousDomain domain, TopiaContext topiaContext) {
- ContinuousPanelContainerUI result = null;
-
- if (domain instanceof EquationContinuousDomain) {
- String factorPath = factor.getPath();
- if (factor.getPath().indexOf('#') != -1) {
- String topiaId = factorPath.substring(0, factorPath.lastIndexOf('#'));
- String property = factorPath.substring(factorPath.lastIndexOf('#') + 1);
-
- // get bean in database
- try {
- TopiaEntityContextable entity = (TopiaEntityContextable)topiaContext.findByTopiaId(topiaId);
-
- String getter = "get" + StringUtils.capitalize(property);
- Method m = entity.getClass().getMethod(getter);
- Equation value = (Equation)m.invoke(entity);
-
- // fill component
- EquationContinuousPanelUI ui = new EquationContinuousPanelUI(
- new JAXXInitialContext().add(new InputAction()));
- ui.setText(value.getContent());
- ui.setFormuleCategory(value.getCategory());
- ui.setText(_("isisfish.common.equation")); // can't get real name
- ui.setClazz(value.getClass());
- ui.setBeanProperty(property);
- ui.setBean(entity);
-
- EquationContinuousDomain equationDomain = (EquationContinuousDomain) domain;
- ui.addDomain(equationDomain);
-
- result = ui;
- } catch (Exception ex) {
- throw new IsisFishRuntimeException("Can't restore initial factor database property", ex);
- }
- }
- // TODO path with no # (normalement pas possible pour les equations)
- } else if (domain instanceof MatrixContinuousDomain) {
- MatrixContinuousPanelUI continuousPanel = new MatrixContinuousPanelUI();
- // factor numerique continue (percentage)
- if (domain.isPercentageType()) {
- MatrixND matrix = (MatrixND)domain.getReferenceValue();
- // il y a bien 3 fois domain.getReferenceValue() pas d'erreur
- continuousPanel.initExisting(
- matrix.clone(),
- matrix.clone(),
- matrix.clone(),
- String.valueOf(domain.getCoefficient() * 100.0));
- }
- else {
- // factor numerique continue (min/max)
- // pas d'erreur sur 2 fois domain.getMinBound()
- MatrixND matrixMin = (MatrixND)domain.getMinBound();
- MatrixND matrixMax = (MatrixND)domain.getMaxBound();
- continuousPanel.initExisting(
- matrixMin.clone(),
- matrixMax.clone(),
- matrixMin.clone(),
- "");
- }
- result = continuousPanel;
- } else {
- DefaultContinuousPanelUI continuousPanel = new DefaultContinuousPanelUI();
-
- // factor numerique continue (percentage)
- if (domain.isPercentageType()) {
- // il y a bien 3 fois domain.getReferenceValue() pas d'erreur
- continuousPanel.initExisting(
- String.valueOf(domain.getReferenceValue()),
- String.valueOf(domain.getReferenceValue()),
- String.valueOf(domain.getReferenceValue()),
- String.valueOf(domain.getCoefficient() * 100.0 ));
- }
- else {
- // factor numerique continue (min/max)
- // pas d'erreur sur 2 fois domain.getMinBound()
- // on initialise avec minBound comme valeur de référence.
- continuousPanel.initExisting(
- String.valueOf(domain.getMinBound()),
- String.valueOf(domain.getMaxBound()),
- String.valueOf(domain.getMinBound()),
- "");
- }
- result = continuousPanel;
- }
-
- return result;
- }
-
- /**
- * Get editor for value (discrete).
- *
- * @param factorWizardUI context for context value (RegionStorage)
- * @param value type to get editor
- * @param factor
- * @param domain
- * @return component
- */
- protected JComponent getEditorWithValue(FactorWizardUI factorWizardUI, Factor factor, Domain domain, Object value) {
-
- JComponent result = null;
-
- if (Double.class.isAssignableFrom(value.getClass())) {
- result = new JTextField();
- ((JTextField)result).setText(String.valueOf(value));
- }
- else if (double.class.isAssignableFrom(value.getClass())) {
- result = new JTextField();
- ((JTextField)result).setText(String.valueOf(value));
- }
- else if (MatrixND.class.isAssignableFrom(value.getClass())) {
- result = new MatrixPanelEditor();
- ((MatrixPanelEditor)result).setMatrix((MatrixND)value);
- }
- else if (domain instanceof RuleDiscreteDomain) {
- result = new RuleChooser(factorWizardUI);
- ((RuleChooser)result).setRulesList((List<Rule>)value);
- }
- else if (domain instanceof EquationDiscreteDomain) {
- String factorPath = factor.getPath();
- if (factor.getPath().indexOf('#') != -1) {
- String topiaId = factorPath.substring(0, factorPath.lastIndexOf('#'));
- String property = factorPath.substring(factorPath.lastIndexOf('#') + 1);
-
- // get bean in database
- try {
- TopiaContext topiaContext = factorWizardUI.getContextValue(TopiaContext.class);
- TopiaEntityContextable entity = (TopiaEntityContextable)topiaContext.findByTopiaId(topiaId);
-
- String getter = "get" + StringUtils.capitalize(property);
- Method m = entity.getClass().getMethod(getter);
- Equation equation = (Equation)m.invoke(entity);
-
- // fill component
- InputOneEquationUI ui = new InputOneEquationUI(factorWizardUI);
- ui.setAutoSaveModification(false);
- ui.setFormuleCategory(equation.getCategory());
- ui.setText(_("isisfish.common.equation")); // can't get real name
- ui.setClazz(value.getClass());
- ui.setBeanProperty(property);
- ui.setBean(entity); // set bean fire content modification event
- ui.getEditor().setText((String)value);
- ui.setActive(true);
-
- result = ui;
- } catch (Exception ex) {
- throw new IsisFishRuntimeException("Can't restore initial factor database property", ex);
- }
- }
- // TODO path with no # (normalement pas possible pour les equations)
- }
- else if (value instanceof TimeUnit) {
- result = new JTextField();
- ((JTextField)result).setText(String.valueOf(((TimeUnit)value).getTime()));
- } else if (value instanceof TopiaEntity) {
- RegionStorage regionStorage = factorWizardUI.getContextValue(RegionStorage.class);
- TopiaContext context = null;
- try {
- context = regionStorage.getStorage().beginTransaction();
- List list = context.find("from " + value.getClass().getName());
- JComboBox c = new JComboBox(list.toArray());
- c.setSelectedItem(value);
- result = c;
- } catch (TopiaException ex) {
- throw new IsisFishRuntimeException("Can't get entity list", ex);
- } finally {
- if (context != null) {
- try {
- context.closeContext();
- } catch (TopiaException ex) {
- throw new IsisFishRuntimeException("Can't get entity list", ex);
- }
- }
- }
- } else if (value instanceof TimeStep) {
- TimeStep timeStep = (TimeStep)value;
- result = new StepComponent(timeStep.getMonth().getMonthNumber(), timeStep.getYear());
- } else if (value instanceof Month) {
- Month month = (Month)value;
- result = MonthComponent.createMounthCombo(month.getMonthNumber());
- } else if (value instanceof String) {
- // valeur non typées ???
- result = new JTextField();
- ((JTextField)result).setText(String.valueOf(value));
- }
-
- if (log.isDebugEnabled()) {
- log.debug("Editor for value " + value + " is " + result);
- }
-
- return result;
- }
-
- /**
- * Get copy of component with original entity value as default value.
- * Used to add new tab to a new or existing factor.
- *
- * Le composant retourné est inclut dans un jscrollpane (sauf pour les
- * matrices qui contient deja un jscrollpane)
- *
- * @param factorWizardUI factorWizardUI
- * @return component copy
- */
- public JComponent getNewDiscreteComponent(FactorWizardUI factorWizardUI) {
-
- JComponent result = null;
- String factorPath = factorWizardUI.getFactorPath();
-
- if (factorPath.indexOf('#') != -1) {
- String topiaId = factorPath.substring(0, factorPath.lastIndexOf('#'));
- String property = factorPath.substring(factorPath.lastIndexOf('#') + 1);
- TopiaContext topiaContext = factorWizardUI.getContextValue(TopiaContext.class);
-
- try {
- // get bean in database
- TopiaEntityContextable entity = (TopiaEntityContextable)topiaContext.findByTopiaId(topiaId);
- String getter = "get" + StringUtils.capitalize(property);
- Method m = entity.getClass().getMethod(getter);
- Object value = m.invoke(entity);
-
- // init new jcomponent for value
- if (value instanceof Number) {
- result = new JTextField(String.valueOf(value));
- } else if (value instanceof MatrixND) {
- result = new MatrixPanelEditor();
- MatrixND matrix = ((MatrixND)value).copy();
- ((MatrixPanelEditor)result).setMatrix(matrix);
- } else if (value instanceof RangeOfValues) {
- RangeOfValues rangeOfValues = (RangeOfValues)value;
- result = new JTextField(rangeOfValues.getValues());
- } else if (value instanceof TimeUnit) {
- TimeUnit timeUnit = (TimeUnit)value;
- result = new JTextField(String.valueOf(timeUnit.getTime()));
- } else if (value instanceof Equation) {
- Equation equation = (Equation)value;
- // fill component
- InputOneEquationUI ui = new InputOneEquationUI(factorWizardUI);
- ui.setAutoSaveModification(false);
- ui.setText(equation.getContent());
- ui.setFormuleCategory(equation.getCategory());
- ui.setText(_("isisfish.common.equation")); // can't get real name
- ui.setClazz(value.getClass());
- ui.setBeanProperty(property);
- ui.setBean(entity);
- ui.setActive(true);
- result = ui;
- }
-
- } catch (Exception ex) {
- throw new IsisFishRuntimeException("Can't restore intial factor database property", ex);
- }
- }
- else {
- // dans ce cas c'est des regles, pop de départ ou parametres de regles
- // c'est un peu galere car le code n'a rien a voir avec le reste
- // donc, c'est du cas par cas
- if (factorPath.equals("parameters.rules")) {
- result = new RuleChooser(factorWizardUI);
- } else if (factorPath.startsWith("parameters.population.")) {
- MatrixContinuousPanelUI currentPanel = (MatrixContinuousPanelUI)factorWizardUI.continuousPanel;
- // on copie une des matrices du composant
- MatrixND matrix = currentPanel.getReferenceValuePanel().getMatrix().copy();
- result = new MatrixPanelEditor(); // bug in 2.2.x with matrix in constructor
- ((MatrixPanelEditor)result).setMatrix(matrix);
- } else if (factorPath.startsWith("parameters.rule.")) {
- Pattern pattern = Pattern.compile("^parameters\\.rule\\.\\d+\\.parameter\\.\\w+\\.(.+)$");
- Matcher matcher = pattern.matcher(factorPath);
- if (matcher.matches()) {
- String className = matcher.group(1);
- try {
- if (log.isDebugEnabled()) {
- log.debug("Looking for a component for class : " + className);
- }
- Class type = Class.forName(className);
- result = getRuleDiscreteComponent(factorWizardUI, type);
- } catch (ClassNotFoundException ex) {
- if (log.isWarnEnabled()) {
- log.warn("Can't find class for rule parameter", ex);
- }
- }
- } else {
- // double...
- result = new JTextField();
- }
- } else {
- if (log.isWarnEnabled()) {
- log.warn("Can't find component for path " + factorPath);
- }
- }
- }
-
- if (log.isDebugEnabled()) {
- log.debug("Component for path " + factorPath + " is " + result);
- }
-
- // hack : si on met 2 fois un jscrollpane, rien ne s'affiche
- if (!(result instanceof MatrixPanelEditor)) {
- result = new JScrollPane(result);
- }
-
- return result;
- }
-
- /**
- * Get new special
- * @param clazz
- * @return
- */
- protected JComponent getRuleDiscreteComponent(FactorWizardUI factorWizardUI, Class type) {
-
- JComponent result = null;
-
- if (TopiaEntity.class.isAssignableFrom(type)) {
- RegionStorage regionStorage = factorWizardUI.getContextValue(RegionStorage.class);
- TopiaContext context = null;
- try {
- context = regionStorage.getStorage().beginTransaction();
- List list = context.find("from " + type.getName());
- JComboBox c = new JComboBox(list.toArray());
- result = c;
- } catch (TopiaException ex) {
- throw new IsisFishRuntimeException("Can't get entity list", ex);
- } finally {
- if (context != null) {
- try {
- context.closeContext();
- } catch (TopiaException ex) {
- throw new IsisFishRuntimeException("Can't get entity list", ex);
- }
- }
- }
- } else if (TimeStep.class.isAssignableFrom(type)) {
- result = new StepComponent(0, 0);
- } else if (Month.class.isAssignableFrom(type)) {
- result = MonthComponent.createMounthCombo(0);
- } else {
- result = new JTextField();
- }
-
- return result;
- }
-
- /**
- * Save current factor.
- *
- * @param factorWizardUI factorWizardUI
- */
- public void save(FactorWizardUI factorWizardUI) {
-
- // first check is factor is valid
- boolean factorValid = true;
- ContinuousPanelContainerUI continuousPanel = factorWizardUI.continuousPanel;
- if (continuousPanel != null) {
- factorValid = continuousPanel.isFactorValid();
- }
- if (!factorValid) {
- JOptionPane.showMessageDialog(factorWizardUI, _("isisfish.sensitivity.factor.notvalid"),
- _("isisfish.sensitivity.title"), JOptionPane.ERROR_MESSAGE);
- return;
- }
-
- // call specific method depending on continuous/discrete
- if (factorWizardUI.getContinueRadio().isSelected()) {
- saveContinue(factorWizardUI.getFactorNameField().getText(),
- factorWizardUI.getComment().getText(), factorWizardUI.getFactorPath(), factorWizardUI.continuousPanel,
- factorWizardUI.getSimulAction(), factorWizardUI.isExistingValue());
- } else {
- saveDiscret(factorWizardUI.getFactorNameField().getText(),
- factorWizardUI.getComment().getText(), factorWizardUI.getFactorPath(), factorWizardUI.discretComponents,
- factorWizardUI.getSimulAction(), factorWizardUI.isExistingValue());
- }
-
- // refresh factor list
- factorWizardUI.getContextValue(SimulationUI.class, "SimulationUI").refreshFactorTree();
-
- // close window
- factorWizardUI.dispose();
- }
-
- /**
- * Save a continous factor.
- *
- * @param name factor name
- * @param comment comment
- * @param path factor path
- * @param panel panel
- * @param action action
- * @param exist exist
- */
- protected void saveContinue(String name,
- String comment, String path, ContinuousPanelContainerUI panel,
- SimulAction action, boolean exist) {
- if (panel instanceof MatrixContinuousPanelUI) {
- MatrixContinuousPanelUI matrixPanel = (MatrixContinuousPanelUI) panel;
- if (matrixPanel.isPercentageTypeFactor()) {
- MatrixND referenceValue = matrixPanel.getReferenceValuePanel().getMatrix();
- Double coefficient = Double.valueOf(matrixPanel.getCoefficientField().getText()) / 100;
- action.addContinuousMatrixFactor(name, comment, path,
- referenceValue, coefficient, exist);
- }
- else {
- MatrixND minBound = matrixPanel.getMinValuePanel().getMatrix();
- MatrixND maxBound = matrixPanel.getMaxValuePanel().getMatrix();
- action.addContinuousMatrixFactor(name, comment, path,
- minBound, maxBound, exist);
- }
-
- } else if (panel instanceof EquationContinuousPanelUI) {
- try {
- EquationContinuousPanelUI equationPanel = (EquationContinuousPanelUI) panel;
-
- TopiaEntityContextable bean = equationPanel.getBean();
- TopiaContext topiaContext = bean.getTopiaContext();
-
- String property = equationPanel.getBeanProperty();
- property = StringUtils.capitalize(property) + "Content";
- Method m = bean.getClass().getMethod("set" + property, String.class);
- m.invoke(bean, equationPanel.getEditor().getEditor().getText());
-
- // Save equation
- bean.update();
- topiaContext.commitTransaction();
-
- List<EquationContinuousDomain> domains = equationPanel.getDomains();
- for (EquationContinuousDomain domain : domains) {
- action.addContinuousEquationFactor(name, comment, path, domain, exist);
- }
- } catch (Exception ex) {
- if (log.isErrorEnabled()) {
- log.error("Can't call method : ", ex);
- }
- }
- } else if (panel instanceof DefaultContinuousPanelUI) {
- DefaultContinuousPanelUI defaultPanel = (DefaultContinuousPanelUI) panel;
-
- if (defaultPanel.isPercentageTypeFactor()) {
- Double referenceValue = Double.valueOf(defaultPanel.getReferenceValueField().getText());
- Double coefficient = Double.valueOf(defaultPanel.getCoefficientField().getText()) / 100;
- action.addContinuousPercentageFactor(name, comment, path,
- referenceValue, coefficient, exist);
- }
- else {
- double minBound = Double.parseDouble(defaultPanel.getContinueMin().getText());
- double maxBound = Double.parseDouble(defaultPanel.getContinueMax().getText());
- action.addContinuousFactor(name, comment, path,
- minBound, maxBound, exist);
- }
- }
- }
-
- /**
- * Save a discret factor.
- *
- * @param name
- * @param comment
- * @param path
- * @param components
- * @param action
- * @param exist
- */
- protected void saveDiscret(String name,
- String comment, String path, List<JComponent> components,
- SimulAction action, boolean exist) {
- List<Object> values = new ArrayList<Object>();
-
- boolean ruleFactor = false;
- boolean equationFactor = false;
- for (JComponent component : components) {
-
- // get internat component value
- Object result = null;
- if (component instanceof JTextComponent) {
- result = ((JTextComponent) component).getText();
- } else if (component instanceof MatrixPanelEditor) {
- result = ((MatrixPanelEditor) component).getMatrix();
- } else if (component instanceof InputOneEquationUI) {
- result = ((InputOneEquationUI) component).getEditor().getText();
- equationFactor = true;
- } else if (component instanceof RuleChooser) {
- result = ((RuleChooser)component).getRulesList();
- ruleFactor = true;
- } else if (component instanceof StepComponent) {
- result = new TimeStep(((StepComponent)component).getSelectedValue());
- } else if (component instanceof MonthComponent) {
- result = new Month(((MonthComponent)component).getSelectedValue());
- } else if (component instanceof JComboBox) {
- // on suppose qu'il y a dedans des TopiaEntity
- result = ((JComboBox)component).getSelectedItem();
- }
-
- values.add(result);
- }
-
- if (ruleFactor) {
- action.addDiscreteRuleFactor(name, comment, path, values, exist);
- } else if (equationFactor) {
- action.addDiscreteEquationFactor(name, comment, path, values, exist);
- } else {
- action.addDiscreteFactor(name, comment, path, values, exist);
- }
- }
-
- /**
* Return value in swing component that could be next used into factor
* for discrete factor values.
*
@@ -1250,15 +355,4 @@
return result;
}
-
- /**
- * Remove current factor.
- *
- * @param factorWizardUI factorWizardUI
- */
- public void remove(FactorWizardUI factorWizardUI) {
- factorWizardUI.getSimulAction().removeFactor(factorWizardUI.getFactorPath());
- factorWizardUI.getContextValue(SimulationUI.class, "SimulationUI").refreshFactorTree();
- factorWizardUI.dispose();
- }
}
Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivitySaveVerifier.java
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivitySaveVerifier.java 2012-03-09 09:54:32 UTC (rev 3652)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivitySaveVerifier.java 2012-03-14 14:13:51 UTC (rev 3653)
@@ -3,7 +3,7 @@
* $Id$
* $HeadURL$
* %%
- * Copyright (C) 2011 Ifremer, Codelutin, Chatellier Eric
+ * Copyright (C) 2011 - 2012 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
@@ -50,5 +50,4 @@
return JOptionPane.YES_OPTION;
}
-
}
Deleted: branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityUtils.java
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityUtils.java 2012-03-09 09:54:32 UTC (rev 3652)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityUtils.java 2012-03-14 14:13:51 UTC (rev 3653)
@@ -1,101 +0,0 @@
-/*
- * #%L
- * IsisFish
- *
- * $Id$
- * $HeadURL$
- * %%
- * Copyright (C) 2009 - 2010 Ifremer, CodeLutin
- * %%
- * 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.ui.sensitivity;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Properties;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-/**
- * Utility class to parse Sensitivity properties file.
- *
- * @author letellier
- * @version $Revision$
- *
- * Last update: $Date$
- * by : $Author$
- */
-public class SensitivityUtils {
-
- /** Log. */
- private static final Log log = LogFactory.getLog(SensitivityUtils.class);
-
- /** Properties file resource path. */
- protected final static String PROPERTIES_PATH = "/sensitivity.properties";
-
- /** Cached properties. */
- protected static Properties sensitivityProperties;
-
- /**
- * Is field sensitivity enabled.
- *
- * Return true, if field name is present in properties file.
- *
- * @param sensitivityFactorName name
- * @return <tt>true</tt> if factor name is sensitivity enabled
- */
- public static boolean isSensitivityFactorEnabled(String sensitivityFactorName) {
- Properties data = getProperties();
- return data.getProperty(sensitivityFactorName) != null;
-
- }
-
- /**
- * Return cached properties file.
- * Load it at first call.
- *
- * @return properties
- */
- public static Properties getProperties() {
-
- if (sensitivityProperties == null) {
- sensitivityProperties = new Properties();
- InputStream stream = null;
- try {
- stream = SensitivityUtils.class.getResourceAsStream(PROPERTIES_PATH);
- sensitivityProperties.load(stream);
- } catch (IOException ex) {
- if (log.isErrorEnabled()) {
- log.error("Can't load sensitivity properties file", ex);
- }
- } finally {
- try {
- if (stream != null) {
- stream.close();
- }
- } catch (IOException ex) {
- if (log.isErrorEnabled()) {
- log.error("Can't load sensitivity properties file", ex);
- }
- }
- }
- }
- return sensitivityProperties;
- }
-}
Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/TableBlockingLayerUI.java
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/TableBlockingLayerUI.java 2012-03-09 09:54:32 UTC (rev 3652)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/TableBlockingLayerUI.java 2012-03-14 14:13:51 UTC (rev 3653)
@@ -5,7 +5,7 @@
* $Id$
* $HeadURL$
* %%
- * Copyright (C) 2009 - 2010 Ifremer, CodeLutin, Chatellier Eric
+ * Copyright (C) 2009 - 2012 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
@@ -38,9 +38,9 @@
import org.jdesktop.jxlayer.JXLayer;
import org.jdesktop.jxlayer.plaf.AbstractLayerUI;
import org.jdesktop.jxlayer.plaf.LayerUI;
-import org.nuiton.topia.persistence.TopiaEntity;
import org.nuiton.topia.persistence.TopiaEntityContextable;
+import fr.ifremer.isisfish.simulator.sensitivity.SensitivityUtils;
import fr.ifremer.isisfish.ui.input.InputContentUI;
/**
Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/model/FactorTreeCellRenderer.java
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/model/FactorTreeCellRenderer.java 2012-03-09 09:54:32 UTC (rev 3652)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/model/FactorTreeCellRenderer.java 2012-03-14 14:13:51 UTC (rev 3653)
@@ -42,8 +42,6 @@
import fr.ifremer.isisfish.simulator.sensitivity.Factor;
import fr.ifremer.isisfish.simulator.sensitivity.FactorGroup;
import fr.ifremer.isisfish.simulator.sensitivity.domain.ContinuousDomain;
-import fr.ifremer.isisfish.simulator.sensitivity.domain.EquationContinuousDomain;
-import fr.ifremer.isisfish.simulator.sensitivity.domain.MatrixContinuousDomain;
/**
* Factor tree cell renderer.
@@ -65,8 +63,6 @@
public FactorTreeCellRenderer() {
iconCache = new HashMap<String, Icon>();
iconCache.put("c", Resource.getIcon("/icons/factors/c.png")); // continuous
- //iconCache.put("ce", Resource.getIcon("/icons/factors/ce.png")); // continuous equation
- //iconCache.put("cm", Resource.getIcon("/icons/factors/cm.png")); // continuous matrix
iconCache.put("d", Resource.getIcon("/icons/factors/d.png")); // discrete
iconCache.put("dg", Resource.getIcon("/icons/factors/dgroup.png")); // group discrete
iconCache.put("cg", Resource.getIcon("/icons/factors/cgroup.png")); // group continuous
@@ -112,14 +108,7 @@
else {
icon = "d";
}
-
- // get factor data type
- /*if (domain instanceof EquationContinuousDomain) {
- icon += "e";
- }
- else if (domain instanceof MatrixContinuousDomain) {
- icon += "m";
- }*/
+
text = factor.getName();
}
}
Added: branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/wizard/ContinuousDistributionPanel.java
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/wizard/ContinuousDistributionPanel.java (rev 0)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/wizard/ContinuousDistributionPanel.java 2012-03-14 14:13:51 UTC (rev 3653)
@@ -0,0 +1,329 @@
+/*
+ * #%L
+ *
+ *
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2012 Ifremer, Codelutin, Chatellier Eric
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation, either version 3 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 Lesser Public License for more details.
+ *
+ * You should have received a copy of the GNU General Lesser Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/lgpl-3.0.html>.
+ * #L%
+ */
+
+package fr.ifremer.isisfish.ui.sensitivity.wizard;
+
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+import java.awt.event.ItemEvent;
+import java.awt.event.ItemListener;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.swing.JComboBox;
+import javax.swing.JComponent;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JTabbedPane;
+import javax.swing.JTextField;
+import javax.swing.text.JTextComponent;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.nuiton.math.matrix.MatrixND;
+import org.nuiton.math.matrix.gui.MatrixPanelEditor;
+
+import fr.ifremer.isisfish.simulator.sensitivity.Distribution;
+import fr.ifremer.isisfish.simulator.sensitivity.Distribution.DistributionParam;
+import fr.ifremer.isisfish.simulator.sensitivity.domain.ContinuousDomain;
+
+/**
+ * Panel dynamique qui se construit suivant la distribution sélectionnée.
+ *
+ * @author chatellier
+ * @version $Revision$
+ *
+ * Last update : $Date$
+ * By : $Author$
+ */
+public class ContinuousDistributionPanel extends ContinuousPanel implements ItemListener {
+
+ /** Class logger. */
+ private static Log log = LogFactory.getLog(ContinuousDistributionPanel.class);
+
+ /** serialVersionUID. */
+ private static final long serialVersionUID = 2289588676194644582L;
+
+ /** Distribution combo. */
+ protected JComboBox distributionCombo;
+
+ /** Panel that contains dynamics components. */
+ protected JPanel dynamicPanel;
+
+ /** Original value used to auto fill some components. */
+ protected Object originalValue;
+
+ /** UI components used to fill distribution params value. */
+ protected List<JComponent> paramComponents = new ArrayList<JComponent>();
+
+ public ContinuousDistributionPanel(Object originalValue) {
+
+ setLayout(new GridBagLayout());
+
+ // combobox
+ distributionCombo = new JComboBox(Distribution.values());
+ // important : for setSelectedItem to fire event
+ distributionCombo.setSelectedItem(null);
+ distributionCombo.addItemListener(this);
+ add(distributionCombo, new GridBagConstraints(0, 0, 1, 1, 0, 0,
+ GridBagConstraints.NORTHWEST, GridBagConstraints.NONE,
+ new Insets(0, 0, 0, 0), 0, 0));
+
+ // sub dynamic panel containing stuff
+ dynamicPanel = new JPanel(new GridBagLayout());
+ add(dynamicPanel, new GridBagConstraints(0, 1, 1, 1, 1, 1,
+ GridBagConstraints.CENTER, GridBagConstraints.BOTH,
+ new Insets(5, 0, 0, 0), 0, 0));
+
+ this.originalValue = originalValue;
+ }
+
+ /**
+ * @param domain
+ */
+ @Override
+ public void initWithDomain(ContinuousDomain domain) {
+ // this fire components list modification
+ Distribution distrib = domain.getDistribution();
+
+ // can be null in creation state
+ if (distrib == null) {
+ return;
+ }
+
+ distributionCombo.setSelectedItem(distrib);
+
+ DistributionParam[] params = distrib.getDistibutionParams();
+ int paramComponentIndex = 0;
+ for (DistributionParam param : params) {
+ Object value = domain.getDistributionParameters().get(param.getName());
+ if (value != null) {
+ JComponent comp = paramComponents.get(paramComponentIndex);
+
+ if (comp instanceof MatrixPanelEditor) {
+ ((MatrixPanelEditor)comp).setMatrix((MatrixND)value);
+ } else {
+ ((JTextComponent)comp).setText(value.toString());
+ }
+ } else {
+ if (log.isWarnEnabled()) {
+ log.warn("Param " + param.getName() + " not found during init");
+ }
+ }
+
+ paramComponentIndex++;
+ }
+ }
+
+ /*
+ * @see java.awt.event.ItemListener#itemStateChanged(java.awt.event.ItemEvent)
+ */
+ @Override
+ public void itemStateChanged(ItemEvent e) {
+
+ if (e.getStateChange() != ItemEvent.SELECTED) {
+ return;
+ }
+
+ Distribution distrib = (Distribution)e.getItem();
+
+ if (log.isDebugEnabled()) {
+ log.debug("Refreshing component for distribution : " + distrib);
+ }
+
+ dynamicPanel.removeAll();
+ paramComponents.clear();
+
+ // location is good (after removeAll)
+ if (distrib == null) {
+ return;
+ }
+
+ // pas de gros composant = liste de composants
+ // un seul, on gros et une liste mixé
+ // plusieurs gros, ui par onglet
+ int numberOfBigComponents = getNumberOfBigComponents(distrib);
+
+ // rendu en liste / liste mixée
+ JTabbedPane tabbedPane = null;
+ if (numberOfBigComponents >= 2) {
+ tabbedPane = new JTabbedPane();
+ dynamicPanel.add(tabbedPane, new GridBagConstraints(0, 0, 1, 1, 1, 1,
+ GridBagConstraints.CENTER, GridBagConstraints.BOTH,
+ new Insets(0, 0, 0, 0), 0, 0));
+ }
+
+ int index = 0;
+ DistributionParam[] params = distrib.getDistibutionParams();
+ for (DistributionParam param : params) {
+ JLabel paramLabel = new JLabel(param.getName() + " :");
+ paramLabel.setToolTipText(param.getDescription());
+
+ JComponent paramField = getParamField(param);
+ paramField.setToolTipText(param.getDescription());
+
+ // rendu en onglet
+ if (numberOfBigComponents >= 2) {
+ tabbedPane.add(param.getName(), paramField);
+ }
+ // rendu mixé
+ else if (isParamBigComponent(param)) {
+ dynamicPanel.add(paramLabel, new GridBagConstraints(0, index, 2, 1, 0, 0,
+ GridBagConstraints.NORTHWEST, GridBagConstraints.HORIZONTAL,
+ new Insets(0, 0, 0, 0), 0, 0));
+ index++;
+
+ dynamicPanel.add(paramField, new GridBagConstraints(0, index, 2, 1, 1, 1,
+ GridBagConstraints.NORTH, GridBagConstraints.BOTH,
+ new Insets(0, 0, 0, 0), 0, 0));
+ index++;
+ // rendu simple
+ } else {
+ dynamicPanel.add(paramLabel, new GridBagConstraints(0, index, 1, 1, 0, 0,
+ GridBagConstraints.NORTHWEST, GridBagConstraints.HORIZONTAL,
+ new Insets(0, 0, 0, 0), 0, 0));
+
+ dynamicPanel.add(paramField, new GridBagConstraints(1, index, 1, 1, 1, 0,
+ GridBagConstraints.NORTH, GridBagConstraints.HORIZONTAL,
+ new Insets(0, 0, 0, 0), 0, 0));
+ index++;
+ }
+
+ paramComponents.add(paramField);
+ }
+
+ repaint();
+ validate();
+ }
+
+ /**
+ * Return new component used to edit parameter.
+ *
+ * If {@link DistributionParam#isOriginalValue()} return true, then component
+ * is rendered according to original value.
+ *
+ * @param param param to render
+ * @return component
+ */
+ protected JComponent getParamField(DistributionParam param) {
+
+ JComponent result;
+
+ if (param.isOriginalValue()) {
+ if (originalValue instanceof MatrixND) {
+ result = new MatrixPanelEditor();
+ ((MatrixPanelEditor)result).setMatrix((MatrixND)originalValue);
+ } else {
+ result = new JTextField(originalValue.toString());
+ }
+ } else {
+ result = new JTextField();
+ }
+
+ return result;
+ }
+
+ /**
+ * Return the number of big components necessary to edit
+ * selected distribution.
+ *
+ * @return number of big components
+ */
+ protected int getNumberOfBigComponents(Distribution distrib) {
+
+ int result = 0;
+
+ DistributionParam[] params = distrib.getDistibutionParams();
+ for (DistributionParam param : params) {
+ if (isParamBigComponent(param)) {
+ result++;
+ }
+ }
+
+ return result;
+ }
+
+ /**
+ * Param will be rendered as big ui component only a param
+ * allows it and current value is big rendering (matrix?).
+ *
+ * @param param param to test (with current value)
+ * @return
+ */
+ protected boolean isParamBigComponent(DistributionParam param) {
+ return param.isOriginalValue() && originalValue instanceof MatrixND;
+ }
+
+ /*
+ * @see fr.ifremer.isisfish.ui.sensitivity.wizard.ContinuousPanelContainerUI#isFactorValid()
+ */
+ @Override
+ public boolean isFactorValid() {
+ return true;
+ }
+
+ /**
+ * Return distribution selected in combo box.
+ *
+ * @return selected distribution
+ */
+ public Distribution getDistribution() {
+ return (Distribution)distributionCombo.getSelectedItem();
+ }
+
+ /**
+ * Generate domain filled with distribution and distribution parameters.
+ *
+ * @return filled domain
+ */
+ public ContinuousDomain generateDomain() {
+ Distribution distrib = (Distribution)distributionCombo.getSelectedItem();
+ ContinuousDomain domain = new ContinuousDomain(distrib);
+
+ DistributionParam[] params = distrib.getDistibutionParams();
+ int paramComponentIndex = 0;
+ for (DistributionParam param : params) {
+ JComponent comp = paramComponents.get(paramComponentIndex);
+
+ if (comp instanceof MatrixPanelEditor) {
+ domain.addDistributionParam(param.getName(), ((MatrixPanelEditor)comp).getMatrix());
+ } else {
+ domain.addDistributionParam(param.getName(), ((JTextComponent)comp).getText().trim());
+ }
+
+ paramComponentIndex++;
+ }
+ return domain;
+ }
+
+ @Override
+ public void setEnabled(boolean enabled) {
+ if (!enabled) {
+ distributionCombo.setSelectedItem(null);
+ }
+ distributionCombo.setEnabled(enabled);
+ }
+}
Property changes on: branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/wizard/ContinuousDistributionPanel.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/wizard/ContinuousPanel.java
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/wizard/ContinuousPanel.java (rev 0)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/wizard/ContinuousPanel.java 2012-03-14 14:13:51 UTC (rev 3653)
@@ -0,0 +1,71 @@
+/*
+ * #%L
+ *
+ *
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2012 Codelutin, Chatellier Eric
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation, either version 3 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 Lesser Public License for more details.
+ *
+ * You should have received a copy of the GNU General Lesser Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/lgpl-3.0.html>.
+ * #L%
+ */
+
+package fr.ifremer.isisfish.ui.sensitivity.wizard;
+
+import javax.swing.JPanel;
+
+import fr.ifremer.isisfish.simulator.sensitivity.domain.ContinuousDomain;
+
+/**
+ * Common code for all continuous panels:
+ * <ul>
+ * <li>{@link EquationContinuousPanelUI}</li>
+ * <li>{@link ContinuousDistributionPanel}</li>
+ * <ul>
+ *
+ * @author chatellier
+ * @version $Revision$
+ *
+ * Last update : $Date$
+ * By : $Author$
+ */
+public abstract class ContinuousPanel extends JPanel {
+
+ /** serialVersionUID. */
+ private static final long serialVersionUID = -7759972555434206618L;
+
+ protected boolean continuePossible;
+
+ /**
+ * Return true only if UI component are all filled and value are correct
+ * to define new factor.
+ *
+ * @return {@code true} if factor is valid
+ */
+ public abstract boolean isFactorValid();
+
+ public boolean isContinuePossible() {
+ return continuePossible;
+ }
+
+ public void setContinuePossible(boolean continuePossible) {
+ boolean oldValue = this.continuePossible;
+ this.continuePossible = continuePossible;
+ firePropertyChange("continuePossible", oldValue, continuePossible);
+ }
+
+ public abstract void initWithDomain(ContinuousDomain domain);
+}
Property changes on: branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/wizard/ContinuousPanel.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/wizard/EquationContinuousPanelUI.jaxx
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/wizard/EquationContinuousPanelUI.jaxx (rev 0)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/wizard/EquationContinuousPanelUI.jaxx 2012-03-14 14:13:51 UTC (rev 3653)
@@ -0,0 +1,212 @@
+<!--
+ #%L
+ IsisFish
+
+ $Id$
+ $HeadURL$
+ %%
+ Copyright (C) 2009 - 2012 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%
+ -->
+<ContinuousPanel layout="{new BorderLayout()}">
+
+ <import>
+ java.awt.CardLayout
+ java.awt.Component
+ java.awt.Dimension
+ java.beans.PropertyChangeEvent
+ java.beans.PropertyChangeListener
+ java.util.ArrayList
+ java.util.EventObject
+ java.util.List
+ java.util.regex.Matcher
+ java.util.regex.Pattern
+ javax.swing.table.AbstractTableModel
+ javax.swing.table.DefaultTableModel
+ javax.swing.table.TableCellEditor
+ javax.swing.table.TableModel
+ javax.swing.JComboBox
+ javax.swing.DefaultCellEditor
+ javax.swing.event.CellEditorListener
+ fr.ifremer.isisfish.simulator.sensitivity.domain.ContinuousDomain
+ fr.ifremer.isisfish.simulator.sensitivity.domain.EquationContinuousDomain
+ org.apache.commons.lang3.StringUtils
+ </import>
+
+ <String id='text' javaBean='null'/>
+ <org.nuiton.topia.persistence.TopiaEntityContextable id='bean' javaBean='null'/>
+ <String id='beanProperty' javaBean='null'/>
+ <!-- For editor doc purpose -->
+ <Class id='clazz' javaBean='null'/>
+ <String id='formuleCategory' javaBean='null'/>
+ <fr.ifremer.isisfish.entities.Equation id='selectedEquation' javaBean='null'/>
+ <!-- bean property -->
+ <fr.ifremer.isisfish.entities.Formule id='formule' javaBean='null'/>
+
+ <Boolean id="selectedDomain" javaBean="false" />
+
+ <java.util.List id="domains" genericType="EquationContinuousDomain" initializer="new ArrayList<EquationContinuousDomain>()" />
+
+ <script><![CDATA[
+
+@Override
+public void initWithDomain(ContinuousDomain domain) {
+ addDomain((EquationContinuousDomain)domain);
+}
+
+protected void addDomain(EquationContinuousDomain domain) {
+ domains.add(domain);
+ // fire data change
+ variablesListModel.setDomains(domains);
+}
+
+/**
+ * Valid selected domain.
+ */
+protected void validSelectedDomain() {
+ // fill selected
+ EquationContinuousDomain selectedDomain = (EquationContinuousDomain)variablesList.getSelectedValue();
+ selectedDomain.setVariableName(variableNameField.getText().trim());
+
+
+ // parse equation content to replace
+ // double xxx = 4.0;
+ // by
+ // double xxx = context.getValueAndCompute("myfactorname.xxx", 4.0)
+ // if xxx is the variable name to replace
+ String variableName = selectedDomain.getVariableName();
+ String[] lines = editor.getEditor().getText().split("\n");
+ String result = "";
+ for (String line : lines) {
+ Pattern p = Pattern.compile("(^.*\\s+" + variableName + "\\s*\\=\\s*)([\\d\\.]+).*\\;$");
+ Matcher matcher = p.matcher(line);
+ if (matcher.find()) {
+ String fullVariableName = bean.toString() + "." + StringUtils.uncapitalize(beanProperty) + "." + variableName;
+ line = matcher.group(1) + "context.getValueAndCompute(\"" + fullVariableName + "\", " + matcher.group(2) + ");";
+ }
+ result += line + "\n";
+ }
+ editor.getEditor().setText(result);
+
+ // fire data change
+ variablesListModel.setDomains(domains);
+}
+
+protected void addNewVariable() {
+ EquationContinuousDomain domain = new EquationContinuousDomain();
+ domain.setVariableName("X");
+ addDomain(domain);
+
+ // auto select
+ variablesList.setSelectedValue(domain, true);
+}
+
+protected void displaySelectedDomain() {
+ EquationContinuousDomain selectedDomain = (EquationContinuousDomain)variablesList.getSelectedValue();
+ variableNameField.setText(selectedDomain.getVariableName());
+ distributionPanel.initWithDomain(selectedDomain);
+}
+
+protected void removeSelectedVariable() {
+ int selectedIndex = variablesList.getSelectedIndex();
+ domains.remove(selectedIndex);
+
+ // fire data change
+ variablesList.clearSelection();
+ variablesListModel.setDomains(domains);
+}
+
+@Override
+public boolean isFactorValid() {
+ boolean valid = true;
+
+ for (EquationContinuousDomain domain : domains) {
+ if (StringUtils.isBlank(domain.getVariableName())) {
+ valid = false;
+ }
+ }
+
+ return valid;
+}
+ ]]></script>
+ <JScrollPane constraints='BorderLayout.CENTER'>
+ <Table>
+ <row>
+ <cell fill='both' weightx='1' weighty='1'>
+ <JScrollPane>
+ <fr.ifremer.isisfish.ui.sensitivity.equation.EquationDomainListModel
+ id="variablesListModel" constructorParams="domains" />
+ <JList id="variablesList" model="{variablesListModel}"
+ cellRenderer="{new fr.ifremer.isisfish.ui.sensitivity.equation.EquationDomainRenderer()}"/>
+ <ListSelectionModel initializer="variablesList.getSelectionModel()"
+ onValueChanged="displaySelectedDomain();setSelectedDomain(variablesList.getSelectedIndex() != -1)" />
+ </JScrollPane>
+ </cell>
+ <cell fill='both' weightx='1' weighty='1'>
+ <Table>
+ <row>
+ <cell fill="horizontal" columns="2">
+ <Table>
+ <row>
+ <cell>
+ <JLabel text="isisfish.sensitivity.equation.variablename" enabled='{isSelectedDomain()}' />
+ </cell>
+ <cell fill="horizontal" weightx='1'>
+ <JTextField id="variableNameField" enabled='{isSelectedDomain()}'/>
+ </cell>
+ </row>
+ </Table>
+ </cell>
+ </row>
+ <row>
+ <cell fill="both" weighty='1' columns="2" weightx='1'>
+ <ContinuousDistributionPanel id="distributionPanel" enabled='{isSelectedDomain()}'
+ constructorParams="0.0d"/>
+ </cell>
+ </row>
+ <row>
+ <cell fill="horizontal" columns="2">
+ <JButton text="isisfish.sensitivity.equation.valid"
+ enabled='{isSelectedDomain()}'
+ onActionPerformed='validSelectedDomain()' />
+ </cell>
+ </row>
+ </Table>
+ </cell>
+ </row>
+ <row>
+ <cell fill='horizontal'>
+ <JButton id='add' text='isisfish.common.add'
+ onActionPerformed='addNewVariable()'/>
+ </cell>
+ <cell fill='horizontal'>
+ <JButton id='remove' text='isisfish.common.remove'
+ enabled='{isSelectedDomain()}' onActionPerformed='removeSelectedVariable()'/>
+ </cell>
+ </row>
+ <row>
+ <cell fill='both' columns='2' weightx='1' weighty='1'>
+ <fr.ifremer.isisfish.ui.input.InputOneEquationUI id='editor' constructorParams='this'
+ autoSaveModification="false" formule='{getFormule()}' text='{getText()}'
+ bean='{getBean()}' clazz='{getClazz()}' beanProperty='{getBeanProperty()}'
+ formuleCategory='{getFormuleCategory()}' selectedEquation='{getSelectedEquation()}'
+ active="true" />
+ </cell>
+ </row>
+ </Table>
+ </JScrollPane>
+</ContinuousPanel>
Added: branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/wizard/FactorWizardUI.jaxx
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/wizard/FactorWizardUI.jaxx (rev 0)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/wizard/FactorWizardUI.jaxx 2012-03-14 14:13:51 UTC (rev 3653)
@@ -0,0 +1,147 @@
+<!--
+ #%L
+ IsisFish
+
+ $Id$
+ $HeadURL$
+ %%
+ Copyright (C) 2009 - 2012 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%
+ -->
+<JDialog title='isisfish.sensitivity.title' modal='{true}' layout='{new BorderLayout()}'>
+
+ <import>
+ java.beans.PropertyChangeEvent
+ java.beans.PropertyChangeListener
+ javax.swing.JComponent
+ java.awt.CardLayout
+ </import>
+
+ <SensitivityWizardHandler id="handler" />
+
+ <Boolean id='continuePossible' javaBean='false'/>
+
+ <Boolean id='continueSelected' javaBean='false'/>
+
+ <Boolean id='editingState' javaBean='false'/>
+
+ <String id="factorPath" javaBean="null"/>
+
+ <script><![CDATA[
+protected void $afterCompleteSetup() {
+ addPropertyChangeListener(PROPERTY_CONTINUE_SELECTED, new PropertyChangeListener() {
+ @Override
+ public void propertyChange(PropertyChangeEvent evt) {
+ if ((Boolean)evt.getNewValue()) {
+ ((CardLayout) hidablePanel.getLayout()).show(hidablePanel, "continuousPanelContainer");
+ } else {
+ ((CardLayout) hidablePanel.getLayout()).show(hidablePanel, "discretePanelContainer");
+ }
+ }
+ });
+}
+
+ ]]></script>
+ <Table constraints='BorderLayout.CENTER'>
+ <row>
+ <cell columns='4' fill='horizontal'>
+ <Table>
+ <row>
+ <cell fill='horizontal'>
+ <JLabel text='isisfish.sensitivity.name'/>
+ </cell>
+ <cell weightx='1' fill='horizontal'>
+ <JTextField id='factorNameField'/>
+ </cell>
+ </row>
+ </Table>
+ </cell>
+ </row>
+ <row>
+ <cell fill='horizontal' weightx='1' columns='2'>
+ <JRadioButton id='discret' text='isisfish.sensitivity.discret'
+ selected='{true}' buttonGroup='factorType'
+ onActionPerformed='setContinueSelected(continueRadio.isSelected())'/>
+ </cell>
+ <cell fill='horizontal' weightx='1' columns='2'>
+ <JRadioButton id='continueRadio' text='isisfish.sensitivity.continue'
+ buttonGroup='factorType' selected='{false}' visible='{isContinuePossible()}'
+ onActionPerformed='setContinueSelected(continueRadio.isSelected())'/>
+ </cell>
+ </row>
+ <row>
+ <cell columns='4' fill='both' weightx='1' weighty='3'>
+ <JPanel layout="{new CardLayout()}" id="hidablePanel">
+
+ <!-- discrete -->
+ <Table id='discretePanelContainer' border='{BorderFactory.createTitledBorder("")}'
+ constraints='"discretePanelContainer"'>
+ <row>
+ <cell fill='horizontal'>
+ <JLabel text='isisfish.sensitivity.selectDiscretNumber'/>
+ </cell>
+ <cell fill='horizontal' weightx='1'>
+ <JTextField id='discretNumber'/>
+ </cell>
+ <cell fill='horizontal'>
+ <JButton text='isisfish.sensitivity.validDiscretNumber'
+ onActionPerformed='getHandler().addTabs(this)'/>
+ </cell>
+ </row>
+ <row>
+ <cell columns='3' fill='both' weightx='1' weighty='2' anchor="north">
+ <JTabbedPane id='tabPane' />
+ </cell>
+ </row>
+ </Table>
+
+ <!-- continous -->
+ <JPanel id='continuousPanelContainer' layout='{new BorderLayout()}'
+ border='{BorderFactory.createTitledBorder("")}'
+ constraints='"continuousPanelContainer"'>
+
+ </JPanel>
+ </JPanel>
+ </cell>
+ </row>
+ <row>
+ <cell columns='4' fill='horizontal'>
+ <JLabel text='isisfish.sensitivity.comment'/>
+ </cell>
+ </row>
+ <row>
+ <cell columns='4' fill='both' weighty='1'>
+ <JScrollPane>
+ <JTextArea id='comment'/>
+ </JScrollPane>
+ </cell>
+ </row>
+ <row>
+ <cell fill='horizontal'>
+ <JButton id='cancel' text='isisfish.common.cancel' onActionPerformed='dispose()'/>
+ </cell>
+ <cell fill='horizontal' columns='2'>
+ <JButton id='remove' text='isisfish.common.remove' visible='{isEditingState()}'
+ onActionPerformed='getHandler().remove(this)'/>
+ </cell>
+ <cell fill='horizontal'>
+ <JButton id='save' text='isisfish.common.save' enabled='{!getFactorNameField().getText().isEmpty()}'
+ onActionPerformed='getHandler().save(this)'/>
+ </cell>
+ </row>
+ </Table>
+</JDialog>
\ No newline at end of file
Added: branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/wizard/MatrixContinuousPanelUI.jaxx
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/wizard/MatrixContinuousPanelUI.jaxx (rev 0)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/wizard/MatrixContinuousPanelUI.jaxx 2012-03-14 14:13:51 UTC (rev 3653)
@@ -0,0 +1,154 @@
+<!--
+ #%L
+ IsisFish
+
+ $Id$
+ $HeadURL$
+ %%
+ Copyright (C) 2009 - 2012 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%
+ -->
+<ContinuousPanel>
+
+ <Boolean id="percentageTypeFactor" javaBean="true" />
+
+ <import>
+ org.apache.commons.lang3.StringUtils
+ org.nuiton.math.matrix.gui.MatrixPanelEditor
+ org.nuiton.math.matrix.MatrixND
+ java.awt.CardLayout
+ java.beans.PropertyChangeEvent
+ java.beans.PropertyChangeListener
+ fr.ifremer.isisfish.simulator.sensitivity.domain.ContinuousDomain
+ </import>
+
+ <script><![CDATA[
+public void init(MatrixND min, MatrixND max, MatrixND referenceValue, String coefficient) {
+ minValuePanel.setMatrix(min);
+ maxValuePanel.setMatrix(max);
+ referenceValuePanel.setMatrix(referenceValue);
+ coefficientField.setText(coefficient);
+}
+
+public void initExisting(MatrixND min, MatrixND max, MatrixND referenceValue, String coefficient) {
+ init(min, max, referenceValue, coefficient);
+ setPercentageTypeFactor(StringUtils.isNotBlank(coefficient));
+}
+
+@Override
+public boolean isFactorValid() {
+ boolean valid = false;
+
+ /*try {
+ if (continueSelected) {
+ if (percentageTypeFactor) {
+ Double coefficient = Double.parseDouble(coefficientField.getText().trim());
+ valid = coefficient != null;
+ }
+ else {
+ valid = true;
+ }
+ }
+ else {
+ valid = true;
+ }
+ }
+ catch (NumberFormatException eee) {
+ if (log.isWarnEnabled()) {
+ log.warn("Double parse error", eee);
+ }
+ }*/
+
+ return valid;
+}
+
+protected void $afterCompleteSetup() {
+ addPropertyChangeListener(PROPERTY_PERCENTAGE_TYPE_FACTOR, new PropertyChangeListener() {
+ @Override
+ public void propertyChange(PropertyChangeEvent evt) {
+ if ((Boolean)evt.getNewValue()) {
+ ((CardLayout) hidablePanel.getLayout()).show(hidablePanel, "percentageType");
+ } else {
+ ((CardLayout) hidablePanel.getLayout()).show(hidablePanel, "minMaxType");
+ }
+ }
+ });
+}
+
+@Override
+public void initWithDomain(ContinuousDomain domain) {
+
+}
+ ]]></script>
+ <JPanel id="content">
+ <Table constraints='BorderLayout.CENTER'>
+ <row>
+ <cell fill='horizontal' weightx='1'>
+ <JRadioButton text="isisfish.sensitivity.continuouspercentagetype"
+ onActionPerformed="setPercentageTypeFactor(true)"
+ selected="{isPercentageTypeFactor()}"/>
+ </cell>
+ <cell fill='horizontal' weightx='1'>
+ <JRadioButton text="isisfish.sensitivity.continuousminmaxtype"
+ onActionPerformed="setPercentageTypeFactor(false)"
+ selected="{!isPercentageTypeFactor()}"/>
+ </cell>
+ </row>
+ <row>
+ <cell fill='both' weightx='1' weighty='1' columns="2">
+ <JPanel layout="{new CardLayout()}" id="hidablePanel">
+ <Table constraints='"percentageType"' border='{BorderFactory.createTitledBorder("")}'>
+ <row>
+ <cell fill='horizontal' columns="2">
+ <JLabel text='isisfish.sensitivity.referencevalue'/>
+ </cell>
+ </row>
+ <row>
+ <cell fill='both' weighty='1' columns="2">
+ <MatrixPanelEditor id='referenceValuePanel'/>
+ </cell>
+ </row>
+ <row>
+ <cell fill='horizontal'>
+ <JLabel text='isisfish.sensitivity.coefficient'/>
+ </cell>
+ <cell fill='horizontal' weightx='1'>
+ <JTextField id='coefficientField'/>
+ </cell>
+ </row>
+ </Table>
+
+ <Table constraints='"minMaxType"' border='{BorderFactory.createTitledBorder("")}'>
+ <row>
+ <cell fill='both' weightx='1' weighty='1'>
+ <JTabbedPane>
+ <tab title="isisfish.sensitivity.firstValue">
+ <MatrixPanelEditor id='minValuePanel'/>
+ </tab>
+ <tab title="isisfish.sensitivity.lastValue">
+ <MatrixPanelEditor id='maxValuePanel'/>
+ </tab>
+ </JTabbedPane>
+ </cell>
+ </row>
+ </Table>
+ </JPanel>
+ </cell>
+ </row>
+ </Table>
+ </JPanel>
+</ContinuousPanel>
\ No newline at end of file
Added: branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/wizard/SensitivityWizardHandler.java
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/wizard/SensitivityWizardHandler.java (rev 0)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/wizard/SensitivityWizardHandler.java 2012-03-14 14:13:51 UTC (rev 3653)
@@ -0,0 +1,876 @@
+/*
+ * #%L
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2012 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.ui.sensitivity.wizard;
+
+import static org.nuiton.i18n.I18n._;
+
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.SortedMap;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import javax.swing.JComboBox;
+import javax.swing.JComponent;
+import javax.swing.JOptionPane;
+import javax.swing.JScrollPane;
+import javax.swing.JTextField;
+import javax.swing.text.JTextComponent;
+
+import jaxx.runtime.context.JAXXInitialContext;
+
+import org.apache.commons.beanutils.PropertyUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.nuiton.math.matrix.MatrixND;
+import org.nuiton.math.matrix.gui.MatrixPanelEditor;
+import org.nuiton.topia.TopiaContext;
+import org.nuiton.topia.TopiaException;
+import org.nuiton.topia.persistence.TopiaEntity;
+import org.nuiton.topia.persistence.TopiaEntityContextable;
+
+import fr.ifremer.isisfish.IsisFishDAOHelper;
+import fr.ifremer.isisfish.IsisFishRuntimeException;
+import fr.ifremer.isisfish.datastore.RegionStorage;
+import fr.ifremer.isisfish.datastore.RuleStorage;
+import fr.ifremer.isisfish.entities.Equation;
+import fr.ifremer.isisfish.entities.Population;
+import fr.ifremer.isisfish.rule.Rule;
+import fr.ifremer.isisfish.simulator.sensitivity.Domain;
+import fr.ifremer.isisfish.simulator.sensitivity.Factor;
+import fr.ifremer.isisfish.simulator.sensitivity.SensitivityUtils;
+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.RuleDiscreteDomain;
+import fr.ifremer.isisfish.types.Month;
+import fr.ifremer.isisfish.types.RangeOfValues;
+import fr.ifremer.isisfish.types.TimeStep;
+import fr.ifremer.isisfish.types.TimeUnit;
+import fr.ifremer.isisfish.ui.SimulationUI;
+import fr.ifremer.isisfish.ui.input.InputAction;
+import fr.ifremer.isisfish.ui.input.InputOneEquationUI;
+import fr.ifremer.isisfish.ui.simulator.RuleChooser;
+import fr.ifremer.isisfish.ui.simulator.SimulAction;
+import fr.ifremer.isisfish.ui.widget.editor.MonthComponent;
+import fr.ifremer.isisfish.ui.widget.editor.StepComponent;
+import freemarker.template.utility.StringUtil;
+
+/**
+ * Handler for all class in wizard packages.
+ *
+ * @author chatellier
+ * @version $Revision$
+ *
+ * Last update : $Date$
+ * By : $Author$
+ */
+public class SensitivityWizardHandler {
+
+ /** Class logger. */
+ private static Log log = LogFactory.getLog(SensitivityWizardHandler.class);
+
+ /**
+ * Return opened topia context that need to be closed.
+ *
+ * There is several things in ugly jaxx context:
+ * <ul>
+ * <li>opened TopiaContext from SensitivityTabUI that is null in ParamUI
+ * <li>RegionStorage on SimulAction
+ * </ul>
+ *
+ * Use region storage here.
+ *
+ * @return opened topia context
+ * @throws TopiaException
+ */
+ protected TopiaContext getTopiaContext(FactorWizardUI factorWizardUI) throws TopiaException {
+ // RegionStorage object is common to ParamsUI
+ // and SensitivityTabUI and may be valued
+ RegionStorage regionStorage = factorWizardUI.getContextValue(RegionStorage.class);
+ TopiaContext context = regionStorage.getStorage().beginTransaction();
+ return context;
+ }
+
+ /**
+ * Initialize un nouveau wizard avec lorsque l'utilisateur clic sur
+ * un layer sont le sous composant accepte la mise en facteur.
+ *
+ * On recupere des info sur le type correspondant à la proprieté a mettre
+ * en facteur pour savoir le composant d'edition et s'il peut etre continue
+ * ou pas.
+ *
+ * @param factorWizardUI factorWizardUI
+ * @param bean bean in current ui
+ * @param property bean property to edit
+ */
+ public void initNewFactor(FactorWizardUI factorWizardUI, TopiaEntityContextable bean, String property) {
+
+ // path is topiaId#property
+ // ex : fwn#fsd#0.3425345#name
+ // for JAXX : cOrigine start with upper case
+ // for commons beanutils : must be lower case
+ String beanProperty = StringUtils.uncapitalize(property);
+ String path = bean.getTopiaId() + "#" + beanProperty;
+ factorWizardUI.setFactorPath(path);
+ factorWizardUI.getFactorNameField().setText(bean.toString() + "." + beanProperty);
+
+ // get value for pointed path
+ //TopiaContext topiaContext = factorWizardUI.getContextValue(TopiaContext.class);
+ //Class<?> classForPath = getPropertyClass(path, topiaContext);
+ // peut etre pas une bonne idée que ce soit basé sur les valeurs
+ // au lieu des types (mais pour RangeOfValues, pas evident)
+ try {
+ Object valueForPath = PropertyUtils.getProperty(bean, beanProperty);
+ boolean continuePossible = SensitivityUtils.canBeContinue(valueForPath);
+ boolean continueSelected = SensitivityUtils.isContinue(valueForPath);
+
+ // init panel
+ if (continuePossible) {
+ JComponent comp = getContinuousPanel(valueForPath, bean, property);
+ factorWizardUI.getContinuousPanelContainer().add(comp, BorderLayout.CENTER);
+ }
+
+ // after, for binding on continuePossible, continueSelected to work
+ factorWizardUI.setContinuePossible(continuePossible);
+ factorWizardUI.setContinueSelected(continueSelected);
+ factorWizardUI.getContinueRadio().setSelected(continueSelected);
+ } catch (Exception ex) {
+ throw new IsisFishRuntimeException("Can't init wizard", ex);
+ }
+ }
+
+ /**
+ * Appelé suite a un double clic sur l'arbre des facteurs pour modifier un
+ * facteur.
+ *
+ * @param factorWizardUI view to init
+ * @param factor factor factor to edit
+ */
+ public void initExistingFactor(FactorWizardUI factorWizardUI, Factor factor) {
+
+ factorWizardUI.setEditingState(true);
+ String factorPath = factor.getPath();
+ Domain domain = factor.getDomain();
+ String factorName = factor.getName();
+ factorWizardUI.setFactorPath(factorPath);
+ factorWizardUI.getComment().setText(factor.getComment());
+
+ // dans le cas d'un facteur equation
+ // il faut enlever la varible du nom
+ // sinon, à la sauvegarde elle sera reajoutée
+ if (domain instanceof EquationContinuousDomain) {
+ EquationContinuousDomain equationDomain = (EquationContinuousDomain)domain;
+ String suffix = equationDomain.getVariableName();
+ factorName = StringUtils.removeEnd(factorName, "." + suffix);
+ // can be called _xxx after char replacement for R
+ factorName = StringUtils.removeEnd(factorName, "_" + suffix);
+ }
+
+ if (domain instanceof ContinuousDomain) {
+
+ ContinuousDomain cDomain = (ContinuousDomain) domain;
+ ContinuousPanel comp = getNewContinuousComponent(factorWizardUI, factor.getPath());
+ comp.initWithDomain(cDomain);
+ factorWizardUI.getContinuousPanelContainer().add(comp, BorderLayout.CENTER);
+
+ factorWizardUI.getContinueRadio().setSelected(true);
+ factorWizardUI.setContinueSelected(true);
+ factorWizardUI.setContinuePossible(true);
+ } else {
+
+ // un facteur pour être edité sans domain
+ // lors de la creation
+ if (domain != null) {
+ // restaure discrete domain
+ DiscreteDomain dDomain = (DiscreteDomain)domain;
+
+ int nb = dDomain.getValues().size();
+ factorWizardUI.getDiscretNumber().setText(String.valueOf(nb));
+ factorWizardUI.getTabPane().removeAll();
+
+ SortedMap<Object, Object> values = dDomain.getValues();
+ int i = 0;
+ for (Object o : values.values()) {
+ i++;
+ JComponent c = null;
+ if (o != null) {
+ c = getEditorWithValue(factorWizardUI, factor, dDomain, o);
+ }
+ else {
+ if (log.isWarnEnabled()) {
+ log.warn("Null value in factor");
+ }
+ }
+ JScrollPane js = new JScrollPane(c);
+ String tabName = _("isisfish.sensitivity.discretevaluelabel", i);
+ factorWizardUI.getTabPane().addTab(tabName, js);
+ }
+ }
+
+ // init non selected continous panel
+ JComponent comp = getNewContinuousComponent(factorWizardUI, factor.getPath());
+ if (comp != null) {
+ factorWizardUI.setContinuePossible(true);
+ factorWizardUI.getContinuousPanelContainer().add(comp, BorderLayout.CENTER);
+ }
+ }
+
+ factorWizardUI.getFactorNameField().setText(factorName);
+ }
+
+ /**
+ * Renvoie un componsant gaphique initialisé avec la valeur
+ * qui est enregistré dans le domain.
+ * Pour réédition d'un facteur existant (facteur discret).
+ *
+ * @param factorWizardUI context for context value (RegionStorage)
+ * @param value type to get editor
+ * @param factor factor for path value
+ * @param domain domain for domain type
+ * @return component ui component with value
+ */
+ protected JComponent getEditorWithValue(FactorWizardUI factorWizardUI, Factor factor, Domain domain, Object value) {
+
+ JComponent result = null;
+
+ if (Double.class.isAssignableFrom(value.getClass())) {
+ result = new JTextField();
+ ((JTextField)result).setText(String.valueOf(value));
+ }
+ else if (double.class.isAssignableFrom(value.getClass())) {
+ result = new JTextField();
+ ((JTextField)result).setText(String.valueOf(value));
+ }
+ else if (MatrixND.class.isAssignableFrom(value.getClass())) {
+ result = new MatrixPanelEditor();
+ ((MatrixPanelEditor)result).setMatrix((MatrixND)value);
+ }
+ else if (domain instanceof RuleDiscreteDomain) {
+ result = new RuleChooser(factorWizardUI);
+ ((RuleChooser)result).setRulesList((List<Rule>)value);
+ }
+ else if (domain instanceof EquationDiscreteDomain) {
+ String factorPath = factor.getPath();
+ if (factor.getPath().indexOf('#') != -1) {
+ String topiaId = factorPath.substring(0, factorPath.lastIndexOf('#'));
+ String property = factorPath.substring(factorPath.lastIndexOf('#') + 1);
+
+ // get bean in database
+ try {
+ TopiaContext topiaContext = getTopiaContext(factorWizardUI);
+ TopiaEntityContextable entity = (TopiaEntityContextable)topiaContext.findByTopiaId(topiaId);
+ Equation equation = (Equation)PropertyUtils.getProperty(entity, property);
+ topiaContext.closeContext();
+
+ // fill component
+ InputOneEquationUI ui = new InputOneEquationUI(factorWizardUI);
+ ui.setAutoSaveModification(false);
+ ui.setFormuleCategory(equation.getCategory());
+ ui.setText(_("isisfish.common.equation")); // can't get real name
+ ui.setClazz(value.getClass());
+ ui.setBeanProperty(property);
+ ui.setBean(entity); // set bean fire content modification event
+ ui.getEditor().setText((String)value);
+ ui.setActive(true);
+
+ result = ui;
+ } catch (Exception ex) {
+ throw new IsisFishRuntimeException("Can't restore initial factor database property", ex);
+ }
+ }
+ // TODO path with no # (normalement pas possible pour les equations)
+ }
+ else if (value instanceof TimeUnit) {
+ result = new JTextField();
+ ((JTextField)result).setText(String.valueOf(((TimeUnit)value).getTime()));
+ } else if (value instanceof TopiaEntity) {
+ RegionStorage regionStorage = factorWizardUI.getContextValue(RegionStorage.class);
+ TopiaContext context = null;
+ try {
+ context = regionStorage.getStorage().beginTransaction();
+ List list = context.find("from " + value.getClass().getName());
+ JComboBox c = new JComboBox(list.toArray());
+ c.setSelectedItem(value);
+ result = c;
+ } catch (TopiaException ex) {
+ throw new IsisFishRuntimeException("Can't get entity list", ex);
+ } finally {
+ if (context != null) {
+ try {
+ context.closeContext();
+ } catch (TopiaException ex) {
+ throw new IsisFishRuntimeException("Can't get entity list", ex);
+ }
+ }
+ }
+ } else if (value instanceof TimeStep) {
+ TimeStep timeStep = (TimeStep)value;
+ result = new StepComponent(timeStep.getMonth().getMonthNumber(), timeStep.getYear());
+ } else if (value instanceof Month) {
+ Month month = (Month)value;
+ result = MonthComponent.createMounthCombo(month.getMonthNumber());
+ } else if (value instanceof String) {
+ // valeur non typées ???
+ result = new JTextField();
+ ((JTextField)result).setText(String.valueOf(value));
+ }
+
+ if (log.isDebugEnabled()) {
+ log.debug("Editor for value " + value + " is " + result);
+ }
+
+ return result;
+ }
+
+ /**
+ * Retourne le componant permettant de mettre en facteur continue
+ * une valeur.
+ *
+ * @param value value (must be continuable)
+ * @param bean bean (in case of equation)
+ * @param property bean property (in case of equation)
+ * @return component initialized
+ */
+ protected ContinuousPanel getContinuousPanel(Object value, TopiaEntityContextable bean, String property) {
+ ContinuousPanel result;
+
+ if (value instanceof RangeOfValues) {
+ RangeOfValues rangeOfValues = (RangeOfValues)value;
+ //DefaultContinuousPanelUI ui = new DefaultContinuousPanelUI();
+ String values = rangeOfValues.getValues();
+ String min = "0";
+ String max = "0";
+ if (values.matches("^\\ *[0-9]*\\ *\\-\\ *[0-9]*\\ *$")) {
+ int first = values.indexOf("-");
+ if (first != -1) {
+ min = values.substring(0, first);
+ max = values.substring(first + 1);
+ }
+ }
+ //ui.init(min, max, min, null);
+ //result = ui;
+ result = new ContinuousDistributionPanel(min);
+ } else if (value instanceof Equation) {
+ Equation equation = (Equation)value;
+ EquationContinuousPanelUI ui = new EquationContinuousPanelUI(new JAXXInitialContext().add(new InputAction()));
+ ui.setSelectedEquation(equation);
+ ui.setText(_("isisfish.common.equation")); // can't get real name
+ ui.setFormuleCategory(equation.getCategory());
+ ui.setClazz(equation.getClass());
+ ui.setBeanProperty(property);
+ ui.setBean(bean);
+ result = ui;
+ } else if (value instanceof MatrixND) {
+ MatrixND matrix = (MatrixND)value;
+ //MatrixContinuousPanelUI matrixPanel = new MatrixContinuousPanelUI();
+ //matrixPanel.init(matrix.clone(), matrix.clone(), matrix.clone(), null);
+ //result = matrixPanel;
+ result = new ContinuousDistributionPanel(matrix.clone());
+ } else if (value instanceof TimeUnit) {
+ TimeUnit timeUnit = (TimeUnit)value;
+ //DefaultContinuousPanelUI ui = new DefaultContinuousPanelUI();
+ //ui.init(String.valueOf(timeUnit.getTime()), String.valueOf(timeUnit.getTime()),
+ // String.valueOf(timeUnit.getTime()), null);
+ //result = ui;
+ result = new ContinuousDistributionPanel(String.valueOf(timeUnit.getTime()));
+ } else {
+ //DefaultContinuousPanelUI ui = new DefaultContinuousPanelUI();
+ //ui.init(String.valueOf(value), String.valueOf(value), String.valueOf(value), null);
+ //result = ui;
+ result = new ContinuousDistributionPanel(String.valueOf(value));
+ }
+
+ if (log.isDebugEnabled()) {
+ log.debug("Component for " + value + " (" + bean + ", " + property + ")");
+ log.debug(" > " + result);
+ }
+
+ return result;
+ }
+
+ /**
+ * Rafraichit l'assistant de facteur pour modifier le nombre de valeurs
+ * (onglet) d'un composant discret.
+ *
+ * @param factorWizardUI factorWizardUI
+ */
+ public void addTabs(FactorWizardUI factorWizardUI) {
+ String discreteNumber = factorWizardUI.getDiscretNumber().getText();
+ int nbTab = Integer.parseInt(discreteNumber);
+ int currentCount = factorWizardUI.getTabPane().getTabCount();
+
+ // remove useless tab
+ for (int tab = currentCount - 1; tab > nbTab -1 ; tab--) {
+ factorWizardUI.getTabPane().remove(tab);
+ }
+
+ // add new tabs
+ for (int tab = currentCount ; tab < nbTab ; tab++) {
+ JComponent c = getNewDiscreteComponent(factorWizardUI);
+ String tabName = _("isisfish.sensitivity.discretevaluelabel", tab);
+ factorWizardUI.getTabPane().addTab(tabName, c);
+ }
+
+ factorWizardUI.pack();
+ }
+
+ /**
+ * Return new discrete component inited with value defined by factor path.
+ *
+ * Le composant retourné est inclut dans un jscrollpane (sauf pour les
+ * matrices qui contient deja un jscrollpane)
+ *
+ * @param factorWizardUI factorWizardUI
+ * @return component copy
+ */
+ protected JComponent getNewDiscreteComponent(FactorWizardUI factorWizardUI) {
+
+ JComponent result = null;
+ String factorPath = factorWizardUI.getFactorPath();
+
+ try {
+ if (factorPath.indexOf('#') != -1) {
+ String topiaId = factorPath.substring(0, factorPath.lastIndexOf('#'));
+ String property = factorPath.substring(factorPath.lastIndexOf('#') + 1);
+
+ // get bean in database
+ TopiaContext topiaContext = getTopiaContext(factorWizardUI);
+ TopiaEntityContextable entity = (TopiaEntityContextable)topiaContext.findByTopiaId(topiaId);
+ Object value = PropertyUtils.getProperty(entity, property);
+
+ // init new jcomponent for value
+ if (value instanceof Number) {
+ result = new JTextField(String.valueOf(value));
+ } else if (value instanceof MatrixND) {
+ result = new MatrixPanelEditor();
+ MatrixND matrix = ((MatrixND)value).copy();
+ ((MatrixPanelEditor)result).setMatrix(matrix);
+ } else if (value instanceof RangeOfValues) {
+ RangeOfValues rangeOfValues = (RangeOfValues)value;
+ result = new JTextField(rangeOfValues.getValues());
+ } else if (value instanceof TimeUnit) {
+ TimeUnit timeUnit = (TimeUnit)value;
+ result = new JTextField(String.valueOf(timeUnit.getTime()));
+ } else if (value instanceof Equation) {
+ Equation equation = (Equation)value;
+ // fill component
+ InputOneEquationUI ui = new InputOneEquationUI(factorWizardUI);
+ ui.setAutoSaveModification(false);
+ ui.setText(equation.getContent());
+ ui.setFormuleCategory(equation.getCategory());
+ ui.setText(_("isisfish.common.equation")); // can't get real name
+ ui.setClazz(value.getClass());
+ ui.setBeanProperty(property);
+ ui.setBean(entity);
+ ui.setActive(true);
+ result = ui;
+ }
+
+ topiaContext.closeContext();
+
+ }
+ else {
+ // dans ce cas c'est des regles, pop de départ ou parametres de regles
+ // c'est un peu galere car le code n'a rien a voir avec le reste
+ // donc, c'est du cas par cas
+ if (factorPath.equals("parameters.rules")) {
+ result = new RuleChooser(factorWizardUI);
+ } else if (factorPath.startsWith("parameters.population.")) {
+ // la seule facon d'avoir les parametres ici est d'aller
+ // les chercher dans les parametres de simulation
+ Pattern pattern = Pattern.compile("^parameters\\.population\\.(\\w+)(\\.(.+)?)$");
+ Matcher matcher = pattern.matcher(factorPath);
+ if (matcher.matches()) {
+ String populationName = matcher.group(1);
+ if (log.isDebugEnabled()) {
+ log.debug("Loading population : " + populationName);
+ }
+ TopiaContext topiaContext = getTopiaContext(factorWizardUI);
+ Population pop = IsisFishDAOHelper.getPopulationDAO(topiaContext).findByName(populationName);
+ SimulAction action = factorWizardUI.getContextValue(SimulAction.class);
+ MatrixND N = action.getSimulationParameter().getNumberOf(pop);
+ result = new MatrixPanelEditor();
+ ((MatrixPanelEditor)result).setMatrix(N.clone());
+ topiaContext.closeContext();
+ }
+ } else if (factorPath.startsWith("parameters.rule.")) {
+ Pattern pattern = Pattern.compile("^parameters\\.rule\\.(\\d+)\\.parameter\\.(\\w+)(\\..+)?$");
+ Matcher matcher = pattern.matcher(factorPath);
+ if (matcher.matches()) {
+ int ruleIndex = Integer.parseInt(matcher.group(1));
+ SimulAction action = factorWizardUI.getContextValue(SimulAction.class);
+ Rule rule = action.getSimulationParameter().getRules().get(ruleIndex);
+ Class valueClazz = RuleStorage.getParameterType(rule, matcher.group(2));
+ Object value = RuleStorage.getParameterValue(rule, matcher.group(2));
+ result = getTypeDiscreteComponent(factorWizardUI, valueClazz, value);
+
+ } else {
+ // double...
+ result = new JTextField("0.0");
+ }
+ } else {
+ if (log.isWarnEnabled()) {
+ log.warn("Can't find component for path " + factorPath);
+ }
+ }
+ }
+ } catch (Exception ex) {
+ throw new IsisFishRuntimeException("Can't restore intial factor database property", ex);
+ }
+
+ if (log.isDebugEnabled()) {
+ log.debug("Component for path " + factorPath + " is " + result);
+ }
+
+ // hack : si on met 2 fois un jscrollpane, rien ne s'affiche
+ if (!(result instanceof MatrixPanelEditor)) {
+ result = new JScrollPane(result);
+ }
+
+ return result;
+ }
+
+ /**
+ * Return new continuous component inited with value defined by factor path.
+ *
+ * @param factorWizardUI (to use topia context)
+ * @param factorPath factor path
+ * @return component initialized
+ */
+ protected ContinuousPanel getNewContinuousComponent(FactorWizardUI factorWizardUI, String factorPath) {
+ ContinuousPanel result = null;
+
+ try {
+ if (factorPath.indexOf('#') != -1) {
+ String topiaId = factorPath.substring(0, factorPath.lastIndexOf('#'));
+ String property = factorPath.substring(factorPath.lastIndexOf('#') + 1);
+
+ // get bean in database
+ TopiaContext topiaContext = getTopiaContext(factorWizardUI);
+ TopiaEntityContextable entity = (TopiaEntityContextable)topiaContext.findByTopiaId(topiaId);
+ Object value = PropertyUtils.getProperty(entity, property);
+
+ if (value instanceof RangeOfValues) {
+ RangeOfValues rangeOfValues = (RangeOfValues)value;
+ //DefaultContinuousPanelUI ui = new DefaultContinuousPanelUI();
+ String values = rangeOfValues.getValues();
+ String min = "0";
+ String max = "0";
+ if (values.matches("^\\ *[0-9]*\\ *\\-\\ *[0-9]*\\ *$")) {
+ int first = values.indexOf("-");
+ if (first != -1) {
+ min = values.substring(0, first);
+ max = values.substring(first + 1);
+ }
+ }
+ result = new ContinuousDistributionPanel(min);
+ } else if (value instanceof Equation) {
+ Equation equation = (Equation)value;
+ EquationContinuousPanelUI ui = new EquationContinuousPanelUI(new JAXXInitialContext().add(new InputAction()));
+ ui.setSelectedEquation(equation);
+ ui.setText(_("isisfish.common.equation")); // can't get real name
+ ui.setFormuleCategory(equation.getCategory());
+ ui.setClazz(equation.getClass());
+ ui.setBeanProperty(property);
+ ui.setBean(entity);
+ result = ui;
+ } else if (value instanceof MatrixND) {
+ MatrixND matrix = (MatrixND)value;
+ //MatrixContinuousPanelUI matrixPanel = new MatrixContinuousPanelUI();
+ //matrixPanel.init(matrix.clone(), matrix.clone(), matrix.clone(), null);
+ //result = matrixPanel;
+ result = new ContinuousDistributionPanel(matrix.clone());
+ } else if (value instanceof TimeUnit) {
+ TimeUnit timeUnit = (TimeUnit)value;
+ //DefaultContinuousPanelUI ui = new DefaultContinuousPanelUI();
+ //ui.init(String.valueOf(timeUnit.getTime()), String.valueOf(timeUnit.getTime()),
+ // String.valueOf(timeUnit.getTime()), null);
+ //result = ui;
+ result = new ContinuousDistributionPanel(String.valueOf(timeUnit.getTime()));
+ } else {
+ //DefaultContinuousPanelUI ui = new DefaultContinuousPanelUI();
+ //ui.init(String.valueOf(value), String.valueOf(value), String.valueOf(value), null);
+ //result = ui;
+ result = new ContinuousDistributionPanel(String.valueOf(value));
+ }
+
+ topiaContext.closeContext();
+
+ } else {
+ if (factorPath.startsWith("parameters.population.")) {
+ // la seule facon d'avoir les parametres ici est d'aller
+ // les chercher dans les parametres de simulation
+ Pattern pattern = Pattern.compile("^parameters\\.population\\.(\\w+)(\\.(.+)?)$");
+ Matcher matcher = pattern.matcher(factorPath);
+ if (matcher.matches()) {
+ String populationName = matcher.group(1);
+ if (log.isDebugEnabled()) {
+ log.debug("Loading population : " + populationName);
+ }
+ TopiaContext topiaContext = getTopiaContext(factorWizardUI);
+ Population pop = IsisFishDAOHelper.getPopulationDAO(topiaContext).findByName(populationName);
+ SimulAction action = factorWizardUI.getContextValue(SimulAction.class);
+ MatrixND N = action.getSimulationParameter().getNumberOf(pop);
+ result = new ContinuousDistributionPanel(N.clone());
+ topiaContext.closeContext();
+ }
+ } else if (factorPath.startsWith("parameters.rule.")) {
+ Pattern pattern = Pattern.compile("^parameters\\.rule\\.(\\d+)\\.parameter\\.(\\w+)(\\..+)?$");
+ Matcher matcher = pattern.matcher(factorPath);
+ if (matcher.matches()) {
+ int ruleIndex = Integer.parseInt(matcher.group(1));
+ SimulAction action = factorWizardUI.getContextValue(SimulAction.class);
+ Rule rule = action.getSimulationParameter().getRules().get(ruleIndex);
+ Class valueClazz = RuleStorage.getParameterType(rule, matcher.group(2));
+ Object value = RuleStorage.getParameterValue(rule, matcher.group(2));
+ result = getTypeContinousComponent(factorWizardUI, valueClazz, value);
+
+ } else {
+ // double...
+ result = getContinuousPanel(0.0, null, null);
+ }
+ } else {
+ if (log.isWarnEnabled()) {
+ log.warn("Can't find component for path " + factorPath);
+ }
+ }
+ }
+ } catch (Exception ex) {
+ throw new IsisFishRuntimeException("Can't init wizard", ex);
+ }
+
+ return result;
+ }
+
+ /**
+ * Get new special component for typed parameters.
+ *
+ * @param factorWizardUI
+ * @param type
+ * @return rule discrete component
+ */
+ protected JComponent getTypeDiscreteComponent(FactorWizardUI factorWizardUI, Class type, Object value) {
+
+ JComponent result = null;
+
+ if (TopiaEntity.class.isAssignableFrom(type)) {
+ try {
+ TopiaContext context = getTopiaContext(factorWizardUI);
+ List list = context.find("from " + type.getName());
+ JComboBox c = new JComboBox(list.toArray());
+ result = c;
+ context.closeContext();
+ } catch (TopiaException ex) {
+ throw new IsisFishRuntimeException("Can't get entity list", ex);
+ }
+ } else if (TimeStep.class.isAssignableFrom(type)) {
+ result = new StepComponent(0, 0);
+ } else if (Month.class.isAssignableFrom(type)) {
+ result = MonthComponent.createMounthCombo(0);
+ } else {
+ if (value != null) {
+ result = new JTextField(value.toString());
+ } else {
+ result = new JTextField();
+ }
+
+ }
+
+ return result;
+ }
+
+ /**
+ * Get new special component for typed parameters.
+ *
+ * @param factorWizardUI
+ * @param type type to get component
+ * @return rule discrete component
+ */
+ protected ContinuousPanel getTypeContinousComponent(FactorWizardUI factorWizardUI, Class type, Object value) {
+
+ ContinuousPanel result = null;
+
+ if (Double.class.isAssignableFrom(type) || double.class.isAssignableFrom(type)) {
+ if (value != null) {
+ result = new ContinuousDistributionPanel(value.toString());
+ } else {
+ result = new ContinuousDistributionPanel(0.0);
+ }
+ }
+
+ return result;
+ }
+
+ /**
+ * Save current factor.
+ *
+ * @param factorWizardUI factorWizardUI
+ */
+ public void save(FactorWizardUI factorWizardUI) {
+
+ // get continuous component if any
+ ContinuousPanel continuousPanel = null;
+ if (factorWizardUI.getContinuousPanelContainer().getComponentCount() > 0) {
+ continuousPanel = (ContinuousPanel)factorWizardUI.getContinuousPanelContainer().getComponent(0);
+ }
+
+ // first check is factor is valid
+ boolean factorValid = true;
+ if (continuousPanel != null) {
+ factorValid = continuousPanel.isFactorValid();
+ }
+ if (!factorValid) {
+ JOptionPane.showMessageDialog(factorWizardUI, _("isisfish.sensitivity.factor.notvalid"),
+ _("isisfish.sensitivity.title"), JOptionPane.ERROR_MESSAGE);
+ return;
+ }
+
+ // call specific method depending on continuous/discrete
+ if (factorWizardUI.getContinueRadio().isSelected()) {
+ saveContinue(factorWizardUI.getFactorNameField().getText(),
+ factorWizardUI.getComment().getText(), factorWizardUI.getFactorPath(), continuousPanel,
+ factorWizardUI.getContextValue(SimulAction.class), factorWizardUI.isEditingState());
+ } else {
+ Component[] discreteComponents = factorWizardUI.getTabPane().getComponents();
+ saveDiscret(factorWizardUI.getFactorNameField().getText(),
+ factorWizardUI.getComment().getText(), factorWizardUI.getFactorPath(), discreteComponents,
+ factorWizardUI.getContextValue(SimulAction.class), factorWizardUI.isEditingState());
+ }
+
+ // refresh factor list
+ factorWizardUI.getContextValue(SimulationUI.class, "SimulationUI").refreshFactorTree();
+
+ // close window
+ factorWizardUI.dispose();
+ }
+
+ /**
+ * Save a continous factor.
+ *
+ * @param name factor name
+ * @param comment comment
+ * @param path factor path
+ * @param panel panel
+ * @param action action
+ * @param exist exist
+ */
+ protected void saveContinue(String name,
+ String comment, String path, ContinuousPanel panel,
+ SimulAction action, boolean exist) {
+ if (panel instanceof EquationContinuousPanelUI) {
+ try {
+ EquationContinuousPanelUI equationPanel = (EquationContinuousPanelUI) panel;
+ String property = StringUtils.uncapitalize(equationPanel.getBeanProperty()) + "Content";
+ TopiaEntityContextable bean = equationPanel.getBean();
+ TopiaContext topiaContext = bean.getTopiaContext();
+ PropertyUtils.setProperty(bean, property, equationPanel.getEditor().getEditor().getText());
+
+ // Save equation
+ bean.update();
+ topiaContext.commitTransaction();
+
+ List<EquationContinuousDomain> domains = equationPanel.getDomains();
+ for (EquationContinuousDomain domain : domains) {
+ action.addContinuousEquationFactor(name, comment, path, domain, exist);
+ }
+ } catch (Exception ex) {
+ if (log.isErrorEnabled()) {
+ log.error("Can't call method : ", ex);
+ }
+ }
+ } else if (panel instanceof ContinuousDistributionPanel) {
+ ContinuousDistributionPanel defaultPanel = (ContinuousDistributionPanel) panel;
+ ContinuousDomain domain = defaultPanel.generateDomain();
+ action.addContinuousFactor(name, comment, path, domain, exist);
+ }
+ }
+
+ /**
+ * Save a discret factor.
+ *
+ * @param name
+ * @param comment
+ * @param path
+ * @param components
+ * @param action
+ * @param exist
+ */
+ protected void saveDiscret(String name,
+ String comment, String path, Component[] components,
+ SimulAction action, boolean exist) {
+ List<Object> values = new ArrayList<Object>();
+
+ boolean ruleFactor = false;
+ boolean equationFactor = false;
+ for (Component component : components) {
+
+ // get internat component value
+ Object result = null;
+ if (component instanceof JTextComponent) {
+ result = ((JTextComponent) component).getText();
+ } else if (component instanceof MatrixPanelEditor) {
+ result = ((MatrixPanelEditor) component).getMatrix();
+ } else if (component instanceof InputOneEquationUI) {
+ result = ((InputOneEquationUI) component).getEditor().getText();
+ equationFactor = true;
+ } else if (component instanceof RuleChooser) {
+ result = ((RuleChooser)component).getRulesList();
+ ruleFactor = true;
+ } else if (component instanceof StepComponent) {
+ result = new TimeStep(((StepComponent)component).getSelectedValue());
+ } else if (component instanceof MonthComponent) {
+ result = new Month(((MonthComponent)component).getSelectedValue());
+ } else if (component instanceof JComboBox) {
+ // on suppose qu'il y a dedans des TopiaEntity
+ result = ((JComboBox)component).getSelectedItem();
+ }
+
+ values.add(result);
+ }
+
+ if (ruleFactor) {
+ action.addDiscreteRuleFactor(name, comment, path, values, exist);
+ } else if (equationFactor) {
+ action.addDiscreteEquationFactor(name, comment, path, values, exist);
+ } else {
+ action.addDiscreteFactor(name, comment, path, values, exist);
+ }
+ }
+
+ /**
+ * Remove current factor.
+ *
+ * @param factorWizardUI factorWizardUI
+ */
+ public void remove(FactorWizardUI factorWizardUI) {
+ factorWizardUI.getContextValue(SimulAction.class).removeFactor(factorWizardUI.getFactorPath());
+ factorWizardUI.getContextValue(SimulationUI.class, "SimulationUI").refreshFactorTree();
+ factorWizardUI.dispose();
+ }
+}
Property changes on: branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/wizard/SensitivityWizardHandler.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/simulator/ParamsUI.jaxx
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/simulator/ParamsUI.jaxx 2012-03-09 09:54:32 UTC (rev 3652)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/simulator/ParamsUI.jaxx 2012-03-14 14:13:51 UTC (rev 3653)
@@ -29,7 +29,6 @@
<Boolean id='sensitivity' javaBean='false' />
<import>
- java.util.EventObject;
java.text.ParseException;
fr.ifremer.isisfish.datastore.RegionStorage
fr.ifremer.isisfish.datastore.StorageChangeEvent
@@ -42,32 +41,20 @@
fr.ifremer.isisfish.ui.WelcomePanelUI
fr.ifremer.isisfish.ui.WelcomeTabUI
fr.ifremer.isisfish.ui.models.common.StringComboModel
- fr.ifremer.isisfish.ui.models.rule.RuleComboModel
- fr.ifremer.isisfish.ui.models.rule.RuleNamesListRenderer
- fr.ifremer.isisfish.ui.models.rule.RuleListModel
- fr.ifremer.isisfish.ui.sensitivity.FactorWizardUI
fr.ifremer.isisfish.ui.sensitivity.SensitivityUI
fr.ifremer.isisfish.ui.widget.FilterableComboBox
- fr.ifremer.isisfish.rule.Rule
fr.ifremer.isisfish.simulator.launcher.SimulatorLauncher
fr.ifremer.isisfish.simulator.launcher.SimulationService
fr.ifremer.isisfish.simulator.launcher.SimulationJob
fr.ifremer.isisfish.simulator.launcher.SimulationServiceListener
- fr.ifremer.isisfish.simulator.sensitivity.Factor
org.nuiton.topia.TopiaException
org.nuiton.topia.TopiaContext
- org.nuiton.math.matrix.MatrixND
- org.nuiton.math.matrix.gui.MatrixPanelEditor
- org.apache.commons.lang3.ArrayUtils
javax.swing.SwingUtilities
javax.swing.DefaultComboBoxModel
java.awt.CardLayout
java.awt.Dimension
java.io.IOException
- java.awt.BorderLayout
- javax.swing.AbstractAction
javax.swing.DefaultListModel
- javax.swing.JComponent
javax.swing.ComboBoxModel
</import>
<script><![CDATA[
@@ -104,6 +91,10 @@
}
SimulationService.getService().addSimulationServiceListener(simulationListener);
+// la gestion des regles est maintenant independante de SimulAction
+// il faut faire la lié aux parametres de simulations
+simulAction.getSimulationParameter().setRules(ruleChooser.getRulesList());
+
public void refresh() {
if (simulAction.getSimulationStorage() != null) {
fieldSimulParamsName.setText(simulAction.getSimulationStorage().getName());
@@ -151,7 +142,8 @@
protected void setSensitivityTabRegion() {
if (isSensitivity()) {
try {
- // FIXME this transation in never closed
+ // FIXME this transaction in never closed
+ // and can't be closed because used in
TopiaContext tx = simulAction.getRegionStorage().getStorage().beginTransaction();
FisheryRegion fisheryRegion = RegionStorage.getFisheryRegion(tx);
getParentContainer(SensitivityUI.class).getSensitivityTabUI().setFisheryRegion(fisheryRegion);
@@ -218,11 +210,6 @@
*/
protected void launchSimulation() {
- // la gestion des regles est maintenant independante de SimulAction
- // il faut faire le set qui va bien avant le lancement
- simulAction.getSimulationParameter().setRules(ruleChooser.getRulesList());
-
-
if (!isSensitivity()) {
simulAction.launchSimulation(fieldSimulParamsName.getText(), (SimulatorLauncher)comboSelLauncher.getSelectedItem());
}
Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/simulator/RuleChooser.jaxx
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/simulator/RuleChooser.jaxx 2012-03-09 09:54:32 UTC (rev 3652)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/simulator/RuleChooser.jaxx 2012-03-14 14:13:51 UTC (rev 3653)
@@ -39,19 +39,10 @@
java.beans.PropertyChangeEvent
java.beans.PropertyChangeListener
java.util.List
- fr.ifremer.isisfish.IsisFishException
- fr.ifremer.isisfish.IsisFishRuntimeException
- fr.ifremer.isisfish.datastore.RuleStorage
fr.ifremer.isisfish.rule.Rule
fr.ifremer.isisfish.ui.models.rule.RuleListModel
fr.ifremer.isisfish.ui.models.common.ScriptParametersTableModel
- fr.ifremer.isisfish.ui.models.common.ScriptParametersTableCellEditor
- fr.ifremer.isisfish.ui.models.common.ScriptParametersTableCellRenderer
- fr.ifremer.isisfish.ui.models.rule.RuleParametersFactorTableCellRenderer
- fr.ifremer.isisfish.ui.models.rule.RuleParametersFactorTableCellEditor
- fr.ifremer.isisfish.ui.util.ErrorHelper
fr.ifremer.isisfish.ui.SimulationUI
- fr.ifremer.isisfish.datastore.RegionStorage
</import>
<script><![CDATA[
Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/simulator/SimulAction.java
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/simulator/SimulAction.java 2012-03-09 09:54:32 UTC (rev 3652)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/simulator/SimulAction.java 2012-03-14 14:13:51 UTC (rev 3653)
@@ -86,20 +86,21 @@
import fr.ifremer.isisfish.simulator.launcher.SimulationService;
import fr.ifremer.isisfish.simulator.launcher.SimulatorLauncher;
import fr.ifremer.isisfish.simulator.sensitivity.DesignPlan;
+import fr.ifremer.isisfish.simulator.sensitivity.Distribution;
import fr.ifremer.isisfish.simulator.sensitivity.Factor;
import fr.ifremer.isisfish.simulator.sensitivity.FactorGroup;
import fr.ifremer.isisfish.simulator.sensitivity.SensitivityAnalysis;
import fr.ifremer.isisfish.simulator.sensitivity.SensitivityException;
+import fr.ifremer.isisfish.simulator.sensitivity.SensitivityUtils;
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;
-import fr.ifremer.isisfish.ui.sensitivity.FactorWizardUI;
import fr.ifremer.isisfish.ui.sensitivity.SensitivityChooserUI;
-import fr.ifremer.isisfish.ui.sensitivity.SensitivityInputHandler;
+import fr.ifremer.isisfish.ui.sensitivity.wizard.FactorWizardUI;
+import fr.ifremer.isisfish.ui.sensitivity.wizard.SensitivityWizardHandler;
import fr.ifremer.isisfish.ui.util.ErrorHelper;
import fr.ifremer.isisfish.ui.widget.editor.ScriptParameterDialog;
@@ -121,7 +122,11 @@
private static final SimpleDateFormat DATEFORMAT = new SimpleDateFormat("yyyy-MM-dd-HH-mm");
- /** Les parametres de simulation (commun a tous les onglet de l'interface de simulation). */
+ /**
+ * Les parametres de simulation (commun a tous les onglet de l'interface de simulation).
+ * Les parametres doivent toujours être liés avec les selections et état de l'ui.
+ * La mise en facteur des parametres et des regles est basé sur cet objet.
+ */
protected SimulationParameter param = null;
protected RegionStorage regionStorage = null;
@@ -900,16 +905,12 @@
* @param name
* @param comment
* @param path
- * @param min
- * @param max
+ * @param domain
* @param exist
*/
- public void addContinuousFactor(String name, String comment, String path, Double min,
- Double max, boolean exist) {
+ public void addContinuousFactor(String name, String comment, String path,
+ ContinuousDomain domain, boolean exist) {
Factor f = new Factor(name);
- ContinuousDomain domain = new ContinuousDomain();
- domain.setMinBound(min);
- domain.setMaxBound(max);
f.setDomain(domain);
f.setComment(comment);
f.setPath(path);
@@ -919,31 +920,6 @@
addFactor(f);
}
- /**
- * Ajout d'un facteur continue de type pourcentage.
- *
- * @param name
- * @param comment
- * @param path
- * @param referenceValue
- * @param coefficient
- * @param exist
- */
- public void addContinuousPercentageFactor(String name, String comment, String path, Double referenceValue,
- Double coefficient, boolean exist) {
- Factor f = new Factor(name);
- ContinuousDomain domain = new ContinuousDomain(true);
- domain.setReferenceValue(referenceValue);
- domain.setCoefficient(coefficient);
- f.setDomain(domain);
- f.setComment(comment);
- f.setPath(path);
- if (exist) {
- removeFactor(path);
- }
- addFactor(f);
- }
-
public void addDiscreteFactor(String name, String comment, String path,
List<Object> values, boolean exist) {
addDiscreteFactor(new DiscreteDomain(), name, comment, path, values, exist);
@@ -996,36 +972,6 @@
addFactor(f);
}
- public void addContinuousMatrixFactor(String name, String comment, String path,
- MatrixND referenceValue, Double coef, boolean exist) {
- Factor f = new Factor(name);
- MatrixContinuousDomain domain = new MatrixContinuousDomain(true);
- domain.setReferenceValue(referenceValue);
- domain.setCoefficient(coef);
- f.setComment(comment);
- f.setDomain(domain);
- f.setPath(path);
- if (exist) {
- removeFactor(path);
- }
- addFactor(f);
- }
-
- public void addContinuousMatrixFactor(String name, String comment, String path,
- MatrixND minBound, MatrixND maxBound, boolean exist) {
- Factor f = new Factor(name);
- MatrixContinuousDomain domain = new MatrixContinuousDomain();
- domain.setMinBound(minBound);
- domain.setMaxBound(maxBound);
- f.setComment(comment);
- f.setDomain(domain);
- f.setPath(path);
- if (exist) {
- removeFactor(path);
- }
- addFactor(f);
- }
-
/*
************
* General
@@ -1301,7 +1247,7 @@
if (selectedFactor == null) {
selectedFactor = new Factor(_("isisfish.sensitivity.rulesfactorname"));
selectedFactor.setPath(factorPath);
- selectedFactor.setDomain(new RuleDiscreteDomain());
+ //selectedFactor.setDomain(new RuleDiscreteDomain());
}
}
@@ -1313,17 +1259,20 @@
if (selectedFactor == null) {
selectedFactor = new Factor(_("isisfish.sensitivity.populationfactorname", population.getName()));
selectedFactor.setPath(factorPath);
- MatrixContinuousDomain factorDomain = new MatrixContinuousDomain();
- MatrixND populationEffectives = getSimulationParameter().getNumberOf(population);
+ //MatrixND populationEffectives = getSimulationParameter().getNumberOf(population);
+ /*MatrixContinuousDomain factorDomain = new MatrixContinuousDomain();
factorDomain.setReferenceValue(populationEffectives.copy());
factorDomain.setCoefficient(0.0);
- selectedFactor.setDomain(factorDomain);
+ ContinuousDomain domain = new ContinuousDomain(Distribution.QUNIFPC);
+ domain.addDistributionParam(Distribution.QUNIFPC.getDistibutionParams()[0].getName(), populationEffectives.copy());
+ domain.addDistributionParam(Distribution.QUNIFPC.getDistibutionParams()[1].getName(), 0.0d);
+ selectedFactor.setDomain(domain);*/
}
}
if (selectedFactor != null) {
FactorWizardUI wizard = new FactorWizardUI(paramsUI);
- SensitivityInputHandler handler = wizard.getHandler();
+ SensitivityWizardHandler handler = wizard.getHandler();
handler.initExistingFactor(wizard, selectedFactor);
wizard.pack();
wizard.setLocationRelativeTo(paramsUI);
@@ -1342,22 +1291,18 @@
*/
public void addRuleParameterFactor(RuleChooser ruleChooser, Rule rule, String paramName) {
- // get sensitivity handler (this break package rules)
- // but no other choice :(
- SensitivityInputHandler handler = ruleChooser.getContextValue(SensitivityInputHandler.class);
-
// get index of rule in rule list
// warning, factor path must always be cohérent
// with rule list, if a rule is deleted, factor on it must
// be deleted too, et next factor must be renamed
int index = ruleChooser.getRulesList().indexOf(rule);
String factorPath = "parameters.rule." + index + ".parameter." + paramName;
- try {
+ //try {
- // on a besoin de la valeur pour savoir s'il peut être continue
+ /*// on a besoin de la valeur pour savoir s'il peut être continue
Object paramValue = RuleStorage.getParameterValue(rule, paramName);
- if (!handler.canBeContinue(paramValue)) {
+ if (!SensitivityUtils.canBeContinue(paramValue)) {
// dans le cas ou il ne peut pas être continue, on le gere
// differement et on utilise sont type comme
// valeur
@@ -1371,12 +1316,24 @@
factorWizardUI.getFactorNameField().setText(_("isisfish.sensitivity.ruleparameterfactorname",
rule.getClass().getSimpleName(), paramName));
factorWizardUI.setFactorPath(factorPath);
+ SensitivityWizardHandler handler = factorWizardUI.getHandler();
handler.initNewFactorWithValue(factorWizardUI, paramValue);
factorWizardUI.pack();
factorWizardUI.setLocationRelativeTo(ruleChooser);
+ factorWizardUI.setVisible(true);*/
+
+ Factor factor = new Factor(_("isisfish.sensitivity.ruleparameterfactorname",
+ rule.getClass().getSimpleName(), paramName));
+ factor.setPath(factorPath);
+ FactorWizardUI factorWizardUI = new FactorWizardUI(ruleChooser);
+ SensitivityWizardHandler handler = factorWizardUI.getHandler();
+ handler.initExistingFactor(factorWizardUI, factor);
+ factorWizardUI.pack();
+ factorWizardUI.setLocationRelativeTo(ruleChooser);
factorWizardUI.setVisible(true);
- } catch (IsisFishException ex) {
+
+ /*} catch (IsisFishException ex) {
throw new IsisFishRuntimeException("Can't add factor on rule", ex);
- }
+ }*/
}
}
Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/widget/editor/ScriptParameterDialog.jaxx
===================================================================
--- branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/widget/editor/ScriptParameterDialog.jaxx 2012-03-09 09:54:32 UTC (rev 3652)
+++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/widget/editor/ScriptParameterDialog.jaxx 2012-03-14 14:13:51 UTC (rev 3653)
@@ -5,7 +5,7 @@
$Id$
$HeadURL$
%%
- Copyright (C) 2011 Ifremer, Code Lutin, Chatellier Eric
+ Copyright (C) 2011 - 2012 Ifremer, Code Lutin, 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
@@ -84,10 +84,10 @@
</row>
<row>
<cell anchor="east" weightx='1.0'>
- <JButton text="isisfish.common.ok" onActionPerformed="{okAction = true; dispose();}" />
+ <JButton text="isisfish.common.ok" onActionPerformed="okAction = true; dispose();" />
</cell>
<cell anchor="west" weightx='1.0'>
- <JButton text="isisfish.common.cancel" onActionPerformed="{okAction = false; dispose();}" />
+ <JButton text="isisfish.common.cancel" onActionPerformed="okAction = false; dispose();" />
</cell>
</row>
</Table>
Modified: branches/4.0.1/src/main/resources/i18n/isis-fish_en_GB.properties
===================================================================
--- branches/4.0.1/src/main/resources/i18n/isis-fish_en_GB.properties 2012-03-09 09:54:32 UTC (rev 3652)
+++ branches/4.0.1/src/main/resources/i18n/isis-fish_en_GB.properties 2012-03-14 14:13:51 UTC (rev 3653)
@@ -19,8 +19,10 @@
Can't\ read\ ssh\ key\ \:\ %s=
Can't\ simulate\ %s=
Check\ state\ of\ local\ repository\:\ %s=
+Coefficient=
Command\ '%s'\ fail\ to\ execute=
Could\ not\ found\ formule\ type\ %s\ autorised\ type\ are\ %s=
+Dbimom=
Empty\ zones=
Error\ during\ vcs\ initialisation=
Error\ while\ uploading\ public\ key\ to\ remote\ serveur\ authorized_keys=
@@ -34,11 +36,16 @@
Launcher\ %s\ will\ be\ stopped\ because\ there\ are\ too\ many\ error\ (%s)=
Local\ repository\ don't\ exist=
Local\ repository\ exists\ but\ it's\ not\ valide\ for\ current\ vcs\:\ %s=
+Maximum\ value=
+Minimum\ value=
Missing\ name=
No\ port\ cell=
Normal\ stop\ thread,\ this\ is\ not\ an\ error=
Not\ start\ simulation\ %s\ because\ user\ ask\ stop=
Process\ template\ error=
+QUnif\ %=
+QUnif\ Min/Max=
+Reference\ value=
Region\ %s\ allready\ exist\ in\ repository.\ Can't\ import=
Region\ %s\ already\ inited=
Remote\ control\ file\ doesn't\ exists\ %s=
@@ -55,14 +62,25 @@
Use\ branches,\ switch\ not\ needed=
User\ restart\ simulation\ %s=
User\ stop\ simulation\ %s=
+an\ alternative\ way\ to\ specify\ the\ scale.=
could\ not\ close\ reader\ %1$s=could not close reader %1$s
could\ not\ found\ %s=
could\ not\ found\ log\ file\ %1$s=could not found log file %1$s
could\ not\ found\ region\ %s=
could\ not\ found\ simulation\ %s=
could\ not\ read\ at\ offset\ %1$s\ for\ reason\ %2$s=could not read at offset %1$s for reason %2$s
+dcauchy=
+dchisq=
+degrees\ of\ freedom\ (non-negative,\ but\ can\ be\ non-integer)=
+degrees\ of\ freedom.\ 'Inf'\ is\ allowed=
destination\ already\ exists\ %s\ use\ 'force'\ argument\ to\ force\ overwrite=
destination\ already\ exists\ %s\ use\ \\'force\\'\ argument\ to\ force\ overwrite=
+dexp=
+df=
+dgamma=
+dgeom=
+dhyper=
+dlnorm=
filter\ loaded\ in\ %1$s\ ms\ \:\ found\ %2$s\ lines.=filter loaded in %1$s ms \: found %2$s lines.
isisfish.about.abouthtmltext=<html><b>ISIS-Fish (%s)</b><br /><br />Copyright IFREMER-MAERHA 2000-2011.<br /><br /><a href\="http\://www.isis-fish.org">http\://www.isis-fish.org</a><br /><br />Please, report any bug you can found.<html>
isisfish.about.licensetext=You can modify and redistribute the program under the conditions of the GNU General Public License (version 2 or later). A copy of the GPL is in the file "LICENSE.txt" provided with ISIS-Fish. All rights reserved. No guarantees are provided for use of this program.
@@ -695,14 +713,11 @@
isisfish.populationMigration.selectSeason=Select a season
isisfish.populationMigration.title=Migration
isisfish.populationMigration.useEquation=Use equation
-isisfish.populationMigrationEmigration.coefficient=Coefficient
isisfish.populationMigrationEmigration.departureZone=Departure Zone
isisfish.populationMigrationEmigration.title=Population emigration
isisfish.populationMigrationImmigration.arrivalZone=Arrival Zone
-isisfish.populationMigrationImmigration.coefficient=Coefficient
isisfish.populationMigrationImmigration.title=Population immigration
isisfish.populationMigrationMigration.arrivalZone=Arrival zone
-isisfish.populationMigrationMigration.coefficient=Coefficient
isisfish.populationMigrationMigration.departureZone=Departure zone
isisfish.populationMigrationMigration.title=Population migration
isisfish.populationPrice.title=Price
@@ -865,7 +880,6 @@
isisfish.sensitivity.newfactordgroup.tip=Add new discrete factor group
isisfish.sensitivity.newfactorname=Factor group name
isisfish.sensitivity.populationfactorname=Population %s
-isisfish.sensitivity.referencevalue=Reference value
isisfish.sensitivity.ruleparameterfactorname=Param rule %s.%s
isisfish.sensitivity.rulesfactorname=Rule set
isisfish.sensitivity.secondpass=Analyze results
@@ -1095,8 +1109,20 @@
isisfish.zone.cells=Zone cells
isisfish.zone.comments=Comments
isisfish.zone.name=Name
+location\ and\ scale\ parameters.\ (location\ \=\ 0,\ scale\ \=\ 1)=
matrixAbundance=
matrixCatchPerStrategyMetPerZoneMet=
matrixDiscardsPerStrMetPerZonePop=
+mean\ and\ standard\ deviation\ of\ the\ distribution\ on\ the\ log\ scale\ with\ default\ values\ of\ '0'\ and\ '1'\ respectively.=
+non-centrality\ parameter\ (non-negative).=
+non-centrality\ parameter.\ If\ omitted\ the\ central\ F\ is\ assumed=
+number\ of\ trials\ (zero\ or\ more)=
+probability\ of\ success\ in\ each\ trial.\ '0\ <\ prob\ <\=\ 1'=
+probability\ of\ success\ on\ each\ trial=
region\ already\ exists\ %s\ use\ 'force'\ argument\ to\ force\ overwrite=
+shape\ and\ scale\ parameters.\ Must\ be\ positive,\ 'scale'\ strictly=
simulate\ %s\ with\ file\ %s=
+the\ number\ of\ balls\ drawn\ from\ the\ urn.=
+the\ number\ of\ black\ balls\ in\ the\ urn.=
+the\ number\ of\ white\ balls\ in\ the\ urn.=
+vector\ of\ rates=
Modified: branches/4.0.1/src/main/resources/i18n/isis-fish_fr_FR.properties
===================================================================
--- branches/4.0.1/src/main/resources/i18n/isis-fish_fr_FR.properties 2012-03-09 09:54:32 UTC (rev 3652)
+++ branches/4.0.1/src/main/resources/i18n/isis-fish_fr_FR.properties 2012-03-14 14:13:51 UTC (rev 3653)
@@ -19,8 +19,10 @@
Can't\ read\ ssh\ key\ \:\ %s=
Can't\ simulate\ %s=
Check\ state\ of\ local\ repository\:\ %s=
+Coefficient=
Command\ '%s'\ fail\ to\ execute=
Could\ not\ found\ formule\ type\ %s\ autorised\ type\ are\ %s=
+Dbimom=
Empty\ zones=
Error\ during\ vcs\ initialisation=
Error\ while\ uploading\ public\ key\ to\ remote\ serveur\ authorized_keys=
@@ -34,11 +36,16 @@
Launcher\ %s\ will\ be\ stopped\ because\ there\ are\ too\ many\ error\ (%s)=
Local\ repository\ don't\ exist=
Local\ repository\ exists\ but\ it's\ not\ valide\ for\ current\ vcs\:\ %s=
+Maximum\ value=
+Minimum\ value=
Missing\ name=
No\ port\ cell=
Normal\ stop\ thread,\ this\ is\ not\ an\ error=
Not\ start\ simulation\ %s\ because\ user\ ask\ stop=
Process\ template\ error=
+QUnif\ %=
+QUnif\ Min/Max=
+Reference\ value=
Region\ %s\ allready\ exist\ in\ repository.\ Can't\ import=
Region\ %s\ already\ inited=La région %s a déjà été initialisée
Remote\ control\ file\ doesn't\ exists\ %s=
@@ -55,14 +62,25 @@
Use\ branches,\ switch\ not\ needed=
User\ restart\ simulation\ %s=
User\ stop\ simulation\ %s=
+an\ alternative\ way\ to\ specify\ the\ scale.=
could\ not\ close\ reader\ %1$s=could not close reader %1$s
could\ not\ found\ %s=
could\ not\ found\ log\ file\ %1$s=could not found log file %1$s
could\ not\ found\ region\ %s=
could\ not\ found\ simulation\ %s=
could\ not\ read\ at\ offset\ %1$s\ for\ reason\ %2$s=could not read at offset %1$s for reason %2$s
+dcauchy=
+dchisq=
+degrees\ of\ freedom\ (non-negative,\ but\ can\ be\ non-integer)=
+degrees\ of\ freedom.\ 'Inf'\ is\ allowed=
destination\ already\ exists\ %s\ use\ 'force'\ argument\ to\ force\ overwrite=
destination\ already\ exists\ %s\ use\ \\'force\\'\ argument\ to\ force\ overwrite=
+dexp=
+df=
+dgamma=
+dgeom=
+dhyper=
+dlnorm=
filter\ loaded\ in\ %1$s\ ms\ \:\ found\ %2$s\ lines.=filter loaded in %1$s ms \: found %2$s lines.
isisfish.about.abouthtmltext=<html><b>ISIS-Fish (%s)</b><br /><br />Copyright IFREMER-MAERHA 2000-2011.<br /><br /><a href\="http\://www.isis-fish.org">http\://www.isis-fish.org</a><br /><br />Merci de rapporter les bugs.<html>
isisfish.about.licensetext=Vous pouvez modifier et redistribuer ce programme sous les conditions énoncées par la licence GNU GPL (version 2 ou ultérieure). Une copie de la licence GPL est dans le fichier « LICENSE.txt » fourni avec ISIS-Fish. Tous droits réservés. Aucune garantie n'est fournie pour l'utilisation de ce programme.
@@ -695,14 +713,11 @@
isisfish.populationMigration.selectSeason=Sélectionnez une saison
isisfish.populationMigration.title=Migration
isisfish.populationMigration.useEquation=Utiliser l'équation
-isisfish.populationMigrationEmigration.coefficient=Coefficient
isisfish.populationMigrationEmigration.departureZone=Zone de départ
isisfish.populationMigrationEmigration.title=Emmigration
isisfish.populationMigrationImmigration.arrivalZone=Zone d'arrivée
-isisfish.populationMigrationImmigration.coefficient=Coefficient
isisfish.populationMigrationImmigration.title=Immigration
isisfish.populationMigrationMigration.arrivalZone=Zone d'arrivée
-isisfish.populationMigrationMigration.coefficient=Coefficient
isisfish.populationMigrationMigration.departureZone=Zone de départ
isisfish.populationMigrationMigration.title=Migration de population
isisfish.populationPrice.title=Prix
@@ -1095,8 +1110,20 @@
isisfish.zone.cells=Cellules de la zone
isisfish.zone.comments=Commentaires
isisfish.zone.name=Nom
+location\ and\ scale\ parameters.\ (location\ \=\ 0,\ scale\ \=\ 1)=
matrixAbundance=
matrixCatchPerStrategyMetPerZoneMet=
matrixDiscardsPerStrMetPerZonePop=
+mean\ and\ standard\ deviation\ of\ the\ distribution\ on\ the\ log\ scale\ with\ default\ values\ of\ '0'\ and\ '1'\ respectively.=
+non-centrality\ parameter\ (non-negative).=
+non-centrality\ parameter.\ If\ omitted\ the\ central\ F\ is\ assumed=
+number\ of\ trials\ (zero\ or\ more)=
+probability\ of\ success\ in\ each\ trial.\ '0\ <\ prob\ <\=\ 1'=
+probability\ of\ success\ on\ each\ trial=
region\ already\ exists\ %s\ use\ 'force'\ argument\ to\ force\ overwrite=
+shape\ and\ scale\ parameters.\ Must\ be\ positive,\ 'scale'\ strictly=
simulate\ %s\ with\ file\ %s=
+the\ number\ of\ balls\ drawn\ from\ the\ urn.=
+the\ number\ of\ black\ balls\ in\ the\ urn.=
+the\ number\ of\ white\ balls\ in\ the\ urn.=
+vector\ of\ rates=
Modified: branches/4.0.1/src/test/java/fr/ifremer/isisfish/mexico/MexicoHelperTest.java
===================================================================
--- branches/4.0.1/src/test/java/fr/ifremer/isisfish/mexico/MexicoHelperTest.java 2012-03-09 09:54:32 UTC (rev 3652)
+++ branches/4.0.1/src/test/java/fr/ifremer/isisfish/mexico/MexicoHelperTest.java 2012-03-14 14:13:51 UTC (rev 3653)
@@ -27,12 +27,19 @@
import java.io.File;
import java.io.IOException;
+import java.io.StringReader;
+import java.net.URL;
import java.util.Arrays;
import java.util.List;
import java.util.Properties;
import java.util.SortedMap;
import java.util.TreeMap;
+import javax.xml.transform.stream.StreamSource;
+import javax.xml.validation.Schema;
+import javax.xml.validation.SchemaFactory;
+import javax.xml.validation.Validator;
+
import org.apache.commons.io.FileUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -59,13 +66,13 @@
import fr.ifremer.isisfish.rule.Rule;
import fr.ifremer.isisfish.rule.RuleHelper;
import fr.ifremer.isisfish.simulator.sensitivity.DesignPlan;
+import fr.ifremer.isisfish.simulator.sensitivity.Distribution;
import fr.ifremer.isisfish.simulator.sensitivity.Factor;
import fr.ifremer.isisfish.simulator.sensitivity.FactorGroup;
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.types.TimeStep;
@@ -127,9 +134,9 @@
// factor 1
Factor factorContinuous = new Factor("factor 1 (double continuous)");
- ContinuousDomain domain1 = new ContinuousDomain();
- domain1.setMinBound(0.0);
- domain1.setMaxBound(50.0);
+ ContinuousDomain domain1 = new ContinuousDomain(Distribution.QUNIFMM);
+ domain1.addDistributionParam("min", 0.0);
+ domain1.addDistributionParam("max", 0.0);
factorContinuous.setDomain(domain1);
factorContinuous.setPath("fr.ifremer.isisfish.entities.PopulationGroup#1156461521013#0.1715620681984218#maxLength");
@@ -156,28 +163,25 @@
// factor 4
Factor factorMatrixContinuous = new Factor("factor 4 (MatrixContinuous)");
- MatrixContinuousDomain domain4 = new MatrixContinuousDomain();
- domain4.setCoefficient(0.799);
- domain4.setReferenceValue(matrix1);
- domain4.setPercentageType(true);
+ ContinuousDomain domain4 = new ContinuousDomain(Distribution.QUNIFPC);
+ domain4.addDistributionParam("reference", matrix1);
+ domain4.addDistributionParam("coefficient", 0.799);
factorMatrixContinuous.setDomain(domain4);
factorMatrixContinuous.setPath("fr.ifremer.isisfish.entities.PopulationGroup#1156461521076#0.6526656643346673#minLength");
// factor 5
Factor factorEquationContinuous = new Factor("factor 5 (EquationContinuous)");
- EquationContinuousDomain domain5 = new EquationContinuousDomain();
- domain5.setCoefficient(0.1);
- domain5.setReferenceValue(45.0);
- domain5.setVariableName("L1");
- domain5.setPercentageType(true);
+ EquationContinuousDomain domain5 = new EquationContinuousDomain(Distribution.QUNIFPC);
+ domain5.addDistributionParam("reference", 0.1);
+ domain5.addDistributionParam("coefficient", 45.0);
factorEquationContinuous.setDomain(domain5);
factorEquationContinuous.setPath("fr.ifremer.isisfish.entities.PopulationGroup#1156461521076#0.6526656643346673#maxLength");
// factor 1
Factor factorContinuousPercentage = new Factor("factor 6 (double continuous percentage)");
- ContinuousDomain domain6 = new ContinuousDomain(true);
- domain6.setCoefficient(5.0);
- domain6.setReferenceValue(14.0);
+ ContinuousDomain domain6 = new ContinuousDomain(Distribution.QUNIFPC);
+ domain6.addDistributionParam("reference", 14.0);
+ domain6.addDistributionParam("coefficient", 5.0);
factorContinuousPercentage.setCardinality(5);
factorContinuousPercentage.setDomain(domain6);
factorContinuousPercentage.setPath("fr.ifremer.isisfish.entities.PopulationGroup#1142003453434#0.223499349929004#size");
@@ -294,9 +298,9 @@
// assert on continuous factor (percentage, non percentage) (3.4.0.0)
ContinuousDomain domain1 = (ContinuousDomain)factors.get(0).getDomain();
- Assert.assertNull(domain1.getCoefficient());
+ Assert.assertNull(domain1.getDistributionParameters().get("coefficient"));
ContinuousDomain domain6 = (ContinuousDomain)factors.get(5).getDomain();
- Assert.assertNotNull(domain6.getCoefficient());
+ Assert.assertNotNull(domain6.getDistributionParameters().get("coefficient"));
}
/**
@@ -437,25 +441,25 @@
// factor x1
Factor factorContinuous = new Factor("factor x1");
- ContinuousDomain domain1 = new ContinuousDomain(true);
- domain1.setReferenceValue(42.0);
- domain1.setCoefficient(0.05);
+ ContinuousDomain domain1 = new ContinuousDomain(Distribution.QUNIFPC);
+ domain1.addDistributionParam("reference", 42.0);
+ domain1.addDistributionParam("coefficient", 0.05);
factorContinuous.setDomain(domain1);
factorContinuous.setPath("fr.ifremer.isisfish.entities.PopulationGroup#1156461521013#0.1715620681984218#maxLength");
// factor x4
Factor factorMatrixContinuous = new Factor("factor x4");
- MatrixContinuousDomain domain4 = new MatrixContinuousDomain();
- domain4.setMinBound(matrix1);
- domain4.setMaxBound(matrix1);
+ ContinuousDomain domain4 = new ContinuousDomain(Distribution.QUNIFMM);
+ domain4.addDistributionParam("min", matrix1);
+ domain4.addDistributionParam("min", matrix1);
factorMatrixContinuous.setDomain(domain4);
factorMatrixContinuous.setPath("fr.ifremer.isisfish.entities.PopulationGroup#1156461521076#0.6526656643346673#minLength");
// factor x5
Factor factorEquationContinuous = new Factor("factor x5");
- EquationContinuousDomain domain5 = new EquationContinuousDomain();
- domain5.setMinBound(40.0);
- domain5.setMaxBound(50.0);
+ EquationContinuousDomain domain5 = new EquationContinuousDomain(Distribution.QUNIFMM);
+ domain5.addDistributionParam("min", 40.0);
+ domain5.addDistributionParam("max", 50.0);
domain5.setVariableName("Lx1");
factorEquationContinuous.setDomain(domain5);
factorEquationContinuous.setPath("fr.ifremer.isisfish.entities.PopulationGroup#1156461521076#0.6526656643346673#maxLength");
@@ -580,4 +584,25 @@
context.closeContext();
}
+
+ /**
+ * Test que le xml généré est valide avec la xsd mexico (exp design).
+ *
+ * @throws Exception
+ */
+ @Test
+ public void validOutputXml() throws Exception {
+
+ DesignPlan testDesignPlan = getTestDesignPlan(false);
+ String xml1 = MexicoHelper.getDesignPlanAsXML(testDesignPlan);
+
+ URL schemaUrl = MexicoHelperTest.class.getResource("/mexico/expDesign.xsd");
+
+ String schemaLang = "http://www.w3.org/2001/XMLSchema";
+ SchemaFactory factory = SchemaFactory.newInstance(schemaLang);
+ Schema schema = factory.newSchema(schemaUrl);
+ Validator validator = schema.newValidator();
+ // at last perform validation:
+ validator.validate(new StreamSource(new StringReader(xml1)));
+ }
}
Modified: branches/4.0.1/src/test/java/fr/ifremer/isisfish/mexico/export/RegionExplorerTest.java
===================================================================
--- branches/4.0.1/src/test/java/fr/ifremer/isisfish/mexico/export/RegionExplorerTest.java 2012-03-09 09:54:32 UTC (rev 3652)
+++ branches/4.0.1/src/test/java/fr/ifremer/isisfish/mexico/export/RegionExplorerTest.java 2012-03-14 14:13:51 UTC (rev 3653)
@@ -5,7 +5,7 @@
* $Id$
* $HeadURL$
* %%
- * Copyright (C) 2006 - 2010 Ifremer, Code Lutin, Chatellier Eric
+ * Copyright (C) 2006 - 2012 Ifremer, Code Lutin, 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
@@ -40,7 +40,7 @@
import fr.ifremer.isisfish.datastore.RegionStorage;
import fr.ifremer.isisfish.datastore.StorageException;
import fr.ifremer.isisfish.entities.FisheryRegion;
-import fr.ifremer.isisfish.ui.sensitivity.SensitivityUtils;
+import fr.ifremer.isisfish.simulator.sensitivity.SensitivityUtils;
/**
* Test class for {@link RegionExplorer}.
@@ -125,7 +125,7 @@
explorer.explore(fisheryRegion, xmlFactorExport);
String xmlExport = FileUtils.readFileToString(file);
- // test that all sensitity properties appear in xml content
+ // test that all sensitivity properties appear in xml content
// entity part and property part must appear in factors names
for (String property : SensitivityUtils.getProperties().stringPropertyNames()) {
String entityPart = property.substring(0, property.indexOf('.'));
Modified: branches/4.0.1/src/test/java/fr/ifremer/isisfish/simulator/launcher/SimulationServiceTest.java
===================================================================
--- branches/4.0.1/src/test/java/fr/ifremer/isisfish/simulator/launcher/SimulationServiceTest.java 2012-03-09 09:54:32 UTC (rev 3652)
+++ branches/4.0.1/src/test/java/fr/ifremer/isisfish/simulator/launcher/SimulationServiceTest.java 2012-03-14 14:13:51 UTC (rev 3653)
@@ -59,6 +59,7 @@
import fr.ifremer.isisfish.simulator.SimulationParameter;
import fr.ifremer.isisfish.simulator.SimulationParameterImpl;
import fr.ifremer.isisfish.simulator.sensitivity.DesignPlan;
+import fr.ifremer.isisfish.simulator.sensitivity.Distribution;
import fr.ifremer.isisfish.simulator.sensitivity.Factor;
import fr.ifremer.isisfish.simulator.sensitivity.FactorGroup;
import fr.ifremer.isisfish.simulator.sensitivity.Scenario;
@@ -68,7 +69,6 @@
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;
/**
@@ -101,9 +101,9 @@
// factor 1
Factor factor1 = new Factor("factor 1 (double)");
- ContinuousDomain domain1 = new ContinuousDomain();
- domain1.setMinBound(0.0);
- domain1.setMaxBound(50.0);
+ ContinuousDomain domain1 = new ContinuousDomain(Distribution.QUNIFMM);
+ domain1.addDistributionParam("min", 0.0);
+ domain1.addDistributionParam("max", 50.0);
factor1.setCardinality(4);
factor1.setDomain(domain1);
factor1.setPath("fr.ifremer.isisfish.entities.PopulationGroup#1156461521013#0.1715620681984218#maxLength");
@@ -121,9 +121,9 @@
// factor 3
Factor factor3 = new Factor("factor 3 (double)");
- ContinuousDomain domain3 = new ContinuousDomain();
- domain3.setMinBound(12.0);
- domain3.setMaxBound(99.0);
+ ContinuousDomain domain3 = new ContinuousDomain(Distribution.QUNIFMM);
+ domain3.addDistributionParam("min", 12.0);
+ domain3.addDistributionParam("max", 99.0);
factor3.setCardinality(4);
factor3.setDomain(domain3);
factor3.setPath("fr.ifremer.isisfish.entities.PopulationGroup#1156461521076#0.6526656643346673#minLength");
@@ -238,9 +238,9 @@
// factor
Factor factor = new Factor("test");
- ContinuousDomain domain = new ContinuousDomain();
- domain.setMinBound(0.0);
- domain.setMaxBound(50.0);
+ ContinuousDomain domain = new ContinuousDomain(Distribution.QUNIFMM);
+ domain.addDistributionParam("min", 0.0);
+ domain.addDistributionParam("max", 50.0);
factor.setDomain(domain);
factor.setPath("fr.ifremer.entities.Cell#1234567890#length");
factor.setValueForIdentifier(0.5);
@@ -332,11 +332,10 @@
// factor
Factor factorEquation = new Factor("test.equation.name.K1");
- EquationContinuousDomain domain1 = new EquationContinuousDomain();
- domain1.setReferenceValue(10.0);
- domain1.setCoefficient(0.1);
+ EquationContinuousDomain domain1 = new EquationContinuousDomain(Distribution.QUNIFPC);
+ domain1.addDistributionParam("reference", 10.0);
+ domain1.addDistributionParam("coefficient", 0.1);
domain1.setVariableName("K1");
- domain1.setPercentageType(true);
factorEquation.setDomain(domain1);
factorEquation.setPath("fr.ifremer.equation1#testFactorPreScriptEquation");
factorEquation.setValueForIdentifier(0.4);
@@ -375,7 +374,7 @@
// factor pop
Factor factorPop = new Factor("myPopulationParams");
- factorPop.setDomain(new MatrixContinuousDomain());
+ factorPop.setDomain(new ContinuousDomain());
factorPop.setPath("parameters.population.xxx.number");
MatrixND mat = MatrixFactory.getInstance().create(new int[]{2, 3});
MatrixHelper.convertToId(mat);
@@ -430,7 +429,7 @@
// factor pop
Factor factorPop = new Factor("parameters of rule TACpoids");
- factorPop.setDomain(new MatrixContinuousDomain());
+ factorPop.setDomain(new ContinuousDomain());
factorPop.setPath("parameters.rule.0.parameter.tacInTons");
factorPop.setValue(42.0);
@@ -462,18 +461,18 @@
// factor 1
Factor factor1 = new Factor("factor 1 (double)");
- ContinuousDomain domain1 = new ContinuousDomain();
- domain1.setMinBound(0.0);
- domain1.setMaxBound(50.0);
+ ContinuousDomain domain1 = new ContinuousDomain(Distribution.QUNIFMM);
+ domain1.addDistributionParam("min", 0.0);
+ domain1.addDistributionParam("max", 50.0);
factor1.setCardinality(4);
factor1.setDomain(domain1);
factor1.setPath("fr.ifremer.isisfish.entities.PopulationGroup#1156461521013#0.1715620681984218#maxLength");
// factor 2
Factor factor2 = new Factor("factor 2 (double)");
- ContinuousDomain domain2 = new ContinuousDomain();
- domain2.setMinBound(1.0);
- domain2.setMaxBound(9.0);
+ ContinuousDomain domain2 = new ContinuousDomain(Distribution.QUNIFMM);
+ domain2.addDistributionParam("min", 1.0);
+ domain2.addDistributionParam("max", 9.0);
factor2.setCardinality(3);
factor2.setDomain(domain2);
factor2.setPath("fr.ifremer.isisfish.entities.PopulationGroup#1156461521064#0.022976136053553198#minLength");
Modified: branches/4.0.1/src/test/java/fr/ifremer/isisfish/simulator/sensitivity/FactorTest.java
===================================================================
--- branches/4.0.1/src/test/java/fr/ifremer/isisfish/simulator/sensitivity/FactorTest.java 2012-03-09 09:54:32 UTC (rev 3652)
+++ branches/4.0.1/src/test/java/fr/ifremer/isisfish/simulator/sensitivity/FactorTest.java 2012-03-14 14:13:51 UTC (rev 3653)
@@ -5,7 +5,7 @@
* $Id$
* $HeadURL$
* %%
- * Copyright (C) 2009 - 2010 Ifremer, Code Lutin
+ * Copyright (C) 2009 - 2012 Ifremer, Code Lutin, 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
@@ -40,7 +40,6 @@
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.MatrixContinuousDomain;
import fr.ifremer.isisfish.simulator.sensitivity.domain.RuleDiscreteDomain;
/**
@@ -63,9 +62,9 @@
public void testIntFactor() {
Factor factor = new Factor("testint");
- ContinuousDomain domain = new ContinuousDomain();
- domain.setMinBound(0.0);
- domain.setMaxBound(50.0);
+ ContinuousDomain domain = new ContinuousDomain(Distribution.QUNIFMM);
+ domain.addDistributionParam("min", 0.0);
+ domain.addDistributionParam("max", 50.0);
factor.setDomain(domain);
factor.setPath("org.nuiton.factor#1234567890#0.12242345354#name");
factor.setValueForIdentifier(0.5);
@@ -170,9 +169,9 @@
// factor
Factor factor = new Factor("testmatrix");
- MatrixContinuousDomain domain = new MatrixContinuousDomain(true);
- domain.setReferenceValue(matrix1);
- domain.setCoefficient(0.1);
+ ContinuousDomain domain = new ContinuousDomain(Distribution.QUNIFPC);
+ domain.addDistributionParam("reference", matrix1);
+ domain.addDistributionParam("coefficient", 0.1);
factor.setDomain(domain);
factor.setPath("org.nuiton.math.matrix.MatrixND#563456293453#2.456347646#dim");
factor.setValueForIdentifier(0.1);
@@ -193,9 +192,9 @@
// factor 2
Factor factor2 = new Factor("testmatrix");
- MatrixContinuousDomain domain2 = new MatrixContinuousDomain(true);
- domain2.setReferenceValue(matrix2);
- domain2.setCoefficient(0.1);
+ ContinuousDomain domain2 = new ContinuousDomain(Distribution.QUNIFPC);
+ domain2.addDistributionParam("reference", matrix2);
+ domain2.addDistributionParam("coefficient", 0.1);
factor2.setDomain(domain2);
factor2.setPath("org.nuiton.math.matrix.MatrixND#563456293453#2.456347646#dim");
factor2.setValueForIdentifier(0.2);
@@ -217,9 +216,9 @@
// factor 3
Factor factor3 = new Factor("testmatrix");
- MatrixContinuousDomain domain3 = new MatrixContinuousDomain(true);
- domain3.setReferenceValue(matrix3);
- domain3.setCoefficient(0.2);
+ ContinuousDomain domain3 = new ContinuousDomain(Distribution.QUNIFPC);
+ domain3.addDistributionParam("reference", matrix3);
+ domain3.addDistributionParam("coefficient", 0.2);
factor3.setDomain(domain3);
factor3.setPath("org.nuiton.math.matrix.MatrixND#563456293453#2.456347646#dim");
factor3.setValueForIdentifier(0.1);
@@ -241,9 +240,9 @@
// factor 3
Factor factor4 = new Factor("testmatrix");
- MatrixContinuousDomain domain4 = new MatrixContinuousDomain(true);
- domain4.setReferenceValue(matrix4);
- domain4.setCoefficient(0.3);
+ ContinuousDomain domain4 = new ContinuousDomain(Distribution.QUNIFPC);
+ domain4.addDistributionParam("reference", matrix4);
+ domain4.addDistributionParam("coefficient", 0.3);
factor4.setDomain(domain4);
factor4.setPath("org.nuiton.math.matrix.MatrixND#563456293453#2.456347646#dim");
factor4.setValueForIdentifier(0.4);
@@ -268,59 +267,59 @@
// factor
Factor factor = new Factor("testequation");
- EquationContinuousDomain domain = new EquationContinuousDomain(true);
- domain.setCoefficient(0.1);
+ EquationContinuousDomain domain = new EquationContinuousDomain(Distribution.QUNIFPC);
+ domain.addDistributionParam("reference", 3.0);
+ domain.addDistributionParam("coefficient", 0.1);
domain.setVariableName("Linf");
- domain.setReferenceValue(3.0);
factor.setDomain(domain);
factor.setPath("org.nuiton.math.matrix.MatrixND#563456293453#2.456347646#dim");
factor.setValueForIdentifier(0.1);
Assert.assertEquals(2.76, (Double)factor.getValue(),0.0000001);
- Assert.assertEquals(2.7,(Double)((ContinuousDomain)factor.getDomain()).getMinBound(),0);
- Assert.assertEquals(3.3,(Double)((ContinuousDomain)factor.getDomain()).getMaxBound(),0);
+ //Assert.assertEquals(2.7,(Double)((ContinuousDomain)factor.getDomain()).getMinBound(),0);
+ //Assert.assertEquals(3.3,(Double)((ContinuousDomain)factor.getDomain()).getMaxBound(),0);
// factor 2
Factor factor2 = new Factor("testequation");
- EquationContinuousDomain domain2 = new EquationContinuousDomain(true);
- domain2.setCoefficient(0.1);
+ EquationContinuousDomain domain2 = new EquationContinuousDomain(Distribution.QUNIFPC);
+ domain2.addDistributionParam("reference", 3.0);
+ domain2.addDistributionParam("coefficient", 0.1);
domain2.setVariableName("Linf");
- domain2.setReferenceValue(3.0);
factor2.setDomain(domain2);
factor2.setPath("org.nuiton.math.matrix.MatrixND#563456293453#2.456347646#dim");
factor2.setValueForIdentifier(0.1);
Assert.assertEquals(2.76, (Double)factor2.getValue(),0.0000001);
- Assert.assertEquals(2.7,(Double)((ContinuousDomain)factor.getDomain()).getMinBound(),0);
- Assert.assertEquals(3.3,(Double)((ContinuousDomain)factor.getDomain()).getMaxBound(),0);
+ //Assert.assertEquals(2.7,(Double)((ContinuousDomain)factor.getDomain()).getMinBound(),0);
+ //Assert.assertEquals(3.3,(Double)((ContinuousDomain)factor.getDomain()).getMaxBound(),0);
// factor 3
Factor factor3 = new Factor("testequation");
- EquationContinuousDomain domain3 = new EquationContinuousDomain(true);
- domain3.setCoefficient(0.1);
+ EquationContinuousDomain domain3 = new EquationContinuousDomain(Distribution.QUNIFPC);
+ domain3.addDistributionParam("reference", 3.0);
+ domain3.addDistributionParam("coefficient", 0.1);
domain3.setVariableName("Linf");
- domain3.setReferenceValue(3.0);
factor3.setDomain(domain3);
factor3.setPath("org.nuiton.math.matrix.MatrixND#563456293453#2.456347646#dim");
factor3.setValueForIdentifier(0.2);
Assert.assertEquals(2.82, (Double)factor3.getValue(),0.0000001);
- Assert.assertEquals(2.7,(Double)((ContinuousDomain)factor.getDomain()).getMinBound(),0);
- Assert.assertEquals(3.3,(Double)((ContinuousDomain)factor.getDomain()).getMaxBound(),0);
+ //Assert.assertEquals(2.7,(Double)((ContinuousDomain)factor.getDomain()).getMinBound(),0);
+ //Assert.assertEquals(3.3,(Double)((ContinuousDomain)factor.getDomain()).getMaxBound(),0);
// factor 4
Factor factor4 = new Factor("testequation");
- EquationContinuousDomain domain4 = new EquationContinuousDomain(true);
- domain4.setCoefficient(0.05);
+ EquationContinuousDomain domain4 = new EquationContinuousDomain(Distribution.QUNIFPC);
+ domain4.addDistributionParam("reference", 3.0);
+ domain4.addDistributionParam("coefficient", 0.05);
domain4.setVariableName("Linf");
- domain4.setReferenceValue(3.0);
factor4.setDomain(domain4);
factor4.setPath("org.nuiton.math.matrix.MatrixND#563456293453#2.456347646#dim");
factor4.setValueForIdentifier(0.1);
Assert.assertEquals(2.88, (Double)factor4.getValue(),0.0000001);
- Assert.assertEquals(2.7,(Double)((ContinuousDomain)factor.getDomain()).getMinBound(),0);
- Assert.assertEquals(3.3,(Double)((ContinuousDomain)factor.getDomain()).getMaxBound(),0);
+ //Assert.assertEquals(2.7,(Double)((ContinuousDomain)factor.getDomain()).getMinBound(),0);
+ //Assert.assertEquals(3.3,(Double)((ContinuousDomain)factor.getDomain()).getMaxBound(),0);
if (log.isInfoEnabled()) {
log.info("factor#toString() = " + factor);
@@ -370,9 +369,9 @@
factor.setPath("fr.ifremer.isisfish.entities.Cell#lenght");
factor.setComment("answer to life");
- ContinuousDomain domain = new ContinuousDomain();
- domain.setMinBound(0.0);
- domain.setMaxBound(50.0);
+ ContinuousDomain domain = new ContinuousDomain(Distribution.QUNIFMM);
+ domain.addDistributionParam("min", 0.0);
+ domain.addDistributionParam("max", 50.0);
factor.setDomain(domain);
factor.setCardinality(2);
Modified: branches/4.0.1/src/test/java/fr/ifremer/isisfish/simulator/sensitivity/SensitivityAnalysisRandomMock.java
===================================================================
--- branches/4.0.1/src/test/java/fr/ifremer/isisfish/simulator/sensitivity/SensitivityAnalysisRandomMock.java 2012-03-09 09:54:32 UTC (rev 3652)
+++ branches/4.0.1/src/test/java/fr/ifremer/isisfish/simulator/sensitivity/SensitivityAnalysisRandomMock.java 2012-03-14 14:13:51 UTC (rev 3653)
@@ -35,8 +35,6 @@
import fr.ifremer.isisfish.simulator.launcher.SimulationServiceTest;
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.MatrixContinuousDomain;
/**
* Implementation of SensitivityAnalysis that take random value in available
@@ -100,28 +98,10 @@
Factor factor = factors.get(pickedFactor);
Domain domain = factor.getDomain();
- if (domain instanceof MatrixContinuousDomain) {
- MatrixContinuousDomain cDomain = (MatrixContinuousDomain) domain;
- Object minValue = cDomain.getMinBound();
- Object maxValue = cDomain.getMaxBound();
-
- factor.setValueForIdentifier(minValue.toString());
- scenario.addFactor(factor);
- factor.setValueForIdentifier(maxValue.toString());
- scenario.addFactor(factor);
- } else if (domain instanceof EquationContinuousDomain) {
- EquationContinuousDomain cDomain = (EquationContinuousDomain) domain;
- Object minValue = cDomain.getMinBound();
- Object maxValue = cDomain.getMaxBound();
-
- factor.setValueForIdentifier(minValue.toString());
- scenario.addFactor(factor);
- factor.setValueForIdentifier(maxValue.toString());
- scenario.addFactor(factor);
- } else if (domain instanceof ContinuousDomain) {
+ if (domain instanceof ContinuousDomain) {
ContinuousDomain cDomain = (ContinuousDomain) domain;
- Object minValue = cDomain.getMinBound();
- Object maxValue = cDomain.getMaxBound();
+ Object minValue = 10.5; //cDomain.getMinBound();
+ Object maxValue = 15.5; //cDomain.getMaxBound();
factor.setValueForIdentifier(minValue);
scenario.addFactor(factor);
Modified: branches/4.0.1/src/test/java/fr/ifremer/isisfish/simulator/sensitivity/SensitivityUtilsTest.java
===================================================================
--- branches/4.0.1/src/test/java/fr/ifremer/isisfish/simulator/sensitivity/SensitivityUtilsTest.java 2012-03-09 09:54:32 UTC (rev 3652)
+++ branches/4.0.1/src/test/java/fr/ifremer/isisfish/simulator/sensitivity/SensitivityUtilsTest.java 2012-03-14 14:13:51 UTC (rev 3653)
@@ -23,9 +23,25 @@
package fr.ifremer.isisfish.simulator.sensitivity;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.Properties;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
import org.junit.Assert;
import org.junit.Test;
+import org.nuiton.topia.TopiaContext;
+import org.nuiton.topia.TopiaContextFactory;
+import org.nuiton.topia.TopiaException;
+import org.nuiton.topia.TopiaNotFoundException;
+import org.nuiton.topia.persistence.TopiaDAO;
+import org.nuiton.topia.persistence.TopiaEntity;
+import fr.ifremer.isisfish.IsisFishDAOHelper;
+import fr.ifremer.isisfish.datastore.IsisH2Config;
+
/**
* Test for SensitivityUtils class.
*
@@ -37,6 +53,9 @@
*/
public class SensitivityUtilsTest {
+ /** Logger for this class */
+ private static final Log log = LogFactory.getLog(SensitivityUtilsTest.class);
+
/**
* Test le résultat attendu de l'echappement des noms de facteurs.
*/
@@ -45,4 +64,61 @@
Assert.assertEquals("test_factor_pour_R", SensitivityUtils.espaceFactorName("test factor pour R"));
Assert.assertEquals("factor2_selectivite", SensitivityUtils.espaceFactorName("factor2.sélectivité"));
}
+
+ /**
+ * Return a basic valid topia context.
+ *
+ * @throws TopiaNotFoundException
+ */
+ protected TopiaContext getTopiaContext() throws TopiaNotFoundException {
+ Properties config = new Properties();
+ IsisH2Config.addMemDatabaseConfig(config, "test");
+ IsisH2Config.addHibernateMapping(config);
+ TopiaContext context = TopiaContextFactory.getContext(config);
+ return context;
+ }
+
+ /**
+ * Test (par introspection) que tous les facteurs existent.
+ *
+ * @throws ClassNotFoundException
+ * @throws IllegalAccessException
+ * @throws InstantiationException
+ * @throws NoSuchMethodException
+ * @throws SecurityException
+ * @throws InvocationTargetException
+ * @throws IllegalArgumentException
+ * @throws TopiaException
+ */
+ @Test
+ public void testFactorExistence() throws InstantiationException, IllegalAccessException,
+ ClassNotFoundException, SecurityException, NoSuchMethodException, IllegalArgumentException,
+ InvocationTargetException, TopiaException {
+ Properties factors = SensitivityUtils.getProperties();
+
+ TopiaContext testTC = getTopiaContext();
+ TopiaContext context = testTC.beginTransaction();
+ for (String factorName : factors.stringPropertyNames()) {
+ String className = factorName.substring(0, factorName.indexOf("."));
+ String propertyName = StringUtils.capitalize(factorName.substring(factorName.indexOf(".") + 1));
+
+ // Simple method
+ // TopiaEntity entity = (TopiaEntity)Class.forName("fr.ifremer.isisfish.entities." + className + "Impl").newInstance();
+
+ // Harder method
+ // but topia context is needed by some getXXX() methods
+ Method mStatic = IsisFishDAOHelper.class.getMethod("get" + className + "DAO", TopiaContext.class);
+ TopiaDAO<TopiaEntity> dao = (TopiaDAO<TopiaEntity>) mStatic.invoke(null, new Object[] { context });
+ Assert.assertNotNull("No DOA found for factor " + factorName, dao);
+ TopiaEntity entity = dao.create();
+
+ // call proper property
+ if (log.isDebugEnabled()) {
+ log.debug(" and call get" + propertyName + "() on " + className);
+ }
+ Method m = entity.getClass().getMethod("get" + propertyName);
+ m.invoke(entity, (Object[]) null);
+ }
+ context.closeContext();
+ }
}
Modified: branches/4.0.1/src/test/java/fr/ifremer/isisfish/simulator/sensitivity/domain/EquationContinuousDomainTest.java
===================================================================
--- branches/4.0.1/src/test/java/fr/ifremer/isisfish/simulator/sensitivity/domain/EquationContinuousDomainTest.java 2012-03-09 09:54:32 UTC (rev 3652)
+++ branches/4.0.1/src/test/java/fr/ifremer/isisfish/simulator/sensitivity/domain/EquationContinuousDomainTest.java 2012-03-14 14:13:51 UTC (rev 3653)
@@ -5,7 +5,7 @@
* $Id$
* $HeadURL$
* %%
- * Copyright (C) 2010 - 2011 CodeLutin, Chatellier Eric
+ * Copyright (C) 2010 - 2012 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
@@ -25,10 +25,11 @@
package fr.ifremer.isisfish.simulator.sensitivity.domain;
-import junit.framework.Assert;
-
+import org.junit.Assert;
import org.junit.Test;
+import fr.ifremer.isisfish.simulator.sensitivity.Distribution;
+
/**
* Test on {@link EquationContinuousDomain}.
*
@@ -45,23 +46,17 @@
*/
@Test
public void testClone() {
- EquationContinuousDomain domain = new EquationContinuousDomain();
- // parent
- domain.setMinBound(0.55);
- domain.setMaxBound(0.74);
- // child
+ EquationContinuousDomain domain = new EquationContinuousDomain(Distribution.QUNIFMM);
+ domain.addDistributionParam("min", 0.55);
+ domain.addDistributionParam("max", 0.74);
domain.setVariableName("varname");
- domain.setCoefficient(0.05);
- domain.setReferenceValue(90.0);
-
+
// clone
- EquationContinuousDomain clone = domain.clone();
+ EquationContinuousDomain clone = (EquationContinuousDomain)domain.clone();
// test on clone
- Assert.assertEquals(0.55, clone.minBound); // getter return 0.0
- Assert.assertEquals(0.74, clone.maxBound); // getter return 1.0
+ Assert.assertEquals(0.55, clone.getDistributionParameters().get("min"));
+ Assert.assertEquals(0.74, clone.getDistributionParameters().get("max"));
Assert.assertEquals("varname", clone.getVariableName());
- Assert.assertEquals(0.05, clone.getCoefficient());
- Assert.assertEquals(90.0, clone.getReferenceValue());
}
}
Deleted: branches/4.0.1/src/test/java/fr/ifremer/isisfish/simulator/sensitivity/domain/MatrixContinuousDomainTest.java
===================================================================
--- branches/4.0.1/src/test/java/fr/ifremer/isisfish/simulator/sensitivity/domain/MatrixContinuousDomainTest.java 2012-03-09 09:54:32 UTC (rev 3652)
+++ branches/4.0.1/src/test/java/fr/ifremer/isisfish/simulator/sensitivity/domain/MatrixContinuousDomainTest.java 2012-03-14 14:13:51 UTC (rev 3653)
@@ -1,72 +0,0 @@
-/*
- * #%L
- * IsisFish
- *
- * $Id$
- * $HeadURL$
- * %%
- * Copyright (C) 2010 - 2011 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 junit.framework.Assert;
-
-import org.junit.Test;
-import org.nuiton.math.matrix.MatrixFactory;
-import org.nuiton.math.matrix.MatrixND;
-
-/**
- * Test on {@link MatrixContinuousDomain}.
- *
- * @author chatellier
- * @version $Revision$
- *
- * Last update : $Date$
- * By : $Author$
- */
-public class MatrixContinuousDomainTest {
-
- /**
- * Assert that clone do work (with inheritance).
- */
- @Test
- public void testClone() {
-
- // test matrix
- MatrixND matrix = MatrixFactory.getInstance().create("test", new int[] { 4, 5 }, new String[] {"dim1", "dim2"});
- matrix.setValue(2, 2, 42);
-
- MatrixContinuousDomain domain = new MatrixContinuousDomain();
- // parent
- domain.setMinBound(0.55);
- domain.setMaxBound(0.74);
- // child
- domain.setReferenceValue(matrix);
- domain.setCoefficient(0.05);
-
- // clone
- MatrixContinuousDomain clone = domain.clone();
-
- // test on clone
- Assert.assertEquals(0.55, clone.minBound); // getter return 0.0
- Assert.assertEquals(0.74, clone.maxBound); // getter return 1.0
- Assert.assertEquals(matrix, clone.getReferenceValue());
- Assert.assertEquals(0.05, clone.getCoefficient());
- }
-}
Modified: branches/4.0.1/src/test/java/fr/ifremer/isisfish/ui/sensitivity/FactorTreeModelTest.java
===================================================================
--- branches/4.0.1/src/test/java/fr/ifremer/isisfish/ui/sensitivity/FactorTreeModelTest.java 2012-03-09 09:54:32 UTC (rev 3652)
+++ branches/4.0.1/src/test/java/fr/ifremer/isisfish/ui/sensitivity/FactorTreeModelTest.java 2012-03-14 14:13:51 UTC (rev 3653)
@@ -42,6 +42,7 @@
import org.nuiton.math.matrix.MatrixND;
import fr.ifremer.isisfish.AbstractIsisFishTest;
+import fr.ifremer.isisfish.simulator.sensitivity.Distribution;
import fr.ifremer.isisfish.simulator.sensitivity.Factor;
import fr.ifremer.isisfish.simulator.sensitivity.FactorGroup;
import fr.ifremer.isisfish.simulator.sensitivity.domain.ContinuousDomain;
@@ -79,9 +80,9 @@
Factor factor1 = new Factor(
"testint");
- ContinuousDomain domain1 = new ContinuousDomain();
- domain1.setMinBound(0.0);
- domain1.setMaxBound(50.0);
+ ContinuousDomain domain1 = new ContinuousDomain(Distribution.QUNIFMM);
+ domain1.addDistributionParam("min", 0.0);
+ domain1.addDistributionParam("max", 50.0);
factor1.setDomain(domain1);
factor1.setPath("org.nuiton.factor#1234567890#0.12242345354#name");
factor1.setValueForIdentifier(0.5);
Deleted: branches/4.0.1/src/test/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityUtilsTest.java
===================================================================
--- branches/4.0.1/src/test/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityUtilsTest.java 2012-03-09 09:54:32 UTC (rev 3652)
+++ branches/4.0.1/src/test/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityUtilsTest.java 2012-03-14 14:13:51 UTC (rev 3653)
@@ -1,119 +0,0 @@
-/*
- * #%L
- * IsisFish
- *
- * $Id$
- * $HeadURL$
- * %%
- * Copyright (C) 2009 - 2010 Ifremer, Code Lutin, 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.ui.sensitivity;
-
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.util.Properties;
-
-import org.apache.commons.lang3.StringUtils;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.junit.Assert;
-import org.junit.Test;
-import org.nuiton.topia.TopiaContext;
-import org.nuiton.topia.TopiaContextFactory;
-import org.nuiton.topia.TopiaException;
-import org.nuiton.topia.TopiaNotFoundException;
-import org.nuiton.topia.persistence.TopiaDAO;
-import org.nuiton.topia.persistence.TopiaEntity;
-
-import fr.ifremer.isisfish.AbstractIsisFishTest;
-import fr.ifremer.isisfish.IsisFishDAOHelper;
-import fr.ifremer.isisfish.datastore.IsisH2Config;
-
-/**
- * Test for {@link SensitivityUtils} class.
- *
- * @author chatellier
- * @version $Revision$
- *
- * Last update : $Date$
- * By : $Author$
- */
-public class SensitivityUtilsTest extends AbstractIsisFishTest {
-
- /** Logger for this class */
- private static final Log log = LogFactory
- .getLog(SensitivityUtilsTest.class);
-
- /**
- * Return a basic valid topia context.
- *
- * @throws TopiaNotFoundException
- */
- protected TopiaContext getTopiaContext() throws TopiaNotFoundException {
- Properties config = new Properties();
- IsisH2Config.addMemDatabaseConfig(config, "test");
- IsisH2Config.addHibernateMapping(config);
- TopiaContext context = TopiaContextFactory.getContext(config);
- return context;
- }
-
- /**
- * Test (par introspection) que tous les facteurs existent.
- *
- * @throws ClassNotFoundException
- * @throws IllegalAccessException
- * @throws InstantiationException
- * @throws NoSuchMethodException
- * @throws SecurityException
- * @throws InvocationTargetException
- * @throws IllegalArgumentException
- * @throws TopiaException
- */
- @Test
- public void testFactorExistence() throws InstantiationException, IllegalAccessException,
- ClassNotFoundException, SecurityException, NoSuchMethodException, IllegalArgumentException,
- InvocationTargetException, TopiaException {
- Properties factors = SensitivityUtils.getProperties();
-
- TopiaContext testTC = getTopiaContext();
- TopiaContext context = testTC.beginTransaction();
- for (String factorName : factors.stringPropertyNames()) {
- String className = factorName.substring(0, factorName.indexOf("."));
- String propertyName = StringUtils.capitalize(factorName.substring(factorName.indexOf(".") + 1));
-
- // Simple method
- // TopiaEntity entity = (TopiaEntity)Class.forName("fr.ifremer.isisfish.entities." + className + "Impl").newInstance();
-
- // Harder method
- // but topia context is needed by some getXXX() methods
- Method mStatic = IsisFishDAOHelper.class.getMethod("get" + className + "DAO", TopiaContext.class);
- TopiaDAO<TopiaEntity> dao = (TopiaDAO<TopiaEntity>) mStatic.invoke(null, new Object[] { context });
- Assert.assertNotNull("No DOA found for factor " + factorName, dao);
- TopiaEntity entity = dao.create();
-
- // call proper property
- if (log.isDebugEnabled()) {
- log.debug(" and call get" + propertyName + "() on " + className);
- }
- Method m = entity.getClass().getMethod("get" + propertyName);
- m.invoke(entity, (Object[]) null);
- }
- context.closeContext();
- }
-}
Added: branches/4.0.1/src/test/resources/mexico/expDesign.xsd
===================================================================
(Binary files differ)
Property changes on: branches/4.0.1/src/test/resources/mexico/expDesign.xsd
___________________________________________________________________
Added: svn:mime-type
+ application/xml
1
0
r3652 - in branches/4.1: . src/main/java/fr/ifremer/isisfish src/main/java/fr/ifremer/isisfish/mexico src/main/java/fr/ifremer/isisfish/mexico/xml
by echatellier@users.forge.codelutin.com 09 Mar '12
by echatellier@users.forge.codelutin.com 09 Mar '12
09 Mar '12
Author: echatellier
Date: 2012-03-09 10:54:32 +0100 (Fri, 09 Mar 2012)
New Revision: 3652
Url: http://forge.codelutin.com/repositories/revision/isis-fish/3652
Log:
Update to commons-lang3-3.0
Remove commons-lang 2.6
Modified:
branches/4.1/pom.xml
branches/4.1/src/main/java/fr/ifremer/isisfish/IsisFish.java
branches/4.1/src/main/java/fr/ifremer/isisfish/mexico/MexicoHelper.java
branches/4.1/src/main/java/fr/ifremer/isisfish/mexico/xml/DomXMLParser.java
Modified: branches/4.1/pom.xml
===================================================================
--- branches/4.1/pom.xml 2012-03-08 11:06:34 UTC (rev 3651)
+++ branches/4.1/pom.xml 2012-03-09 09:54:32 UTC (rev 3652)
@@ -156,11 +156,6 @@
</dependency>
<dependency>
- <groupId>commons-lang</groupId>
- <artifactId>commons-lang</artifactId>
- </dependency>
-
- <dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</dependency>
@@ -187,6 +182,13 @@
<version>2.2</version>
<scope>runtime</scope> <!--script -->
</dependency>
+
+ <dependency>
+ <groupId>org.apache.commons</groupId>
+ <artifactId>commons-math3</artifactId>
+ <version>3.0</version>
+ <scope>runtime</scope> <!--script -->
+ </dependency>
<dependency>
<groupId>org.apache.commons</groupId>
Modified: branches/4.1/src/main/java/fr/ifremer/isisfish/IsisFish.java
===================================================================
--- branches/4.1/src/main/java/fr/ifremer/isisfish/IsisFish.java 2012-03-08 11:06:34 UTC (rev 3651)
+++ branches/4.1/src/main/java/fr/ifremer/isisfish/IsisFish.java 2012-03-09 09:54:32 UTC (rev 3652)
@@ -49,7 +49,7 @@
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.filefilter.AbstractFileFilter;
-import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.nuiton.i18n.I18n;
Modified: branches/4.1/src/main/java/fr/ifremer/isisfish/mexico/MexicoHelper.java
===================================================================
--- branches/4.1/src/main/java/fr/ifremer/isisfish/mexico/MexicoHelper.java 2012-03-08 11:06:34 UTC (rev 3651)
+++ branches/4.1/src/main/java/fr/ifremer/isisfish/mexico/MexicoHelper.java 2012-03-09 09:54:32 UTC (rev 3652)
@@ -44,9 +44,8 @@
import javax.xml.transform.stream.StreamResult;
import org.apache.commons.beanutils.BeanUtils;
-import org.apache.commons.beanutils.ConvertUtils;
import org.apache.commons.beanutils.ConvertUtilsBean;
-import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.StringEscapeUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
Modified: branches/4.1/src/main/java/fr/ifremer/isisfish/mexico/xml/DomXMLParser.java
===================================================================
--- branches/4.1/src/main/java/fr/ifremer/isisfish/mexico/xml/DomXMLParser.java 2012-03-08 11:06:34 UTC (rev 3651)
+++ branches/4.1/src/main/java/fr/ifremer/isisfish/mexico/xml/DomXMLParser.java 2012-03-09 09:54:32 UTC (rev 3652)
@@ -27,7 +27,7 @@
import java.util.List;
-import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.StringEscapeUtils;
import org.dom4j.Element;
import org.nuiton.math.matrix.MatrixND;
1
0
08 Mar '12
Author: echatellier
Date: 2012-03-08 12:06:34 +0100 (Thu, 08 Mar 2012)
New Revision: 3651
Url: http://forge.codelutin.com/repositories/revision/isis-fish/3651
Log:
Add doc about mexico
Modified:
branches/4.0.1/src/site/rst/v3/devel/mexico.rst
Modified: branches/4.0.1/src/site/rst/v3/devel/mexico.rst
===================================================================
--- branches/4.0.1/src/site/rst/v3/devel/mexico.rst 2012-03-08 10:48:05 UTC (rev 3650)
+++ branches/4.0.1/src/site/rst/v3/devel/mexico.rst 2012-03-08 11:06:34 UTC (rev 3651)
@@ -5,3 +5,5 @@
Le schema xsd est disponible à l'adresse suivante:
https://mulcyber.toulouse.inra.fr/scm/viewvc.php/trunk/XML/schemas/expDesig…
+ou
+http://www.reseau-mexico.fr/sites/reseau-mexico.fr/files/expDesign.xsd
1
0
08 Mar '12
Author: echatellier
Date: 2012-03-08 11:48:05 +0100 (Thu, 08 Mar 2012)
New Revision: 3650
Url: http://forge.codelutin.com/repositories/revision/isis-fish/3650
Log:
Add doc about mexico
Added:
branches/4.0.1/src/site/rst/v3/devel/mexico.rst
Added: branches/4.0.1/src/site/rst/v3/devel/mexico.rst
===================================================================
--- branches/4.0.1/src/site/rst/v3/devel/mexico.rst (rev 0)
+++ branches/4.0.1/src/site/rst/v3/devel/mexico.rst 2012-03-08 10:48:05 UTC (rev 3650)
@@ -0,0 +1,7 @@
+Mexico
+------
+
+Isis essaye de respecter le format mexico pour le stockage des plans d'expérience.
+
+Le schema xsd est disponible à l'adresse suivante:
+https://mulcyber.toulouse.inra.fr/scm/viewvc.php/trunk/XML/schemas/expDesign.xsd?revision=9&root=baomexico&view=markup
1
0