diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/samplelister/ISampleListingQuery.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/samplelister/ISampleListingQuery.java index efbe72b17a0b5fdf47786220cf16a16d2f070abf..aa74188c8a01b176d014c39e19e6285e4c0118db 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/samplelister/ISampleListingQuery.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/samplelister/ISampleListingQuery.java @@ -87,7 +87,7 @@ public interface ISampleListingQuery extends TransactionQuery, IPropertyListingQ /** * Returns the samples for the given <var>groupCode</var>. */ - @Select(sql = "select s.id, s.perm_id, s.code, s.expe_id, " + @Select(sql = "select s.id, s.perm_id, s.code, s.expe_id, s.grou_id, " + " s.registration_timestamp, s.pers_id_registerer, " + " s.samp_id_generated_from, s.samp_id_part_of, s.saty_id, s.inva_id " + " from samples s join sample_types st on s.saty_id=st.id" @@ -98,7 +98,7 @@ public interface ISampleListingQuery extends TransactionQuery, IPropertyListingQ /** * Returns the samples for the given <var>groupCode</var> that are assigned to an experiment. */ - @Select(sql = "select s.id, s.perm_id, s.code, s.saty_id, s.expe_id, " + @Select(sql = "select s.id, s.perm_id, s.code, s.saty_id, s.expe_id, s.grou_id, " + " s.samp_id_generated_from, s.registration_timestamp, s.modification_timestamp, " + " s.pers_id_registerer, s.samp_id_part_of, s.inva_id " + " from samples s join groups g on s.grou_id=g.id " @@ -110,7 +110,7 @@ public interface ISampleListingQuery extends TransactionQuery, IPropertyListingQ /** * Returns the samples for the given <var>groupCode</var> and <var>sampleTypeId</var> */ - @Select(sql = "select s.id, s.perm_id, s.code, s.expe_id, " + @Select(sql = "select s.id, s.perm_id, s.code, s.expe_id, s.grou_id, " + " s.registration_timestamp, s.pers_id_registerer, " + " s.samp_id_generated_from, s.samp_id_part_of, s.saty_id, s.inva_id " + " from samples s join groups g on s.grou_id=g.id " @@ -123,7 +123,7 @@ public interface ISampleListingQuery extends TransactionQuery, IPropertyListingQ * Returns the samples for the given <var>groupCode</var> and <var>sampleTypeId</var> that are * assigned to an experiment. */ - @Select(sql = "select s.id, s.perm_id, s.code, s.saty_id, s.expe_id, " + @Select(sql = "select s.id, s.perm_id, s.code, s.saty_id, s.expe_id, s.grou_id, " + " s.samp_id_generated_from, s.registration_timestamp, s.modification_timestamp, " + " s.pers_id_registerer, s.samp_id_part_of, s.inva_id " + " from samples s join groups g on s.grou_id=g.id " @@ -139,7 +139,7 @@ public interface ISampleListingQuery extends TransactionQuery, IPropertyListingQ /** * Returns the samples for the given <var>experimentId</var>. */ - @Select(sql = "select s.id, s.perm_id, s.code, s.expe_id, " + @Select(sql = "select s.id, s.perm_id, s.code, s.expe_id, s.grou_id, " + " s.registration_timestamp, s.pers_id_registerer, " + " s.samp_id_generated_from, s.samp_id_part_of, s.saty_id, s.inva_id " + " from samples s where s.expe_id=?{1}", fetchSize = FETCH_SIZE) diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/samplelister/SampleListingWorker.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/samplelister/SampleListingWorker.java index 1b0a2a56c56d1e221cda62b9093047dcfc77cf18..df836798727163d9994e9b52fd1523193445c487 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/samplelister/SampleListingWorker.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/samplelister/SampleListingWorker.java @@ -200,19 +200,13 @@ final class SampleListingWorker { final StopWatch watch = new StopWatch(); watch.start(); - final Experiment expOrNull = tryLoadExperiment(); - final boolean oneGroupPerSample = isOneGroupPerSamples(); - final Group groupOrNull = oneGroupPerSample ? null : tryLoadGroup(expOrNull); - loadGroups(); // all groups are needed for parent samples identifiers + loadGroups(); loadSampleTypes(); - retrievePrimaryBasicSamples(tryGetIteratorForSamplesByIds(), groupOrNull, oneGroupPerSample); - retrievePrimaryBasicSamples(tryGetIteratorForGroupSamples(), groupOrNull, oneGroupPerSample); - retrievePrimaryBasicSamples(tryGetIteratorForSharedSamples(), groupOrNull, - oneGroupPerSample); - retrievePrimaryBasicSamples(tryGetIteratorForExperimentSamples(), groupOrNull, - oneGroupPerSample); - retrievePrimaryBasicSamples(tryGetIteratorForContainedSamples(), groupOrNull, - oneGroupPerSample); + retrievePrimaryBasicSamples(tryGetIteratorForSamplesByIds()); + retrievePrimaryBasicSamples(tryGetIteratorForGroupSamples()); + retrievePrimaryBasicSamples(tryGetIteratorForSharedSamples()); + retrievePrimaryBasicSamples(tryGetIteratorForExperimentSamples()); + retrievePrimaryBasicSamples(tryGetIteratorForContainedSamples()); if (operationLog.isDebugEnabled()) { watch.stop(); @@ -255,6 +249,7 @@ final class SampleListingWorker private void loadGroups() { + // all groups are needed for parent samples identifiers final Group[] groups = referencedEntityDAO.getAllGroups(databaseInstanceId); for (Group group : groups) { @@ -263,52 +258,6 @@ final class SampleListingWorker } } - private Experiment tryLoadExperiment() - { - final TechId experimentTechId = criteria.getExperimentId(); - if (experimentTechId == null) - { - return null; - } - return createAndSaveExperiment(experimentTechId.getId(), null); - } - - private Experiment createAndSaveExperiment(final long experimentId, final Group groupOrNull) - { - final Experiment experiment = referencedEntityDAO.getExperiment(experimentId); - experiments.put(experimentId, experiment); - return experiment; - } - - private boolean isOneGroupPerSamples() - { - return criteria.getContainerSampleId() != null || criteria.getSampleIds() != null; - } - - private Group tryLoadGroup(final Experiment expOrNull) - { - if (criteria.isIncludeGroup() == false && expOrNull == null) - { - return null; - } - if (criteria.getGroupCode() != null) - { - final Group group = new Group(); - group.setCode(StringEscapeUtils.escapeHtml(criteria.getGroupCode())); - group.setInstance(databaseInstance); - group.setId(referencedEntityDAO.getGroupIdForCode(group.getCode())); - return group; - } else if (expOrNull != null) - { - final Group group = expOrNull.getProject().getGroup(); - group.setId(referencedEntityDAO.getGroupIdForCode(group.getCode())); - return group; - } else - { - throw new IllegalStateException("No group definition available."); - } - } - private void loadSampleTypes() { final SampleType sampleTypeOrNull = tryGetSingleModeSampleType(); @@ -338,6 +287,13 @@ final class SampleListingWorker } + private Experiment createAndSaveExperiment(final long experimentId) + { + final Experiment experiment = referencedEntityDAO.getExperiment(experimentId); + experiments.put(experimentId, experiment); + return experiment; + } + private SampleType tryGetSingleModeSampleType() { final SampleType sampleTypeOrNull = criteria.getSampleType(); @@ -430,23 +386,20 @@ final class SampleListingWorker } } - private void retrievePrimaryBasicSamples(final Iterable<SampleRecord> sampleIteratorOrNull, - final Group groupOrNull, final boolean oneGroupPerSample) + private void retrievePrimaryBasicSamples(final Iterable<SampleRecord> sampleIteratorOrNull) { assert sampleList != null; - retrieveBasicSamples(sampleIteratorOrNull, groupOrNull, baseIndexURL, sampleList, - oneGroupPerSample); + retrieveBasicSamples(sampleIteratorOrNull, baseIndexURL, sampleList); } private void retrieveDependentBasicSamples(final Iterable<SampleRecord> sampleIteratorOrNull) { - retrieveBasicSamples(sampleIteratorOrNull, null, null, null, true); + retrieveBasicSamples(sampleIteratorOrNull, null, null); } private void retrieveBasicSamples(final Iterable<SampleRecord> sampleIteratorOrNull, - final Group groupOrNull, final String baseIndexURLOrNull, - final List<Sample> sampleListOrNull, final boolean oneGroupPerSample) + final String baseIndexURLOrNull, final List<Sample> sampleListOrNull) { if (sampleIteratorOrNull == null) { @@ -455,9 +408,7 @@ final class SampleListingWorker final boolean primarySample = (sampleListOrNull != null); for (SampleRecord row : sampleIteratorOrNull) { - final Sample sample = - createSample(row, groupOrNull, oneGroupPerSample, baseIndexURLOrNull, - primarySample); + final Sample sample = createSample(row, baseIndexURLOrNull, primarySample); sampleMap.put(sample.getId(), sample); if (sampleListOrNull != null) { @@ -466,8 +417,7 @@ final class SampleListingWorker } } - private Sample createSample(SampleRecord row, final Group groupOrNull, - final boolean oneGroupPerSample, final String baseIndexURLOrNull, + private Sample createSample(SampleRecord row, final String baseIndexURLOrNull, final boolean primarySample) { final Sample sample = new Sample(); @@ -475,23 +425,15 @@ final class SampleListingWorker sample.setCode(IdentifierHelper.convertCode(row.code, null)); sample.setSubCode(IdentifierHelper.convertSubCode(row.code)); sample.setSampleType(sampleTypes.get(row.saty_id)); - if (oneGroupPerSample) - { - if (row.grou_id == null) - { - setDatabaseInstance(sample); - } else - { - System.err.println(groupOrNull + " " + groupMap.get(row.grou_id)); - setGroup(sample, groupMap.get(row.grou_id)); - } - } else if (groupOrNull != null) + // set group or instance + if (row.grou_id == null) { - setGroup(sample, groupOrNull); + setDatabaseInstance(sample); } else { - setDatabaseInstance(sample); + setGroup(sample, groupMap.get(row.grou_id)); } + // set properties needed for primary samples if (primarySample) { sample.setPermId(StringEscapeUtils.escapeHtml(row.perm_id)); @@ -507,9 +449,10 @@ final class SampleListingWorker sample.setRegistrator(getOrCreateRegistrator(row)); if (row.expe_id != null) { - sample.setExperiment(getOrCreateExperiment(row, groupOrNull)); + sample.setExperiment(getOrCreateExperiment(row)); } } + // prepare loading related samples if (row.samp_id_generated_from != null & maxSampleParentResolutionDepth > 0) { if (samplesAwaitingParentResolution.containsKey(row.id) == false) @@ -566,12 +509,12 @@ final class SampleListingWorker } } - private Experiment getOrCreateExperiment(SampleRecord row, final Group groupOrNull) + private Experiment getOrCreateExperiment(SampleRecord row) { Experiment experiment = experiments.get(row.expe_id); if (experiment == null) { - experiment = createAndSaveExperiment(row.expe_id, groupOrNull); + experiment = createAndSaveExperiment(row.expe_id); } return experiment; }