From 4116b8f293c29363cef1cbdc2b025bbd4039d875 Mon Sep 17 00:00:00 2001 From: gpawel <gpawel> Date: Thu, 28 Jul 2011 11:03:20 +0000 Subject: [PATCH] [LMS-2415] more batching SVN: 22280 --- .../generic/server/business/bo/TrashBO.java | 122 ++++++++++++++++-- 1 file changed, 112 insertions(+), 10 deletions(-) diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/TrashBO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/TrashBO.java index 42e69244ba8..e190a076af3 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/TrashBO.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/TrashBO.java @@ -17,14 +17,16 @@ package ch.systemsx.cisd.openbis.generic.server.business.bo; import java.util.ArrayList; +import java.util.Collection; +import java.util.HashSet; import java.util.List; +import java.util.Set; import org.springframework.dao.DataAccessException; import ch.systemsx.cisd.openbis.generic.server.batch.BatchOperationExecutor; import ch.systemsx.cisd.openbis.generic.server.batch.IBatchOperation; import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDAOFactory; -import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDataDAO; import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDeletionDAO; import ch.systemsx.cisd.openbis.generic.server.dataaccess.ISampleDAO; import ch.systemsx.cisd.openbis.generic.shared.basic.TechId; @@ -79,6 +81,52 @@ public class TrashBO extends AbstractBusinessObject implements ITrashBO } } + private abstract static class AbstractQueryBatchOperation implements IBatchOperation<TechId> + { + private final EntityKind entityKind; + + private final List<TechId> entityIds; + + private final String operationName; + + private final Set<TechId> results = new HashSet<TechId>(); + + public AbstractQueryBatchOperation(EntityKind entityKind, List<TechId> entityIds, + String operationName) + { + this.entityKind = entityKind; + this.entityIds = entityIds; + this.operationName = operationName; + } + + public abstract Collection<TechId> listAction(List<TechId> entities); + + public void execute(List<TechId> entities) + { + results.addAll(listAction(entities)); + } + + public List<TechId> getAllEntities() + { + return entityIds; + } + + public String getEntityName() + { + return entityKind.getLabel(); + } + + public String getOperationName() + { + return operationName; + } + + public List<TechId> getResults() + { + return new ArrayList<TechId>(results); + } + } + private DeletionPE deletion; public TrashBO(IDAOFactory daoFactory, Session session) @@ -143,27 +191,81 @@ public class TrashBO extends AbstractBusinessObject implements ITrashBO private void trashSampleDependentChildrenAndComponents(List<TechId> sampleIds) { - ISampleDAO sampleDAO = getSampleDAO(); - trashSamples(new ArrayList<TechId>(sampleDAO.listSampleIdsByParentIds(sampleIds))); - trashSamples(sampleDAO.listSampleIdsByContainerIds(sampleIds)); + final ISampleDAO sampleDAO = getSampleDAO(); + + AbstractQueryBatchOperation batchOperation = + new AbstractQueryBatchOperation(EntityKind.SAMPLE, sampleIds, + "listSampleIdsByParentIds") + { + @Override + public Collection<TechId> listAction(List<TechId> entities) + { + return sampleDAO.listSampleIdsByParentIds(entities); + } + }; + BatchOperationExecutor.executeInBatches(batchOperation); + trashSamples(batchOperation.getResults()); + + batchOperation = + new AbstractQueryBatchOperation(EntityKind.SAMPLE, sampleIds, + "listSampleIdsByContainerIds") + { + @Override + public Collection<TechId> listAction(List<TechId> entities) + { + return sampleDAO.listSampleIdsByContainerIds(entities); + } + }; + BatchOperationExecutor.executeInBatches(batchOperation); + trashSamples(batchOperation.getResults()); } private void trashSampleDependentDataSets(List<TechId> sampleIds) { - IDataDAO dataDAO = getDataDAO(); - trashDataSets(dataDAO.listDataSetIdsBySampleIds(sampleIds)); + AbstractQueryBatchOperation batchOperation = + new AbstractQueryBatchOperation(EntityKind.DATA_SET, sampleIds, + "listDataSetIdsBySampleIds") + { + @Override + public List<TechId> listAction(List<TechId> entities) + { + return getDataDAO().listDataSetIdsBySampleIds(entities); + } + }; + BatchOperationExecutor.executeInBatches(batchOperation); + trashDataSets(batchOperation.getResults()); } private void trashExperimentDependentSamples(List<TechId> experimentIds) { - ISampleDAO sampleDAO = getSampleDAO(); - trashSamples(sampleDAO.listSampleIdsByExperimentIds(experimentIds)); + AbstractQueryBatchOperation batchOperation = + new AbstractQueryBatchOperation(EntityKind.SAMPLE, experimentIds, + "listSampleIdsByExperimentIds") + { + @Override + public List<TechId> listAction(List<TechId> entities) + { + return getSampleDAO().listSampleIdsByExperimentIds(entities); + } + }; + BatchOperationExecutor.executeInBatches(batchOperation); + trashSamples(batchOperation.getResults()); } private void trashExperimentDependentDataSets(List<TechId> experimentIds) { - IDataDAO dataDAO = getDataDAO(); - trashDataSets(dataDAO.listDataSetIdsByExperimentIds(experimentIds)); + AbstractQueryBatchOperation batchOperation = + new AbstractQueryBatchOperation(EntityKind.DATA_SET, experimentIds, + "listDataSetIdsByExperimentIds") + { + @Override + public List<TechId> listAction(List<TechId> entities) + { + return getDataDAO().listDataSetIdsByExperimentIds(entities); + } + }; + BatchOperationExecutor.executeInBatches(batchOperation); + trashDataSets(batchOperation.getResults()); } public void revertDeletion(TechId deletionId) -- GitLab