diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/property_type/PropertyTypeAssignmentForm.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/property_type/PropertyTypeAssignmentForm.java index e3587f0bb3aef0863267a3dcbb9ca3d48d807f69..fc8bce47077795b4f0b3a6b7ebb76ef16fba96a8 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/property_type/PropertyTypeAssignmentForm.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/property_type/PropertyTypeAssignmentForm.java @@ -49,7 +49,6 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.Abstrac import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.data.DataSetTypeSelectionWidget; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.experiment.ExperimentTypeSelectionWidget; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.field.PropertyFieldFactory; -import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.field.VarcharField; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.material.MaterialTypeSelectionWidget; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.sample.SampleTypeSelectionWidget; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.DropDownList; @@ -113,8 +112,7 @@ public final class PropertyTypeAssignmentForm extends LayoutContainer implements private CheckBox mandatoryCheckbox; - // TODO 2009-10-26, Piotr Buczek: use combo box - private Field<String> sectionField; + private SectionSelectionWidget sectionSelectionWidget; private EntityTypePropertyTypeSelectionWidget etptSelectionWidget; @@ -302,9 +300,9 @@ public final class PropertyTypeAssignmentForm extends LayoutContainer implements private String getSectionValue() { - if (sectionField != null) + if (sectionSelectionWidget != null) { - return sectionField.getValue(); + return sectionSelectionWidget.getSimpleValue(); } return null; } @@ -437,9 +435,11 @@ public final class PropertyTypeAssignmentForm extends LayoutContainer implements final EntityType entityType = tryGetSelectedEntityType(); if (propertyType != null && entityType != null) { - sectionField = createSectionField(entityType); - formPanel.add(sectionField); - etptSelectionWidget = createETPTSelectionWidget(entityType); + final List<EntityTypePropertyType<?>> etpts = + new ArrayList<EntityTypePropertyType<?>>(entityType.getAssignedPropertyTypes()); + sectionSelectionWidget = createSectionSelectionWidget(etpts); + formPanel.add(sectionSelectionWidget); + etptSelectionWidget = createETPTSelectionWidget(etpts); formPanel.add(etptSelectionWidget); } layout(); @@ -447,39 +447,35 @@ public final class PropertyTypeAssignmentForm extends LayoutContainer implements private void hideEntityTypePropertyTypeRelatedFields() { - if (sectionField != null && etptSelectionWidget != null) + if (sectionSelectionWidget != null && etptSelectionWidget != null) { - sectionField.hide(); + sectionSelectionWidget.hide(); etptSelectionWidget.hide(); - formPanel.remove(sectionField); + formPanel.remove(sectionSelectionWidget); formPanel.remove(etptSelectionWidget); - sectionField = null; + sectionSelectionWidget = null; etptSelectionWidget = null; } } - private EntityTypePropertyTypeSelectionWidget createETPTSelectionWidget(EntityType entityType) + private EntityTypePropertyTypeSelectionWidget createETPTSelectionWidget( + List<EntityTypePropertyType<?>> etpts) { // by default - append - final List<EntityTypePropertyType<?>> all = - new ArrayList<EntityTypePropertyType<?>>(entityType.getAssignedPropertyTypes()); - all.add(0, null); // null will be transformed into '(top)' + etpts.add(0, null); // null will be transformed into '(top)' final String lastCode = - (all.size() > 1) ? all.get(all.size() - 1).getPropertyType().getCode() + (etpts.size() > 1) ? etpts.get(etpts.size() - 1).getPropertyType().getCode() : EntityTypePropertyTypeSelectionWidget.TOP_ITEM_CODE; final EntityTypePropertyTypeSelectionWidget result = - new EntityTypePropertyTypeSelectionWidget(viewContext, getId(), all, lastCode); + new EntityTypePropertyTypeSelectionWidget(viewContext, getId(), etpts, lastCode); FieldUtil.setMandatoryFlag(result, true); return result; } - private Field<String> createSectionField(EntityType entityType) + private SectionSelectionWidget createSectionSelectionWidget( + List<EntityTypePropertyType<?>> etpts) { - Field<String> result = new VarcharField(viewContext.getMessage(Dict.SECTION), false); - result.setToolTip(viewContext.getMessage(Dict.SECTION_TOOLTIP)); - result.setId(createChildId(SECTION_VALUE_ID_PART + entityType.getCode())); - result.show(); - return result; + return SectionSelectionWidget.create(viewContext, etpts); } // diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/property_type/PropertyTypeAssignmentGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/property_type/PropertyTypeAssignmentGrid.java index 51836d25dedc2c7c3faa8d3de3d4f1584da580a1..6dde01c13e8f48e8eccb6bd1430018aaf352ab5c 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/property_type/PropertyTypeAssignmentGrid.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/property_type/PropertyTypeAssignmentGrid.java @@ -43,7 +43,6 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.model.Base import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.columns.framework.IColumnDefinitionKind; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.columns.specific.PropertyTypeAssignmentColDefKind; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.field.PropertyFieldFactory; -import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.field.VarcharField; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.AbstractSimpleBrowserGrid; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.IBrowserGridActionInvoker; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.IDisposableComponent; @@ -243,7 +242,7 @@ public class PropertyTypeAssignmentGrid extends private final boolean originalIsMandatory; - private final Field<String> sectionField; + private final SectionSelectionWidget sectionSelectionWidget; private final EntityTypePropertyTypeSelectionWidget etptSelectionWidget; @@ -283,32 +282,40 @@ public class PropertyTypeAssignmentGrid extends defaultValueField = null; } - // TODO 2009-10-26, Piotr Buczek: use combo box - sectionField = new VarcharField(viewContext.getMessage(Dict.SECTION), false); - sectionField.setValue(etpt.getSection()); - addField(sectionField); + final List<EntityTypePropertyType<?>> etpts = + getEntityTypePropertyTypes(etpt.getEntityType()); - etptSelectionWidget = createETPTSelectionWidget(); + sectionSelectionWidget = createSectionSelectionWidget(etpts); + sectionSelectionWidget.setSimpleValue(etpt.getSection()); + addField(sectionSelectionWidget); + + etptSelectionWidget = createETPTSelectionWidget(etpts); addField(etptSelectionWidget); } - private EntityTypePropertyTypeSelectionWidget createETPTSelectionWidget() + private SectionSelectionWidget createSectionSelectionWidget( + List<EntityTypePropertyType<?>> etpts) + { + return SectionSelectionWidget.create(viewContext, etpts); + } + + private EntityTypePropertyTypeSelectionWidget createETPTSelectionWidget( + List<EntityTypePropertyType<?>> allETPTs) { - final EntityType entityType = etpt.getEntityType(); // create a new list of items from all etpts assigned to entity type - final List<EntityTypePropertyType<?>> all = + final List<EntityTypePropertyType<?>> etpts = new ArrayList<EntityTypePropertyType<?>>(); - all.add(null); // null will be transformed into '(top)' + etpts.add(null); // null will be transformed into '(top)' String initialPropertyTypeCodeOrNull = null; String previousPropertyTypeCodeOrNull = EntityTypePropertyTypeSelectionWidget.TOP_ITEM_CODE; - for (EntityTypePropertyType<?> currentETPT : getPropertyTypes(entityType)) + for (EntityTypePropertyType<?> currentETPT : allETPTs) { final String currentPropertyTypeCode = currentETPT.getPropertyType().getCode(); if (propertyTypeCode.equals(currentPropertyTypeCode) == false) { - all.add(currentETPT); + etpts.add(currentETPT); previousPropertyTypeCodeOrNull = currentPropertyTypeCode; } else { @@ -316,7 +323,7 @@ public class PropertyTypeAssignmentGrid extends } } final EntityTypePropertyTypeSelectionWidget result = - new EntityTypePropertyTypeSelectionWidget(viewContext, getId(), all, + new EntityTypePropertyTypeSelectionWidget(viewContext, getId(), etpts, initialPropertyTypeCodeOrNull); FieldUtil.setMandatoryFlag(result, true); return result; @@ -324,7 +331,7 @@ public class PropertyTypeAssignmentGrid extends private String getSectionValue() { - return sectionField.getValue(); + return sectionSelectionWidget.getSimpleValue(); } /** @@ -397,7 +404,7 @@ public class PropertyTypeAssignmentGrid extends PropertyTypeAssignmentColDefKind.ENTITY_KIND }); } - private List<EntityTypePropertyType<?>> getPropertyTypes(EntityType entityType) + private List<EntityTypePropertyType<?>> getEntityTypePropertyTypes(EntityType entityType) { return entityTypePropertyTypes.get(entityType); } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/property_type/SectionSelectionWidget.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/property_type/SectionSelectionWidget.java new file mode 100644 index 0000000000000000000000000000000000000000..b249294bc39395ad0f91abe5b6defa81766b7217 --- /dev/null +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/property_type/SectionSelectionWidget.java @@ -0,0 +1,73 @@ +/* + * Copyright 2008 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.property_type; + +import java.util.ArrayList; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Set; + +import com.extjs.gxt.ui.client.widget.form.ComboBox; +import com.extjs.gxt.ui.client.widget.form.SimpleComboBox; + +import ch.systemsx.cisd.openbis.generic.client.web.client.ICommonClientServiceAsync; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.Dict; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityTypePropertyType; + +/** + * A {@link ComboBox} extension using simple strings for selecting section name of + * {@link EntityTypePropertyType}. + * + * @author Piotr Buczek + */ +public final class SectionSelectionWidget extends SimpleComboBox<String> +{ + public static SectionSelectionWidget create( + final IViewContext<ICommonClientServiceAsync> viewContext, + List<EntityTypePropertyType<?>> etpts) + { + final Set<String> sections = new LinkedHashSet<String>(); // linked set preserves order + for (EntityTypePropertyType<?> currentETPT : etpts) + { + final String section = currentETPT.getSection(); + if (section != null) + { + sections.add(currentETPT.getSection()); + } + } + return new SectionSelectionWidget(viewContext.getMessage(Dict.SECTION), viewContext + .getMessage(Dict.SECTION_TOOLTIP), viewContext.getMessage(Dict.COMBO_BOX_EMPTY, + "sections"), viewContext.getMessage(Dict.COMBO_BOX_CHOOSE, "section"), + new ArrayList<String>(sections)); + } + + private SectionSelectionWidget(final String fieldLabel, final String toolTip, + final String emptyText, final String chooseText, final List<String> sections) + { + setFieldLabel(fieldLabel); + setToolTip(toolTip); + if (sections.size() == 0) + { + setEmptyText(emptyText); + } else + { + setEmptyText(chooseText); + } + add(sections); + } +}