Author: sletellier Date: 2011-12-16 16:24:26 +0100 (Fri, 16 Dec 2011) New Revision: 6 Url: http://forge.codelutin.com/repositories/revision/jmexico/6 Log: - Change model to add multiple levels and distributionParameters - Apply modification on writer and parser Modified: trunk/jmexico-model/src/main/java/fr/reseaumexico/model/MexicoXmlConstant.java trunk/jmexico-model/src/main/java/fr/reseaumexico/model/parser/ExperimentDesignParser.java trunk/jmexico-model/src/main/java/fr/reseaumexico/model/writer/ExperimentDesignXmlWriter.java trunk/jmexico-model/src/main/xmi/mexico.zargo Modified: trunk/jmexico-model/src/main/java/fr/reseaumexico/model/MexicoXmlConstant.java =================================================================== --- trunk/jmexico-model/src/main/java/fr/reseaumexico/model/MexicoXmlConstant.java 2011-12-16 10:34:15 UTC (rev 5) +++ trunk/jmexico-model/src/main/java/fr/reseaumexico/model/MexicoXmlConstant.java 2011-12-16 15:24:26 UTC (rev 6) @@ -24,6 +24,8 @@ */ package fr.reseaumexico.model; +import java.beans.Introspector; + /** * Regroup all mexico xml constants tags * @@ -32,31 +34,37 @@ */ public class MexicoXmlConstant { - public static final String EXPERIMENT_DESIGN = ExperimentDesign.class.getSimpleName().toLowerCase(); + public static final String EXPERIMENT_DESIGN = Introspector.decapitalize(ExperimentDesign.class.getSimpleName()); public static final String EXPERIMENT_DESIGN_DATE = ExperimentDesign.PROPERTY_DATE; public static final String EXPERIMENT_DESIGN_ID = ExperimentDesign.PROPERTY_ID; public static final String EXPERIMENT_DESIGN_AUTHOR = ExperimentDesign.PROPERTY_AUTHOR; public static final String EXPERIMENT_DESIGN_LICENCE = ExperimentDesign.PROPERTY_LICENCE; public static final String EXPERIMENT_DESIGN_DESCRIPTION = ExperimentDesign.PROPERTY_DESCRIPTION; public static final String FACTORS = ExperimentDesign.PROPERTY_FACTORS; - public static final String FACTOR = Factor.class.getSimpleName().toLowerCase(); + public static final String FACTOR = Introspector.decapitalize(Factor.class.getSimpleName()); public static final String FACTOR_ID = Factor.PROPERTY_ID; public static final String FACTOR_NAME = Factor.PROPERTY_NAME; public static final String FACTOR_UNIT = Factor.PROPERTY_UNIT; public static final String FACTOR_DESCRIPTION = Factor.PROPERTY_DESCRIPTION; public static final String DOMAIN = Factor.PROPERTY_DOMAIN; public static final String DOMAIN_NAME = Domain.PROPERTY_NAME; - public static final String DOMAIN_DISTRIBUTION_PARAMETER = Domain.PROPERTY_DISTRIBUTION_PARAMETER; - public static final String DOMAIN_LEVEL = Domain.PROPERTY_LEVEL; + public static final String DOMAIN_DISTRIBUTION_NAME = Domain.PROPERTY_DISTRIBUTION_NAME; + public static final String DOMAIN_DISTRIBUTION_PARAMETER = Introspector.decapitalize(DistributionParameter.class.getSimpleName()); + public static final String DISTRIBUTION_PARAMETER_NAME = DistributionParameter.PROPERTY_NAME; + public static final String DISTRIBUTION_PARAMETER_VALUE = DistributionParameter.PROPERTY_VALUE; + public static final String DISTRIBUTION_PARAMETER_VALUE_TYPE = DistributionParameter.PROPERTY_VALUE_TYPE; + public static final String DOMAIN_LEVEL = Introspector.decapitalize(Level.class.getSimpleName()); + public static final String LEVEL_VALUE = Level.PROPERTY_VALUE; + public static final String LEVEL_WEIGHT = Level.PROPERTY_WEIGHT; public static final String DOMAIN_VALUE_TYPE = Domain.PROPERTY_VALUE_TYPE; public static final String DOMAIN_NOMINAL_VALUE = Domain.PROPERTY_NOMINAL_VALUE; - public static final String FEATURE = Feature.class.getSimpleName().toLowerCase(); + public static final String FEATURE = Introspector.decapitalize(Feature.class.getSimpleName()); public static final String FEATURE_NAME = Feature.PROPERTY_NAME; public static final String FEATURE_VALUE = Feature.PROPERTY_VALUE; public static final String FEATURE_VALUE_TYPE = Feature.PROPERTY_VALUE_TYPE; - public static final String INPUT_DESIGN = InputDesign.class.getSimpleName().toLowerCase(); + public static final String INPUT_DESIGN = Introspector.decapitalize(InputDesign.class.getSimpleName()); public static final String INPUT_DESIGN_DATE = InputDesign.PROPERTY_DATE; - public static final String SCENARIO = Scenario.class.getSimpleName().toLowerCase(); + public static final String SCENARIO = Introspector.decapitalize(Scenario.class.getSimpleName()); public static final String SCENARIO_NAME = Scenario.PROPERTY_NAME; public static final String SCENARIO_ORDER_NUMBER = Scenario.PROPERTY_ORDER_NUMBER; public static final String SCENARIO_FACTOR_VALUES = Scenario.PROPERTY_FACTOR_VALUES; Modified: trunk/jmexico-model/src/main/java/fr/reseaumexico/model/parser/ExperimentDesignParser.java =================================================================== --- trunk/jmexico-model/src/main/java/fr/reseaumexico/model/parser/ExperimentDesignParser.java 2011-12-16 10:34:15 UTC (rev 5) +++ trunk/jmexico-model/src/main/java/fr/reseaumexico/model/parser/ExperimentDesignParser.java 2011-12-16 15:24:26 UTC (rev 6) @@ -26,6 +26,8 @@ import com.google.common.collect.Lists; import com.google.common.collect.Maps; +import fr.reseaumexico.model.DistributionParameter; +import fr.reseaumexico.model.DistributionParameterImpl; import fr.reseaumexico.model.Domain; import fr.reseaumexico.model.DomainImpl; import fr.reseaumexico.model.ExperimentDesign; @@ -34,6 +36,8 @@ import fr.reseaumexico.model.FactorImpl; import fr.reseaumexico.model.Feature; import fr.reseaumexico.model.FeatureImpl; +import fr.reseaumexico.model.Level; +import fr.reseaumexico.model.LevelImpl; import fr.reseaumexico.model.MexicoTechnicalException; import fr.reseaumexico.model.ValueType; import org.xmlpull.v1.XmlPullParser; @@ -47,7 +51,11 @@ import java.util.Map; import static fr.reseaumexico.model.MexicoXmlConstant.DOMAIN; +import static fr.reseaumexico.model.MexicoXmlConstant.DOMAIN_DISTRIBUTION_NAME; import static fr.reseaumexico.model.MexicoXmlConstant.DOMAIN_DISTRIBUTION_PARAMETER; +import static fr.reseaumexico.model.MexicoXmlConstant.DISTRIBUTION_PARAMETER_NAME; +import static fr.reseaumexico.model.MexicoXmlConstant.DISTRIBUTION_PARAMETER_VALUE; +import static fr.reseaumexico.model.MexicoXmlConstant.DISTRIBUTION_PARAMETER_VALUE_TYPE; import static fr.reseaumexico.model.MexicoXmlConstant.DOMAIN_LEVEL; import static fr.reseaumexico.model.MexicoXmlConstant.DOMAIN_NAME; import static fr.reseaumexico.model.MexicoXmlConstant.DOMAIN_NOMINAL_VALUE; @@ -64,6 +72,8 @@ import static fr.reseaumexico.model.MexicoXmlConstant.FEATURE_NAME; import static fr.reseaumexico.model.MexicoXmlConstant.FEATURE_VALUE; import static fr.reseaumexico.model.MexicoXmlConstant.FEATURE_VALUE_TYPE; +import static fr.reseaumexico.model.MexicoXmlConstant.LEVEL_VALUE; +import static fr.reseaumexico.model.MexicoXmlConstant.LEVEL_WEIGHT; /** * @author sletellier <letellier@codelutin.com> @@ -187,30 +197,79 @@ return factor; } - protected Domain parseDomain(XmlPullParser parser) throws XmlPullParserException { + protected Domain parseDomain(XmlPullParser parser) throws XmlPullParserException, IOException { Domain domain = new DomainImpl(); // name - String name = parser.getAttributeValue(null, DOMAIN_NAME); - domain.setName(name); + String domaineName = parser.getAttributeValue(null, DOMAIN_NAME); + domain.setName(domaineName); - // distributionParameter - String distributionParameter = parser.getAttributeValue(null, DOMAIN_DISTRIBUTION_PARAMETER); - domain.setDistributionParameter(distributionParameter); + // distributionName + String distributionName = parser.getAttributeValue(null, DOMAIN_DISTRIBUTION_NAME); + domain.setDistributionName(distributionName); - // level - String level = parser.getAttributeValue(null, DOMAIN_LEVEL); - domain.setLevel(Integer.parseInt(level)); - // valueType - String valueType = parser.getAttributeValue(null, DOMAIN_VALUE_TYPE); - domain.setValueType(ValueType.valueOf(valueType)); + String domaineValueType = parser.getAttributeValue(null, DOMAIN_VALUE_TYPE); + domain.setValueType(ValueType.valueOf(domaineValueType)); // nominaleValue // TODO sletellier 20111215 : take care of type String nominaleValue = parser.getAttributeValue(null, DOMAIN_NOMINAL_VALUE); domain.setNominalValue(nominaleValue); + // distributionParameters + int eventType = parser.nextTag(); + if (eventType == XmlPullParser.START_TAG && + parserEqual(parser, DOMAIN_DISTRIBUTION_PARAMETER)) { + + List<DistributionParameter> distributionParameters = Lists.newArrayList(); + while (parserEqual(parser, DOMAIN_DISTRIBUTION_PARAMETER)) { + DistributionParameter distributionParameter = new DistributionParameterImpl(); + + // name + String name = parser.getAttributeValue(null, DISTRIBUTION_PARAMETER_NAME); + distributionParameter.setName(name); + + // value + // TODO sletellier 20111215 : take care of type + String value = parser.getAttributeValue(null, DISTRIBUTION_PARAMETER_VALUE); + distributionParameter.setValue(value); + + // valueType + String valueType = parser.getAttributeValue(null, DISTRIBUTION_PARAMETER_VALUE_TYPE); + distributionParameter.setValueType(ValueType.valueOf(valueType)); + + distributionParameters.add(distributionParameter); + + // read close tag + parser.nextTag(); + + // read next start tag + eventType = parser.nextTag(); + } + domain.setDistributionParameters(distributionParameters); + } + + // level + if (eventType == XmlPullParser.START_TAG && + parserEqual(parser, DOMAIN_LEVEL)) { + + List<Level> levels = Lists.newArrayList(); + while (parserEqual(parser, DOMAIN_LEVEL)) { + Level level = new LevelImpl(); + + // value + String value = parser.getAttributeValue(null, LEVEL_VALUE); + level.setValue(value); + + // weight + String weight = parser.getAttributeValue(null, LEVEL_WEIGHT); + level.setWeight(Integer.valueOf(weight)); + + levels.add(level); + } + domain.setLevels(levels); + } return domain; } Modified: trunk/jmexico-model/src/main/java/fr/reseaumexico/model/writer/ExperimentDesignXmlWriter.java =================================================================== --- trunk/jmexico-model/src/main/java/fr/reseaumexico/model/writer/ExperimentDesignXmlWriter.java 2011-12-16 10:34:15 UTC (rev 5) +++ trunk/jmexico-model/src/main/java/fr/reseaumexico/model/writer/ExperimentDesignXmlWriter.java 2011-12-16 15:24:26 UTC (rev 6) @@ -24,9 +24,11 @@ */ package fr.reseaumexico.model.writer; +import fr.reseaumexico.model.DistributionParameter; import fr.reseaumexico.model.Domain; import fr.reseaumexico.model.ExperimentDesign; import fr.reseaumexico.model.Factor; +import fr.reseaumexico.model.Level; import org.apache.commons.lang3.StringUtils; import java.io.File; @@ -35,8 +37,14 @@ import java.util.Date; import static fr.reseaumexico.model.MexicoXmlConstant.DOMAIN; +import static fr.reseaumexico.model.MexicoXmlConstant.DOMAIN_DISTRIBUTION_NAME; import static fr.reseaumexico.model.MexicoXmlConstant.DOMAIN_DISTRIBUTION_PARAMETER; +import static fr.reseaumexico.model.MexicoXmlConstant.DISTRIBUTION_PARAMETER_NAME; +import static fr.reseaumexico.model.MexicoXmlConstant.DISTRIBUTION_PARAMETER_VALUE; +import static fr.reseaumexico.model.MexicoXmlConstant.DISTRIBUTION_PARAMETER_VALUE_TYPE; import static fr.reseaumexico.model.MexicoXmlConstant.DOMAIN_LEVEL; +import static fr.reseaumexico.model.MexicoXmlConstant.LEVEL_VALUE; +import static fr.reseaumexico.model.MexicoXmlConstant.LEVEL_WEIGHT; import static fr.reseaumexico.model.MexicoXmlConstant.DOMAIN_NAME; import static fr.reseaumexico.model.MexicoXmlConstant.DOMAIN_NOMINAL_VALUE; import static fr.reseaumexico.model.MexicoXmlConstant.DOMAIN_VALUE_TYPE; @@ -124,10 +132,30 @@ if (domain != null) { XmlNode domainXmlNode = XmlNode.createElement(factorXmlNode, DOMAIN); addParameter(domainXmlNode, DOMAIN_NAME, domain.getName()); - addParameter(domainXmlNode, DOMAIN_DISTRIBUTION_PARAMETER, domain.getDistributionParameter()); - addParameter(domainXmlNode, DOMAIN_LEVEL, String.valueOf(domain.getLevel())); addParameter(domainXmlNode, DOMAIN_VALUE_TYPE, domain.getValueType()); addParameter(domainXmlNode, DOMAIN_NOMINAL_VALUE, domain.getNominalValue()); + addParameter(domainXmlNode, DOMAIN_DISTRIBUTION_NAME, domain.getDistributionName()); + + // distributionParameters + Collection<DistributionParameter> distributionParameters = domain.getDistributionParameters(); + if (distributionParameters != null) { + for (DistributionParameter distributionParameter : distributionParameters) { + XmlNode distributionParameterXmlNode = XmlNode.createElement(domainXmlNode, DOMAIN_DISTRIBUTION_PARAMETER); + addParameter(distributionParameterXmlNode, DISTRIBUTION_PARAMETER_NAME, distributionParameter.getName()); + addParameter(distributionParameterXmlNode, DISTRIBUTION_PARAMETER_VALUE, distributionParameter.getValue()); + addParameter(distributionParameterXmlNode, DISTRIBUTION_PARAMETER_VALUE_TYPE, distributionParameter.getValueType()); + } + } + + // levels + Collection<Level> levels = domain.getLevels(); + if (levels != null) { + for (Level level : levels) { + XmlNode distributionParameterXmlNode = XmlNode.createElement(domainXmlNode, DOMAIN_LEVEL); + addParameter(distributionParameterXmlNode, LEVEL_VALUE, level.getValue()); + addParameter(distributionParameterXmlNode, LEVEL_WEIGHT, level.getWeight()); + } + } } // features Modified: trunk/jmexico-model/src/main/xmi/mexico.zargo =================================================================== (Binary files differ)