From f73a96344421477c03a6149a392051b92569d1dc Mon Sep 17 00:00:00 2001 From: buczekp <buczekp> Date: Tue, 10 Aug 2010 12:13:05 +0000 Subject: [PATCH] [LMS-1676] use parent chooser to fill parents area (quick & dirty solution) SVN: 17379 --- .../web/client/application/ui/CodesArea.java | 25 ++++++-- .../ui/field/SampleChooserField.java | 7 +++ .../bo/AbstractSampleBusinessObject.java | 61 ++++++++----------- .../generic/server/business/bo/SampleBO.java | 42 +------------ ...AbstractGenericSampleRegisterEditForm.java | 14 +++++ .../sample/GenericSampleEditForm.java | 18 +----- .../sample/GenericSampleRegistrationForm.java | 17 +----- 7 files changed, 72 insertions(+), 112 deletions(-) diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/CodesArea.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/CodesArea.java index 3f3d5e471ec..89999b1aa90 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/CodesArea.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/CodesArea.java @@ -50,17 +50,30 @@ abstract public class CodesArea<T extends ICodeHolder> extends MultilineVarcharF setOriginalValue(textValue); } + public final void appendCode(String code) + { + StringBuilder sb = new StringBuilder(); + sb.append(getValue() == null ? "" : getValue()); + appendCode(sb, code); + setValue(sb.toString()); + } + private static String createTextValue(List<String> codes) { - StringBuffer sb = new StringBuffer(); + StringBuilder sb = new StringBuilder(); for (String code : codes) { - if (sb.length() > 0) - { - sb.append(", "); - } - sb.append(code); + appendCode(sb, code); } return sb.toString(); } + + private static final void appendCode(StringBuilder sb, String code) + { + if (sb.length() > 0) + { + sb.append(", "); + } + sb.append(code); + } } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/field/SampleChooserField.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/field/SampleChooserField.java index 14c977e7bb1..6bb385e3c8e 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/field/SampleChooserField.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/field/SampleChooserField.java @@ -39,6 +39,8 @@ public class SampleChooserField extends ChosenEntitySetter<Sample> { Field<?> getField(); + SampleChooserField getChooserField(); + /** @return the sample identifier (as a string) which is set as a field value */ String getValue(); @@ -97,6 +99,11 @@ public class SampleChooserField extends ChosenEntitySetter<Sample> return chooserField; } + public SampleChooserField getChooserField() + { + return chooserField; + } + public String getValue() { return chooserField.getValue(); diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractSampleBusinessObject.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractSampleBusinessObject.java index 5c474c9b999..eebb23a1ef0 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractSampleBusinessObject.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractSampleBusinessObject.java @@ -138,20 +138,7 @@ abstract class AbstractSampleBusinessObject extends AbstractSampleIdentifierBusi } else if (newSample.getParents() != null) { final String[] parents = newSample.getParents(); - final List<SampleIdentifier> parentIdentifiers = - IdentifierHelper.extractSampleIdentifiers(parents); - if (sampleIdentifier.isSpaceLevel()) - { - final String spaceCode = sampleIdentifier.getSpaceLevel().getSpaceCode(); - final List<SamplePE> parentPEs = new ArrayList<SamplePE>(); - for (SampleIdentifier si : parentIdentifiers) - { - IdentifierHelper.fillGroupIfNotSpecified(si, spaceCode); - SamplePE parent = getSampleByIdentifier(si); - parentPEs.add(parent); - } - addParents(samplePE, parentPEs); - } + setParents(samplePE, parents); } String containerIdentifier = newSample.getContainerIdentifier(); setContainer(sampleIdentifier, samplePE, containerIdentifier); @@ -224,13 +211,35 @@ abstract class AbstractSampleBusinessObject extends AbstractSampleIdentifierBusi } } - protected void setParents(SamplePE child, List<SamplePE> parents) + protected void setParents(final SamplePE childPE, final String[] parents) { - removeParents(child); + final List<SampleIdentifier> parentIdentifiers = + IdentifierHelper.extractSampleIdentifiers(parents); + final SampleIdentifier childIdentifier = childPE.getSampleIdentifier(); + if (childIdentifier.isSpaceLevel()) + { + final String spaceCode = childIdentifier.getSpaceLevel().getSpaceCode(); + for (SampleIdentifier si : parentIdentifiers) + { + IdentifierHelper.fillGroupIfNotSpecified(si, spaceCode); + } + } + final List<SamplePE> parentPEs = new ArrayList<SamplePE>(); + for (SampleIdentifier si : parentIdentifiers) + { + SamplePE parent = getSampleByIdentifier(si); + parentPEs.add(parent); + } + setParents(childPE, parentPEs); + } + + private void setParents(SamplePE childPE, List<SamplePE> parentPEs) + { + removeParents(childPE); RelationshipTypePE relationshipType = tryFindParentChildRelationshipType(); - for (SamplePE parent : parents) + for (SamplePE parentPE : parentPEs) { - addParentRelationship(child, parent, relationshipType); + addParentRelationship(childPE, parentPE, relationshipType); } } @@ -251,22 +260,6 @@ abstract class AbstractSampleBusinessObject extends AbstractSampleIdentifierBusi } } - // ineffective for adding a collection of parents - protected void addParent(SamplePE child, SamplePE parent) - { - RelationshipTypePE relationshipType = tryFindParentChildRelationshipType(); - addParentRelationship(child, parent, relationshipType); - } - - protected void addParents(SamplePE child, List<SamplePE> parents) - { - RelationshipTypePE relationshipType = tryFindParentChildRelationshipType(); - for (SamplePE parent : parents) - { - addParentRelationship(child, parent, relationshipType); - } - } - private void addParentRelationship(SamplePE child, SamplePE parent, RelationshipTypePE relationshipType) { diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SampleBO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SampleBO.java index 7bcf3e78466..3fb8ccd8681 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SampleBO.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SampleBO.java @@ -17,20 +17,16 @@ package ch.systemsx.cisd.openbis.generic.server.business.bo; import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashSet; import java.util.List; import java.util.Set; import org.springframework.dao.DataAccessException; import org.springframework.dao.DataIntegrityViolationException; -import ch.systemsx.cisd.common.collections.CollectionUtils; import ch.systemsx.cisd.common.exceptions.UserFailureException; import ch.systemsx.cisd.openbis.generic.server.business.bo.util.SampleUtils; import ch.systemsx.cisd.openbis.generic.server.dataaccess.IAttachmentDAO; import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDAOFactory; -import ch.systemsx.cisd.openbis.generic.server.dataaccess.ISampleDAO; import ch.systemsx.cisd.openbis.generic.shared.basic.TechId; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IEntityProperty; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewAttachment; @@ -38,7 +34,6 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewSample; import ch.systemsx.cisd.openbis.generic.shared.dto.AttachmentPE; import ch.systemsx.cisd.openbis.generic.shared.dto.EntityTypePE; import ch.systemsx.cisd.openbis.generic.shared.dto.ExperimentPE; -import ch.systemsx.cisd.openbis.generic.shared.dto.GroupPE; 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; @@ -275,42 +270,7 @@ public final class SampleBO extends AbstractSampleBusinessObject implements ISam // attaches specified existing samples to the sample as parents private void attachParents(String[] parentCodes) { - List<SamplePE> parents = - findSamplesByCodes(getSampleDAO(), asSet(parentCodes), sample.getGroup()); - setParents(sample, parents); - } - - // Finds samples in the specified group. Throws exception if some samples do not exist. - private static List<SamplePE> findSamplesByCodes(ISampleDAO sampleDAO, Set<String> sampleCodes, - GroupPE group) - { - List<SamplePE> samples = new ArrayList<SamplePE>(); - List<String> missingSamples = new ArrayList<String>(); - for (String code : sampleCodes) - { - SamplePE sample = sampleDAO.tryFindByCodeAndGroup(code, group); - if (sample == null) - { - missingSamples.add(code); - } else - { - samples.add(sample); - } - } - if (missingSamples.size() > 0) - { - throw UserFailureException.fromTemplate( - "Samples with following codes do not exist in the space '%s': '%s'.", group - .getCode(), CollectionUtils.abbreviate(missingSamples, 10)); - } else - { - return samples; - } - } - - private static Set<String> asSet(String[] objects) - { - return new HashSet<String>(Arrays.asList(objects)); + setParents(sample, parentCodes); } public void setGeneratedCode() diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/AbstractGenericSampleRegisterEditForm.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/AbstractGenericSampleRegisterEditForm.java index e7ab575cc8e..ec96b78c155 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/AbstractGenericSampleRegisterEditForm.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/AbstractGenericSampleRegisterEditForm.java @@ -35,6 +35,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework. import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.SampleTypeDisplayID; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.GroupSelectionWidget; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.field.ExperimentChooserField; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.field.IChosenEntityListener; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.field.SampleChooserField; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.field.ExperimentChooserField.ExperimentChooserFieldAdaptor; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.field.SampleChooserField.SampleChooserFieldAdaptor; @@ -43,6 +44,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget. import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExperimentIdentifier; import ch.systemsx.cisd.openbis.generic.shared.basic.IIdAndCodeHolder; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityKind; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SampleType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SampleTypePropertyType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Space; @@ -215,6 +217,18 @@ abstract public class AbstractGenericSampleRegisterEditForm extends SampleTypeDisplayID.SAMPLE_REGISTRATION_PARENT_CHOOSER .withSuffix(getSampleTypeCode())); parentsArea = new ParentSamplesArea(viewContext, simpleId); + SampleChooserField parentChooserField = parent.getChooserField(); + parentChooserField.addChosenEntityListener(new IChosenEntityListener<Sample>() + { + public void entityChosen(Sample entity) + { + if (entity != null) + { + String sampleIdentifier = entity.getIdentifier(); + parentsArea.appendCode(sampleIdentifier); + } + } + }); container = SampleChooserField.create(viewContext.getMessage(Dict.PART_OF_SAMPLE), false, null, true, false, false, viewContext.getCommonViewContext(), getId() diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/GenericSampleEditForm.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/GenericSampleEditForm.java index eb98d7c3c56..65054923bda 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/GenericSampleEditForm.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/GenericSampleEditForm.java @@ -68,12 +68,11 @@ public final class GenericSampleEditForm extends AbstractGenericSampleRegisterEd final ExperimentIdentifier experimentIdent = experimentField != null ? experimentField.tryToGetValue() : null; final String containerOrNull = StringUtils.trimToNull(container.getValue()); - final String parentOrNull = StringUtils.trimToNull(parent.getValue()); final String[] parents = getParents(); viewContext.getService().updateSample( new SampleUpdates(attachmentsSessionKey, techIdOrNull, properties, attachments, experimentIdent, originalSample.getModificationDate(), - createSampleIdentifier(), containerOrNull, parentOrNull, parents), + createSampleIdentifier(), containerOrNull, null, parents), new UpdateSampleCallback(viewContext)); } @@ -107,7 +106,6 @@ public final class GenericSampleEditForm extends AbstractGenericSampleRegisterEd experimentField.updateOriginalValue(); updateFieldOriginalValue(groupSelectionWidget); container.updateOriginalValue(); - parent.updateOriginalValue(); parentsArea.setSampleCodes(parents); } @@ -129,7 +127,6 @@ public final class GenericSampleEditForm extends AbstractGenericSampleRegisterEd experimentField.updateValue(originalExperiment); initializeGroup(); initializeContainedInParent(); - initializeGeneratedFromParent(); initializeParents(); } @@ -155,19 +152,6 @@ public final class GenericSampleEditForm extends AbstractGenericSampleRegisterEd } } - private void initializeGeneratedFromParent() - { - Set<Sample> parents = originalSample.getParents(); - if (parents.size() == 1) - { - Sample parentSample = originalSample.getGeneratedFrom(); - if (parentSample != null) - { - parent.updateValue(parentSample.getIdentifier()); - } - } - } - private void initializeParents() { // TODO 2010-08-06, Piotr Buczek: load in background? like in experiment diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/GenericSampleRegistrationForm.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/GenericSampleRegistrationForm.java index 29549e423d9..56525050b3a 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/GenericSampleRegistrationForm.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/GenericSampleRegistrationForm.java @@ -99,20 +99,9 @@ public final class GenericSampleRegistrationForm extends AbstractGenericSampleRe : null; final String containerOrNull = StringUtils.trimToNull(container.getValue()); - final String parentOrNull = StringUtils.trimToNull(parent.getValue()); - final NewSample newSample; - if (parentOrNull == null) - { - final String[] parents = getParents(); - newSample = - NewSample.createWithParents(createSampleIdentifier(), sampleType, - containerOrNull, parents); - } else - { - newSample = - NewSample.createWithParent(createSampleIdentifier(), sampleType, - containerOrNull, parentOrNull); - } + final NewSample newSample = + NewSample.createWithParents(createSampleIdentifier(), sampleType, containerOrNull, + getParents()); final List<IEntityProperty> properties = extractProperties(); newSample.setProperties(properties.toArray(IEntityProperty.EMPTY_ARRAY)); newSample.setAttachments(attachmentsManager.extractAttachments()); -- GitLab