From f8eab1ccf3ae0a39500440d92f69ecbdaa65ab77 Mon Sep 17 00:00:00 2001
From: buczekp <buczekp>
Date: Thu, 16 Sep 2010 08:21:28 +0000
Subject: [PATCH] [LMS-1597] support for link to a material browser with
 preselected material type

SVN: 17854
---
 .../framework/ComponentProvider.java          |  8 ++++-
 .../MaterialBatchRegistrationPanel.java       |  2 +-
 .../ui/material/MaterialBrowserGrid.java      | 15 ++++++----
 .../ui/material/MaterialBrowserToolbar.java   |  5 ++--
 .../material/MaterialTypeSelectionWidget.java | 30 ++++++++++++-------
 .../PropertyTypeAssignmentForm.java           |  3 +-
 .../PropertyTypeRegistrationForm.java         |  2 +-
 7 files changed, 44 insertions(+), 21 deletions(-)

diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/ComponentProvider.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/ComponentProvider.java
index 3e8961aa2da..324fca296b6 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/ComponentProvider.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/ComponentProvider.java
@@ -139,6 +139,11 @@ public final class ComponentProvider
     }
 
     public final AbstractTabItemFactory getMaterialBrowser()
+    {
+        return getMaterialBrowser(null);
+    }
+
+    public final AbstractTabItemFactory getMaterialBrowser(final String initialMaterialTypeOrNull)
     {
         return new AbstractTabItemFactory()
             {
@@ -146,7 +151,8 @@ public final class ComponentProvider
                 public ITabItem create()
                 {
                     IDisposableComponent browser =
-                            MaterialBrowserGrid.createWithTypeChooser(viewContext);
+                            MaterialBrowserGrid.createWithTypeChooser(viewContext,
+                                    initialMaterialTypeOrNull);
                     return createTab(Dict.MATERIAL_BROWSER, browser);
                 }
 
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/material/MaterialBatchRegistrationPanel.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/material/MaterialBatchRegistrationPanel.java
index d8d81089622..f779ebebcf7 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/material/MaterialBatchRegistrationPanel.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/material/MaterialBatchRegistrationPanel.java
@@ -63,7 +63,7 @@ public final class MaterialBatchRegistrationPanel extends LayoutContainer
         this.viewContext = viewContext;
         setId(ID);
         setScrollMode(Scroll.AUTO);
-        materialTypeSelection = new MaterialTypeSelectionWidget(viewContext, ID_SUFFIX);
+        materialTypeSelection = new MaterialTypeSelectionWidget(viewContext, null, ID_SUFFIX);
         final ToolBar toolBar = createToolBar();
         add(toolBar);
         materialTypeSelection
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/material/MaterialBrowserGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/material/MaterialBrowserGrid.java
index 7fd5a85889c..ba230a521ba 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/material/MaterialBrowserGrid.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/material/MaterialBrowserGrid.java
@@ -70,17 +70,22 @@ public class MaterialBrowserGrid extends
     /**
      * Creates a browser with a toolbar which allows to choose the material type. Allows to show or
      * edit material details.
+     * 
+     * @param initialMaterialTypeOrNull
      */
     public static DisposableEntityChooser<Material> createWithTypeChooser(
-            final IViewContext<ICommonClientServiceAsync> viewContext)
+            final IViewContext<ICommonClientServiceAsync> viewContext,
+            String initialMaterialTypeOrNull)
     {
-        return createWithTypeChooser(viewContext, true);
+        return createWithTypeChooser(viewContext, true, initialMaterialTypeOrNull);
     }
 
     private static DisposableEntityChooser<Material> createWithTypeChooser(
-            final IViewContext<ICommonClientServiceAsync> viewContext, boolean detailsAvailable)
+            final IViewContext<ICommonClientServiceAsync> viewContext, boolean detailsAvailable,
+            String initialMaterialTypeOrNull)
     {
-        final MaterialBrowserToolbar toolbar = new MaterialBrowserToolbar(viewContext, null);
+        final MaterialBrowserToolbar toolbar =
+                new MaterialBrowserToolbar(viewContext, initialMaterialTypeOrNull, null);
         final ICriteriaProvider<ListMaterialDisplayCriteria> criteriaProvider = toolbar;
         final MaterialBrowserGrid browserGrid =
                 createBrowserGrid(viewContext, criteriaProvider, detailsAvailable);
@@ -100,7 +105,7 @@ public class MaterialBrowserGrid extends
     {
         if (initValueOrNull == null)
         {
-            return createWithTypeChooser(viewContext, false);
+            return createWithTypeChooser(viewContext, false, null);
         } else
         {
             return createWithoutTypeChooser(viewContext, initValueOrNull);
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/material/MaterialBrowserToolbar.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/material/MaterialBrowserToolbar.java
index b62cb8c59a7..40aafb1c2a4 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/material/MaterialBrowserToolbar.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/material/MaterialBrowserToolbar.java
@@ -55,11 +55,12 @@ public class MaterialBrowserToolbar extends ToolBar implements
     private final IViewContext<ICommonClientServiceAsync> viewContext;
 
     public MaterialBrowserToolbar(final IViewContext<ICommonClientServiceAsync> viewContext,
-            String displayTypeIdOrNull)
+            String initialMaterialTypeOrNull, String displayTypeIdOrNull)
     {
         this.viewContext = viewContext;
         this.selectMaterialTypeCombo =
-                MaterialTypeSelectionWidget.create(viewContext, displayTypeIdOrNull, ID);
+                MaterialTypeSelectionWidget.create(viewContext, displayTypeIdOrNull,
+                        initialMaterialTypeOrNull, ID);
         display();
     }
 
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/material/MaterialTypeSelectionWidget.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/material/MaterialTypeSelectionWidget.java
index 5151835f007..3d32d860738 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/material/MaterialTypeSelectionWidget.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/material/MaterialTypeSelectionWidget.java
@@ -61,33 +61,39 @@ public final class MaterialTypeSelectionWidget extends
      */
     public static MaterialTypeSelectionWidget createWithAdditionalOption(
             final IViewContext<ICommonClientServiceAsync> viewContext,
-            final String additionalOptionLabel, final String idSuffix)
+            final String additionalOptionLabel, final String initialCodeOrNullParameter,
+            final String idSuffix)
     {
-        return new MaterialTypeSelectionWidget(viewContext, additionalOptionLabel, idSuffix, null);
+        return new MaterialTypeSelectionWidget(viewContext, additionalOptionLabel, idSuffix,
+                initialCodeOrNullParameter, null);
     }
 
     public static MaterialTypeSelectionWidget create(
             final IViewContext<ICommonClientServiceAsync> viewContext,
-            final String displayTypeIdOrNull, final String idSuffix)
+            final String displayTypeIdOrNull, final String initialCodeOrNullParameter,
+            final String idSuffix)
     {
-        return new MaterialTypeSelectionWidget(viewContext, null, idSuffix, displayTypeIdOrNull);
+        return new MaterialTypeSelectionWidget(viewContext, null, idSuffix,
+                initialCodeOrNullParameter, displayTypeIdOrNull);
     }
 
     public MaterialTypeSelectionWidget(final IViewContext<ICommonClientServiceAsync> viewContext,
-            final String idSuffix)
+            final String initialCodeOrNullParameter, final String idSuffix)
     {
-        this(viewContext, null, idSuffix, null);
+        this(viewContext, null, idSuffix, initialCodeOrNullParameter, null);
     }
 
     private MaterialTypeSelectionWidget(IViewContext<ICommonClientServiceAsync> viewContext,
-            String additionalOptionLabelOrNull, String idSuffix, final String displayTypeIdOrNull)
+            String additionalOptionLabelOrNull, String idSuffix,
+            final String initialCodeOrNullParameter, final String displayTypeIdOrNull)
     {
         super(viewContext, SUFFIX + idSuffix, Dict.MATERIAL_TYPE, ModelDataPropertyNames.CODE,
                 "material type", "material types");
         this.viewContext = viewContext;
         this.additionalOptionLabelOrNull = additionalOptionLabelOrNull;
         this.initialCodeOrNull =
-                tryGetInitialValue(displayTypeIdOrNull, viewContext.getDisplaySettingsManager());
+                tryGetInitialValue(displayTypeIdOrNull, initialCodeOrNullParameter, viewContext
+                        .getDisplaySettingsManager());
         setTemplate(GWTUtils.getTooltipTemplate(ModelDataPropertyNames.CODE,
                 ModelDataPropertyNames.TOOLTIP));
         if (displayTypeIdOrNull != null)
@@ -208,9 +214,13 @@ public final class MaterialTypeSelectionWidget extends
     }
 
     private static String tryGetInitialValue(final String displayTypeIdOrNull,
-            DisplaySettingsManager displaySettingsManager)
+            final String initialCodeOrNull, DisplaySettingsManager displaySettingsManager)
     {
-        if (displayTypeIdOrNull != null)
+        boolean initialCodeExplicitlyDefined = initialCodeOrNull != null;
+        if (initialCodeExplicitlyDefined)
+        {
+            return initialCodeOrNull;
+        } else if (displayTypeIdOrNull != null)
         {
             return displaySettingsManager.getDropDownSettings(displayTypeIdOrNull);
         } else
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 f73714d9421..b0f8465218d 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
@@ -217,7 +217,8 @@ public final class PropertyTypeAssignmentForm extends LayoutContainer implements
                 if (materialTypeSelectionWidget == null)
                 {
                     materialTypeSelectionWidget =
-                            new MaterialTypeSelectionWidget(viewContext, MATERIAL_TYPE_ID_SUFFIX);
+                            new MaterialTypeSelectionWidget(viewContext, null,
+                                    MATERIAL_TYPE_ID_SUFFIX);
                     created = true;
                 }
                 result = materialTypeSelectionWidget;
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/property_type/PropertyTypeRegistrationForm.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/property_type/PropertyTypeRegistrationForm.java
index 644f39174cc..1b68f064ede 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/property_type/PropertyTypeRegistrationForm.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/property_type/PropertyTypeRegistrationForm.java
@@ -114,7 +114,7 @@ public final class PropertyTypeRegistrationForm extends AbstractRegistrationForm
     {
         String label = viewContext.getMessage(Dict.ALLOW_ANY_TYPE);
         MaterialTypeSelectionWidget chooser =
-                MaterialTypeSelectionWidget.createWithAdditionalOption(viewContext, label, ID);
+                MaterialTypeSelectionWidget.createWithAdditionalOption(viewContext, label, null, ID);
         FieldUtil.markAsMandatory(chooser);
         return chooser;
     }
-- 
GitLab