From 4d96c5beb8b2e698c845ad04e2380e9d0196d7ed Mon Sep 17 00:00:00 2001 From: buczekp <buczekp> Date: Fri, 6 Aug 2010 09:42:18 +0000 Subject: [PATCH] [LMS-1676] added parent samples area; refactorization: extracted common code & introduced abstract CodesArea SVN: 17349 --- .../web/client/application/ui/CodesArea.java | 65 ++++++++++++++++++ .../ui/data/DataSetParentsArea.java | 66 ++++--------------- .../ui/field/MultilineVarcharField.java | 2 +- .../client/web/public/generic-dictionary.js | 1 + .../experiment/ExperimentSamplesArea.java | 57 ++-------------- ...AbstractGenericSampleRegisterEditForm.java | 13 +++- .../sample/GenericSampleEditForm.java | 22 +++++-- .../application/sample/ParentSamplesArea.java | 44 +++++++++++++ .../application/sample/SamplesArea.java | 54 +++++++++++++++ .../ExperimentPlateLocationsSection.java | 2 +- 10 files changed, 209 insertions(+), 117 deletions(-) create mode 100644 openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/CodesArea.java create mode 100644 openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/ParentSamplesArea.java create mode 100644 openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/SamplesArea.java 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 new file mode 100644 index 00000000000..ad41660b43c --- /dev/null +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/CodesArea.java @@ -0,0 +1,65 @@ +/* + * Copyright 2009 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.client.web.client.application.ui; + +import java.util.List; + +import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.field.MultilineVarcharField; +import ch.systemsx.cisd.openbis.generic.shared.basic.ICodeHolder; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Code; + +/** + * A text area to specify list of codes. Codes are specified separated by commas, spaces or new + * lines. + * + * @author Piotr Buczek + */ +abstract public class CodesArea<T extends ICodeHolder> extends MultilineVarcharField +{ + public CodesArea(String emptyTextMsg) + { + super("", false); + setEmptyText(emptyTextMsg); + } + + public final void setCodeProviders(List<T> codeProviders) + { + List<String> codes = Code.extractCodes(codeProviders); + setCodes(codes.toArray(new String[0])); + } + + public final void setCodes(String[] codes) + { + String textValue = createTextValue(codes); + setValue(textValue); + setOriginalValue(textValue); + } + + private static String createTextValue(String[] codes) + { + StringBuffer sb = new StringBuffer(); + for (String code : codes) + { + if (sb.length() > 0) + { + sb.append(", "); + } + sb.append(code); + } + return sb.toString(); + } +} diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/DataSetParentsArea.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/DataSetParentsArea.java index 17236c69bbd..e384547dd74 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/DataSetParentsArea.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/DataSetParentsArea.java @@ -18,12 +18,8 @@ package ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.data; import java.util.List; -import com.extjs.gxt.ui.client.widget.form.TextArea; - -import ch.systemsx.cisd.common.shared.basic.utils.StringUtils; import ch.systemsx.cisd.openbis.generic.client.web.client.application.Dict; -import ch.systemsx.cisd.openbis.generic.client.web.client.application.GenericConstants; -import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.field.MultilineVarcharField; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.CodesArea; import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.IMessageProvider; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExternalData; @@ -33,18 +29,15 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExternalData; * * @author Piotr Buczek */ -public final class DataSetParentsArea extends TextArea +public final class DataSetParentsArea extends CodesArea<ExternalData> { public static final String ID_SUFFIX_PARENTS = "_parents"; public DataSetParentsArea(IMessageProvider messageProvider, String idPrefix) { - super(); - - setHeight("" + MultilineVarcharField.EM_TO_PIXEL * 10); - this.setFieldLabel(messageProvider.getMessage(Dict.PARENTS)); - setEmptyText(messageProvider.getMessage(Dict.PARENTS_EMPTY)); + super(messageProvider.getMessage(Dict.PARENTS_EMPTY)); + this.setFieldLabel(messageProvider.getMessage(Dict.PARENTS)); setId(createId(idPrefix)); } @@ -53,59 +46,22 @@ public final class DataSetParentsArea extends TextArea return idPrefix + ID_SUFFIX_PARENTS; } - // null if the area has not been modified, the list of all data set parent - // codes otherwise + // delegation to abstract class methods + + // null if the area has not been modified, + // the list of all data set parent codes otherwise public final String[] tryGetModifiedParentCodes() { - if (isDirty() == false) - { - return null; - } - String text = getValue(); - if (StringUtils.isBlank(text) == false) - { - return text.split(GenericConstants.CODES_TEXTAREA_REGEX); - } else - { - return new String[0]; - } + return tryGetModifiedItemList(); } public final void setParents(List<ExternalData> parents) { - setParentCodes(extractCodes(parents)); - } - - private static String[] extractCodes(List<ExternalData> parents) - { - String[] codes = new String[parents.size()]; - int i = 0; - for (ExternalData parent : parents) - { - codes[i] = parent.getCode(); - i++; - } - return codes; + setCodeProviders(parents); } public final void setParentCodes(String[] parentCodes) { - String textValue = createTextValue(parentCodes); - setValue(textValue); - setOriginalValue(textValue); - } - - private static String createTextValue(String[] parentCodes) - { - StringBuffer sb = new StringBuffer(); - for (String parentCode : parentCodes) - { - if (sb.length() > 0) - { - sb.append(", "); - } - sb.append(parentCode); - } - return sb.toString(); + setCodes(parentCodes); } } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/field/MultilineVarcharField.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/field/MultilineVarcharField.java index dad3b8675c1..974a682aae0 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/field/MultilineVarcharField.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/field/MultilineVarcharField.java @@ -67,7 +67,7 @@ public class MultilineVarcharField extends TextArea * null if the area has not been modified, the list of all items (separated by comma or a new * line) otherwise */ - public final String[] tryParseItemList() + public final String[] tryGetModifiedItemList() { if (isDirty() == false) { diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/public/generic-dictionary.js b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/public/generic-dictionary.js index 69513aabbd0..ac49fb91009 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/public/generic-dictionary.js +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/public/generic-dictionary.js @@ -26,6 +26,7 @@ var generic = { instance_sample: "Shared", generated_from_sample: "Parent", part_of_sample: "Container", + parents: "Parents", // // Data Set Viewer diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/ExperimentSamplesArea.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/ExperimentSamplesArea.java index eac1bf99ded..65b2a3bf7c3 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/ExperimentSamplesArea.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/ExperimentSamplesArea.java @@ -16,29 +16,23 @@ package ch.systemsx.cisd.openbis.plugin.generic.client.web.client.application.experiment; -import java.util.List; - import ch.systemsx.cisd.openbis.generic.client.web.client.application.Dict; -import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.field.MultilineVarcharField; import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.IMessageProvider; -import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample; +import ch.systemsx.cisd.openbis.plugin.generic.client.web.client.application.sample.SamplesArea; /** - * A text area to specify samples for an experiment. Samples are specified by giving codes separated - * by commas, spaces or new lines. + * {@link SamplesArea} extension to specify samples for an experiment. * * @author Tomasz Pylak */ -final class ExperimentSamplesArea extends MultilineVarcharField +final class ExperimentSamplesArea extends SamplesArea { - public static final String ID_SUFFIX_SAMPLES = "_samples"; public ExperimentSamplesArea(IMessageProvider messageProvider, String idPrefix) { - super("", false); + super(messageProvider.getMessage(Dict.SAMPLES_LIST)); setLabelSeparator(""); - setEmptyText(messageProvider.getMessage(Dict.SAMPLES_LIST)); setId(createId(idPrefix)); } @@ -47,47 +41,4 @@ final class ExperimentSamplesArea extends MultilineVarcharField return idPrefix + ID_SUFFIX_SAMPLES; } - // null if the area has not been modified, the list of all sample codes otherwise - public final String[] tryGetSampleCodes() - { - return tryParseItemList(); - } - - public final void setSamples(List<Sample> samples) - { - setSampleCodes(extractCodes(samples)); - } - - private static String[] extractCodes(List<Sample> samples) - { - String[] codes = new String[samples.size()]; - int i = 0; - for (Sample sample : samples) - { - codes[i] = sample.getCode(); - i++; - } - return codes; - } - - public final void setSampleCodes(String[] samples) - { - String textValue = createTextValue(samples); - setValue(textValue); - setOriginalValue(textValue); - } - - private static String createTextValue(String[] samples) - { - StringBuffer sb = new StringBuffer(); - for (String sample : samples) - { - if (sb.length() > 0) - { - sb.append(", "); - } - sb.append(sample); - } - return sb.toString(); - } } 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 63cf6debde2..3a1504a4ad5 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 @@ -84,6 +84,8 @@ abstract public class AbstractGenericSampleRegisterEditForm extends protected SampleChooserFieldAdaptor parent; + protected ParentSamplesArea parentsArea; + protected AbstractGenericSampleRegisterEditForm( IViewContext<IGenericClientServiceAsync> viewContext, ActionContext actionContext) { @@ -173,6 +175,7 @@ abstract public class AbstractGenericSampleRegisterEditForm extends fields.add(wrapUnaware(experimentField.getField())); fields.add(groupSelectionWidget.asDatabaseModificationAware()); fields.add(wrapUnaware(parent.getField())); + fields.add(wrapUnaware(parentsArea)); fields.add(wrapUnaware(container.getField())); return fields; } @@ -211,6 +214,7 @@ abstract public class AbstractGenericSampleRegisterEditForm extends getId() + ID_SUFFIX_PARENT, SampleTypeDisplayID.SAMPLE_REGISTRATION_PARENT_CHOOSER .withSuffix(getSampleTypeCode())); + parentsArea = new ParentSamplesArea(viewContext, simpleId); container = SampleChooserField.create(viewContext.getMessage(Dict.PART_OF_SAMPLE), false, null, true, false, false, viewContext.getCommonViewContext(), getId() @@ -257,8 +261,8 @@ abstract public class AbstractGenericSampleRegisterEditForm extends { boolean showContainer = sampleType.isShowContainer(); boolean showParents = sampleType.isShowParents(); - container.getField().setVisible(showContainer); - parent.getField().setVisible(showParents); + FieldUtil.setVisibility(showContainer, container.getField()); + FieldUtil.setVisibility(showParents, parent.getField(), parentsArea); } private String getSampleTypeCode() @@ -266,4 +270,9 @@ abstract public class AbstractGenericSampleRegisterEditForm extends return sampleType.getCode(); } + protected String[] getSamples() + { + return parentsArea.tryGetSampleCodes(); + } + } 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 422758df6f9..e39feb2386f 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 @@ -102,9 +102,10 @@ public final class GenericSampleEditForm extends AbstractGenericSampleRegisterEd { updatePropertyFieldsOriginalValues(); experimentField.updateOriginalValue(); - groupSelectionWidget.updateOriginalValue(groupSelectionWidget.getValue()); + updateFieldOriginalValue(groupSelectionWidget); container.updateOriginalValue(); parent.updateOriginalValue(); + updateFieldOriginalValue(parentsArea); } private void setOriginalSample(Sample sample) @@ -126,6 +127,7 @@ public final class GenericSampleEditForm extends AbstractGenericSampleRegisterEd initializeGroup(); initializeContainedInParent(); initializeGeneratedFromParent(); + initializeParents(); } private void initializeGroup() @@ -152,14 +154,24 @@ public final class GenericSampleEditForm extends AbstractGenericSampleRegisterEd private void initializeGeneratedFromParent() { - // FIXME 2010-08-05, Piotr Buczek: use parents - not generatedFrom - Sample parentSample = originalSample.getGeneratedFrom(); - if (parentSample != null) + List<Sample> parents = originalSample.getParents(); + if (parents.size() == 1) { - parent.updateValue(parentSample.getIdentifier()); + 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 + List<Sample> parents = originalSample.getParents(); + parentsArea.setSamples(parents); + } + @Override protected void loadForm() { diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/ParentSamplesArea.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/ParentSamplesArea.java new file mode 100644 index 00000000000..594762dbcdf --- /dev/null +++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/ParentSamplesArea.java @@ -0,0 +1,44 @@ +/* + * Copyright 2009 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.plugin.generic.client.web.client.application.sample; + +import ch.systemsx.cisd.openbis.generic.client.web.client.application.Dict; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.IMessageProvider; + +/** + * {@link SamplesArea} extension to specify parent samples. + * + * @author Piotr Buczek + */ +final class ParentSamplesArea extends SamplesArea +{ + + public static final String ID_SUFFIX_PARENT_SAMPLES = "_parent_samples"; + + public ParentSamplesArea(IMessageProvider messageProvider, String idPrefix) + { + super(messageProvider.getMessage(Dict.SAMPLES_LIST)); + this.setFieldLabel(messageProvider.getMessage(Dict.PARENTS)); + setId(createId(idPrefix)); + } + + public static String createId(String idPrefix) + { + return idPrefix + ID_SUFFIX_PARENT_SAMPLES; + } + +} diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/SamplesArea.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/SamplesArea.java new file mode 100644 index 00000000000..49f6d4405bf --- /dev/null +++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/SamplesArea.java @@ -0,0 +1,54 @@ +/* + * Copyright 2009 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.plugin.generic.client.web.client.application.sample; + +import java.util.List; + +import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.CodesArea; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample; + +/** + * Abstract {@link CodesArea} extension for samples introducing methods with convenient names. + * + * @author Piotr Buczek + */ +abstract public class SamplesArea extends CodesArea<Sample> +{ + public SamplesArea(String emptyTextMsg) + { + super(emptyTextMsg); + } + + // delegation to abstract class methods + + // null if the area has not been modified, + // the list of all sample codes otherwise + public final String[] tryGetSampleCodes() + { + return tryGetModifiedItemList(); + } + + public final void setSamples(List<Sample> samples) + { + setCodeProviders(samples); + } + + public final void setSampleCodes(String[] codes) + { + setCodes(codes); + } +} diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/ExperimentPlateLocationsSection.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/ExperimentPlateLocationsSection.java index 24094882104..a1e9f20ace3 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/ExperimentPlateLocationsSection.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/ExperimentPlateLocationsSection.java @@ -140,7 +140,7 @@ public class ExperimentPlateLocationsSection extends SingleSectionPanel private IDisposableComponent tryCreatePlateMaterialReviewer() { - String[] materialItemList = materialListField.tryParseItemList(); + String[] materialItemList = materialListField.tryGetModifiedItemList(); if (materialItemList == null || materialItemList.length == 0) { return null; -- GitLab