From 35a8381f85f01cd605551524a03083116baf0551 Mon Sep 17 00:00:00 2001
From: felmer <felmer>
Date: Tue, 21 Aug 2012 10:16:57 +0000
Subject: [PATCH] SP-242, BIS-154: refactoring SampleTypeGrid to avoid code
 duplication

SVN: 26412
---
 .../entity_type/AbstractEditTypeDialog.java   |  72 +++++
 .../application/ui/sample/SampleTypeGrid.java | 253 ++++++------------
 .../ui/widget/AbstractSaveDialog.java         |   2 +-
 3 files changed, 153 insertions(+), 174 deletions(-)
 create mode 100644 openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/entity_type/AbstractEditTypeDialog.java

diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/entity_type/AbstractEditTypeDialog.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/entity_type/AbstractEditTypeDialog.java
new file mode 100644
index 00000000000..e714b49f3f9
--- /dev/null
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/entity_type/AbstractEditTypeDialog.java
@@ -0,0 +1,72 @@
+/*
+ * Copyright 2012 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.entity_type;
+
+import com.google.gwt.user.client.rpc.AsyncCallback;
+
+import ch.systemsx.cisd.openbis.generic.client.web.client.ICommonClientServiceAsync;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.GenericConstants;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.field.DescriptionField;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.AbstractRegistrationDialog;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.FieldUtil;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.IDelegatedAction;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityKind;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityType;
+
+/**
+ * Abstract super class of dialogs editing an entity type.
+ * 
+ * @author Franz-Josef Elmer
+ */
+public abstract class AbstractEditTypeDialog<T extends EntityType> extends
+        AbstractRegistrationDialog
+{
+    public static final String DIALOG_ID = GenericConstants.ID_PREFIX + "edit-type-dialog";
+
+    private final T type;
+
+    private final DescriptionField descriptionField;
+
+    private final EntityKind entityKind;
+
+    private final IViewContext<ICommonClientServiceAsync> viewContext;
+
+    protected AbstractEditTypeDialog(IViewContext<ICommonClientServiceAsync> viewContext,
+            String title, IDelegatedAction postRegistrationCallback, EntityKind entityKind,
+            T entityType)
+    {
+        super(viewContext, title, postRegistrationCallback);
+        this.viewContext = viewContext;
+        this.entityKind = entityKind;
+        setId(DIALOG_ID);
+        this.type = entityType;
+        descriptionField = createDescriptionField(viewContext);
+        FieldUtil.setValueWithUnescaping(descriptionField, entityType.getDescription());
+        addField(descriptionField);
+    }
+
+    @Override
+    protected void register(AsyncCallback<Void> registrationCallback)
+    {
+        type.setDescription(descriptionField.getValue());
+        setSpecificAttributes(type);
+        viewContext.getCommonService().updateEntityType(entityKind, type, registrationCallback);
+    }
+
+    abstract protected void setSpecificAttributes(T entityType);
+}
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/sample/SampleTypeGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/sample/SampleTypeGrid.java
index 48782103c68..0fdf489d82b 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/sample/SampleTypeGrid.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/sample/SampleTypeGrid.java
@@ -27,14 +27,13 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.GenericCon
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.help.HelpPageIdentifier;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.TypedTableGrid;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.entity_type.AbstractEditTypeDialog;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.entity_type.AbstractEntityTypeGrid;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.entity_type.AddTypeDialog;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.field.CheckBoxField;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.field.CodeField;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.field.DescriptionField;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.IDisposableComponent;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.AbstractRegistrationDialog;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.FieldUtil;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.AbstractSaveDialog;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.DialogWithOnlineHelpUtils;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.DefaultResultSetConfig;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.TableExportCriteria;
@@ -123,81 +122,21 @@ public class SampleTypeGrid extends AbstractEntityTypeGrid<SampleType>
         String title =
                 viewContext.getMessage(Dict.EDIT_TYPE_TITLE_TEMPLATE, entityKind.getDescription(),
                         code);
