Author: tchemit Date: 2012-10-25 19:12:35 +0200 (Thu, 25 Oct 2012) New Revision: 98 Url: http://forge.codelutin.com/repositories/revision/jmexico/98 Log: fixes #1624: Can import a partial scenario 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/src/main/java/fr/reseaumexico/model/parser/ScenarioXmlParser.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-21 13:01:07 UTC (rev 97) +++ trunk/jmexico-editor/src/main/java/fr/reseaumexico/editor/InputDesignEditorHandler.java 2012-10-25 17:12:35 UTC (rev 98) @@ -233,6 +233,15 @@ scenario.setOrderNumber(getMaxOrder()); inputDesign.addScenario(scenario); + List<String> unknownFactors = parser.getUnknownFactors(); + if(CollectionUtils.isNotEmpty(unknownFactors)) { + JOptionPane.showMessageDialog( + ui, + _("jmexico.warning.factor.not.imported", unknownFactors), + _("jmexico.title.importScenario"), + JOptionPane.WARNING_MESSAGE); + } + } catch (Exception e) { if (log.isErrorEnabled()) { log.error("Could not import scenario", e); 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-21 13:01:07 UTC (rev 97) +++ trunk/jmexico-editor/src/main/resources/i18n/jmexico-editor_en_GB.properties 2012-10-25 17:12:35 UTC (rev 98) @@ -23,8 +23,10 @@ jmexico.label.scenario.import.name=Name of new scenario jmexico.label.scenario.remove.selected=Scenario to delete jmexico.title.error=Error +jmexico.title.importScenario=Import a scenario jmexico.title.scenario.add=Add a scenario jmexico.title.scenario.clone=Clone a scenario 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. 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-21 13:01:07 UTC (rev 97) +++ trunk/jmexico-editor/src/main/resources/i18n/jmexico-editor_fr_FR.properties 2012-10-25 17:12:35 UTC (rev 98) @@ -23,8 +23,10 @@ jmexico.label.scenario.import.name=Nom du scénario à importer jmexico.label.scenario.remove.selected=Scénario à supprimer jmexico.title.error=Erreur +jmexico.title.importScenario=Import de scénario jmexico.title.scenario.add=Ajouter un scénario jmexico.title.scenario.clone=Dupliquer un scénario 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. 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-21 13:01:07 UTC (rev 97) +++ trunk/jmexico-model/src/main/java/fr/reseaumexico/model/parser/ScenarioXmlParser.java 2012-10-25 17:12:35 UTC (rev 98) @@ -24,7 +24,9 @@ * #L% */ +import com.google.common.collect.Lists; import com.google.common.collect.Maps; +import com.google.common.collect.Sets; import fr.reseaumexico.model.Factor; import fr.reseaumexico.model.Scenario; import fr.reseaumexico.model.ScenarioImpl; @@ -34,7 +36,9 @@ import java.io.IOException; import java.text.ParseException; +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.SCENARIO; @@ -65,6 +69,8 @@ */ protected final boolean standalone; + protected final List<String> unknownFactors; + public ScenarioXmlParser(Map<String, Factor> factors) { this(factors, true); } @@ -72,11 +78,14 @@ public ScenarioXmlParser(Map<String, Factor> factors, boolean standalone) { this.factors = factors; this.standalone = standalone; + this.unknownFactors = Lists.newArrayList(); } @Override protected Scenario parseModel(XmlPullParser parser) throws IOException, XmlPullParserException, ParseException { + unknownFactors.clear(); + if (standalone) { // file must start with input design tag checkStartFile( @@ -105,9 +114,18 @@ Factor factor = factors.get(factorId); if (factor == null) { - throw new IOException( - "Could not find factor named '" + - factorId + "' at line " + parser.getLineNumber()); + if (standalone) { + + // keep factor id + unknownFactors.add(factorId); + continue; + } else { + + // do not accept this + throw new IOException( + "Could not find factor named '" + + factorId + "' at line " + parser.getLineNumber()); + } } ValueType valueType = factor.getDomain().getValueType(); @@ -128,6 +146,23 @@ parser.nextTag(); } + if (standalone) { + + // make sure all factors are loaded + Set<Factor> usedFactors = scenario.getFactorValues().keySet(); + Set<Factor> allFactors = Sets.newHashSet(factors.values()); + + allFactors.removeAll(usedFactors); + + for (Factor factorToAdd : allFactors) { + scenario.setFactorValue(factorToAdd, 0.d); + } + } + return scenario; } + + public List<String> getUnknownFactors() { + return Lists.newArrayList(unknownFactors); + } }