From ded618a1cba8a648b5cf2211a73bf8e16bf73d0b Mon Sep 17 00:00:00 2001 From: buczekp <buczekp> Date: Thu, 14 Jul 2011 12:37:19 +0000 Subject: [PATCH] [LMS-2366] methods for finding trashed entities in DAO + basic tests SVN: 22141 --- .../generic/server/business/bo/ITrashBO.java | 6 +- .../generic/server/business/bo/TrashBO.java | 24 +++---- .../dataaccess/IAuthorizationDAOFactory.java | 2 + .../server/dataaccess/IDeletionDAO.java | 11 +++ .../server/dataaccess/db/AbstractDAO.java | 17 +++-- .../db/AuthorizationDAOFactory.java | 9 +++ .../generic/server/dataaccess/db/DataDAO.java | 2 +- .../server/dataaccess/db/DeletionDAO.java | 51 +++++++++++-- .../server/dataaccess/db/ExternalDataDAO.java | 2 +- .../server/dataaccess/db/SampleDAO.java | 5 +- .../shared/dto/properties/EntityKind.java | 27 ++++--- .../server/dataaccess/db/DeletionDAOTest.java | 72 +++++++++++++++++++ 12 files changed, 190 insertions(+), 38 deletions(-) create mode 100644 openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/DeletionDAOTest.java diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ITrashBO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ITrashBO.java index 547e1f275cf..e155d2689de 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ITrashBO.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ITrashBO.java @@ -28,9 +28,6 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.DataPE; */ public interface ITrashBO { - /** Puts back all objects moved to trash in deletion with specified id. */ - public void revertDeletion(TechId deletionId); - public void createDeletion(String reason); public void trashSamples(List<TechId> sampleIds); @@ -39,4 +36,7 @@ public interface ITrashBO public void trashDataSets(List<DataPE> dataSets); + /** Puts back all entities moved to trash in deletion with specified id. */ + public void revertDeletion(TechId deletionId); + } \ No newline at end of file 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 a4429a7d27d..8132222cf56 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 @@ -42,18 +42,6 @@ public class TrashBO extends AbstractBusinessObject implements ITrashBO this.boFactory = boFactory; } - public void revertDeletion(TechId deletionId) - { - try - { - deletion = getDeletionDAO().getByTechId(deletionId); - getDeletionDAO().delete(deletion); - } catch (final DataAccessException ex) - { - throwException(ex, "Deletion"); - } - } - public void createDeletion(String reason) { try @@ -90,4 +78,16 @@ public class TrashBO extends AbstractBusinessObject implements ITrashBO dataSetTable.trashLoadedDataSets(deletion); } + public void revertDeletion(TechId deletionId) + { + try + { + deletion = getDeletionDAO().getByTechId(deletionId); + getDeletionDAO().revert(deletion); + } catch (final DataAccessException ex) + { + throwException(ex, "Deletion"); + } + } + } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/IAuthorizationDAOFactory.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/IAuthorizationDAOFactory.java index 2eabc8d6e16..1cc915c0e30 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/IAuthorizationDAOFactory.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/IAuthorizationDAOFactory.java @@ -72,4 +72,6 @@ public interface IAuthorizationDAOFactory public IQueryDAO getQueryDAO(); public IRelationshipTypeDAO getRelationshipTypeDAO(); + + public IDeletionDAO getDeletionDAO(); } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/IDeletionDAO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/IDeletionDAO.java index 1e28237ff1e..191b15b9de3 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/IDeletionDAO.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/IDeletionDAO.java @@ -16,8 +16,11 @@ package ch.systemsx.cisd.openbis.generic.server.dataaccess; +import java.util.List; + import org.springframework.dao.DataAccessException; +import ch.systemsx.cisd.openbis.generic.shared.basic.TechId; import ch.systemsx.cisd.openbis.generic.shared.dto.DeletionPE; /** @@ -32,4 +35,12 @@ public interface IDeletionDAO extends IGenericDAO<DeletionPE> */ void create(final DeletionPE deletion) throws DataAccessException; + void revert(DeletionPE deletion); + + List<TechId> findTrashedSampleIds(List<TechId> deletionIds); + + List<TechId> findTrashedExperimentIds(List<TechId> deletionIds); + + List<String> findTrashedDataSetCodes(List<TechId> deletionIds); + } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/AbstractDAO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/AbstractDAO.java index 7ab513a44c1..cd4cbe26087 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/AbstractDAO.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/AbstractDAO.java @@ -71,7 +71,6 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.IEntityInformationWithPropert public abstract class AbstractDAO extends HibernateDaoSupport { - /** The original source database instance. */ private DatabaseInstancePE databaseInstance; @@ -86,8 +85,8 @@ public abstract class AbstractDAO extends HibernateDaoSupport } private static Map<Class<?>, ClassValidator<?>> validators = - new HashMap<Class<?>, ClassValidator<?>>(); - + new HashMap<Class<?>, ClassValidator<?>>(); + /** * Validates given <i>Persistence Entity</i> using an appropriate {@link ClassValidator}. */ @@ -384,7 +383,7 @@ public abstract class AbstractDAO extends HibernateDaoSupport } } - protected static Set<TechId> transformNumbers2TechIds(Collection<? extends Number> numbers) + protected static Set<TechId> transformNumbers2TechIdSet(Collection<? extends Number> numbers) { final Set<TechId> result = new HashSet<TechId>(); for (Number number : numbers) @@ -394,6 +393,16 @@ public abstract class AbstractDAO extends HibernateDaoSupport return result; } + protected static List<TechId> transformNumbers2TechIdList(Collection<? extends Number> numbers) + { + final List<TechId> result = new ArrayList<TechId>(); + for (Number number : numbers) + { + result.add(new TechId(number)); + } + return result; + } + protected static <T extends IEntityInformationWithPropertiesHolder> List<Long> transformEntities2Longs( Collection<T> entities) { diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/AuthorizationDAOFactory.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/AuthorizationDAOFactory.java index 70d95ab7e9b..a388cb8b0f7 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/AuthorizationDAOFactory.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/AuthorizationDAOFactory.java @@ -30,6 +30,7 @@ import ch.systemsx.cisd.dbmigration.DatabaseConfigurationContext; import ch.systemsx.cisd.openbis.generic.server.dataaccess.IAuthorizationDAOFactory; import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDataDAO; import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDatabaseInstanceDAO; +import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDeletionDAO; import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDynamicPropertyEvaluationScheduler; import ch.systemsx.cisd.openbis.generic.server.dataaccess.IExperimentDAO; import ch.systemsx.cisd.openbis.generic.server.dataaccess.IGridCustomColumnDAO; @@ -85,6 +86,8 @@ public class AuthorizationDAOFactory implements IAuthorizationDAOFactory private final IRelationshipTypeDAO relationshipTypeDAO; + private final IDeletionDAO deletionDAO; + public AuthorizationDAOFactory(final DatabaseConfigurationContext context, final SessionFactory sessionFactory, final IFullTextIndexUpdateScheduler indexUpdateScheduler, @@ -106,6 +109,7 @@ public class AuthorizationDAOFactory implements IAuthorizationDAOFactory gridCustomColumnDAO = new GridCustomColumnDAO(sessionFactory, homeDatabaseInstance); queryDAO = new QueryDAO(sessionFactory, homeDatabaseInstance); relationshipTypeDAO = new RelationshipTypeDAO(sessionFactory, homeDatabaseInstance); + deletionDAO = new DeletionDAO(sessionFactory, homeDatabaseInstance); } public final PersistencyResources getPersistencyResources() @@ -242,6 +246,11 @@ public class AuthorizationDAOFactory implements IAuthorizationDAOFactory return relationshipTypeDAO; } + public IDeletionDAO getDeletionDAO() + { + return deletionDAO; + } + /** * Configures current session settings for batch update mode. * diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/DataDAO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/DataDAO.java index 31b71a2b2db..d4d05f93949 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/DataDAO.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/DataDAO.java @@ -507,7 +507,7 @@ final class DataDAO extends AbstractGenericEntityWithPropertiesDAO<DataPE> imple .list(); } }); - return transformNumbers2TechIds(results); + return transformNumbers2TechIdSet(results); } // data set relationship helper methods diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/DeletionDAO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/DeletionDAO.java index e31399cbf6e..57e1bdf695d 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/DeletionDAO.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/DeletionDAO.java @@ -16,8 +16,13 @@ package ch.systemsx.cisd.openbis.generic.server.dataaccess.db; +import java.util.List; + import org.apache.log4j.Logger; import org.hibernate.SessionFactory; +import org.hibernate.criterion.DetachedCriteria; +import org.hibernate.criterion.Projections; +import org.hibernate.criterion.Restrictions; import org.springframework.dao.DataAccessException; import org.springframework.jdbc.support.JdbcAccessor; import org.springframework.orm.hibernate3.HibernateTemplate; @@ -25,6 +30,7 @@ import org.springframework.orm.hibernate3.HibernateTemplate; import ch.systemsx.cisd.common.logging.LogCategory; import ch.systemsx.cisd.common.logging.LogFactory; import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDeletionDAO; +import ch.systemsx.cisd.openbis.generic.shared.basic.TechId; import ch.systemsx.cisd.openbis.generic.shared.dto.DatabaseInstancePE; import ch.systemsx.cisd.openbis.generic.shared.dto.DeletionPE; import ch.systemsx.cisd.openbis.generic.shared.dto.properties.EntityKind; @@ -67,8 +73,7 @@ final class DeletionDAO extends AbstractGenericEntityDAO<DeletionPE> implements } } - @Override - public void delete(DeletionPE deletion) throws DataAccessException + public void revert(DeletionPE deletion) throws DataAccessException { operationLog.info(String.format("REVERT: deletion %s.", deletion)); for (EntityKind entityKind : EntityKind.values()) @@ -76,14 +81,13 @@ final class DeletionDAO extends AbstractGenericEntityDAO<DeletionPE> implements // NOTE: material deletion are always permanent and therefore can't be reverted if (entityKind != EntityKind.MATERIAL) { - revertDeletion(deletion, entityKind); + revertDeletionOfEntities(deletion, entityKind); } } super.delete(deletion); } - private void revertDeletion(final DeletionPE deletion, - final ch.systemsx.cisd.openbis.generic.shared.dto.properties.EntityKind entityKind) + private void revertDeletionOfEntities(final DeletionPE deletion, final EntityKind entityKind) { assert deletion != null : "Unspecified deletion"; assert entityKind != null : "Unspecified entity kind"; @@ -96,4 +100,41 @@ final class DeletionDAO extends AbstractGenericEntityDAO<DeletionPE> implements hibernateTemplate.flush(); operationLog.info(String.format("%s %s(s) reverted", updatedRows, entityKind.name())); } + + public List<TechId> findTrashedSampleIds(final List<TechId> deletionIds) + { + return findTrashedEntityIds(deletionIds, EntityKind.SAMPLE); + } + + public List<TechId> findTrashedExperimentIds(final List<TechId> deletionIds) + { + return findTrashedEntityIds(deletionIds, EntityKind.EXPERIMENT); + } + + public List<String> findTrashedDataSetCodes(final List<TechId> deletionIds) + { + final DetachedCriteria criteria = + DetachedCriteria.forClass(EntityKind.DATA_SET.getEntityClass()); + final List<Long> longIds = TechId.asLongs(deletionIds); + criteria.setProjection(Projections.property("code")); + criteria.add(Restrictions.in("deletion.id", longIds)); + final List<String> results = cast(getHibernateTemplate().findByCriteria(criteria)); + operationLog.info(String.format("found %s trashed %s(s)", results.size(), + EntityKind.DATA_SET.name())); + return results; + } + + private List<TechId> findTrashedEntityIds(final List<TechId> deletionIds, + final EntityKind entityKind) + { + final DetachedCriteria criteria = DetachedCriteria.forClass(entityKind.getEntityClass()); + final List<Long> longIds = TechId.asLongs(deletionIds); + criteria.setProjection(Projections.id()); + criteria.add(Restrictions.in("deletion.id", longIds)); + final List<Long> results = cast(getHibernateTemplate().findByCriteria(criteria)); + operationLog + .info(String.format("found %s trashed %s(s)", results.size(), entityKind.name())); + return transformNumbers2TechIdList(results); + } + } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/ExternalDataDAO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/ExternalDataDAO.java index 2d134753648..8d3b69ca036 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/ExternalDataDAO.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/ExternalDataDAO.java @@ -492,7 +492,7 @@ final class ExternalDataDAO extends AbstractGenericEntityWithPropertiesDAO<Exter .list(); } }); - return transformNumbers2TechIds(results); + return transformNumbers2TechIdSet(results); } // data set relationship helper methods diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/SampleDAO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/SampleDAO.java index da3f85f4e80..721b9cf491e 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/SampleDAO.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/SampleDAO.java @@ -43,9 +43,9 @@ import ch.systemsx.cisd.openbis.generic.server.dataaccess.PersistencyResources; import ch.systemsx.cisd.openbis.generic.shared.basic.CodeConverter; import ch.systemsx.cisd.openbis.generic.shared.basic.TechId; import ch.systemsx.cisd.openbis.generic.shared.dto.DatabaseInstancePE; +import ch.systemsx.cisd.openbis.generic.shared.dto.DeletionPE; import ch.systemsx.cisd.openbis.generic.shared.dto.EventPE.EntityType; import ch.systemsx.cisd.openbis.generic.shared.dto.EventType; -import ch.systemsx.cisd.openbis.generic.shared.dto.DeletionPE; import ch.systemsx.cisd.openbis.generic.shared.dto.PersonPE; import ch.systemsx.cisd.openbis.generic.shared.dto.SamplePE; import ch.systemsx.cisd.openbis.generic.shared.dto.SamplePropertyPE; @@ -460,7 +460,6 @@ public class SampleDAO extends AbstractGenericEntityWithPropertiesDAO<SamplePE> public Set<TechId> listParents(final Collection<TechId> children, final TechId relationship) { final String query = - "select sample_id_parent from sample_relationships where sample_id_child in (:ids) and relationship_id = :r "; final List<? extends Number> results = (List<? extends Number>) getHibernateTemplate().execute(new HibernateCallback() @@ -473,7 +472,7 @@ public class SampleDAO extends AbstractGenericEntityWithPropertiesDAO<SamplePE> .setParameter("r", relationship.getId()).list(); } }); - Set<TechId> result = transformNumbers2TechIds(results); + Set<TechId> result = transformNumbers2TechIdSet(results); if (operationLog.isDebugEnabled()) { operationLog.debug(String.format("%d sample parents(s) have been found.", diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/properties/EntityKind.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/properties/EntityKind.java index c13eb5334a3..ca6b3e94d94 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/properties/EntityKind.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/properties/EntityKind.java @@ -36,6 +36,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.SamplePE; import ch.systemsx.cisd.openbis.generic.shared.dto.SamplePropertyPE; import ch.systemsx.cisd.openbis.generic.shared.dto.SampleTypePE; import ch.systemsx.cisd.openbis.generic.shared.dto.SampleTypePropertyTypePE; +import ch.systemsx.cisd.openbis.generic.shared.dto.TableNames; /** * Enumeration of entity kinds. @@ -44,17 +45,19 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.SampleTypePropertyTypePE; */ public enum EntityKind { - MATERIAL("material", MaterialPE.class, MaterialTypePE.class, MaterialTypePropertyTypePE.class, - MaterialPropertyPE.class), + MATERIAL(TableNames.MATERIALS_TABLE, "material", MaterialPE.class, MaterialTypePE.class, + MaterialTypePropertyTypePE.class, MaterialPropertyPE.class), - EXPERIMENT("experiment", ExperimentPE.class, ExperimentTypePE.class, - ExperimentTypePropertyTypePE.class, ExperimentPropertyPE.class), + EXPERIMENT(TableNames.EXPERIMENTS_TABLE, "experiment", ExperimentPE.class, + ExperimentTypePE.class, ExperimentTypePropertyTypePE.class, ExperimentPropertyPE.class), - SAMPLE("sample", SamplePE.class, SampleTypePE.class, SampleTypePropertyTypePE.class, - SamplePropertyPE.class), + SAMPLE(TableNames.SAMPLES_TABLE, "sample", SamplePE.class, SampleTypePE.class, + SampleTypePropertyTypePE.class, SamplePropertyPE.class), - DATA_SET("dataSet", DataPE.class, DataSetTypePE.class, DataSetTypePropertyTypePE.class, - DataSetPropertyPE.class); + DATA_SET(TableNames.DATA_TABLE, "dataSet", DataPE.class, DataSetTypePE.class, + DataSetTypePropertyTypePE.class, DataSetPropertyPE.class); + + private final String entityTableName; private final String entityLabel; @@ -66,10 +69,11 @@ public enum EntityKind private transient final Class<?> propertyClass; - private EntityKind(final String entityLabel, + private EntityKind(final String entityTableName, final String entityLabel, final Class<? extends IEntityInformationWithPropertiesHolder> entityClass, final Class<?> typeClass, final Class<?> assignmentClass, Class<?> propertyClass) { + this.entityTableName = entityTableName; this.entityLabel = entityLabel; this.entityClass = entityClass; this.typeClass = typeClass; @@ -88,6 +92,11 @@ public enum EntityKind return entityLabel; } + public final String getTableName() + { + return entityTableName; + } + public final <T extends EntityTypePE> Class<T> getTypeClass() { return cast(typeClass); diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/DeletionDAOTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/DeletionDAOTest.java new file mode 100644 index 00000000000..134efd450da --- /dev/null +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/DeletionDAOTest.java @@ -0,0 +1,72 @@ +/* + * Copyright 2010 ETH Zuerich, CISD + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package ch.systemsx.cisd.openbis.generic.server.dataaccess.db; + +import static org.testng.AssertJUnit.assertEquals; + +import java.util.Collections; +import java.util.List; + +import org.testng.annotations.Test; + +import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDeletionDAO; +import ch.systemsx.cisd.openbis.generic.shared.basic.TechId; +import ch.systemsx.cisd.openbis.generic.shared.dto.DeletionPE; + +/** + * @author Piotr Buczek + */ +@Test(groups = "db") +public class DeletionDAOTest extends AbstractDAOTest +{ + + @Test + public void testFindTrashedEntities() throws Exception + { + // simple test with db specific numbers + IDeletionDAO deletionDAO = daoFactory.getDeletionDAO(); + List<DeletionPE> allDeletions = deletionDAO.listAllEntities(); + assertEquals(4, allDeletions.size()); + + assertTrashedEntities(0, 5, 1, allDeletions.get(0)); + assertTrashedEntities(0, 3, 0, allDeletions.get(1)); + assertTrashedEntities(0, 323, 0, allDeletions.get(2)); + assertTrashedEntities(2, 3, 0, allDeletions.get(3)); + + assertTrashedEntities(2, 334, 1, allDeletions); + } + + private void assertTrashedEntities(int expectedExperiments, int expectedSamples, + int expectedDataSets, DeletionPE deletion) + { + assertTrashedEntities(expectedExperiments, expectedSamples, expectedDataSets, + Collections.singletonList(deletion)); + } + + private void assertTrashedEntities(int expectedExperiments, int expectedSamples, + int expectedDataSets, List<DeletionPE> deletions) + { + List<TechId> deletionIds = TechId.createList(deletions); + IDeletionDAO deletionDAO = daoFactory.getDeletionDAO(); + assertEquals(deletionIds.toString(), expectedExperiments, deletionDAO + .findTrashedExperimentIds(deletionIds).size()); + assertEquals(deletionIds.toString(), expectedSamples, + deletionDAO.findTrashedSampleIds(deletionIds).size()); + assertEquals(deletionIds.toString(), expectedDataSets, + deletionDAO.findTrashedDataSetCodes(deletionIds).size()); + } +} -- GitLab