Author: bpoussin Date: 2014-07-22 21:54:22 +0200 (Tue, 22 Jul 2014) New Revision: 4054 Url: http://forge.codelutin.com/projects/isis-fish/repository/revisions/4054 Log: rewrite resume to use only String representation (no object instanciation) this prevent error when plan, export, rule or other doesn't exist localy Added: trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationParameterPropertiesHelper.java Modified: trunk/src/main/java/fr/ifremer/isisfish/datastore/SimulationInformation.java trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationParameterImpl.java trunk/src/main/java/fr/ifremer/isisfish/ui/result/MatrixSummaryRenderer.java trunk/src/main/java/fr/ifremer/isisfish/util/StringConverter.java trunk/src/main/java/fr/ifremer/isisfish/util/TopiaEntityConverter.java trunk/src/main/resources/i18n/isis-fish_en_GB.properties trunk/src/main/resources/i18n/isis-fish_fr_FR.properties Modified: trunk/src/main/java/fr/ifremer/isisfish/datastore/SimulationInformation.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/datastore/SimulationInformation.java 2014-07-22 09:01:49 UTC (rev 4053) +++ trunk/src/main/java/fr/ifremer/isisfish/datastore/SimulationInformation.java 2014-07-22 19:54:22 UTC (rev 4054) @@ -43,6 +43,7 @@ import java.util.Set; import org.apache.commons.io.IOUtils; +import org.apache.commons.lang.StringUtils; import org.apache.commons.lang3.time.DurationFormatUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -175,14 +176,14 @@ // general information String info = getInformation(); - if (info != null && !"".equals(info)) { - result += "Information:\n" + info + "\n"; + if (StringUtils.isNotBlank(info)) { + result += "\nInformation:\n\t" + info + "\n"; } // Statistic String v = getStatistic(); if (v != null) { - result += "Statistic:\n" + v + "\n"; + result += "\nStatistic:\n" + v + "\n"; } // Optimisation usage Modified: trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationParameterImpl.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationParameterImpl.java 2014-07-22 09:01:49 UTC (rev 4053) +++ trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationParameterImpl.java 2014-07-22 19:54:22 UTC (rev 4054) @@ -75,6 +75,10 @@ import fr.ifremer.isisfish.rule.Rule; import fr.ifremer.isisfish.rule.RuleHelper; import fr.ifremer.isisfish.simulator.sensitivity.SensitivityAnalysis; +import fr.ifremer.isisfish.util.ConverterUtil; +import fr.ifremer.isisfish.util.StringConverter; +import fr.ifremer.isisfish.util.TopiaEntityConverter; +import org.apache.commons.beanutils.ConvertUtilsBean; import static org.nuiton.i18n.I18n.n; @@ -90,7 +94,7 @@ public class SimulationParameterImpl implements SimulationParameter { /** Logger for this class. */ - private static Log log = LogFactory.getLog(SimulationParameterImpl.class); + final private static Log log = LogFactory.getLog(SimulationParameterImpl.class); /** Remember last read properties. */ protected Properties propertiesParameters; @@ -310,10 +314,10 @@ List groups = pop.getPopulationGroup(); List zones = pop.getPopulationZone(); - if (groups.size() == 0) { + if (groups.isEmpty()) { groups.add("No group"); } - if (zones.size() == 0) { + if (zones.isEmpty()) { zones.add("No zone"); } List[] semantics = new List[] { groups, zones }; @@ -373,10 +377,10 @@ PopulationDAO populationDAO = IsisFishDAOHelper .getPopulationDAO(tx); - String[] populationList = propertiesParameters.getProperty( - "populations", "").split(","); + String[] populationList = SimulationParameterPropertiesHelper + .getPopulationNames(propertiesParameters); for (String name : populationList) { - if (name != null && !"".equals(name)) { + if (StringUtils.isNotEmpty(name)) { try { Population population = populationDAO.findByName(name); populations.add(population); @@ -448,7 +452,8 @@ } StrategyDAO strategyDAO = IsisFishDAOHelper.getStrategyDAO(tx); - String[] strategyList = propertiesParameters.getProperty("strategies", "").split(","); + String[] strategyList = SimulationParameterPropertiesHelper + .getStrategieNames(propertiesParameters); for (String name : strategyList) { if (name != null && !"".equals(name)) { try { @@ -617,7 +622,8 @@ } // rules - String[] ruleList = propertiesParameters.getProperty("rules", "").split(","); + String[] ruleList = SimulationParameterPropertiesHelper + .getRuleNames(propertiesParameters); int ruleIndex = 0; for (String name : ruleList) { if (name != null && !"".equals(name)) { @@ -685,7 +691,7 @@ useCache = Boolean.TRUE; } } - return useCache.booleanValue(); + return useCache; } @Override @@ -758,11 +764,11 @@ numberOfSensitivitySimulation = Integer.valueOf(propertiesParameters.getProperty( "numberOfSensitivitySimulation", "-1")); } else { - numberOfSensitivitySimulation = Integer.valueOf(-1); + numberOfSensitivitySimulation = -1; } } - return numberOfSensitivitySimulation.intValue(); + return numberOfSensitivitySimulation; } /* @@ -925,7 +931,7 @@ useOptimization = Boolean.FALSE; } } - return useOptimization.booleanValue(); + return useOptimization; } @Override @@ -976,7 +982,7 @@ if (propertiesParameters != null) { try { // On verifie tout d'abord que l'on ai pas dans une simulation - // si on y es, on utilise le context static non null du thread local + // si on y est, on utilise le context static non null du thread local // Resoud les lazy exceptions des parametres des regles boolean mustClose = false; TopiaContext tx = SimulationContext.get().getDB(); @@ -989,6 +995,7 @@ // rules String[] optimizationExportList = propertiesParameters.getProperty("optimizationexports", "").split(","); + ConvertUtilsBean beanUtils = ConverterUtil.getConverter(tx); int optimizationExportIndex = 0; for (String name : optimizationExportList) { if (name != null && !"".equals(name)) { @@ -997,7 +1004,7 @@ Observation observation = null; String observationId = propertiesParameters.getProperty("optimizationobservation." + optimizationExportIndex); if (StringUtils.isNotBlank(observationId)) { - observation = (Observation)tx.findByTopiaId(observationId); + observation = (Observation)beanUtils.convert(observationId, TopiaEntity.class); } optimizationExportsObservations.put(export, observation); } catch (IsisFishException eee) { @@ -1066,11 +1073,11 @@ if (propertiesParameters != null) { simulationPlanNumber = Integer.valueOf(propertiesParameters.getProperty("simulationPlanNumber", "-1")); } else { - simulationPlanNumber = Integer.valueOf(-1); + simulationPlanNumber = -1; } } - return simulationPlanNumber.intValue(); + return simulationPlanNumber; } /* @@ -1092,7 +1099,7 @@ } } - return sensitivityAnalysisOnlyKeepFirst.booleanValue(); + return sensitivityAnalysisOnlyKeepFirst; } @Override @@ -1111,10 +1118,10 @@ if (propertiesParameters != null) { numberOfYear = Integer.valueOf(propertiesParameters.getProperty("numberOfYear", "1")); } else { - numberOfYear = Integer.valueOf(1); + numberOfYear = 1; } } - return numberOfYear.intValue(); + return numberOfYear; } /* @@ -1140,7 +1147,7 @@ } } - return usePreScript.booleanValue(); + return usePreScript; } /* @@ -1596,7 +1603,7 @@ */ @Override public String toString() { - StringBuffer result = new StringBuffer(); + StringBuilder result = new StringBuilder(); result.append( t("isisfish.params.toString.simulation.done", getIsisFishVersion())).append('\n'); @@ -1738,13 +1745,13 @@ result.append(getPreScript()); result.append('\n'); result.append(t("isisfish.params.toString.simul.logger.level", - simulLogLevel)); + getSimulLogLevel())); result.append('\n'); result.append(t("isisfish.params.toString.script.logger.level", - scriptLogLevel)); + getScriptLogLevel())); result.append('\n'); result.append(t("isisfish.params.toString.lib.logger.level", - libLogLevel)); + getLibLogLevel())); result.append('\n'); return result.toString(); } @@ -1893,6 +1900,7 @@ if (optimizationExportsObservations != null) { String optimizationExportsList = ""; int optimizationExportIndex = 0; + ConvertUtilsBean beanUtils = ConverterUtil.getConverter(null); for (Map.Entry<Export, Observation> exportObservationEntry : optimizationExportsObservations.entrySet()) { Export export = exportObservationEntry.getKey(); optimizationExportsList += ExportStorage.getName(export) + ","; @@ -1900,7 +1908,7 @@ // add in props observation id export index Observation observation = exportObservationEntry.getValue(); if (observation != null) { - result.setProperty("optimizationobservation." + optimizationExportIndex, observation.getTopiaId()); + result.setProperty("optimizationobservation." + optimizationExportIndex, beanUtils.convert(observation)); } optimizationExportIndex++; } Added: trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationParameterPropertiesHelper.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationParameterPropertiesHelper.java (rev 0) +++ trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationParameterPropertiesHelper.java 2014-07-22 19:54:22 UTC (rev 4054) @@ -0,0 +1,347 @@ +package fr.ifremer.isisfish.simulator; + + +import java.util.HashMap; +import java.util.Map; +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.util.VersionUtil; + +import static org.nuiton.i18n.I18n.t; + +/** + * Class utilitaire permettant de travailler avec les parametres sous forme de + * properties + * + * @author poussin + * @version $Revision$ + * + * Last update: $Date$ + * by : $Author$ + */ +public class SimulationParameterPropertiesHelper { + + /** to use log facility, just put in your code: log.info(\"...\"); */ + final static private Log log = LogFactory.getLog(SimulationParameterPropertiesHelper.class); + + final public static String ISIS_FISH_VERSION_KEY = "isisFishVersion"; + final public static String SIMULATOR_NAME_KEY = "simulatorName"; + final public static String POPULATIONS_KEY = "populations"; + final public static String RULES_KEY = "rules"; + final public static String PLANS_KEY = "plans"; + final public static String STRATEGIES_KEY = "strategies"; + final public static String DESCRIPTION_KEY = "description"; + final public static String REGION_NAME_KEY = "regionName"; + final public static String USE_SIMULATION_PLAN_KEY = "useSimulationPlan"; + final public static String SIMULATION_PLAN_NUMBER_KEY = "simulationPlanNumber"; + final public static String USE_OPTIMIZATION_KEY = "useOptimization"; + final public static String OPTIMIZATION_KEY = "optimization"; + final public static String OBJECTIVE_KEY = "objective"; + final public static String OPTIMIZATION_EXPORTS_KEY = "optimizationexports"; + final public static String USE_CACHE_KEY = "useCache"; + final public static String NUMBER_OF_YEAR_KEY = "numberOfYear"; + final public static String GENERATED_PRE_SCRIPT_KEY = "generatedPreScript"; + final public static String PRE_SCRIPT_KEY = "preScript"; + final public static String SIMUL_LOG_LEVEL_KEY = "simulLogLevel"; + final public static String SCRIPT_LOG_LEVEL_KEY = "simulLogLevel"; + final public static String LIB_LOG_LEVEL_KEY = "simulLogLevel"; + + public static String getIsisFishVersion(Properties prop) { + String result = prop.getProperty(ISIS_FISH_VERSION_KEY, ""); + return result; + } + + public static String getSimulatorName(Properties prop) { + String result = prop.getProperty(SIMULATOR_NAME_KEY, "DefaultSimulator.java"); + return result; + } + + public static String getDescription(Properties prop) { + String result = prop.getProperty(DESCRIPTION_KEY, ""); + return result; + } + + public static boolean getUseSimulationPlan(Properties prop) { + boolean result = Boolean.valueOf(prop.getProperty(USE_SIMULATION_PLAN_KEY, "false")); + return result; + } + + public static int getSimulationPlanNumber(Properties prop) { + int result = Integer.valueOf(prop.getProperty(SIMULATION_PLAN_NUMBER_KEY, "-1")); + return result; + } + + public static boolean getUseCache(Properties prop) { + boolean result; + if (VersionUtil.smallerThan(getIsisFishVersion(prop), "4.3.0.0")) { + result = Boolean.valueOf(prop.getProperty(USE_OPTIMIZATION_KEY, "true")); + } else { + result = Boolean.valueOf(prop.getProperty(USE_CACHE_KEY, "true")); + } + return result; + } + + public static int getNumberOfYear(Properties prop) { + int result = Integer.valueOf(prop.getProperty(NUMBER_OF_YEAR_KEY, "1")); + return result; + } + + public static String getRegionName(Properties prop) { + String result = prop.getProperty(REGION_NAME_KEY, ""); + return result; + } + + public static String[] getPopulationNames(Properties prop) { + String[] result = prop.getProperty(POPULATIONS_KEY, "").split(","); + return result; + } + + public static String[] getStrategieNames(Properties prop) { + String[] result = prop.getProperty(STRATEGIES_KEY, "").split(","); + return result; + } + + public static String[] getRuleNames(Properties prop) { + String[] result = prop.getProperty(RULES_KEY, "").split(","); + return result; + } + + public static String[] getSimulationPlanNames(Properties prop) { + String[] result = prop.getProperty(PLANS_KEY, "").split(","); + return result; + } + + private static boolean getUseOptimization(Properties prop) { + boolean result; + // en version < 4.3, le parametre était nommé 'useOptimization' + // qualifiant le cache, il a été renommé ensuite + if (VersionUtil.smallerThan(getIsisFishVersion(prop), "4.3.0.0")) { + result = Boolean.FALSE; + } else { + result = Boolean.valueOf(prop.getProperty(USE_OPTIMIZATION_KEY, "false")); + } + return result; + } + + public static String getOptimizationName(Properties prop) { + String result = prop.getProperty(OPTIMIZATION_KEY, ""); + return result; + } + + public static String getObjectiveName(Properties prop) { + String result = prop.getProperty(OBJECTIVE_KEY, ""); + return result; + } + + public static String[] getOptimizationExportNames(Properties prop) { + String[] result = prop.getProperty(OPTIMIZATION_EXPORTS_KEY, "").split(","); + return result; + } + + public static String getOptimizationObservationName(Properties prop, int index) { + String result = prop.getProperty("optimizationobservation" + "." + index, ""); + if (result.matches("[\\w.]+#[\\d.]+#[\\d.]+:(.+)")) { + result = result.replaceFirst("[\\w.]+#[\\d.]+#[\\d.]+:(.+)", "$1"); + } + + return result; + } + + public static String getGeneratedPreScript(Properties prop) { + String result = prop.getProperty(GENERATED_PRE_SCRIPT_KEY, ""); + return result; + } + + public static String getPreScript(Properties prop) { + String result = prop.getProperty(PRE_SCRIPT_KEY, ""); + return result; + } + + public static String getSimulLogLevel(Properties prop) { + String result = prop.getProperty(SIMUL_LOG_LEVEL_KEY, "info"); + return result; + } + + public static String getScriptLogLevel(Properties prop) { + String result = prop.getProperty(SCRIPT_LOG_LEVEL_KEY, "info"); + return result; + } + + public static String getLibLogLevel(Properties prop) { + String result = prop.getProperty(LIB_LOG_LEVEL_KEY, "info"); + return result; + } + + /** + * Retourne les parametres sous forme de String pour une regles. Les regles + * sont numeroter dans l'ordre dans lequel on les recupere via #getRuleNames(). + * + * @param prop + * @param prefix can be 'rule', or other + * @param index l'indice de la regle dont on veut les parametre en String + * @return + */ + public static Map<String, String> getParamAsString(Properties prop, String prefix, int index) { + Map<String, String> result = new HashMap<String, String>(); + if (prop != null) { + String paramTag = prefix + "." + index + ".parameter."; + int paramTagLength = paramTag.length(); + + for (String key : prop.stringPropertyNames()) { + if (StringUtils.startsWith(key, paramTag)) { + String paramName = key.substring(paramTagLength); + String value = prop.getProperty(key); + // get only string representation of entities + if (value.matches("[\\w.]+#[\\d.]+#[\\d.]+:(.+)")) { + value = value.replaceFirst("[\\w.]+#[\\d.]+#[\\d.]+:(.+)", "$1"); + } + result.put(paramName, value); + } + } + } + + return result; + } + + public static String toString(Properties prop) { + StringBuilder result = new StringBuilder(); + result.append( + t("isisfish.params.toString.simulation.done", + getIsisFishVersion(prop))).append(" (").append(getSimulatorName(prop)).append(")").append('\n'); + result.append("--------------------\n"); + result.append(getDescription(prop)).append('\n'); + result.append("--------------------\n"); + + if (getUseSimulationPlan(prop)) { + result.append(t("isisfish.params.toString.plan.number", + getSimulationPlanNumber(prop))); + result.append("\n"); + } + + result.append("\n"); + + boolean useCache = getUseCache(prop); + if (useCache) { + result.append(t("isisfish.params.toString.use.cache", + useCache)); + result.append("\n"); + } + + result.append(t("isisfish.params.toString.fishery", getRegionName(prop))); + result.append("\n\n"); + result.append(t("isisfish.params.toString.number.years", + getNumberOfYear(prop))); + result.append("\n\n"); + + // startegies + String[] strs = getStrategieNames(prop); + result.append(t("isisfish.params.toString.strategies")); + String sep = ""; + for (String str : strs) { + result.append(sep).append(str); + sep = ","; + } + result.append("\n\n"); + + // populations + result.append(t("isisfish.params.toString.populations")); + sep = ""; + for (String pop : getPopulationNames(prop)) { + result.append(sep).append(pop); + sep = ","; + } + result.append("\n\n"); + + // rules + int cpt = 0; + for (String name : getRuleNames(prop)) { + result.append(t("isisfish.params.toString.rule", name)); + result.append('\n'); + for (Map.Entry<String, String> e : getParamAsString(prop, "rule", cpt++).entrySet()) { + result.append("\t").append(e.getKey()).append(" : ").append(e.getValue()).append("\n"); + } + result.append("\n"); + + } + result.append("\n\n"); + + // simulation plans + cpt = 0; + for (String plan : getSimulationPlanNames(prop)) { + result.append(t("isisfish.params.toString.plan", plan)); + result.append('\n'); + for (Map.Entry<String, String> e : getParamAsString(prop, "plan", cpt++).entrySet()) { + result.append("\t").append(e.getKey()).append(" : ").append(e.getValue()).append("\n"); + } + result.append('\n'); + + } + + boolean useOptimization = getUseOptimization(prop); + + if (useOptimization) { + result.append(t("isisfish.params.toString.use.optimization", + useOptimization)); + + String objective = getObjectiveName(prop); + if (StringUtils.isNotBlank(objective)) { + result.append(t("isisfish.params.toString.objective", objective)); + result.append('\n'); + for (Map.Entry<String, String> e : getParamAsString(prop, OBJECTIVE_KEY, 0).entrySet()) { + result.append("\t").append(e.getKey()).append(" : ").append(e.getValue()).append("\n"); + } + result.append('\n'); + } + + String optimization = getOptimizationName(prop); + if (StringUtils.isNotBlank(optimization)) { + result.append(t("isisfish.params.toString.optimization", optimization)); + result.append('\n'); + for (Map.Entry<String, String> e : getParamAsString(prop, OPTIMIZATION_KEY, 0).entrySet()) { + result.append("\t").append(e.getKey()).append(" : ").append(e.getValue()).append("\n"); + } + result.append('\n'); + } + + cpt = 0; + for (String export : getOptimizationExportNames(prop)) { + String observation = getOptimizationObservationName(prop, cpt++); + + result.append(t("isisfish.params.toString.optimizationExport", export)); + if (StringUtils.isNotBlank(observation)) { + result.append("\t->").append(t("isisfish.params.toString.optimizationObservation", observation)); + } + result.append('\n'); + } + } + + String genScript = getGeneratedPreScript(prop); + if (StringUtils.isNotBlank(genScript)) { + result.append('\n'); + result.append(t("isisfish.params.toString.script.generatedpresimulation")) + .append(":\n"); + result.append(genScript); + } + String prescript = getPreScript(prop); + if (StringUtils.isNotBlank(prescript)) { + result.append('\n'); + result.append(t("isisfish.params.toString.script.presimulation")) + .append(":\n"); + result.append(prescript); + } + result.append('\n'); + result.append(t("isisfish.params.toString.simul.logger.level", + getSimulLogLevel(prop))); + result.append('\n'); + result.append(t("isisfish.params.toString.script.logger.level", + getScriptLogLevel(prop))); + result.append('\n'); + result.append(t("isisfish.params.toString.lib.logger.level", + getLibLogLevel(prop))); + result.append('\n'); + return result.toString(); + } + +} Property changes on: trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationParameterPropertiesHelper.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/result/MatrixSummaryRenderer.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/result/MatrixSummaryRenderer.java 2014-07-22 09:01:49 UTC (rev 4053) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/result/MatrixSummaryRenderer.java 2014-07-22 19:54:22 UTC (rev 4054) @@ -27,7 +27,6 @@ import static org.nuiton.i18n.I18n.n; import java.awt.Component; -import java.util.Iterator; import javax.swing.Icon; import javax.swing.JScrollPane; @@ -40,7 +39,9 @@ import fr.ifremer.isisfish.datastore.ResultStorage; import fr.ifremer.isisfish.datastore.SimulationStorage; import fr.ifremer.isisfish.simulator.SimulationParameter; +import fr.ifremer.isisfish.simulator.SimulationParameterPropertiesHelper; import fr.ifremer.isisfish.types.TimeStep; +import java.util.Properties; /** * Simulation summary renderer. @@ -79,11 +80,12 @@ if (cachedComponent == null) { SimulationParameter sp = simulationStorage.getParameter(); - StringBuffer resume = new StringBuffer(sp.toString()); + Properties prop = sp.toProperties(); + String params = SimulationParameterPropertiesHelper.toString(prop); + StringBuilder resume = new StringBuilder(params); resume.append("\n"); - for(Iterator<String> i = resultStorage.getResultName().iterator(); i.hasNext();) { - String name = (String)i.next(); + for(String name : resultStorage.getResultName()) { try { // TODO EC20090717 ca marche plus ca Modified: trunk/src/main/java/fr/ifremer/isisfish/util/StringConverter.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/util/StringConverter.java 2014-07-22 09:01:49 UTC (rev 4053) +++ trunk/src/main/java/fr/ifremer/isisfish/util/StringConverter.java 2014-07-22 19:54:22 UTC (rev 4054) @@ -58,7 +58,8 @@ Object result = null; if (o != null) { if (o instanceof TopiaEntity) { - result = ((TopiaEntity) o).getTopiaId(); + // put after ':' string entity representation + result = ((TopiaEntity) o).getTopiaId() + ":" + o.toString(); } else if (o instanceof TimeStep) { result = String.valueOf(((TimeStep) o).getStep()); } else if (o instanceof Month) { Modified: trunk/src/main/java/fr/ifremer/isisfish/util/TopiaEntityConverter.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/util/TopiaEntityConverter.java 2014-07-22 09:01:49 UTC (rev 4053) +++ trunk/src/main/java/fr/ifremer/isisfish/util/TopiaEntityConverter.java 2014-07-22 19:54:22 UTC (rev 4054) @@ -29,6 +29,7 @@ import org.apache.commons.beanutils.ConversionException; import org.apache.commons.beanutils.Converter; +import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.hibernate.HibernateException; @@ -69,6 +70,8 @@ if (value instanceof TopiaEntity) { result = value; } else if (value instanceof String) { + // after ':' is entity string representation + value = StringUtils.substringBefore((String)value, ":"); result = getTopiaEntity((String) value); } else { throw new ConversionException("Can't convert '" + value + "' to " + type.getName()); Modified: trunk/src/main/resources/i18n/isis-fish_en_GB.properties =================================================================== --- trunk/src/main/resources/i18n/isis-fish_en_GB.properties 2014-07-22 09:01:49 UTC (rev 4053) +++ trunk/src/main/resources/i18n/isis-fish_en_GB.properties 2014-07-22 19:54:22 UTC (rev 4054) @@ -697,20 +697,20 @@ isisfish.params.simulationName=Simulation name isisfish.params.stategiesAndPopulations=Strategies and populations isisfish.params.title=Parameters -isisfish.params.toString.fishery=Fishery\: %1$s\n\n +isisfish.params.toString.fishery=Fishery\: %1$s isisfish.params.toString.lib.logger.level=Level of libraries' logger \: %1$s -isisfish.params.toString.number.years=Number of years\: %1$s\n\n +isisfish.params.toString.number.years=Number of years\: %1$s isisfish.params.toString.objective= isisfish.params.toString.optimization= isisfish.params.toString.optimizationExport= isisfish.params.toString.optimizationObservation= isisfish.params.toString.plan=Plan\: %1$s -isisfish.params.toString.plan.number=Simulation plan sequence number\: %1$s\n\n +isisfish.params.toString.plan.number=Simulation plan sequence number\: %1$s isisfish.params.toString.populations=Populations \: isisfish.params.toString.rule=Rule\: %1$s -isisfish.params.toString.script.generatedpresimulation= +isisfish.params.toString.script.generatedpresimulation=Generated script isisfish.params.toString.script.logger.level=Level of scripts' logger \: %1$s -isisfish.params.toString.script.presimulation=Script de presimulation +isisfish.params.toString.script.presimulation=Pre-simulation script isisfish.params.toString.simul.logger.level=Level of simulator's logger \: %1$s isisfish.params.toString.simulation.done=Simulation done with \: %1$s isisfish.params.toString.strategies=Strategies \: Modified: trunk/src/main/resources/i18n/isis-fish_fr_FR.properties =================================================================== --- trunk/src/main/resources/i18n/isis-fish_fr_FR.properties 2014-07-22 09:01:49 UTC (rev 4053) +++ trunk/src/main/resources/i18n/isis-fish_fr_FR.properties 2014-07-22 19:54:22 UTC (rev 4054) @@ -692,18 +692,18 @@ isisfish.params.simulationName=Nom de la simulation isisfish.params.stategiesAndPopulations=Stratégies et populations isisfish.params.title=Paramètres -isisfish.params.toString.fishery=Pêcherie\: %s\n\n +isisfish.params.toString.fishery=Pêcherie\: %s isisfish.params.toString.lib.logger.level=niveau du logger de librairies \: %s -isisfish.params.toString.number.years=Nombre d'années \: %s\n\n +isisfish.params.toString.number.years=Nombre d'années \: %s isisfish.params.toString.objective=Fonction d'objectif \: %s isisfish.params.toString.optimization=Méthode d'optimisation \: %s isisfish.params.toString.optimizationExport=Export d'optimisation \: %s isisfish.params.toString.optimizationObservation=Observation d'optimisation \: %s isisfish.params.toString.plan=Plan\: %s -isisfish.params.toString.plan.number=Numéro de séquence dans le plan \: %s\n\n +isisfish.params.toString.plan.number=Numéro de séquence dans le plan \: %s isisfish.params.toString.populations=Populations \: isisfish.params.toString.rule=Règle\: %s -isisfish.params.toString.script.generatedpresimulation= +isisfish.params.toString.script.generatedpresimulation=Script généré isisfish.params.toString.script.logger.level=niveau du logger de scripts \: %1$s isisfish.params.toString.script.presimulation=Script de presimulation isisfish.params.toString.simul.logger.level=niveau du logger de simulateur \: %1$s