r517 - in masc/masc-api: . src/main/java/fr/inra/masc/services src/main/xmi src/test/java/fr/inra/masc/services
Author: sletellier Date: 2011-12-12 17:59:10 +0100 (Mon, 12 Dec 2011) New Revision: 517 Url: http://nuiton.org/repositories/revision/sandbox/517 Log: - Add mexico zargo file include in build - Creating services to write/load xml and manipulates models - Implement MexicoModelConvertorService to convert MascModel to MexicoModel Added: masc/masc-api/src/main/java/fr/inra/masc/services/MexicoLoadModelService.java masc/masc-api/src/main/java/fr/inra/masc/services/MexicoModelConvertorService.java masc/masc-api/src/main/java/fr/inra/masc/services/MexicoSaveModelService.java masc/masc-api/src/main/xmi/mexico.zargo masc/masc-api/src/test/java/fr/inra/masc/services/MexicoModelConvertorServiceTest.java Modified: masc/masc-api/pom.xml masc/masc-api/src/main/xmi/masc.zargo Modified: masc/masc-api/pom.xml =================================================================== --- masc/masc-api/pom.xml 2011-12-09 18:13:28 UTC (rev 516) +++ masc/masc-api/pom.xml 2011-12-12 16:59:10 UTC (rev 517) @@ -93,25 +93,38 @@ <groupId>org.nuiton.eugene</groupId> <artifactId>maven-eugene-plugin</artifactId> <configuration> - <defaultPackage>fr.inra.masc</defaultPackage> - <fullPackagePath>fr.inra.masc</fullPackagePath> + <resolver>org.nuiton.util.FasterCachedResourceResolver</resolver> + <templates> + org.nuiton.eugene.java.JavaInterfaceTransformer, + org.nuiton.eugene.java.JavaBeanTransformer, + org.nuiton.eugene.java.JavaEnumerationTransformer + </templates> </configuration> <executions> <execution> + <id>masc-beans</id> <phase>generate-sources</phase> <configuration> - <inputs>zargo</inputs> - <resolver>org.nuiton.util.FasterCachedResourceResolver</resolver> - <templates> - org.nuiton.eugene.java.JavaInterfaceTransformer, - org.nuiton.eugene.java.JavaBeanTransformer, - org.nuiton.eugene.java.JavaEnumerationTransformer - </templates> + <defaultPackage>fr.inra.masc</defaultPackage> + <fullPackagePath>fr.inra.masc</fullPackagePath> + <inputs>src/main/xmi:masc.zargo</inputs> </configuration> <goals> <goal>smart-generate</goal> </goals> </execution> + <execution> + <id>mexico-beans</id> + <phase>generate-sources</phase> + <configuration> + <defaultPackage>fr.ifremer.mexico</defaultPackage> + <fullPackagePath>fr.ifremer.mexico</fullPackagePath> + <inputs>src/main/xmi:mexico.zargo</inputs> + </configuration> + <goals> + <goal>smart-generate</goal> + </goals> + </execution> </executions> </plugin> Added: masc/masc-api/src/main/java/fr/inra/masc/services/MexicoLoadModelService.java =================================================================== --- masc/masc-api/src/main/java/fr/inra/masc/services/MexicoLoadModelService.java (rev 0) +++ masc/masc-api/src/main/java/fr/inra/masc/services/MexicoLoadModelService.java 2011-12-12 16:59:10 UTC (rev 517) @@ -0,0 +1,33 @@ +package fr.inra.masc.services; + +import fr.ifremer.mexico.model.ExperienceDesign; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import java.io.File; + +/** + * @author sletellier <letellier@codelutin.com> + */ +public class MexicoLoadModelService extends MascService { + + /** Logger */ + private static Log log = LogFactory.getLog(MexicoLoadModelService.class); + + @Override + public Log getLogger() { + return log; + } + + public File loadExperienceDesign(ExperienceDesign mexicoModel, File toSave) { + + // TODO sletellier : load mexico experience design xml file + return toSave; + } + + public File loadInputDesignDesign(ExperienceDesign mexicoModel, File toSave) { + + // TODO sletellier : write mexico input design xml file + return toSave; + } +} Added: masc/masc-api/src/main/java/fr/inra/masc/services/MexicoModelConvertorService.java =================================================================== --- masc/masc-api/src/main/java/fr/inra/masc/services/MexicoModelConvertorService.java (rev 0) +++ masc/masc-api/src/main/java/fr/inra/masc/services/MexicoModelConvertorService.java 2011-12-12 16:59:10 UTC (rev 517) @@ -0,0 +1,149 @@ +package fr.inra.masc.services; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import fr.ifremer.mexico.model.*; +import fr.inra.masc.model.*; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import java.util.Collection; +import java.util.Date; +import java.util.List; +import java.util.Map; + +/** + * @author sletellier <letellier@codelutin.com> + * @since 0.1 + */ +public class MexicoModelConvertorService extends MascService { + + /** Logger */ + private static Log log = LogFactory.getLog(MexicoModelConvertorService.class); + + @Override + public Log getLogger() { + return log; + } + + public InputDesign convertMascModelToMexicoInputDesignModel(MascModel mascModel, ExperienceDesign experienceDesign) { + InputDesign inputDesign = new InputDesignImpl(); + + // experience design + inputDesign.setExperienceDesign(experienceDesign); + + // date is now + inputDesign.setDate(new Date()); + + // scenarios = options + Collection<Option> options = mascModel.getOption(); + List<Scenario> scenarios = Lists.newArrayList(); + int i = 0; + for (Option option : options) { + Scenario scenario = new ScenarioImpl(); + + // order + scenario.setOrderNumber(i++); + + // name + scenario.setName(option.getName()); + + // get factor corresponding to criteria + Map<Factor, Object> factorValues = Maps.newHashMap(); + + // optionValue = entry of factorValues + for (OptionValue optionValue : option.getOptionValue()) { + + Collection<Factor> factors = experienceDesign.getFactors(); + for (Factor factor : factors) { + String criteriaName = optionValue.getCriteria().getName(); + if (factor.getId().equals(criteriaName)) { + factorValues.put(factor, optionValue.getValue()); + } + } + } + scenario.setFactorValues(factorValues); + + scenarios.add(scenario); + } + inputDesign.setScenarios(scenarios); + + return inputDesign; + } + + public ExperienceDesign convertMascModelToMexicoExperienceDesignModel(MascModel mascModel) { + ExperienceDesign experienceDesign = new ExperienceDesignImpl(); + + // id = mascModel name + experienceDesign.setId(mascModel.getName()); + + // description + String description = StringUtils.join(mascModel.getDescription(), "\n"); + experienceDesign.setDescription(description); + + // date is now + experienceDesign.setDate(new Date()); + + // criterias = factors + Collection<Criteria> criterias = mascModel.getCriteria(); + List<Factor> factors = Lists.newArrayList(); + + for (Criteria criteria : criterias) { + factors.addAll(getFactors(criteria)); + } + experienceDesign.setFactors(factors); + + return experienceDesign; + } + + protected Collection<Factor> getFactors(Criteria criteria) { + + List<Factor> factors = Lists.newArrayList(); + + // keep only editable criterias + if (criteria instanceof EditableCriteria) { + Factor factor = new FactorImpl(); + + // id = criteria.name + factor.setId(criteria.getName()); + + // description + factor.setDescription(criteria.getDescription()); + + // scales are put in features + List<Feature> features = Lists.newArrayList(); + Collection<ScaleValue> scaleValues = criteria.getScale(); + for (ScaleValue scaleValue : scaleValues) { + Feature feature = new FeatureImpl(); + + // name + String scaleValuePrefix = ScaleValue.class.getSimpleName() + "_"; + feature.setName(scaleValuePrefix + ScaleValue.PROPERTY_NAME); + feature.setValue(scaleValue.getName()); + feature.setValueType(ValueType.STRING); + + // description + feature.setName(scaleValuePrefix + ScaleValue.PROPERTY_DESCRIPTION); + feature.setValue(scaleValue.getDescription()); + feature.setValueType(ValueType.STRING); + + // group + feature.setName(scaleValuePrefix + ScaleValue.PROPERTY_GROUP); + feature.setValue(scaleValue.getGroup()); + feature.setValueType(ValueType.STRING); + + features.add(feature); + } + factor.setFeatures(features); + + factors.add(factor); + } + + // get all children factors + for (Criteria child : criteria.getChildren()) { + factors.addAll(getFactors(child)); + } + return factors; + } +} Added: masc/masc-api/src/main/java/fr/inra/masc/services/MexicoSaveModelService.java =================================================================== --- masc/masc-api/src/main/java/fr/inra/masc/services/MexicoSaveModelService.java (rev 0) +++ masc/masc-api/src/main/java/fr/inra/masc/services/MexicoSaveModelService.java 2011-12-12 16:59:10 UTC (rev 517) @@ -0,0 +1,33 @@ +package fr.inra.masc.services; + +import fr.ifremer.mexico.model.ExperienceDesign; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import java.io.File; + +/** + * @author sletellier <letellier@codelutin.com> + */ +public class MexicoSaveModelService extends MascService { + + /** Logger */ + private static Log log = LogFactory.getLog(MexicoLoadModelService.class); + + @Override + public Log getLogger() { + return log; + } + + public File saveExperienceDesign(ExperienceDesign mexicoModel, File toSave) { + + // TODO sletellier : write mexico experience design xml file + return toSave; + } + + public File saveInputDesignDesign(ExperienceDesign mexicoModel, File toSave) { + + // TODO sletellier : write mexico input design xml file + return toSave; + } +} Modified: masc/masc-api/src/main/xmi/masc.zargo =================================================================== (Binary files differ) Added: masc/masc-api/src/main/xmi/mexico.zargo =================================================================== (Binary files differ) Property changes on: masc/masc-api/src/main/xmi/mexico.zargo ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: masc/masc-api/src/test/java/fr/inra/masc/services/MexicoModelConvertorServiceTest.java =================================================================== --- masc/masc-api/src/test/java/fr/inra/masc/services/MexicoModelConvertorServiceTest.java (rev 0) +++ masc/masc-api/src/test/java/fr/inra/masc/services/MexicoModelConvertorServiceTest.java 2011-12-12 16:59:10 UTC (rev 517) @@ -0,0 +1,74 @@ +package fr.inra.masc.services; + +import fr.ifremer.mexico.model.ExperienceDesign; +import fr.ifremer.mexico.model.InputDesign; +import fr.ifremer.mexico.model.Scenario; +import fr.inra.masc.model.*; +import org.junit.Test; + +import java.io.File; +import java.util.Collection; + +/** + * @author sletellier <letellier@codelutin.com> + * @since 0.1 + */ +public class MexicoModelConvertorServiceTest extends AbstractServiceTest { + + @Test + public void testConvertMascModelToMexicoExperienceDesignModel() throws Exception { + MexicoModelConvertorService mexicoModelConvertorService = getService(MexicoModelConvertorService.class); + File dexiTestFile = getDexiTestFile(); + MascModel mascModel = getService(LoadModelService.class).loadModel(dexiTestFile); + ExperienceDesign experienceDesign = mexicoModelConvertorService.convertMascModelToMexicoExperienceDesignModel(mascModel); + + // count masc model criteria + Collection<Criteria> criterias = mascModel.getCriteria(); + int count = 0; + for (Criteria criteria : criterias) { + count += countChildren(criteria); + } + assertEquals(count, experienceDesign.getFactors().size()); + } + + protected int countChildren(Criteria criteria) { + Collection<Criteria> children = criteria.getChildren(); + + // only editable criterias + int count = criteria instanceof EditableCriteria ? 1 : 0; + + for (Criteria child : children) { + count += countChildren(child); + } + return count; + } + + @Test + public void testConvertMascModelToMexicoInputDesignModel() throws Exception { + + File dexiTestFile = getDexiTestFile(); + MascModel mascModel = getService(LoadModelService.class).loadModel(dexiTestFile); + MexicoModelConvertorService mexicoModelConvertorService = getService(MexicoModelConvertorService.class); + ExperienceDesign experienceDesign = mexicoModelConvertorService.convertMascModelToMexicoExperienceDesignModel(mascModel); + InputDesign inputDesign = mexicoModelConvertorService.convertMascModelToMexicoInputDesignModel(mascModel, experienceDesign); + + Collection<Option> options = mascModel.getOption(); + assertEquals(options.size(), inputDesign.getScenarios().size()); + + int i = 0; + for (Option option : options) { + Scenario scenario = inputDesign.getScenarios(i++); + Collection<OptionValue> optionValues = option.getOptionValue(); + + // count option with editable criteria + int count = 0; + for (OptionValue optionValue : optionValues) { + Criteria criteria = optionValue.getCriteria(); + if (criteria instanceof EditableCriteria) { + count++; + } + } + assertEquals(count, scenario.getFactorValues().size()); + } + } +}
participants (1)
-
sletellier@users.nuiton.org