r99 - in trunk: jmexico-editor/src/main/java/fr/reseaumexico/editor jmexico-editor/src/main/resources/i18n jmexico-model jmexico-model/src/main/java/fr/reseaumexico/model jmexico-model/src/main/java/fr/reseaumexico/model/parser jmexico-model/src/main/java/fr/reseaumexico/model/writer
Author: tchemit Date: 2012-10-26 10:23:08 +0200 (Fri, 26 Oct 2012) New Revision: 99 Url: http://forge.codelutin.com/repositories/revision/jmexico/99 Log: fixes #1624: Can import a partial scenario fixes #1625: Improve scenario import/export Modified: trunk/jmexico-editor/src/main/java/fr/reseaumexico/editor/InputDesignEditorHandler.java trunk/jmexico-editor/src/main/resources/i18n/jmexico-editor_en_GB.properties trunk/jmexico-editor/src/main/resources/i18n/jmexico-editor_fr_FR.properties trunk/jmexico-model/pom.xml trunk/jmexico-model/src/main/java/fr/reseaumexico/model/MexicoUtil.java trunk/jmexico-model/src/main/java/fr/reseaumexico/model/parser/ScenarioXmlParser.java trunk/jmexico-model/src/main/java/fr/reseaumexico/model/writer/InputDesignXmlWriter.java trunk/jmexico-model/src/main/java/fr/reseaumexico/model/writer/ScenarioXmlWriter.java Modified: trunk/jmexico-editor/src/main/java/fr/reseaumexico/editor/InputDesignEditorHandler.java =================================================================== --- trunk/jmexico-editor/src/main/java/fr/reseaumexico/editor/InputDesignEditorHandler.java 2012-10-25 17:12:35 UTC (rev 98) +++ trunk/jmexico-editor/src/main/java/fr/reseaumexico/editor/InputDesignEditorHandler.java 2012-10-26 08:23:08 UTC (rev 99) @@ -234,10 +234,15 @@ inputDesign.addScenario(scenario); List<String> unknownFactors = parser.getUnknownFactors(); - if(CollectionUtils.isNotEmpty(unknownFactors)) { + if (CollectionUtils.isNotEmpty(unknownFactors)) { + StringBuilder sb = new StringBuilder(); + for (String unknownFactor : unknownFactors) { + sb.append("\n'").append(unknownFactor).append('\''); + } JOptionPane.showMessageDialog( ui, - _("jmexico.warning.factor.not.imported", unknownFactors), + _("jmexico.warning.factor.not.imported", + unknownFactors.size(), sb.toString()), _("jmexico.title.importScenario"), JOptionPane.WARNING_MESSAGE); } Modified: trunk/jmexico-editor/src/main/resources/i18n/jmexico-editor_en_GB.properties =================================================================== --- trunk/jmexico-editor/src/main/resources/i18n/jmexico-editor_en_GB.properties 2012-10-25 17:12:35 UTC (rev 98) +++ trunk/jmexico-editor/src/main/resources/i18n/jmexico-editor_en_GB.properties 2012-10-26 08:23:08 UTC (rev 99) @@ -29,4 +29,4 @@ jmexico.title.scenario.export=Import a scenario jmexico.title.scenario.import=Export a scenario jmexico.title.scenario.remove=Remove a scenario -jmexico.warning.factor.not.imported=Following factors %s does not exist in scenario, their values can not be imported. +jmexico.warning.factor.not.imported=There is %s factor which do not exist in model, their values can not be imported\: %s Modified: trunk/jmexico-editor/src/main/resources/i18n/jmexico-editor_fr_FR.properties =================================================================== --- trunk/jmexico-editor/src/main/resources/i18n/jmexico-editor_fr_FR.properties 2012-10-25 17:12:35 UTC (rev 98) +++ trunk/jmexico-editor/src/main/resources/i18n/jmexico-editor_fr_FR.properties 2012-10-26 08:23:08 UTC (rev 99) @@ -29,4 +29,4 @@ jmexico.title.scenario.export=Exporter un scénario jmexico.title.scenario.import=Importer un scénario jmexico.title.scenario.remove=Supprimer un scénario -jmexico.warning.factor.not.imported=Les facteurs suivants %s n'existent pas dans le scénario, leurs valeurs ne sont pas importées. +jmexico.warning.factor.not.imported=Il existe %s facteurs qui n'existent pas dans le modèle, leurs valeurs ne sont pas importées \: %s. Modified: trunk/jmexico-model/pom.xml =================================================================== --- trunk/jmexico-model/pom.xml 2012-10-25 17:12:35 UTC (rev 98) +++ trunk/jmexico-model/pom.xml 2012-10-26 08:23:08 UTC (rev 99) @@ -23,6 +23,11 @@ </dependency> <dependency> + <groupId>commons-collections</groupId> + <artifactId>commons-collections</artifactId> + </dependency> + + <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> </dependency> Modified: trunk/jmexico-model/src/main/java/fr/reseaumexico/model/MexicoUtil.java =================================================================== --- trunk/jmexico-model/src/main/java/fr/reseaumexico/model/MexicoUtil.java 2012-10-25 17:12:35 UTC (rev 98) +++ trunk/jmexico-model/src/main/java/fr/reseaumexico/model/MexicoUtil.java 2012-10-26 08:23:08 UTC (rev 99) @@ -24,6 +24,7 @@ */ package fr.reseaumexico.model; +import com.google.common.base.Function; import org.apache.commons.lang3.StringUtils; /** @@ -31,6 +32,13 @@ */ public class MexicoUtil { + public static final Function<Factor,String> GET_FACTOR_NAME = new Function<Factor, String>() { + @Override + public String apply(Factor input) { + return input.getName(); + } + }; + public static Object getTypedValue(ValueType type, String value) { Object result; if (StringUtils.isEmpty(value)) { Modified: trunk/jmexico-model/src/main/java/fr/reseaumexico/model/parser/ScenarioXmlParser.java =================================================================== --- trunk/jmexico-model/src/main/java/fr/reseaumexico/model/parser/ScenarioXmlParser.java 2012-10-25 17:12:35 UTC (rev 98) +++ trunk/jmexico-model/src/main/java/fr/reseaumexico/model/parser/ScenarioXmlParser.java 2012-10-26 08:23:08 UTC (rev 99) @@ -24,23 +24,30 @@ * #L% */ +import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.Lists; import com.google.common.collect.Maps; +import com.google.common.collect.Multimap; +import com.google.common.collect.Multimaps; import com.google.common.collect.Sets; import fr.reseaumexico.model.Factor; +import fr.reseaumexico.model.MexicoUtil; import fr.reseaumexico.model.Scenario; import fr.reseaumexico.model.ScenarioImpl; import fr.reseaumexico.model.ValueType; +import org.apache.commons.collections.CollectionUtils; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; import java.io.IOException; import java.text.ParseException; +import java.util.Collection; import java.util.List; import java.util.Map; import java.util.Set; -import static fr.reseaumexico.model.MexicoXmlConstant.FACTOR; +import static fr.reseaumexico.model.MexicoXmlConstant.FACTOR_ID; +import static fr.reseaumexico.model.MexicoXmlConstant.FACTOR_NAME; import static fr.reseaumexico.model.MexicoXmlConstant.SCENARIO; import static fr.reseaumexico.model.MexicoXmlConstant.SCENARIO_FACTOR_VALUES; import static fr.reseaumexico.model.MexicoXmlConstant.SCENARIO_NAME; @@ -62,6 +69,12 @@ protected final Map<String, Factor> factors; /** + * Factors by their name (only used in {@code standalone} mode to find + * out a factor back if his id is not correct. + */ + protected final Multimap<String, Factor> factorByName; + + /** * Flag to know if parser is used standalone (says to import a scenario) or * as part of input designer parser. * @@ -79,6 +92,13 @@ this.factors = factors; this.standalone = standalone; this.unknownFactors = Lists.newArrayList(); + this.factorByName = ArrayListMultimap.create(); + if (standalone) { + + // populate the factorByName + factorByName.putAll(Multimaps.index(factors.values(), + MexicoUtil.GET_FACTOR_NAME)); + } } @Override @@ -109,16 +129,38 @@ Map<Factor, Object> factorValues = Maps.newLinkedHashMap(); while (!(testCurrentEndTag(parser, SCENARIO))) { - // get factor - String factorId = parser.getAttributeValue(null, FACTOR); + // get factor by his id + String factorId = parser.getAttributeValue(null, FACTOR_ID); + Factor factor = factors.get(factorId); if (factor == null) { if (standalone) { - // keep factor id - unknownFactors.add(factorId); - continue; + // fallback by name + String factorName = + parser.getAttributeValue(null, FACTOR_NAME); + + Collection<Factor> possibleFactors = + factorByName.get(factorName); + if (CollectionUtils.isNotEmpty(possibleFactors)) { + + // ok use the first one :( + factor = possibleFactors.iterator().next(); + } else { + + // really not found + // keep factor name + unknownFactors.add(factorName); + + // read factor value + parser.nextText(); + + // read next tag + parser.nextTag(); + continue; + } + } else { // do not accept this @@ -154,9 +196,9 @@ allFactors.removeAll(usedFactors); - for (Factor factorToAdd : allFactors) { - scenario.setFactorValue(factorToAdd, 0.d); - } +// for (Factor factorToAdd : allFactors) { +// scenario.setFactorValue(factorToAdd, 0.d); +// } } return scenario; Modified: trunk/jmexico-model/src/main/java/fr/reseaumexico/model/writer/InputDesignXmlWriter.java =================================================================== --- trunk/jmexico-model/src/main/java/fr/reseaumexico/model/writer/InputDesignXmlWriter.java 2012-10-25 17:12:35 UTC (rev 98) +++ trunk/jmexico-model/src/main/java/fr/reseaumexico/model/writer/InputDesignXmlWriter.java 2012-10-26 08:23:08 UTC (rev 99) @@ -72,7 +72,7 @@ if (scenarios != null) { for (Scenario scenario : scenarios) { - ScenarioXmlWriter scenarioXmlWriter = new ScenarioXmlWriter(scenario); + ScenarioXmlWriter scenarioXmlWriter = new ScenarioXmlWriter(scenario, false); XmlNode scenariosXmlNode = scenarioXmlWriter.getRootElement(); rootXmlNode.add(scenariosXmlNode); Modified: trunk/jmexico-model/src/main/java/fr/reseaumexico/model/writer/ScenarioXmlWriter.java =================================================================== --- trunk/jmexico-model/src/main/java/fr/reseaumexico/model/writer/ScenarioXmlWriter.java 2012-10-25 17:12:35 UTC (rev 98) +++ trunk/jmexico-model/src/main/java/fr/reseaumexico/model/writer/ScenarioXmlWriter.java 2012-10-26 08:23:08 UTC (rev 99) @@ -40,12 +40,21 @@ public class ScenarioXmlWriter extends MexicoXmlWriter<Scenario> { public static void write(Scenario model, File exportFile) throws IOException { - ScenarioXmlWriter writer = new ScenarioXmlWriter(model); + ScenarioXmlWriter writer = new ScenarioXmlWriter(model, true); writer.write(exportFile); } - public ScenarioXmlWriter(Scenario model) { + /** + * A flag to qualify when the writer is used only to write a single + * scenario (scenario export). + * + * @since 0.8 + */ + private final boolean standalone; + + public ScenarioXmlWriter(Scenario model, boolean standalone) { super(model); + this.standalone = standalone; } @Override @@ -60,7 +69,16 @@ Object value = entry.getValue(); XmlNode factorValueXmlNode = XmlNode.createElement( rootXmlNode, Scenario.PROPERTY_FACTOR_VALUES, String.valueOf(value)); - factorValueXmlNode.addAttribute(FACTOR, entry.getKey().getId()); + + Factor factor = entry.getKey(); + + factorValueXmlNode.addAttribute(FACTOR_ID, factor.getId()); + if (standalone) { + + // add also the name of factor (used to manage error when + // reading back file) + factorValueXmlNode.addAttribute(FACTOR_NAME, factor.getName()); + } } // features
participants (1)
-
tchemit@users.forge.codelutin.com