-        return new AbstractRegistrationDialog(viewContext, title, postRegistrationCallback)
+        return new AbstractEditTypeDialog<SampleType>(viewContext, title, postRegistrationCallback,
+                EntityKind.SAMPLE, sampleType)
             {
-                private final DescriptionField descriptionField;
-
-                private final CheckBoxField showContainerField;
-
-                private final CheckBoxField showParentsField;
-
-                private final CheckBoxField listableField;
-
-                private final CheckBoxField subcodeUniqueField;
-
-                private final CheckBoxField autoGeneratedCodeField;
-
-                private final CheckBoxField showParentMetadataField;
-
-                private final TextField<String> generatedCodePrefixField;
+                private final SampleTypeDialogFieldHelper helper;
 
                 {
-                    descriptionField = createDescriptionField(viewContext);
-                    FieldUtil.setValueWithUnescaping(descriptionField, sampleType.getDescription());
-                    addField(descriptionField);
-
-                    listableField =
-                            SampleTypeDialogFieldHelper.createListableField(viewContext,
-                                    sampleType.isListable());
-                    addField(listableField);
-
-                    showContainerField =
-                            SampleTypeDialogFieldHelper.createShowContainerField(viewContext,
-                                    sampleType.isShowContainer());
-                    addField(showContainerField);
-
-                    showParentsField =
-                            SampleTypeDialogFieldHelper.createShowParentsField(viewContext,
-                                    sampleType.isShowParents());
-                    addField(showParentsField);
-
-                    subcodeUniqueField =
-                            SampleTypeDialogFieldHelper.createUniqueSubcodesField(viewContext,
-                                    sampleType.isSubcodeUnique());
-                    addField(subcodeUniqueField);
-
-                    autoGeneratedCodeField =
-                            SampleTypeDialogFieldHelper.createAutoGeneratedCodeField(viewContext,
-                                    sampleType.isAutoGeneratedCode());
-                    addField(autoGeneratedCodeField);
-
-                    showParentMetadataField =
-                            SampleTypeDialogFieldHelper.createShowParentMetadataField(viewContext,
-                                    sampleType.isShowParentMetadata());
-                    addField(showParentMetadataField);
-
-                    generatedCodePrefixField =
-                            SampleTypeDialogFieldHelper.createGeneratedCodePrefixField(viewContext,
-                                    sampleType.getGeneratedCodePrefix());
-                    addField(generatedCodePrefixField);
-
-                    DialogWithOnlineHelpUtils.addHelpButton(viewContext, this,
-                            createHelpPageIdentifier());
+                    helper =
+                            new SampleTypeDialogFieldHelper(viewContext, this, sampleType,
+                                    createHelpPageIdentifier());
                 }
 
                 @Override
-                protected void register(AsyncCallback<Void> registrationCallback)
+                protected void setSpecificAttributes(SampleType entityType)
                 {
-                    sampleType.setDescription(descriptionField.getValue());
-                    sampleType.setListable(listableField.getValue());
-                    sampleType.setSubcodeUnique(subcodeUniqueField.getValue());
-                    sampleType.setAutoGeneratedCode(autoGeneratedCodeField.getValue());
-                    sampleType.setShowParentMetadata(showParentMetadataField.getValue());
-                    sampleType.setGeneratedCodePrefix(generatedCodePrefixField.getValue());
-                    sampleType.setShowParents(showParentsField.getValue());
-                    sampleType.setShowContainer(showContainerField.getValue());
-                    viewContext.getService().updateEntityType(entityKind, sampleType,
-                            registrationCallback);
+                    helper.setAttributes(entityType);
                 }
 
                 private HelpPageIdentifier createHelpPageIdentifier()
@@ -214,72 +153,27 @@ public class SampleTypeGrid extends AbstractEntityTypeGrid<SampleType>
         return new AddTypeDialog<SampleType>(viewContext, title, postRegistrationCallback,
                 newEntityType)
             {
-
-                private CheckBoxField showContainerField;
-
-                private CheckBoxField showParentsField;
-
-                private CheckBoxField listableField;
-
-                private CheckBoxField subcodeUniqueField;
-
-                private CheckBoxField autoGenerateCodesField;
-
-                private CheckBoxField showParentMetadataField;
-
-                private TextField<String> generatedCodePrefixField;
+                private final SampleTypeDialogFieldHelper helper;
 
                 {
-                    listableField =
-                            SampleTypeDialogFieldHelper.createListableField(viewContext,
-                                    DEFAULT_LISTABLE_VALUE);
-                    addField(listableField);
-
-                    showContainerField =
-                            SampleTypeDialogFieldHelper.createShowContainerField(viewContext,
-                                    DEFAULT_SHOW_CONTAINER_VALUE);
-                    addField(showContainerField);
-
-                    showParentsField =
-                            SampleTypeDialogFieldHelper.createShowParentsField(viewContext,
-                                    DEFAULT_SHOW_PARENTS_VALUE);
-                    addField(showParentsField);
-
-                    subcodeUniqueField =
-                            SampleTypeDialogFieldHelper.createUniqueSubcodesField(viewContext,
-                                    DEFAULT_UNIQUE_SUBCODES_VALUE);
-                    addField(subcodeUniqueField);
-
-                    autoGenerateCodesField =
-                            SampleTypeDialogFieldHelper.createAutoGeneratedCodeField(viewContext,
-                                    DEFAULT_AUTO_GENERATE_CODES_VALUE);
-                    addField(autoGenerateCodesField);
-
-                    showParentMetadataField =
-                            SampleTypeDialogFieldHelper.createShowParentMetadataField(viewContext,
-                                    DEFAULT_SHOW_PARENT_METADATA_VALUE);
-                    addField(showParentMetadataField);
-
-                    generatedCodePrefixField =
-                            SampleTypeDialogFieldHelper.createGeneratedCodePrefixField(viewContext,
-                                    DEFAULT_GENERATED_CODE_PREFIX_VALUE);
-                    addField(generatedCodePrefixField);
-
-                    DialogWithOnlineHelpUtils.addHelpButton(viewContext, this,
-                            createHelpPageIdentifier());
+                    SampleType sampleType = new SampleType();
+                    sampleType.setListable(DEFAULT_LISTABLE_VALUE);
+                    sampleType.setShowContainer(DEFAULT_SHOW_CONTAINER_VALUE);
+                    sampleType.setShowParents(DEFAULT_SHOW_PARENTS_VALUE);
+                    sampleType.setSubcodeUnique(DEFAULT_UNIQUE_SUBCODES_VALUE);
+                    sampleType.setAutoGeneratedCode(DEFAULT_AUTO_GENERATE_CODES_VALUE);
+                    sampleType.setShowParentMetadata(DEFAULT_SHOW_PARENT_METADATA_VALUE);
+                    sampleType.setGeneratedCodePrefix(DEFAULT_GENERATED_CODE_PREFIX_VALUE);
+                    helper =
+                            new SampleTypeDialogFieldHelper(viewContext, this, sampleType,
+                                    createHelpPageIdentifier());
                 }
 
                 @Override
                 protected void register(SampleType sampleType,
                         AsyncCallback<Void> registrationCallback)
                 {
-                    sampleType.setShowParents(showParentsField.getValue());
-                    sampleType.setShowContainer(showContainerField.getValue());
-                    sampleType.setListable(listableField.getValue());
-                    sampleType.setAutoGeneratedCode(autoGenerateCodesField.getValue());
-                    sampleType.setShowParentMetadata(showParentMetadataField.getValue());
-                    sampleType.setSubcodeUnique(subcodeUniqueField.getValue());
-                    sampleType.setGeneratedCodePrefix(generatedCodePrefixField.getValue());
+                    helper.setAttributes(sampleType);
                     SampleTypeGrid.this.register(sampleType, registrationCallback);
                 }
 
@@ -297,34 +191,6 @@ public class SampleTypeGrid extends AbstractEntityTypeGrid<SampleType>
 
     private static final class SampleTypeDialogFieldHelper
     {
-        public static CheckBoxField createListableField(
-                final IViewContext<ICommonClientServiceAsync> viewContext, Boolean value)
-        {
-            final String title = viewContext.getMessage(Dict.LISTABLE);
-            return createCheckBoxField(title, value);
-        }
-
-        public static CheckBoxField createUniqueSubcodesField(
-                final IViewContext<ICommonClientServiceAsync> viewContext, Boolean value)
-        {
-            final String title = viewContext.getMessage(Dict.SUBCODE_UNIQUE_LABEL);
-            return createCheckBoxField(title, value);
-        }
-
-        public static CheckBoxField createAutoGeneratedCodeField(
-                final IViewContext<ICommonClientServiceAsync> viewContext, Boolean value)
-        {
-            final String title = viewContext.getMessage(Dict.AUTO_GENERATE_CODES_LABEL);
-            return createCheckBoxField(title, value);
-        }
-
-        public static CheckBoxField createShowParentMetadataField(
-                final IViewContext<ICommonClientServiceAsync> viewContext, Boolean value)
-        {
-            final String title = viewContext.getMessage(Dict.SHOW_PARENT_METADATA_LABEL);
-            return createCheckBoxField(title, value);
-        }
-
         private static CheckBoxField createCheckBoxField(final String title, Boolean value)
         {
             final CheckBoxField field = new CheckBoxField(title, false);
@@ -332,28 +198,69 @@ public class SampleTypeGrid extends AbstractEntityTypeGrid<SampleType>
             return field;
         }
 
-        public static TextField<String> createGeneratedCodePrefixField(
-                final IViewContext<ICommonClientServiceAsync> viewContext, String value)
-        {
-            final String title = viewContext.getMessage(Dict.GENERATED_CODE_PREFIX);
-            final TextField<String> field = new CodeField(viewContext, title);
-            field.setValue(value);
-            return field;
+        private final CheckBoxField showContainerField;
 
-        }
+        private final CheckBoxField showParentsField;
+
+        private final CheckBoxField listableField;
+
+        private final CheckBoxField subcodeUniqueField;
+
+        private final CheckBoxField autoGeneratedCodeField;
+
+        private final CheckBoxField showParentMetadataField;
+
+        private final TextField<String> generatedCodePrefixField;
 
-        public static CheckBoxField createShowParentsField(
-                final IViewContext<ICommonClientServiceAsync> viewContext, Boolean value)
+        public SampleTypeDialogFieldHelper(IViewContext<ICommonClientServiceAsync> viewContext,
+                AbstractSaveDialog dialog, SampleType sampleType,
+                HelpPageIdentifier helpPageIdentifier)
         {
-            final String title = viewContext.getMessage(Dict.SHOW_PARENTS);
-            return createCheckBoxField(title, value);
+            listableField =
+                    SampleTypeDialogFieldHelper.createCheckBoxField(
+                            viewContext.getMessage(Dict.LISTABLE), sampleType.isListable());
+            dialog.addField(listableField);
+            showContainerField =
+                    SampleTypeDialogFieldHelper.createCheckBoxField(
+                            viewContext.getMessage(Dict.SHOW_CONTAINER),
+                            sampleType.isShowContainer());
+            dialog.addField(showContainerField);
+            showParentsField =
+                    SampleTypeDialogFieldHelper.createCheckBoxField(
+                            viewContext.getMessage(Dict.SHOW_PARENTS), sampleType.isShowParents());
+            dialog.addField(showParentsField);
+            subcodeUniqueField =
+                    SampleTypeDialogFieldHelper.createCheckBoxField(
+                            viewContext.getMessage(Dict.SUBCODE_UNIQUE_LABEL),
+                            sampleType.isSubcodeUnique());
+            dialog.addField(subcodeUniqueField);
+            autoGeneratedCodeField =
+                    SampleTypeDialogFieldHelper.createCheckBoxField(
+                            viewContext.getMessage(Dict.AUTO_GENERATE_CODES_LABEL),
+                            sampleType.isAutoGeneratedCode());
+            dialog.addField(autoGeneratedCodeField);
+            showParentMetadataField =
+                    SampleTypeDialogFieldHelper.createCheckBoxField(
+                            viewContext.getMessage(Dict.SHOW_PARENT_METADATA_LABEL),
+                            sampleType.isShowParentMetadata());
+            dialog.addField(showParentMetadataField);
+            generatedCodePrefixField =
+                    new CodeField(viewContext, viewContext.getMessage(Dict.GENERATED_CODE_PREFIX));
+            generatedCodePrefixField.setValue(sampleType.getGeneratedCodePrefix());
+            dialog.addField(generatedCodePrefixField);
+
+            DialogWithOnlineHelpUtils.addHelpButton(viewContext, dialog, helpPageIdentifier);
         }
 
-        public static CheckBoxField createShowContainerField(
-                final IViewContext<ICommonClientServiceAsync> viewContext, Boolean value)
+        public void setAttributes(SampleType sampleType)
         {
-            final String title = viewContext.getMessage(Dict.SHOW_CONTAINER);
-            return createCheckBoxField(title, value);
+            sampleType.setShowParents(showParentsField.getValue());
+            sampleType.setShowContainer(showContainerField.getValue());
+            sampleType.setListable(listableField.getValue());
+            sampleType.setAutoGeneratedCode(autoGeneratedCodeField.getValue());
+            sampleType.setShowParentMetadata(showParentMetadataField.getValue());
+            sampleType.setSubcodeUnique(subcodeUniqueField.getValue());
+            sampleType.setGeneratedCodePrefix(generatedCodePrefixField.getValue());
         }
     }
 
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/widget/AbstractSaveDialog.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/widget/AbstractSaveDialog.java
index 9e3939b44ff..01f5165a717 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/widget/AbstractSaveDialog.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/widget/AbstractSaveDialog.java
@@ -93,7 +93,7 @@ abstract public class AbstractSaveDialog extends Window
         addButton(createCancelButton());
     }
 
-    protected final void addField(Widget widget)
+    public final void addField(Widget widget)
     {
         form.add(widget);
     }
-- 
GitLab