Author: tchemit Date: 2012-09-21 21:25:39 +0200 (Fri, 21 Sep 2012) New Revision: 679 Url: http://forge.codelutin.com/repositories/revision/echobase/679 Log: refs #1437: Suppression des imports (amelioration de la progression) Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/AbstractImportDataService.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/AcousticImportService.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/ImportException.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/RemoveDataConfiguration.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/RemoveDataService.java 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/AcousticRemoveDataStrategy.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/CatchesRemoveDataStrategy.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/CommonTransectRemoveDataStrategy.java 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/OperationRemoveDataStrategy.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/ResultEsduRemoveDataStrategy.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/ResultMapRemoveDataStrategy.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/ResultRegionRemoveDataStrategy.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/ResultVoyageRemoveDataStrategy.java trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/AbstractRemoveDataServiceTest.java trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/AcousticRemoveDataServiceTest.java trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/CatchesRemoveDataServiceTest.java trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/CommonAllRemoveDataServiceTest.java trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/CommonTransectRemoveDataServiceTest.java trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/OperationRemoveDataServiceTest.java trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/ResultEsduRemoveDataServiceTest.java trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/ResultMapRemoveDataServiceTest.java trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/ResultRegionRemoveDataServiceTest.java trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/ResultVoyageRemoveDataServiceTest.java Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/AbstractImportDataService.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/AbstractImportDataService.java 2012-09-21 13:25:26 UTC (rev 678) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/AbstractImportDataService.java 2012-09-21 19:25:39 UTC (rev 679) @@ -134,44 +134,18 @@ EchoBaseUser user) { Date importDate = newDate(); String importUser = user.getEmail(); - ImportLog importLog = create(getDAO(ImportLog.class), - ImportLog.PROPERTY_VOYAGE_ID, configuration.getVoyageId(), - ImportLog.PROPERTY_IMPORT_TYPE, configuration.getImportType(), - ImportLog.PROPERTY_IMPORT_USER, importUser, - ImportLog.PROPERTY_IMPORT_DATE, importDate, - ImportLog.PROPERTY_IMPORT_TEXT, configuration.getImportNotes()); - return importLog; - } - - protected String computeResultAndLogBookEntry(M configuration, - EchoBaseUser user) { - - Date importDate = newDate(); - String importUser = user.getEmail(); - - ImportLog importLog = computeImportLogEntry(configuration, user); -// -// ImportLog importLog = create(getDAO(ImportLog.class), -// ImportLog.PROPERTY_VOYAGE_ID, configuration.getVoyageId(), -// ImportLog.PROPERTY_IMPORT_TYPE, configuration.getImportType(), -// ImportLog.PROPERTY_IMPORT_USER, importUser, -// ImportLog.PROPERTY_IMPORT_DATE, importDate, -// ImportLog.PROPERTY_IMPORT_TEXT, configuration.getImportNotes()); -// - - String importType = getImportLabel(configuration); - StringBuilder buffer = new StringBuilder(); - buffer.append(importType); if (StringUtils.isNotEmpty(configuration.getImportNotes())) { - buffer.append("\nNotes :").append(configuration.getImportNotes()); + buffer.append("Notes :").append(configuration.getImportNotes()); } + List<String> importIds = Lists.newArrayList(); + for (EchoBaseCsvFileImportResult importResult : configuration.getImportResults()) { - importLog.addAllImportId(importResult.getIds()); + importIds.addAll(importResult.getIds()); StringBuilder description = new StringBuilder(); description.append("Depuis Fichier ").append(importResult.getImportFileName()); @@ -193,9 +167,38 @@ } buffer.append('\n').append(description.toString()); } + String importText = buffer.toString(); + ImportLog importLog = create(getDAO(ImportLog.class), + ImportLog.PROPERTY_VOYAGE_ID, configuration.getVoyageId(), + ImportLog.PROPERTY_IMPORT_TYPE, configuration.getImportType(), + ImportLog.PROPERTY_IMPORT_USER, importUser, + ImportLog.PROPERTY_IMPORT_DATE, importDate, + ImportLog.PROPERTY_IMPORT_TEXT, importText, + ImportLog.PROPERTY_IMPORT_ID, importIds + ); + return importLog; + } + + protected String computeResultAndLogBookEntry(M configuration, + EchoBaseUser user) { + + Date importDate = newDate(); + String importUser = user.getEmail(); + + ImportLog importLog = computeImportLogEntry(configuration, user); + + String importType = getImportLabel(configuration); + + StringBuilder buffer = new StringBuilder(); + + buffer.append(importType); + buffer.append('\n').append(importLog.getImportText()); + String result = buffer.toString(); + importLog.setImportText(result); + create(getDAO(EntityModificationLog.class), EntityModificationLog.PROPERTY_ENTITY_TYPE, "Import", EntityModificationLog.PROPERTY_ENTITY_ID, importType, Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/AcousticImportService.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/AcousticImportService.java 2012-09-21 13:25:26 UTC (rev 678) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/AcousticImportService.java 2012-09-21 19:25:39 UTC (rev 679) @@ -25,6 +25,7 @@ import com.google.common.base.Preconditions; import com.google.common.collect.Lists; +import com.google.common.collect.Sets; import fr.ifremer.echobase.EchoBaseFunctions; import fr.ifremer.echobase.EchoBasePredicates; import fr.ifremer.echobase.csv.EchoBaseCsvUtil; @@ -62,6 +63,7 @@ import java.util.List; import java.util.Locale; import java.util.Map; +import java.util.Set; import static org.nuiton.i18n.I18n.l_; @@ -178,6 +180,7 @@ Locale locale = getLocale(); String dataProcessingId = null; try { + Import<AcousticImportRow> importer = Import.newImport(csvModel, reader); DataAcquisition dataAcquisition = null; @@ -187,6 +190,9 @@ int rowNumber = 0; configuration.incrementsProgress(); + + Set<String> createdDataAcquisitions = Sets.newHashSet(); + for (AcousticImportRow row : importer) { doFlushTransaction(++rowNumber, inputFile, configuration); @@ -230,8 +236,6 @@ boolean isME70 = EchoBasePredicates.IS_ACOUSTIC_INSTRUMENT_ME70.apply(instrument); - boolean collectCellIds = true; - if (dataAcquisition == null || !instrument.equals(dataAcquisition.getAcousticInstrument())) { @@ -283,11 +287,9 @@ // collect id of the import importResult.addId(EchoBaseEntityEnum.DataAcquisition, dataAcquisition); + createdDataAcquisitions.add( + dataAcquisition.getTopiaId()); - // as the dataAcquisition is collected, then no need - // to collect cells ids - collectCellIds = false; - // add dataAcquisition to transect transect.addDataAcquisition(dataAcquisition); @@ -337,6 +339,11 @@ DataQuality dataQuality = row.getDataQuality(); + + // collect Esdu cellIds only if dataAcquisitions was not created here + boolean collectCellIds = !createdDataAcquisitions.contains( + dataAcquisition.getTopiaId()); + if (cellType == 4) { if (log.isDebugEnabled()) { @@ -360,7 +367,6 @@ // clear elementary cells elementaryCells.clear(); - if (collectCellIds) { // collect ids (dataProcessing already exists) Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/ImportException.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/ImportException.java 2012-09-21 13:25:26 UTC (rev 678) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/importdata/ImportException.java 2012-09-21 19:25:39 UTC (rev 679) @@ -24,7 +24,6 @@ package fr.ifremer.echobase.services.importdata; import fr.ifremer.echobase.io.InputFile; -import org.nuiton.util.csv.ImportRuntimeException; import java.util.Locale; @@ -48,7 +47,7 @@ super(message, cause); } - public ImportException(Locale locale, InputFile inputfile, ImportRuntimeException importError) { + public ImportException(Locale locale, InputFile inputfile, Exception importError) { this(l_(locale, "echobase.importError.fromFile", inputfile.getFile().getName(), importError.getMessage()), importError); Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/RemoveDataConfiguration.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/RemoveDataConfiguration.java 2012-09-21 13:25:26 UTC (rev 678) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/RemoveDataConfiguration.java 2012-09-21 19:25:39 UTC (rev 679) @@ -25,8 +25,6 @@ import fr.ifremer.echobase.services.AbstractEchobaseActionConfiguration; -import java.util.List; - /** * Configuration for a remve data action. * Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/RemoveDataService.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/RemoveDataService.java 2012-09-21 13:25:26 UTC (rev 678) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/RemoveDataService.java 2012-09-21 19:25:39 UTC (rev 679) @@ -31,6 +31,7 @@ import fr.ifremer.echobase.entities.EntityModificationLog; import fr.ifremer.echobase.entities.ImportLog; import fr.ifremer.echobase.entities.ImportType; +import fr.ifremer.echobase.entities.data.Voyage; import fr.ifremer.echobase.services.DecoratorService; import fr.ifremer.echobase.services.EchoBaseServiceSupport; import fr.ifremer.echobase.services.removedata.strategy.AbstractRemoveDataStrategy; @@ -48,14 +49,12 @@ import org.apache.commons.logging.LogFactory; import org.nuiton.topia.TopiaException; import org.nuiton.topia.persistence.TopiaDAO; -import org.nuiton.util.StringUtil; import org.nuiton.util.TimeLog; import org.nuiton.util.decorator.Decorator; -import java.util.Collections; import java.util.Comparator; -import java.util.EnumMap; import java.util.List; +import java.util.Map; import java.util.Set; /** @@ -69,102 +68,120 @@ /** Logger. */ private static final Log log = LogFactory.getLog(RemoveDataService.class); - public static final TimeLog TIME_LOG = new TimeLog(RemoveDataService.class); - protected static EnumMap<ImportType, Class<? extends AbstractRemoveDataStrategy>> strategies; + protected static Map<ImportType, Class<? extends AbstractRemoveDataStrategy>> strategies; - public static Class<? extends AbstractRemoveDataStrategy> getStrategy(ImportType importType) { - if (strategies == null) { - strategies = Maps.newEnumMap(ImportType.class); - strategies.put(ImportType.VOYAGE, LegacyVoyageRemoveDataStrategy.class); - strategies.put(ImportType.COMMON_ALL, CommonAllRemoveDataStrategy.class); - strategies.put(ImportType.COMMON_TRANSECT, CommonTransectRemoveDataStrategy.class); - strategies.put(ImportType.OPERATION, OperationRemoveDataStrategy.class); - strategies.put(ImportType.CATCHES, CatchesRemoveDataStrategy.class); - strategies.put(ImportType.ACOUSTIC, AcousticRemoveDataStrategy.class); - strategies.put(ImportType.RESULT_VOYAGE, ResultVoyageRemoveDataStrategy.class); - strategies.put(ImportType.RESULT_ESDU, ResultEsduRemoveDataStrategy.class); - strategies.put(ImportType.RESULT_MAP, ResultMapRemoveDataStrategy.class); - strategies.put(ImportType.RESULT_REGION, ResultRegionRemoveDataStrategy.class); - Preconditions.checkState( - ImportType.values().length == strategies.size(), - "It miss some remove data strategies..."); + public static final Comparator<ImportLog> IMPORT_LOG_COMPARATOR = new Comparator<ImportLog>() { + @Override + public int compare(ImportLog o1, ImportLog o2) { + int result = o1.getVoyageId().compareTo(o2.getVoyageId()); + if (result == 0) { + result = o1.getImportType().ordinal() - + o2.getImportType().ordinal(); + } + return result; } - return strategies.get(importType); + }; + + protected static class ImportContext { + + final String importLogId; + + final long nbSteps; + + final AbstractRemoveDataStrategy strategy; + + final Voyage voyage; + + public ImportContext(String importLogId, + long nbSteps, + AbstractRemoveDataStrategy strategy, + Voyage voyage) { + this.importLogId = importLogId; + this.nbSteps = nbSteps; + this.strategy = strategy; + this.voyage = voyage; + } } public String removeImport(RemoveDataConfiguration model, EchoBaseUser user) { - // compute nb steps + // build map of strategy to apply + // and compute nb steps int nbSteps = 0; - List<ImportLog> importsToTreat = Lists.newArrayList(); + + Map<ImportLog, ImportContext> toTreat = + Maps.newTreeMap(IMPORT_LOG_COMPARATOR); + for (String id : model.getImportLogIds()) { ImportLog importLog = getEntityById(ImportLog.class, id); - nbSteps += importLog.getImportId().size() + 3; - importsToTreat.add(importLog); + + Class<? extends AbstractRemoveDataStrategy> strategyType = + getStrategy(importLog); + AbstractRemoveDataStrategy strategy = getService(strategyType); + strategy.setProgressModel(model); + Voyage voyage = getEntityById(Voyage.class, importLog.getVoyageId()); + long l = strategy.computeNbSteps(voyage, importLog); + ImportContext importContext = new ImportContext(id, l + 3, strategy, voyage); + toTreat.put(importLog, importContext); + if (log.isInfoEnabled()) { + log.info("Nb steps for importLog " + id + ": " + l); + } + nbSteps += importContext.nbSteps; } model.setNbSteps(nbSteps); - // sort import logs from importType - Collections.sort(importsToTreat, new Comparator<ImportLog>() { - @Override - public int compare(ImportLog o1, ImportLog o2) { - return o1.getImportType().ordinal() - o2.getImportType().ordinal(); - } - }); StringBuilder result = new StringBuilder(); - for (String id : model.getImportLogIds()) { - String importResult = removeImport(model, id, user); + for (Map.Entry<ImportLog, ImportContext> entry : toTreat.entrySet()) { + String importResult = removeImport(model, entry.getValue(), user); result.append(importResult).append('\n'); } return result.toString().trim(); } public String removeImport(RemoveDataConfiguration model, - String importLogId, EchoBaseUser user) { + ImportContext importContext, + EchoBaseUser user) { - ImportLog importLog = getEntityById(ImportLog.class, importLogId); + // check that importLog still exists + ImportLog importLog = getEntityById(ImportLog.class, + importContext.importLogId); + AbstractRemoveDataStrategy strategy = importContext.strategy; + if (importLog == null) { // import was already removed (from a previously remove I guess) + long nbStreps = importContext.nbSteps; + for (long i = 0; i < nbStreps; i++) { + strategy.incrementOp( + "Skip steps (importLog was already removed)"); + } return "\n"; } - ImportType importType = importLog.getImportType(); - - Class<? extends AbstractRemoveDataStrategy> strategyType = - getStrategy(importType); - long s0 = TimeLog.getTime(); - AbstractRemoveDataStrategy strategy = getService(strategyType); try { - strategy.doRemove(model, importLog); + strategy.doRemove(importContext.voyage, importLog); } catch (TopiaException e) { throw new EchoBaseTechnicalException("Could not remove data", e); } s0 = TIME_LOG.log(s0, "removeData"); - List<ImportLog> removedImportLog = removeObsoleteImportLogs(strategy, - importLog); - - model.incrementsProgress(); + List<ImportLog> removed = removeObsoleteImportLogs(strategy, importLog); + strategy.incrementOp("Remove import Log " + importLog.getTopiaId()); s0 = TIME_LOG.log(s0, "removeObsoleteImportLogs"); // add result in log book and compute resume to show in result - String result = computeLogBookEntry(importLog, - removedImportLog, - user, - TimeLog.getTime() - s0); + String result = computeLogBookEntry(importLog, removed, user); + strategy.incrementOp("Log book entry for " + importLog.getTopiaId()); - model.incrementsProgress(); // do commit - commitTransaction("Could not remove import " + - strategy.getImportLabel()); - - model.incrementsProgress(); + commitTransaction("Could not remove import " + strategy.getImportLabel()); + strategy.incrementOp("Commit importLog " + importLog.getTopiaId()); + TIME_LOG.log(s0, "Commit importLog " + importLog.getTopiaId()); return result; } @@ -219,10 +236,30 @@ return result; } + protected Class<? extends AbstractRemoveDataStrategy> getStrategy(ImportLog importLog) { + + if (strategies == null) { + strategies = Maps.newEnumMap(ImportType.class); + strategies.put(ImportType.VOYAGE, LegacyVoyageRemoveDataStrategy.class); + strategies.put(ImportType.COMMON_ALL, CommonAllRemoveDataStrategy.class); + strategies.put(ImportType.COMMON_TRANSECT, CommonTransectRemoveDataStrategy.class); + strategies.put(ImportType.OPERATION, OperationRemoveDataStrategy.class); + strategies.put(ImportType.CATCHES, CatchesRemoveDataStrategy.class); + strategies.put(ImportType.ACOUSTIC, AcousticRemoveDataStrategy.class); + strategies.put(ImportType.RESULT_VOYAGE, ResultVoyageRemoveDataStrategy.class); + strategies.put(ImportType.RESULT_ESDU, ResultEsduRemoveDataStrategy.class); + strategies.put(ImportType.RESULT_MAP, ResultMapRemoveDataStrategy.class); + strategies.put(ImportType.RESULT_REGION, ResultRegionRemoveDataStrategy.class); + Preconditions.checkState( + ImportType.values().length == strategies.size(), + "It miss some remove data strategies..."); + } + return strategies.get(importLog.getImportType()); + } + protected String computeLogBookEntry(ImportLog importLog, List<ImportLog> obsoleteImportLogs, - EchoBaseUser user, - long time) { + EchoBaseUser user) { Decorator<ImportLog> decorator = getService(DecoratorService.class). getDecorator(getLocale(), ImportLog.class, null); @@ -230,9 +267,6 @@ StringBuilder buffer = new StringBuilder(); buffer.append("Suppression import "); buffer.append(decorator.toString(importLog)); - buffer.append("\nOpération réalisée en "); - buffer.append(StringUtil.convertTime(time)); - for (ImportLog obsoleteImportLog : obsoleteImportLogs) { buffer.append("\n- Suppression en cascade de l'import "); @@ -245,7 +279,7 @@ log.debug("Log text: " + result); } create(getDAO(EntityModificationLog.class), - EntityModificationLog.PROPERTY_ENTITY_TYPE, "Remove Import", + EntityModificationLog.PROPERTY_ENTITY_TYPE, "Removed Import", EntityModificationLog.PROPERTY_ENTITY_ID, decorator.toString(importLog), EntityModificationLog.PROPERTY_MODIFICATION_USER, user.getEmail(), EntityModificationLog.PROPERTY_MODIFICATION_DATE, newDate(), @@ -255,9 +289,7 @@ } protected boolean isIdExists(String id) { - try { - boolean result = getDAOFromId(id).existByTopiaId(id); return result; } catch (TopiaException e) { 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-21 13:25:26 UTC (rev 678) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/AbstractRemoveDataStrategy.java 2012-09-21 19:25:39 UTC (rev 679) @@ -45,13 +45,13 @@ import fr.ifremer.echobase.entities.data.VoyageDAO; import fr.ifremer.echobase.services.EchoBaseServiceContext; import fr.ifremer.echobase.services.EchoBaseServiceSupport; -import fr.ifremer.echobase.services.removedata.RemoveDataConfiguration; +import fr.ifremer.echobase.services.ProgressModel; import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.nuiton.topia.TopiaException; import org.nuiton.topia.framework.TopiaContextImplementor; import org.nuiton.topia.framework.TopiaSQLQuery; -import org.nuiton.topia.persistence.TopiaDAO; -import org.nuiton.topia.persistence.TopiaEntity; import java.sql.Connection; import java.sql.PreparedStatement; @@ -70,8 +70,14 @@ */ public abstract class AbstractRemoveDataStrategy extends EchoBaseServiceSupport { + /** Logger. */ + private static final Log log = + LogFactory.getLog(AbstractRemoveDataStrategy.class); + protected String importLabel; + protected ProgressModel progressModel; + public String getImportLabel() { return importLabel; } @@ -95,7 +101,6 @@ @Override public void setServiceContext(EchoBaseServiceContext serviceContext) { super.setServiceContext(serviceContext); - dataProcessingDAO = getDAO(DataProcessing.class, DataProcessingDAO.class); cellDAO = getDAO(Cell.class, CellDAO.class); echotypeDAO = getDAO(Echotype.class, EchotypeDAO.class); @@ -106,42 +111,44 @@ resultDAO = getDAO(Result.class, ResultDAO.class); } + public void setProgressModel(ProgressModel progressModel) { + this.progressModel = progressModel; + } + + public abstract long computeNbSteps(Voyage voyage, ImportLog importLog); + protected abstract void removeImportData(Voyage voyage, String id) throws TopiaException; public abstract Set<ImportType> getPossibleSubImportType(); - public void doRemove(RemoveDataConfiguration model, ImportLog importLog) throws TopiaException { + public void doRemove(Voyage voyage, ImportLog importLog) throws TopiaException { - Voyage voyage = voyageDao.findByTopiaId(importLog.getVoyageId()); - removePreDataInVoyage(voyage); - int currentIndex = 0; + flushTransaction("Could not flush transaction"); + for (String importId : importLog.getImportId()) { - currentIndex++; - if (currentIndex % 1000 == 0) { - flushTransaction("Could not flush transaction"); - } - model.incrementsProgress(); - try { removeImportData(voyage, importId); } catch (TopiaException e) { throw new EchoBaseTechnicalException(e); } + + incrementOp("ImportLog " + importId + "Removed"); } flushTransaction("Could not flush transaction"); removePostDataInVoyage(voyage); - flushTransaction("Could not flush transaction"); } + long opIndex; + protected void removePreDataInVoyage(Voyage voyage) throws TopiaException { // by default nothing to remove } @@ -150,18 +157,6 @@ // by default nothing to remove } - protected <E extends TopiaEntity> E removeEntity(TopiaDAO<E> dao, - String id) throws TopiaException { - - // get entity to delete - E entity = dao.findByTopiaId(id); - - // delete it - delete(dao, entity); - - return entity; - } - protected void canNotDealWithId(String id) { throw new IllegalStateException( "Can not deal with this type of id " + id + @@ -178,10 +173,12 @@ // remove it from the voyage entity.removeLengthWeightKey(lengthWeightKey); } + incrementOp("Remove lengthWeightKey " + lengthWeightKey.getTopiaId()); } protected void removeLengthAgeKey(Voyage entity, LengthAgeKey lengthAgeKey) throws TopiaException { + lengthAgeKeyDAO.delete(lengthAgeKey); if (entity != null) { @@ -189,8 +186,10 @@ // remove it from the voyage entity.removeLengthAgeKey(lengthAgeKey); } + incrementOp("Remove lengthAgeKey " + lengthAgeKey.getTopiaId()); } + protected void removeEchotype(Voyage entity, Echotype echotype) throws TopiaException { @@ -201,11 +200,11 @@ // delete echotype echotypeDAO.delete(echotype); + incrementOp("Remove echotype " + echotype.getTopiaId()); } protected void removePostCell(Voyage entity, Cell cell) throws TopiaException { - if (entity != null) { // remove it from the voyage @@ -214,6 +213,8 @@ // delete postcell cellDAO.delete(cell); + + incrementOp("Remove postCell " + cell.getTopiaId()); } protected void removeVoyage(Voyage entity) throws TopiaException { @@ -245,9 +246,6 @@ // clean this data entity.clearPostCell(); - - flushTransaction( - "Could not flush transaction after removing postCells"); } } @@ -285,6 +283,7 @@ for (String cellId : cellIds) { Cell cell = cellDAO.findByTopiaId(cellId); + if (cell != null && !cell.isResultEmpty()) { Collection<Result> cellResult = cell.getResult(); // for (Result result : cellResult) { @@ -293,9 +292,43 @@ resultDAO.deleteAll(cellResult); cell.clearResult(); } + incrementOp("Remove cell " + cellId + " results"); } } + protected long countVoyageCellResults(final Voyage voyage) { + TopiaSQLQuery<Long> query = new TopiaSQLQuery<Long>() { + @Override + protected PreparedStatement prepareQuery(Connection connection) throws SQLException { + String hql = "SELECT count(c.topiaid) FROM Transit ta, " + + " Transect te, " + + " DataAcquisition da, " + + " DataProcessing dp, " + + " Cell c " + + "WHERE ta.voyage = ? " + + "AND ta.topiaId = te.transit " + + "AND te.topiaId = da.transect " + + "AND da.topiaId = dp.dataacquisition " + + "AND dp.topiaId = c.dataprocessing"; + PreparedStatement result = connection.prepareStatement(hql); + result.setString(1, voyage.getTopiaId()); + return result; + } + + @Override + protected Long prepareResult(ResultSet set) throws SQLException { + return set.getLong(1); + } + }; + try { + Long result = query.findSingleResult( + (TopiaContextImplementor) getTransaction()); + return result; + } catch (TopiaException e) { + throw new EchoBaseTechnicalException(e); + } + } + protected void removeVoyageOrphanCells() throws TopiaException { // Get all cells of the voyage TopiaSQLQuery<String> query = new TopiaSQLQuery<String>() { @@ -316,8 +349,59 @@ List<String> cellIds = query.findMultipleResult( (TopiaContextImplementor) getTransaction()); for (String cellId : cellIds) { + Cell cell = cellDAO.findByTopiaId(cellId); cellDAO.delete(cell); + incrementOp("Remove orphan cell " + cellId); } } + + protected long countVoyageOrphanCells(final Voyage voyage) { + TopiaSQLQuery<Long> query = new TopiaSQLQuery<Long>() { + @Override + protected PreparedStatement prepareQuery(Connection connection) throws SQLException { + String hql = "SELECT count(c2.topiaid) FROM Transit ta, " + + " Transect te, " + + " DataAcquisition da, " + + " DataProcessing dp, " + + " Cell c, Cell c2 " + + "WHERE ta.voyage = ? " + + "AND ta.topiaId = te.transit " + + "AND te.topiaId = da.transect " + + "AND da.topiaId = dp.dataacquisition " + + "AND dp.topiaId = c.dataprocessing " + + "AND c.topiaId = c2.cell"; + PreparedStatement result = connection.prepareStatement(hql); + result.setString(1, voyage.getTopiaId()); + return result; + } + + @Override + protected Long prepareResult(ResultSet set) throws SQLException { + return set.getLong(1); + } + }; + try { + Long result = query.findSingleResult( + (TopiaContextImplementor) getTransaction()); + return result; + } catch (TopiaException e) { + throw new EchoBaseTechnicalException(e); + } + } + + public void incrementOp(String message) { + opIndex++; + if (opIndex % 1000 == 0) { + flushTransaction("Could not flush transaction"); + } + progressModel.incrementsProgress(); + + if (opIndex % 100 == 0) { + if (log.isInfoEnabled()) { + log.info(String.format( + "[%1$4f] %2$s", progressModel.getProgress(), message)); + } + } + } } Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/AcousticRemoveDataStrategy.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/AcousticRemoveDataStrategy.java 2012-09-21 13:25:26 UTC (rev 678) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/AcousticRemoveDataStrategy.java 2012-09-21 19:25:39 UTC (rev 679) @@ -24,6 +24,7 @@ */ import com.google.common.collect.Sets; +import fr.ifremer.echobase.entities.ImportLog; import fr.ifremer.echobase.entities.ImportType; import fr.ifremer.echobase.entities.data.Cell; import fr.ifremer.echobase.entities.data.DataAcquisition; @@ -53,7 +54,6 @@ private static final Log log = LogFactory.getLog(AcousticRemoveDataStrategy.class); - protected DataAcquisitionDAO dataAcquisitionDAO; protected TransectDAO transectDAO; @@ -67,14 +67,34 @@ } @Override - protected void removePostDataInVoyage(Voyage voyage) throws TopiaException { + public long computeNbSteps(Voyage voyage, ImportLog importLog) { + long result = importLog.sizeImportId(); + + // add all cell results + result += countVoyageCellResults(voyage); + + // add all postCell + result += voyage.sizePostCell(); + + // add all orphan cells + result += countVoyageOrphanCells(voyage); + return result; + } + + @Override + protected void removePreDataInVoyage(Voyage voyage) throws TopiaException { + // remove all cell results removeVoyageCellResults(voyage); // remove post cell from top voyage removeVoyagePostCell(voyage); + } + @Override + protected void removePostDataInVoyage(Voyage voyage) throws TopiaException { + // remove orphans cells removeVoyageOrphanCells(); } @@ -93,22 +113,25 @@ // remove dataAcquisition delete(dataAcquisitionDAO, dataAcquisition); - if (log.isInfoEnabled()) { - log.info("DataAcquisition " + dataAcquisition.getTopiaId() + " was removed"); + if (log.isDebugEnabled()) { + log.debug(dataAcquisition.getTopiaId() + " was removed"); } } else if (id.startsWith(Cell.class.getName())) { // get cell Cell cell = cellDAO.findByTopiaId(id); + if (cell == null) { + throw new IllegalStateException("Could not find cell " + id); + } // remove it from the dataAcquisition DataProcessing dataProcessing = dataProcessingDAO.findContainsCell(cell); dataProcessing.removeCell(cell); // remove cell delete(cellDAO, cell); - if (log.isInfoEnabled()) { - log.info("Cell " + cell.getTopiaId() + " was removed"); + if (log.isDebugEnabled()) { + log.debug(cell.getTopiaId() + " was removed"); } } else { canNotDealWithId(id); Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/CatchesRemoveDataStrategy.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/CatchesRemoveDataStrategy.java 2012-09-21 13:25:26 UTC (rev 678) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/CatchesRemoveDataStrategy.java 2012-09-21 19:25:39 UTC (rev 679) @@ -23,6 +23,7 @@ * #L% */ +import fr.ifremer.echobase.entities.ImportLog; import fr.ifremer.echobase.entities.ImportType; import fr.ifremer.echobase.entities.data.Operation; import fr.ifremer.echobase.entities.data.OperationDAO; @@ -63,6 +64,12 @@ } @Override + public long computeNbSteps(Voyage voyage, ImportLog importLog) { + long result = importLog.sizeImportId(); + return result; + } + + @Override protected void removeImportData(Voyage voyage, String id) throws TopiaException { if (id.startsWith(Sample.class.getName())) { @@ -76,8 +83,8 @@ // remove sample delete(sampleDAO, sample); - if (log.isInfoEnabled()) { - log.info("Sample " + sample.getTopiaId() + " was removed"); + if (log.isDebugEnabled()) { + log.debug(sample.getTopiaId() + " was removed"); } } else { canNotDealWithId(id); 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-21 13:25:26 UTC (rev 678) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/CommonAllRemoveDataStrategy.java 2012-09-21 19:25:39 UTC (rev 679) @@ -24,6 +24,7 @@ */ import com.google.common.collect.Sets; +import fr.ifremer.echobase.entities.ImportLog; import fr.ifremer.echobase.entities.ImportType; import fr.ifremer.echobase.entities.data.Voyage; import org.apache.commons.logging.Log; @@ -54,6 +55,19 @@ } @Override + public long computeNbSteps(Voyage voyage, ImportLog importLog) { + + long result = importLog.sizeImportId(); + + // add all echotype + result += voyage.sizeEchotype(); + + // add all orphan cells + result += countVoyageOrphanCells(voyage); + return result; + } + + @Override protected void removeImportData(Voyage voyage, String id) throws TopiaException { if (id.startsWith(Voyage.class.getName())) { @@ -64,8 +78,8 @@ // delete it removeVoyage(entity); - if (log.isInfoEnabled()) { - log.info("Voyage " + entity.getTopiaId() + " was removed"); + if (log.isDebugEnabled()) { + log.debug(entity.getTopiaId() + " was removed"); } } else { canNotDealWithId(id); Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/CommonTransectRemoveDataStrategy.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/CommonTransectRemoveDataStrategy.java 2012-09-21 13:25:26 UTC (rev 678) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/CommonTransectRemoveDataStrategy.java 2012-09-21 19:25:39 UTC (rev 679) @@ -24,6 +24,7 @@ */ import com.google.common.collect.Sets; +import fr.ifremer.echobase.entities.ImportLog; import fr.ifremer.echobase.entities.ImportType; import fr.ifremer.echobase.entities.data.Transect; import fr.ifremer.echobase.entities.data.TransectDAO; @@ -64,8 +65,27 @@ } @Override + public long computeNbSteps(Voyage voyage, ImportLog importLog) { + + long result = importLog.sizeImportId(); + + // add all cell results + result += countVoyageCellResults(voyage); + + // add all postCell + result += voyage.sizePostCell(); + + // add all orphan cells + result += countVoyageOrphanCells(voyage); + return result; + } + + @Override protected void removePreDataInVoyage(Voyage voyage) throws TopiaException { + // remove all cell results + removeVoyageCellResults(voyage); + // remove postCell from voyage removeVoyagePostCell(voyage); } @@ -92,8 +112,8 @@ // delete it delete(transectDAO, transect); - if (log.isInfoEnabled()) { - log.info("Transect " + transect.getTopiaId() + " was removed"); + if (log.isDebugEnabled()) { + log.debug(transect.getTopiaId() + " was removed"); } } else { 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-21 13:25:26 UTC (rev 678) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/LegacyVoyageRemoveDataStrategy.java 2012-09-21 19:25:39 UTC (rev 679) @@ -24,6 +24,7 @@ */ import com.google.common.collect.Sets; +import fr.ifremer.echobase.entities.ImportLog; import fr.ifremer.echobase.entities.ImportType; import fr.ifremer.echobase.entities.data.Voyage; import org.apache.commons.logging.Log; @@ -54,6 +55,22 @@ } @Override + public long computeNbSteps(Voyage voyage, ImportLog importLog) { + + long result = importLog.sizeImportId(); + + // add all cell results + result += countVoyageCellResults(voyage); + + // add all postCell + result += voyage.sizePostCell(); + + // add all orphan cells + result += countVoyageOrphanCells(voyage); + return result; + } + + @Override protected void removeImportData(Voyage voyage, String id) throws TopiaException { if (id.startsWith(Voyage.class.getName())) { @@ -64,8 +81,8 @@ // delete it removeVoyage(entity); - if (log.isInfoEnabled()) { - log.info("Voyage " + entity.getTopiaId() + " was removed"); + if (log.isDebugEnabled()) { + log.debug(entity.getTopiaId() + " was removed"); } } else { canNotDealWithId(id); Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/OperationRemoveDataStrategy.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/OperationRemoveDataStrategy.java 2012-09-21 13:25:26 UTC (rev 678) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/OperationRemoveDataStrategy.java 2012-09-21 19:25:39 UTC (rev 679) @@ -24,6 +24,7 @@ */ import com.google.common.collect.Sets; +import fr.ifremer.echobase.entities.ImportLog; import fr.ifremer.echobase.entities.ImportType; import fr.ifremer.echobase.entities.data.Operation; import fr.ifremer.echobase.entities.data.OperationDAO; @@ -61,7 +62,13 @@ operationDAO = getDAO(Operation.class, OperationDAO.class); transectDAO = getDAO(Transect.class, TransectDAO.class); + } + @Override + public long computeNbSteps(Voyage voyage, ImportLog importLog) { + + long result = importLog.sizeImportId(); + return result; } @Override @@ -78,8 +85,8 @@ // remove it delete(operationDAO, operation); - if (log.isInfoEnabled()) { - log.info("Operation " + operation.getTopiaId() + " was removed"); + if (log.isDebugEnabled()) { + log.debug(operation.getTopiaId() + " was removed"); } } else { canNotDealWithId(id); Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/ResultEsduRemoveDataStrategy.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/ResultEsduRemoveDataStrategy.java 2012-09-21 13:25:26 UTC (rev 678) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/ResultEsduRemoveDataStrategy.java 2012-09-21 19:25:39 UTC (rev 679) @@ -23,6 +23,7 @@ * #L% */ +import fr.ifremer.echobase.entities.ImportLog; import fr.ifremer.echobase.entities.ImportType; import fr.ifremer.echobase.entities.data.Cell; import fr.ifremer.echobase.entities.data.Result; @@ -49,6 +50,13 @@ LogFactory.getLog(ResultEsduRemoveDataStrategy.class); @Override + public long computeNbSteps(Voyage voyage, ImportLog importLog) { + + long result = importLog.sizeImportId(); + return result; + } + + @Override protected void removeImportData(Voyage voyage, String id) throws TopiaException { if (id.startsWith(Result.class.getName())) { @@ -63,7 +71,7 @@ // remove result delete(resultDAO, result); if (log.isDebugEnabled()) { - log.debug("Result " + result.getTopiaId() + " was removed"); + log.debug(result.getTopiaId() + " was removed"); } } else { canNotDealWithId(id); Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/ResultMapRemoveDataStrategy.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/ResultMapRemoveDataStrategy.java 2012-09-21 13:25:26 UTC (rev 678) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/ResultMapRemoveDataStrategy.java 2012-09-21 19:25:39 UTC (rev 679) @@ -23,6 +23,7 @@ * #L% */ +import fr.ifremer.echobase.entities.ImportLog; import fr.ifremer.echobase.entities.ImportType; import fr.ifremer.echobase.entities.data.Cell; import fr.ifremer.echobase.entities.data.Voyage; @@ -48,6 +49,13 @@ LogFactory.getLog(ResultMapRemoveDataStrategy.class); @Override + public long computeNbSteps(Voyage voyage, ImportLog importLog) { + + long result = importLog.sizeImportId(); + return result; + } + + @Override protected void removeImportData(Voyage voyage, String id) throws TopiaException { if (id.startsWith(Cell.class.getName())) { @@ -63,8 +71,8 @@ // remove cell delete(cellDAO, cell); - if (log.isInfoEnabled()) { - log.info("Map Cell " + cell.getTopiaId() + " was removed"); + if (log.isDebugEnabled()) { + log.debug(cell.getTopiaId() + " was removed"); } } else { canNotDealWithId(id); Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/ResultRegionRemoveDataStrategy.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/ResultRegionRemoveDataStrategy.java 2012-09-21 13:25:26 UTC (rev 678) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/ResultRegionRemoveDataStrategy.java 2012-09-21 19:25:39 UTC (rev 679) @@ -23,6 +23,7 @@ * #L% */ +import fr.ifremer.echobase.entities.ImportLog; import fr.ifremer.echobase.entities.ImportType; import fr.ifremer.echobase.entities.data.Cell; import fr.ifremer.echobase.entities.data.Voyage; @@ -48,6 +49,13 @@ LogFactory.getLog(ResultRegionRemoveDataStrategy.class); @Override + public long computeNbSteps(Voyage voyage, ImportLog importLog) { + + long result = importLog.sizeImportId(); + return result; + } + + @Override protected void removeImportData(Voyage voyage, String id) throws TopiaException { if (id.startsWith(Cell.class.getName())) { @@ -63,8 +71,8 @@ // remove cell delete(cellDAO, cell); - if (log.isInfoEnabled()) { - log.info("Region Cell " + cell.getTopiaId() + " was removed"); + if (log.isDebugEnabled()) { + log.debug(cell.getTopiaId() + " was removed"); } } else { canNotDealWithId(id); Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/ResultVoyageRemoveDataStrategy.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/ResultVoyageRemoveDataStrategy.java 2012-09-21 13:25:26 UTC (rev 678) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/removedata/strategy/ResultVoyageRemoveDataStrategy.java 2012-09-21 19:25:39 UTC (rev 679) @@ -24,6 +24,7 @@ */ import com.google.common.collect.Sets; +import fr.ifremer.echobase.entities.ImportLog; import fr.ifremer.echobase.entities.ImportType; import fr.ifremer.echobase.entities.data.Echotype; import fr.ifremer.echobase.entities.data.LengthAgeKey; @@ -51,14 +52,27 @@ LogFactory.getLog(ResultVoyageRemoveDataStrategy.class); @Override + public long computeNbSteps(Voyage voyage, ImportLog importLog) { + + long result = importLog.sizeImportId(); + + // add all cell results + result += countVoyageCellResults(voyage); + + // add all postCell + result += voyage.sizePostCell(); + + // add all orphan cells + result += countVoyageOrphanCells(voyage); + return result; + } + + @Override protected void removePreDataInVoyage(final Voyage voyage) throws TopiaException { - removeVoyagePostCell(voyage); - removeVoyageCellResults(voyage); - flushTransaction( - "Could not flush transaction after deleting data from voyage"); + removeVoyagePostCell(voyage); } @Override @@ -71,8 +85,8 @@ removeEchotype(voyage, entity); - if (log.isInfoEnabled()) { - log.info("Echotype " + entity.getTopiaId() + " was removed"); + if (log.isDebugEnabled()) { + log.debug(entity.getTopiaId() + " was removed"); } } else if (id.startsWith(LengthAgeKey.class.getName())) { @@ -81,8 +95,8 @@ removeLengthAgeKey(voyage, entity); - if (log.isInfoEnabled()) { - log.info("LengthAgeKey " + entity.getTopiaId() + " was removed"); + if (log.isDebugEnabled()) { + log.debug(entity.getTopiaId() + " was removed"); } } else if (id.startsWith(LengthWeightKey.class.getName())) { @@ -91,8 +105,8 @@ removeLengthWeightKey(voyage, entity); - if (log.isInfoEnabled()) { - log.info("LengthWeightKey " + entity.getTopiaId() + " was removed"); + if (log.isDebugEnabled()) { + log.debug(entity.getTopiaId() + " was removed"); } } else { canNotDealWithId(id); Modified: trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/AbstractRemoveDataServiceTest.java =================================================================== --- trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/AbstractRemoveDataServiceTest.java 2012-09-21 13:25:26 UTC (rev 678) +++ trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/AbstractRemoveDataServiceTest.java 2012-09-21 19:25:39 UTC (rev 679) @@ -23,6 +23,7 @@ * #L% */ +import com.google.common.collect.Lists; import fr.ifremer.echobase.entities.EchoBaseUser; import fr.ifremer.echobase.entities.ImportLog; import fr.ifremer.echobase.entities.ImportType; @@ -271,7 +272,31 @@ // createResultMapImportv2(); } - protected void removeImport(String importId) { + protected void removeImport(String importId, String... shoudDeleteIds) throws TopiaException { + + List<String> existingId = Lists.newArrayList( + importCommonAll1Id, + importCommonTransect1Id, + importOperation1Id, + importCatches1Id, + importAcoustic1Id, + importResultVoyage1Id, + importResultEsdu1Id, + importResultRegion1Id, + importResultMap1Id, + importCommonAll2Id, + importCommonTransect2Id, + + voyage1Id, transect1Id, transect1_2Id, operation1Id, + totalSample1Id, subSample1Id, biometrySample1Id, + cellEsdu1Id, cellElementary1Id, resultEsdu1Id, + cellRegion1Id, resultRegion1Id, + cellMap1Id, resultMap1Id, + echotype1Id, lengthAgeKey1Id, lengthWeightKey1Id, + voyage2Id, transect2Id, transect2_2Id + ); + List<String> deletedId = Lists.newArrayList(); + RemoveDataConfiguration conf = new RemoveDataConfiguration(); conf.setImportLogIds(new String[]{importId}); @@ -280,13 +305,15 @@ EchoBaseUser fakeUser = createFakeUser(); service.removeImport(conf, fakeUser); - } + for (String id : shoudDeleteIds) { + existingId.remove(id); + deletedId.add(id); + } - protected <E extends TopiaEntity> void assertEntityDeleted(String... entityIds) throws TopiaException { - for (String entityId : entityIds) { + for (String entityId : deletedId) { if (entityId == null) continue; - E entity = getEntity(entityId); + TopiaEntity entity = getEntity(entityId); if (entity instanceof ImportLog) { Assert.assertNull("ImporTLog with id " + entityId + " (" + ((ImportLog) entity).getImportType() + ") should have been deleted, but is still in db :(", entity); @@ -294,12 +321,10 @@ Assert.assertNull("Entity with id " + entityId + " should have been deleted, but is still in db :(", entity); } } - } - protected <E extends TopiaEntity> void assertEntityExists(String... entityIds) throws TopiaException { - for (String entityId : entityIds) { + for (String entityId : existingId) { if (entityId == null) continue; - E entity = getEntity(entityId); + TopiaEntity entity = getEntity(entityId); Assert.assertNotNull("Entity with id " + entityId + " should NOT have been deleted, but is deleted in db :(", entity); } Modified: trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/AcousticRemoveDataServiceTest.java =================================================================== --- trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/AcousticRemoveDataServiceTest.java 2012-09-21 13:25:26 UTC (rev 678) +++ trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/AcousticRemoveDataServiceTest.java 2012-09-21 19:25:39 UTC (rev 679) @@ -26,7 +26,6 @@ import fr.ifremer.echobase.services.removedata.RemoveDataService; import fr.ifremer.echobase.services.removedata.strategy.AcousticRemoveDataStrategy; import org.junit.Test; -import org.nuiton.topia.TopiaException; /** * Test{@link RemoveDataService} with {@link AcousticRemoveDataStrategy}. @@ -37,30 +36,20 @@ public class AcousticRemoveDataServiceTest extends AbstractRemoveDataServiceTest { @Test - public void removeImport() throws TopiaException { + public void removeImport() throws Exception { - removeImport(importAcoustic1Id); + removeImport(// import to remove + importAcoustic1Id, + // data that should be removed + dataAcquisition1Id, cellEsdu1Id, cellElementary1Id, + cellRegion1Id, cellMap1Id, + resultEsdu1Id, resultRegion1Id, resultMap1Id, + // importLog that should be removed + importAcoustic1Id, + importResultEsdu1Id, + importResultRegion1Id, + importResultMap1Id + ); - // dataAquisition 1 is deleted - assertEntityDeleted(dataAcquisition1Id, cellEsdu1Id, cellElementary1Id, - cellRegion1Id, cellMap1Id, - resultEsdu1Id, resultRegion1Id, resultMap1Id); - - // and all his imports - assertEntityDeleted(importAcoustic1Id, - importResultEsdu1Id, - importResultRegion1Id, - importResultMap1Id); - - // voyage 1 other imports stay - assertEntityExists(voyage1Id, transect1Id, operation1Id, - totalSample1Id, subSample1Id, biometrySample1Id); - - // and all his imports - assertEntityExists(importCommonAll1Id, - importCommonTransect1Id, - importOperation1Id, - importCatches1Id, - importResultVoyage1Id); } } Modified: trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/CatchesRemoveDataServiceTest.java =================================================================== --- trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/CatchesRemoveDataServiceTest.java 2012-09-21 13:25:26 UTC (rev 678) +++ trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/CatchesRemoveDataServiceTest.java 2012-09-21 19:25:39 UTC (rev 679) @@ -39,26 +39,14 @@ @Test public void removeImport() throws TopiaException { - removeImport(importCatches1Id); + removeImport(// import to remove + importCatches1Id, + // data that should be removed + totalSample1Id, subSample1Id, biometrySample1Id, + // importLog that should be removed + importCatches1Id + ); - // sample1 are deleted - assertEntityDeleted(totalSample1Id, subSample1Id, biometrySample1Id); - // and all his imports - assertEntityDeleted(importCatches1Id); - - // voyage 1 other imports stay - assertEntityExists(voyage1Id, transect1Id, operation1Id, - cellEsdu1Id, cellElementary1Id); - - // and all his imports - assertEntityExists(importCommonAll1Id, - importCommonTransect1Id, - importOperation1Id, - importAcoustic1Id, - importResultVoyage1Id, - importResultEsdu1Id, - importResultRegion1Id, - importResultMap1Id); } } Modified: trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/CommonAllRemoveDataServiceTest.java =================================================================== --- trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/CommonAllRemoveDataServiceTest.java 2012-09-21 13:25:26 UTC (rev 678) +++ trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/CommonAllRemoveDataServiceTest.java 2012-09-21 19:25:39 UTC (rev 679) @@ -39,61 +39,36 @@ @Test public void removeImport1() throws TopiaException { - removeImport(importCommonAll1Id); - - // voyage 1 is deleted - assertEntityDeleted(voyage1Id, transect1Id, operation1Id, - totalSample1Id, subSample1Id, biometrySample1Id, - cellEsdu1Id, cellElementary1Id, resultEsdu1Id, - echotype1Id, lengthAgeKey1Id, lengthWeightKey1Id); - - // and all his imports - assertEntityDeleted(importCommonAll1Id, - importCommonTransect1Id, - importOperation1Id, - importCatches1Id, - importAcoustic1Id, - importResultVoyage1Id, - importResultEsdu1Id, - importResultRegion1Id, - importResultMap1Id); - - // voyage 2 still in db - assertEntityExists(voyage2Id, transect2Id); - - // and all his imports - assertEntityExists(importCommonAll2Id, - importCommonTransect2Id); - + removeImport(// import to remove + importCommonAll1Id, + // data that should be removed + voyage1Id, transect1Id, operation1Id, transect1_2Id, + totalSample1Id, subSample1Id, biometrySample1Id, + cellEsdu1Id, cellElementary1Id, resultEsdu1Id, + cellRegion1Id, resultRegion1Id, + cellMap1Id, resultMap1Id, + echotype1Id, lengthAgeKey1Id, lengthWeightKey1Id, + // importLog that should be removed + importCommonAll1Id, + importCommonTransect1Id, + importOperation1Id, + importCatches1Id, + importAcoustic1Id, + importResultVoyage1Id, + importResultEsdu1Id, + importResultRegion1Id, + importResultMap1Id); } @Test public void removeImport2() throws TopiaException { - removeImport(importCommonAll2Id); - - // voyage 2 is deleted - assertEntityDeleted(voyage2Id); - - // and all his imports - assertEntityDeleted(importCommonAll2Id, - importCommonTransect2Id); - - // voyage 1 still in db - assertEntityExists(voyage1Id, transect1Id, operation1Id, - totalSample1Id, subSample1Id, biometrySample1Id, - cellEsdu1Id, cellElementary1Id, resultEsdu1Id, - echotype1Id, lengthAgeKey1Id, lengthWeightKey1Id); - - // and all his imports - assertEntityExists(importCommonAll1Id, - importCommonTransect1Id, - importOperation1Id, - importCatches1Id, - importAcoustic1Id, - importResultVoyage1Id, - importResultEsdu1Id, - importResultRegion1Id, - importResultMap1Id); + removeImport(// import to remove + importCommonAll2Id, + // data that should be removed + voyage2Id, transect2Id, transect2_2Id, + // importLog that should be removed + importCommonAll2Id, + importCommonTransect2Id); } } Modified: trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/CommonTransectRemoveDataServiceTest.java =================================================================== --- trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/CommonTransectRemoveDataServiceTest.java 2012-09-21 13:25:26 UTC (rev 678) +++ trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/CommonTransectRemoveDataServiceTest.java 2012-09-21 19:25:39 UTC (rev 679) @@ -39,70 +39,27 @@ @Test public void removeImport1() throws TopiaException { - removeImport(importCommonTransect1Id); - - // transect 1 is deleted - assertEntityDeleted(transect1_2Id); - - // and all his imports - assertEntityDeleted(importCommonTransect1Id); - - // voyage 1 is still here - assertEntityExists(voyage1Id, transect1Id, operation1Id, - totalSample1Id, subSample1Id, biometrySample1Id, - cellEsdu1Id, cellElementary1Id, resultEsdu1Id); - - // and all his imports (exception transect1 one) - assertEntityExists(importCommonAll1Id, - importOperation1Id, - importCatches1Id, - importAcoustic1Id, - importResultVoyage1Id, - importResultEsdu1Id); - - - // voyage 2 still in db - assertEntityExists(voyage2Id, transect2Id); - - // and all his imports - assertEntityExists(importCommonAll2Id, - importCommonTransect2Id); + removeImport(// import to remove + importCommonTransect1Id, + // data that should be removed + transect1_2Id, resultEsdu1Id, + cellRegion1Id, resultRegion1Id, + cellMap1Id, resultMap1Id, + // importLog that should be removed + importCommonTransect1Id, + importResultEsdu1Id, + importResultMap1Id, + importResultRegion1Id); } @Test public void removeImport2() throws TopiaException { - removeImport(importCommonTransect2Id); - - // transect 2 is deleted - assertEntityDeleted(transect2_2Id); - - // and all his imports - assertEntityDeleted(importCommonTransect2Id); - - - // voyage 2 is still here - assertEntityExists(voyage2Id, transect2Id); - - // and all his imports - assertEntityExists(importCommonAll2Id); - - - // voyage 1 still in db - assertEntityExists(voyage1Id, transect1Id, operation1Id, - totalSample1Id, subSample1Id, biometrySample1Id, - cellEsdu1Id, cellElementary1Id, resultEsdu1Id, - echotype1Id, lengthAgeKey1Id,lengthWeightKey1Id); - - // and all his imports - assertEntityExists(importCommonAll1Id, - importCommonTransect1Id, - importOperation1Id, - importCatches1Id, - importAcoustic1Id, - importResultVoyage1Id, - importResultEsdu1Id, - importResultRegion1Id, - importResultMap1Id); + removeImport(// import to remove + importCommonTransect2Id, + // data that should be removed + transect2_2Id, + // importLog that should be removed + importCommonTransect2Id); } } Modified: trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/OperationRemoveDataServiceTest.java =================================================================== --- trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/OperationRemoveDataServiceTest.java 2012-09-21 13:25:26 UTC (rev 678) +++ trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/OperationRemoveDataServiceTest.java 2012-09-21 19:25:39 UTC (rev 679) @@ -39,26 +39,12 @@ @Test public void removeImport() throws TopiaException { - removeImport(importOperation1Id); - - // operation 1 is deleted - assertEntityDeleted(operation1Id); - - // and all his imports - assertEntityDeleted(importOperation1Id); - - // voyage 1 other imports stay - assertEntityExists(voyage1Id, transect1Id, - cellEsdu1Id, cellElementary1Id, resultEsdu1Id, - echotype1Id, lengthAgeKey1Id, lengthWeightKey1Id); - - // and all his imports - assertEntityExists(importCommonAll1Id, - importCommonTransect1Id, - importAcoustic1Id, - importResultVoyage1Id, - importResultEsdu1Id, - importResultRegion1Id, - importResultMap1Id); + removeImport(// import to remove + importOperation1Id, + // data that should be removed + operation1Id, + totalSample1Id, subSample1Id, biometrySample1Id, + // importLog that should be removed + importOperation1Id, importCatches1Id); } } Modified: trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/ResultEsduRemoveDataServiceTest.java =================================================================== --- trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/ResultEsduRemoveDataServiceTest.java 2012-09-21 13:25:26 UTC (rev 678) +++ trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/ResultEsduRemoveDataServiceTest.java 2012-09-21 19:25:39 UTC (rev 679) @@ -39,29 +39,12 @@ @Test public void removeImport() throws TopiaException { - removeImport(importResultEsdu1Id); - - // esdu cell result are deleted - assertEntityDeleted(resultEsdu1Id); - - // and all his imports - assertEntityDeleted(importResultEsdu1Id); - - // voyage 1 other imports stay - assertEntityExists(voyage1Id, transect1Id, operation1Id, - totalSample1Id, subSample1Id, biometrySample1Id, - dataAcquisition1Id, cellEsdu1Id, cellElementary1Id, - echotype1Id, lengthAgeKey1Id, lengthWeightKey1Id); - - // and all his imports - assertEntityExists(importCommonAll1Id, - importCommonTransect1Id, - importOperation1Id, - importCatches1Id, - importAcoustic1Id, - importResultVoyage1Id, - importResultRegion1Id, - importResultMap1Id); + removeImport(// import to remove + importResultEsdu1Id, + // data that should be removed + resultEsdu1Id, + // importLog that should be removed + importResultEsdu1Id); } } Modified: trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/ResultMapRemoveDataServiceTest.java =================================================================== --- trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/ResultMapRemoveDataServiceTest.java 2012-09-21 13:25:26 UTC (rev 678) +++ trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/ResultMapRemoveDataServiceTest.java 2012-09-21 19:25:39 UTC (rev 679) @@ -39,7 +39,11 @@ @Test public void removeImport() throws TopiaException { - removeImport(importResultMap1Id); - + removeImport(// import to remove + importResultMap1Id, + // data that should be removed + cellMap1Id, resultMap1Id, + // importLog that should be removed + importResultMap1Id); } } Modified: trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/ResultRegionRemoveDataServiceTest.java =================================================================== --- trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/ResultRegionRemoveDataServiceTest.java 2012-09-21 13:25:26 UTC (rev 678) +++ trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/ResultRegionRemoveDataServiceTest.java 2012-09-21 19:25:39 UTC (rev 679) @@ -39,27 +39,11 @@ @Test public void removeImport() throws TopiaException { - removeImport(importResultRegion1Id); - - // esdu cell result are deleted - assertEntityDeleted(cellRegion1Id, resultRegion1Id); - - // and all his imports - assertEntityDeleted(importResultRegion1Id); - - // voyage 1 other imports stay - assertEntityExists(voyage1Id, transect1Id, operation1Id, - totalSample1Id, subSample1Id, biometrySample1Id, - dataAcquisition1Id, cellEsdu1Id, cellElementary1Id, resultEsdu1Id, - echotype1Id, lengthAgeKey1Id, lengthWeightKey1Id); - - // and all his imports - assertEntityExists(importCommonAll1Id, - importCommonTransect1Id, - importOperation1Id, - importCatches1Id, - importAcoustic1Id, - importResultVoyage1Id, - importResultMap1Id); + removeImport(// import to remove + importResultRegion1Id, + // data that should be removed + cellRegion1Id, resultRegion1Id, + // importLog that should be removed + importResultRegion1Id); } } Modified: trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/ResultVoyageRemoveDataServiceTest.java =================================================================== --- trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/ResultVoyageRemoveDataServiceTest.java 2012-09-21 13:25:26 UTC (rev 678) +++ trunk/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/ResultVoyageRemoveDataServiceTest.java 2012-09-21 19:25:39 UTC (rev 679) @@ -39,29 +39,16 @@ @Test public void removeImport() throws TopiaException { - removeImport(importResultVoyage1Id); - - // voyage "results" are deleted - assertEntityDeleted(echotype1Id, lengthAgeKey1Id, lengthWeightKey1Id, - cellRegion1Id, cellMap1Id, - resultEsdu1Id, resultRegion1Id, resultMap1Id); - - // and all his imports - assertEntityDeleted(importResultVoyage1Id, - importResultEsdu1Id, - importResultRegion1Id, - importResultMap1Id); - - // voyage 1 other imports stay - assertEntityExists(voyage1Id, transect1Id, operation1Id, - totalSample1Id, subSample1Id, biometrySample1Id, - dataAcquisition1Id, cellEsdu1Id, cellElementary1Id); - - // and all his imports - assertEntityExists(importCommonAll1Id, - importCommonTransect1Id, - importOperation1Id, - importCatches1Id, - importAcoustic1Id); + removeImport(// import to remove + importResultVoyage1Id, + // data that should be removed + echotype1Id, lengthAgeKey1Id, lengthWeightKey1Id, + cellRegion1Id, cellMap1Id, + resultEsdu1Id, resultRegion1Id, resultMap1Id, + // importLog that should be removed + importResultVoyage1Id, + importResultEsdu1Id, + importResultRegion1Id, + importResultMap1Id); } }