Author: bpoussin Date: 2016-11-09 18:45:08 +0100 (Wed, 09 Nov 2016) New Revision: 4371 Url: http://forge.codelutin.com/projects/isis-fish/repository/revisions/4371 Log: premiere version fonctionnel Evolution #8737: Export / Import des ?\195?\169l?\195?\169ments d'une r?\195?\169gion, soit pour import dans une autre r?\195?\169gion, soit pour fusion de deux r?\195?\169gions Modified: trunk/src/main/java/fr/ifremer/isisfish/entities/MetierImpl.java trunk/src/main/java/fr/ifremer/isisfish/entities/PopulationImpl.java trunk/src/main/java/fr/ifremer/isisfish/entities/RegionImportJson.java trunk/src/main/java/fr/ifremer/isisfish/entities/SpeciesImpl.java Modified: trunk/src/main/java/fr/ifremer/isisfish/entities/MetierImpl.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/entities/MetierImpl.java 2016-11-09 15:24:51 UTC (rev 4370) +++ trunk/src/main/java/fr/ifremer/isisfish/entities/MetierImpl.java 2016-11-09 17:45:08 UTC (rev 4371) @@ -31,7 +31,9 @@ import fr.ifremer.isisfish.datastore.RegionStorage; import fr.ifremer.isisfish.datastore.StorageException; import fr.ifremer.isisfish.types.Month; +import java.util.List; + /** * Implantation des operations pour l'entité Metier. * @@ -59,6 +61,18 @@ } } + /** + * Surcharge car avec une aggregation (lien fort) il ne faut pas remplacer + * la collection, mais vider celle qui existe et y mettre les nouveaux elements + * sinon hibernate perd la tete et leve des exceptions (detecter lors de l'implantation + * de l'import json) + */ + @Override + public void setMetierSeasonInfo(List<MetierSeasonInfo> metierSeasonInfo) { + clearMetierSeasonInfo(); + addAllMetierSeasonInfo(metierSeasonInfo); + } + /* * @see fr.ifremer.isisfish.entities.Metier#getMetierSeasonInfo(fr.ifremer.isisfish.types.Month) */ Modified: trunk/src/main/java/fr/ifremer/isisfish/entities/PopulationImpl.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/entities/PopulationImpl.java 2016-11-09 15:24:51 UTC (rev 4370) +++ trunk/src/main/java/fr/ifremer/isisfish/entities/PopulationImpl.java 2016-11-09 17:45:08 UTC (rev 4371) @@ -78,6 +78,31 @@ private static final long serialVersionUID = 1L; /** + * Surcharge car avec une aggregation (lien fort) il ne faut pas remplacer + * la collection, mais vider celle qui existe et y mettre les nouveaux elements + * sinon hibernate perd la tete et leve des exceptions (detecter lors de l'implantation + * de l'import json) + * @param populationGroup + */ + @Override + public void setPopulationGroup(List<PopulationGroup> populationGroup) { + clearPopulationGroup(); + addAllPopulationGroup(populationGroup); + } + + /** + * Surcharge car avec une aggregation (lien fort) il ne faut pas remplacer + * la collection, mais vider celle qui existe et y mettre les nouveaux elements + * sinon hibernate perd la tete et leve des exceptions (detecter lors de l'implantation + * de l'import json) + */ + @Override + public void setPopulationSeasonInfo(List<PopulationSeasonInfo> populationSeasonInfo) { + clearPopulationSeasonInfo(); + addAllPopulationSeasonInfo(populationSeasonInfo); + } + + /** * Overwrite delete. * @throws TopiaException */ Modified: trunk/src/main/java/fr/ifremer/isisfish/entities/RegionImportJson.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/entities/RegionImportJson.java 2016-11-09 15:24:51 UTC (rev 4370) +++ trunk/src/main/java/fr/ifremer/isisfish/entities/RegionImportJson.java 2016-11-09 17:45:08 UTC (rev 4371) @@ -159,7 +159,9 @@ LinkedHashSet<TopiaEntity> possible = new LinkedHashSet<TopiaEntity>(); possible.add(dao.findByTopiaId(id)); - possible.addAll(dao.findAllByProperty("name", details.get("name"))); + if (details.containsKey("name")) { + possible.addAll(dao.findAllByProperty("name", details.get("name"))); + } // possible.addAll(dao.findAllByProperties(details)); ask(context, toString, details, possible); @@ -186,6 +188,7 @@ int result = JOptionPane.showOptionDialog(null, new Object[]{ String.format("You try to import '%s'", toString), + "", "Possible answer are:", "None: don't import nor reuse object", "Reuse: use object already in current Region (make your choice in next combobox).", @@ -245,26 +248,6 @@ } -// static protected class TopiaTypeResolver extends SimpleAbstractTypeResolver { -// static private Log log = LogFactory.getLog(TopiaTypeResolver.class); -// @Override -// public JavaType findTypeMapping(DeserializationConfig config, JavaType type) { -// JavaType result = super.findTypeMapping(config, type); -// if (result == null) { -// Class<?> src = type.getRawClass(); -// if (TopiaEntity.class.isAssignableFrom(src) && !src.getSimpleName().endsWith("Impl")) { -// try { -// Class<?> dest = Class.forName(src.getName() + "Impl"); -// result = config.getTypeFactory().constructSpecializedType(type, dest); -// } catch (ClassNotFoundException eee) { -// log.error("Can't create class for " + src.getName() + "Impl", eee); -// } -// } -// } -// return result; -// } -// } - /** to use log facility, just put in your code: log.info(\"...\"); */ static private Log log = LogFactory.getLog(RegionImportJson.class); @@ -273,7 +256,6 @@ protected JsonNode json; protected LinkedHashMap<String, TopiaEntity> entities; protected JsonNode jsonEntities; -// protected ObjectMapper mapper; protected TopiaEntity currentEntity; /** @@ -289,17 +271,6 @@ entities = new LinkedHashMap<String, TopiaEntity>(); -// mapper = new ObjectMapper(); -// mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); -// SimpleModule isisModule = new SimpleModule("IsisModule"); -// isisModule.setAbstractTypes(new TopiaTypeResolver()); -// isisModule.addDeserializer(Month.class, new MonthJsonDeserializer()) -// .addDeserializer(TimeUnit.class, new TimeUnitJsonDeserializer()) -// .addDeserializer(RangeOfValues.class, new RangeOfValuesJsonDeserializer()) -// .addDeserializer(MatrixND.class, new MatrixNDJsonDeserializer(this)) -// .addDeserializer(TopiaEntity.class, new TopiaEntityJsonDeserializer(this)); -// mapper.registerModule(isisModule); - ObjectMapper m = new ObjectMapper(); json = m.readTree(r); jsonEntities = json.get("#entities"); @@ -344,57 +315,6 @@ } } -// /** -// * Return entity with given id. If not already converted, convert it and -// * add it in global entities converted pool -// * @param id -// * @return -// */ -// private TopiaEntity getEntity(String id, DeserializationContext ctxt) { -// try { -// TopiaEntity result = entities.get(id); -// if (result == null) { -// JsonNode node = jsonEntities.get(id); -// -// Map<String, Object> details = new HashMap<String, Object>(); -// for (Iterator<Entry<String, JsonNode>> i = node.fields(); i.hasNext();) { -// Entry<String, JsonNode> e = i.next(); -// if (!e.getKey().startsWith("#")) { -// details.put(e.getKey(), e.getValue().asText()); -// } -// } -// -// TopiaEntity o; -// String toString = node.get("#toString").asText(); -// merge.choice(mergeContext, id, toString, details); -// switch (mergeContext.lastAnswer) { -// case ABORT: -// throw new IsisFishRuntimeException("Import aborted by user"); -// case NONE: -// o = null; -// break; -// case REUSE: -// o = mergeContext.getReuseEntity(); -// break; -// default: -// // import -// Class clazz = Class.forName(node.get("#class").asText()); -// o = (TopiaEntity)clazz.newInstance(); -// JavaType type = ctxt.constructType(clazz); -// JsonDeserializer<Object> des = ctxt.findNonContextualValueDeserializer(type); -// o = (TopiaEntity)des.deserialize(node.traverse(), ctxt, o); -//// o = (TopiaEntity)mapper.convertValue(node, clazz); -// break; -// } -// -// entities.put(id, o); -// } -// return result; -// } catch (Exception eee) { -// throw new RuntimeException(eee); -// } -// } - static protected class RegionVisitor implements EntityVisitor { protected RegionMerge merge; @@ -579,89 +499,4 @@ public void clear() { } } - - - -// -// private static class MatrixNDJsonDeserializer extends JsonDeserializer<MatrixND> { -// -// protected RegionImportJson importer; -// -// public MatrixNDJsonDeserializer(final RegionImportJson importer) { -// this.importer = importer; -// } -// -// @Override -// public MatrixND deserialize(JsonParser p, final DeserializationContext ctxt) throws IOException, JsonProcessingException { -// ObjectCodec oc = p.getCodec(); -// JsonNode node = oc.readTree(p); -// String mat = node.asText(); -// -// MatrixCSVHelper matrixCSVHelper = new MatrixCSVHelper(new EntitySemanticsDecorator( -// new EntitySemanticsDecorator.EntityProvider() { -// @Override -// public Object findById(String id) { -// Object result = importer.getEntity(id, ctxt); -// return result; -// } -// })); -// -// MatrixND result = matrixCSVHelper.readMatrix(mat); -// return result; -// } -// -// } -// -// private static class TopiaEntityJsonDeserializer extends JsonDeserializer<TopiaEntity> { -// -// protected RegionImportJson importer; -// -// public TopiaEntityJsonDeserializer(RegionImportJson importer) { -// this.importer = importer; -// } -// -// @Override -// public TopiaEntity deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException { -// ObjectCodec oc = p.getCodec(); -// JsonNode node = oc.readTree(p); -// String id = node.asText(); -// TopiaEntity result = importer.getEntity(id, ctxt); -// return result; -// } -// -// } -// -// private static class MonthJsonDeserializer extends JsonDeserializer<Month> { -// @Override -// public Month deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException { -// ObjectCodec oc = p.getCodec(); -// JsonNode node = oc.readTree(p); -// int m = node.asInt(); -// Month result = Month.MONTH[m]; -// return result; -// } -// } -// -// private static class TimeUnitJsonDeserializer extends JsonDeserializer<TimeUnit> { -// @Override -// public TimeUnit deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException { -// ObjectCodec oc = p.getCodec(); -// JsonNode node = oc.readTree(p); -// int v = node.asInt(); -// TimeUnit result = new TimeUnit(v); -// return result; -// } -// } -// -// private static class RangeOfValuesJsonDeserializer extends JsonDeserializer<RangeOfValues> { -// @Override -// public RangeOfValues deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException { -// ObjectCodec oc = p.getCodec(); -// JsonNode node = oc.readTree(p); -// String v = node.asText(); -// RangeOfValues result = new RangeOfValues(v); -// return result; -// } -// } - } Modified: trunk/src/main/java/fr/ifremer/isisfish/entities/SpeciesImpl.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/entities/SpeciesImpl.java 2016-11-09 15:24:51 UTC (rev 4370) +++ trunk/src/main/java/fr/ifremer/isisfish/entities/SpeciesImpl.java 2016-11-09 17:45:08 UTC (rev 4371) @@ -28,6 +28,7 @@ import fr.ifremer.isisfish.IsisFishRuntimeException; import fr.ifremer.isisfish.datastore.RegionStorage; import fr.ifremer.isisfish.datastore.StorageException; +import java.util.Collection; /** * Implantation des operations pour l'entité Species. @@ -55,6 +56,18 @@ } } + /** + * Surcharge car avec une aggregation (lien fort) il ne faut pas remplacer + * la collection, mais vider celle qui existe et y mettre les nouveaux elements + * sinon hibernate perd la tete et leve des exceptions (detecter lors de l'implantation + * de l'import json) + */ + @Override + public void setPopulation(Collection<Population> population) { + clearPopulation(); + addAllPopulation(population); + } + /* * @see fr.ifremer.isisfish.entities.FisheryRegionAbstract#toString() */
participants (1)
-
bpoussin@users.forge.codelutin.com