r3746 - in trunk/src: main/java/fr/ifremer/isisfish/util test/java/fr/ifremer/isisfish/util
Author: echatellier Date: 2012-08-30 15:45:31 +0200 (Thu, 30 Aug 2012) New Revision: 3746 Url: http://forge.codelutin.com/repositories/revision/isis-fish/3746 Log: fixes #1444: Fix matrix import semantic mapper for PopulationGroup Modified: trunk/src/main/java/fr/ifremer/isisfish/util/IsisMatrixSemanticMapper.java trunk/src/test/java/fr/ifremer/isisfish/util/IsisMatrixSemanticMapperTest.java Modified: trunk/src/main/java/fr/ifremer/isisfish/util/IsisMatrixSemanticMapper.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/util/IsisMatrixSemanticMapper.java 2012-08-30 12:45:25 UTC (rev 3745) +++ trunk/src/main/java/fr/ifremer/isisfish/util/IsisMatrixSemanticMapper.java 2012-08-30 13:45:31 UTC (rev 3746) @@ -31,6 +31,11 @@ import org.nuiton.topia.persistence.TopiaEntity; import fr.ifremer.isisfish.IsisFishDAOHelper; +import fr.ifremer.isisfish.entities.Population; +import fr.ifremer.isisfish.entities.PopulationDAO; +import fr.ifremer.isisfish.entities.PopulationGroup; +import fr.ifremer.isisfish.entities.PopulationGroupDAO; +import fr.ifremer.isisfish.entities.Result; import fr.ifremer.isisfish.simulator.SimulationContext; /** @@ -90,7 +95,30 @@ // In simulation context : Object value = null; try { - if (TopiaEntity.class.isAssignableFrom(type)) { + // les populations groupes sont speciaux car ils n'ont pas de + // noms. Dans l'import il sont composé du nom de la population + // et du numero de groupe séparé par +. + if (PopulationGroup.class.isAssignableFrom(type)) { + int separatorIndex = valueId.indexOf('+'); + if (separatorIndex >= 0) { + String popName = valueId.substring(0, separatorIndex); + int groupId = Integer.parseInt(valueId.substring(separatorIndex + 1)); + + TopiaContext context = SimulationContext.get().getDB(); + PopulationDAO populationDao = IsisFishDAOHelper.getPopulationDAO(context); + PopulationGroupDAO populationGroupDAO = IsisFishDAOHelper.getPopulationGroupDAO(context); + Population population = populationDao.findByName(popName); + value = populationGroupDAO.findByProperties( + PopulationGroup.PROPERTY_POPULATION, population, + PopulationGroup.PROPERTY_ID, groupId); + } else { + if (log.isWarnEnabled()) { + log.warn("PopulationGroup identifiant doesn't contains '+' separator"); + } + value = valueId; + } + } + else if (TopiaEntity.class.isAssignableFrom(type)) { TopiaContext context = SimulationContext.get().getDB(); TopiaDAO dao = IsisFishDAOHelper.getDAO(context, type); value = dao.findByProperty("name", valueId); Modified: trunk/src/test/java/fr/ifremer/isisfish/util/IsisMatrixSemanticMapperTest.java =================================================================== --- trunk/src/test/java/fr/ifremer/isisfish/util/IsisMatrixSemanticMapperTest.java 2012-08-30 12:45:25 UTC (rev 3745) +++ trunk/src/test/java/fr/ifremer/isisfish/util/IsisMatrixSemanticMapperTest.java 2012-08-30 13:45:31 UTC (rev 3746) @@ -45,6 +45,7 @@ import fr.ifremer.isisfish.AbstractIsisFishTest; import fr.ifremer.isisfish.IsisFishDAOHelper; import fr.ifremer.isisfish.datastore.SimulationStorage; +import fr.ifremer.isisfish.entities.Population; import fr.ifremer.isisfish.simulator.SimulationContext; import fr.ifremer.isisfish.types.TimeStep; @@ -149,4 +150,31 @@ Assert.assertEquals(2.0, m.getValue(0, 0, 0), 0.001); Assert.assertEquals(1.0, m.getValue(0, 0, 1), 0.001); } + + /** + * Test la conversion des entités. + * @throws IOException + * @throws TopiaException + */ + @Test + public void testImportPopulationGroup() throws IOException, TopiaException { + String data = "[1, 3, 1]\n" + + "Population:test population\n" + + "PopulationGroup:test population+2,test population+1,test population+0\n" + + "Zone:Zone test1\n" + + "0;2;0;42.0"; + + TopiaContext tx = SimulationContext.get().getDB(); + + Population pop = IsisFishDAOHelper.getPopulationDAO(tx).findByName("test population"); + List[] sems = new List[] { + Collections.singletonList(pop), + Arrays.asList(pop.getPopulationGroup().get(0), pop.getPopulationGroup().get(1), pop.getPopulationGroup().get(2)), + Collections.singletonList(IsisFishDAOHelper.getZoneDAO(tx).findByName("Zone test1")), + }; + MatrixND m = MatrixFactory.getInstance().create(sems); + m.importCSV(new StringReader(data), null); + + Assert.assertEquals(42.0, m.getValue(0, 0, 0), 0.001); + } }
participants (1)
-
echatellier@users.forge.codelutin.com