Author: tchemit Date: 2012-09-23 14:03:21 +0200 (Sun, 23 Sep 2012) New Revision: 700 Url: http://forge.codelutin.com/repositories/revision/echobase/700 Log: refs #1437: Suppression des imports (suppression des Category li?\195?\169es aux echotypes) Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/AbstractRemoveDataStrategy.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/CommonAllRemoveDataStrategy.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/LegacyVoyageRemoveDataStrategy.java Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/AbstractRemoveDataStrategy.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/AbstractRemoveDataStrategy.java 2012-09-23 10:41:45 UTC (rev 699) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/AbstractRemoveDataStrategy.java 2012-09-23 12:03:21 UTC (rev 700) @@ -128,7 +128,6 @@ for (String importId : importLog.getImportId()) { - try { removeImportData(voyage, importId); } catch (TopiaException e) { @@ -161,6 +160,27 @@ " from service " + this); } + protected void removeVoyage(Voyage entity) throws TopiaException { + + // get categories to remove after + List<Category> categories = getCategoryUsingEchotype(entity); + + // dettach obsolete categories from their echotypes + for (Category category : categories) { + category.setEchotype(null); + } + + // delete it + delete(voyageDao, entity); + + // remove obsolete categories + for (Category category : categories) { + + categoryDAO.delete(category); + incrementOp("Remove orphan category " + category.getTopiaId()); + } + } + protected void removeLengthWeightKey(Voyage entity, LengthWeightKey lengthWeightKey) throws TopiaException { @@ -187,7 +207,6 @@ incrementOp("Remove lengthAgeKey " + lengthAgeKey.getTopiaId()); } - protected void removeEchotype(Voyage entity, Echotype echotype) throws TopiaException { @@ -374,6 +393,21 @@ } } + private List<Category> getCategoryUsingEchotype(final Voyage voyage) throws TopiaException { + String hql = "SELECT DISTINCT c FROM VoyageImpl v, CategoryImpl c WHERE " + + "v = :voyage AND c.echotype in elements(v.echotype)"; + List<Category> result = categoryDAO.findAllByQuery(hql, "voyage", voyage); + return result; + } + + + protected long countCategoryUsingEchotype(final Voyage voyage) throws TopiaException { + String hql = "SELECT COUNT(DISTINCT c) FROM VoyageImpl v, CategoryImpl c WHERE " + + "v = :voyage AND c.echotype in elements(v.echotype)"; + long result = categoryDAO.countByQuery(hql, "voyage", voyage); + return result; + } + public void incrementOp(String message) { opIndex++; if (opIndex % 1000 == 0) { Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/CommonAllRemoveDataStrategy.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/CommonAllRemoveDataStrategy.java 2012-09-23 10:41:45 UTC (rev 699) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/CommonAllRemoveDataStrategy.java 2012-09-23 12:03:21 UTC (rev 700) @@ -59,6 +59,9 @@ long result = importLog.sizeImportId(); + // add all categories to be removed after + result += countCategoryUsingEchotype(voyage); + // add all orphan cells result += countVoyageOrphanCells(voyage); return result; @@ -73,7 +76,7 @@ Voyage entity = voyageDao.findByTopiaId(id); // delete it - delete(voyageDao, entity); + removeVoyage(entity); if (log.isDebugEnabled()) { log.debug(entity.getTopiaId() + " was removed"); Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/LegacyVoyageRemoveDataStrategy.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/LegacyVoyageRemoveDataStrategy.java 2012-09-23 10:41:45 UTC (rev 699) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/LegacyVoyageRemoveDataStrategy.java 2012-09-23 12:03:21 UTC (rev 700) @@ -31,6 +31,7 @@ import org.apache.commons.logging.LogFactory; import org.nuiton.topia.TopiaException; +import java.util.List; import java.util.Set; /** @@ -59,6 +60,9 @@ long result = importLog.sizeImportId(); + // add all categories to be removed after + result += countCategoryUsingEchotype(voyage); + // add all orphan cells result += countVoyageOrphanCells(voyage); return result; @@ -73,7 +77,7 @@ Voyage entity = voyageDao.findByTopiaId(id); // delete it - delete(voyageDao, entity); + removeVoyage(entity); if (log.isDebugEnabled()) { log.debug(entity.getTopiaId() + " was removed");