From 4b390aac751a1d937b67ab8ea1fafec547e8fac9 Mon Sep 17 00:00:00 2001
From: izabel <izabel>
Date: Tue, 7 Sep 2010 14:41:22 +0000
Subject: [PATCH] [LMS-1727] exact match

SVN: 17750
---
 .../client/web/client/application/Dict.java      |  2 ++
 .../ExperimentPlateLocationsSection.java         |  9 ++++++++-
 .../detailviewers/PlateMaterialReviewer.java     |  5 +++--
 .../client/web/public/screening-dictionary.js    |  2 ++
 .../logic/PlateMaterialLocationsLoader.java      | 16 ++++++++--------
 .../basic/dto/PlateMaterialsSearchCriteria.java  | 14 +++++++++++---
 6 files changed, 34 insertions(+), 14 deletions(-)

diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/Dict.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/Dict.java
index af303183b0b..7e0d0749b28 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/Dict.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/Dict.java
@@ -68,6 +68,8 @@ public final class Dict extends ch.systemsx.cisd.openbis.generic.client.web.clie
     public static final String PLATE_MATERIAL_REVIEWER_SPECIFY_METERIAL_ITEMS =
             "PLATE_MATERIAL_REVIEWER_SPECIFY_METERIAL_ITEMS";
 
+    public static final String EXACT_MATCH_ONLY = "EXACT_MATCH_ONLY";
+
     private Dict()
     {
         // Can not be instantiated.
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 a8e7e1c94f7..1a58f49645c 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
@@ -22,6 +22,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DispatcherHelper;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.ITabItem;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.help.HelpPageIdentifier;
+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.MultilineItemsField;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.IDisposableComponent;
 import ch.systemsx.cisd.openbis.generic.shared.basic.IEntityInformationHolderWithIdentifier;
@@ -48,6 +49,8 @@ public class ExperimentPlateLocationsSection extends SingleSectionPanel
 
     private final MultilineItemsField materialListField;
 
+    private final CheckBoxField exactMatchOnly;
+
     private List<MaterialType> materialTypesOrNull;
 
     public ExperimentPlateLocationsSection(
@@ -59,6 +62,9 @@ public class ExperimentPlateLocationsSection extends SingleSectionPanel
         this.screeningViewContext = screeningViewContext;
         this.experiment = experiment;
         this.materialListField = createMaterialListArea();
+        this.exactMatchOnly =
+                new CheckBoxField(screeningViewContext.getMessage(Dict.EXACT_MATCH_ONLY), false);
+        exactMatchOnly.setBoxLabel(screeningViewContext.getMessage(Dict.EXACT_MATCH_ONLY));
         setDisplayID(DisplayTypeIDGenerator.PLATE_MATERIAL_REVIEWER, ID_SUFFIX);
         screeningViewContext.getCommonService().listMaterialTypes(
                 new AbstractAsyncCallback<List<MaterialType>>(screeningViewContext)
@@ -99,6 +105,7 @@ public class ExperimentPlateLocationsSection extends SingleSectionPanel
             });
 
         container.add(new Label(viewContext.getMessage(Dict.PLATE_MATERIAL_REVIEWER_HELP_INFO)));
+        container.add(exactMatchOnly);
         container.add(materialListField);
         container.add(searchButton);
         container.setScrollMode(Scroll.AUTO);
@@ -154,7 +161,7 @@ public class ExperimentPlateLocationsSection extends SingleSectionPanel
         }
         String[] materialTypeCodes = Code.extractCodesToArray(materialTypesOrNull);
         return PlateMaterialReviewer.create(screeningViewContext, experiment, materialItemList,
-                materialTypeCodes);
+                materialTypeCodes, exactMatchOnly.getValue());
     }
 
 }
\ No newline at end of file
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/PlateMaterialReviewer.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/PlateMaterialReviewer.java
index 31fc626feb6..b4e65330d2c 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/PlateMaterialReviewer.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/PlateMaterialReviewer.java
@@ -95,13 +95,14 @@ public class PlateMaterialReviewer extends AbstractSimpleBrowserGrid<WellContent
     public static IDisposableComponent create(
             IViewContext<IScreeningClientServiceAsync> viewContext,
             IEntityInformationHolderWithIdentifier experiment, String[] materialItemList,
-            String[] materialTypeCodes)
+            String[] materialTypeCodes, boolean exactMatchOnly)
     {
         ExperimentSearchCriteria experimentCriteria =
                 ExperimentSearchCriteria.createExperiment(experiment.getId(), experiment
                         .getIdentifier());
         MaterialSearchCriteria materialCriteria =
-                MaterialSearchCriteria.createCodesCriteria(materialItemList, materialTypeCodes);
+                MaterialSearchCriteria.createCodesCriteria(materialItemList, materialTypeCodes,
+                        exactMatchOnly);
         return create(viewContext, experimentCriteria, materialCriteria);
     }
 
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/screening-dictionary.js b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/screening-dictionary.js
index 10038c31c45..87f319a2f1b 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/screening-dictionary.js
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/screening-dictionary.js
@@ -51,6 +51,8 @@ var screening = {
 
     EXPERIMENT_PLATE_MATERIAL_REVIEWER_SECTION: "Wells Reviewing Panel",
     EXPERIMENT_PLATE_MATERIAL_BROWSER_SECTION: "Well Materials",
+		EXACT_MATCH_ONLY: "Only Exactly Matching",
+	
   
   // LAST LINE: KEEP IT AT THE END
   lastline: "" // we need a line without a comma
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/PlateMaterialLocationsLoader.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/PlateMaterialLocationsLoader.java
index 005266255e0..9c8850e2c7e 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/PlateMaterialLocationsLoader.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/PlateMaterialLocationsLoader.java
@@ -281,13 +281,13 @@ public class PlateMaterialLocationsLoader
             if (expId == null)
             {
                 locations =
-                        dao.getPlateLocationsForMaterialCodes(ids,
-                                codesCriteria.getMaterialTypeCodes());
+                        dao.getPlateLocationsForMaterialCodes(ids, codesCriteria
+                                .getMaterialTypeCodes());
             } else
             {
                 locations =
-                        dao.getPlateLocationsForMaterialCodes(ids,
-                                codesCriteria.getMaterialTypeCodes(), expId);
+                        dao.getPlateLocationsForMaterialCodes(ids, codesCriteria
+                                .getMaterialTypeCodes(), expId);
             }
 
         } else if (materialSearchCriteria.tryGetMaterialId() != null)
@@ -338,10 +338,10 @@ public class PlateMaterialLocationsLoader
         }
         criteria.setCriteria(listOfCriteria);
         criteria.setConnection(SearchCriteriaConnection.MATCH_ANY);
-        return ArrayUtils.toPrimitive(daoFactory
-                .getHibernateSearchDAO()
-                .searchForEntityIds(criteria,
-                        ch.systemsx.cisd.openbis.generic.shared.dto.properties.EntityKind.MATERIAL)
+        criteria.setUseWildcardSearchMode(codesCriteria.isExactMatchOnly());// FIXME
+        return ArrayUtils.toPrimitive(daoFactory.getHibernateSearchDAO().searchForEntityIds(
+                criteria,
+                ch.systemsx.cisd.openbis.generic.shared.dto.properties.EntityKind.MATERIAL)
                 .toArray(new Long[0]));
     }
 
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/basic/dto/PlateMaterialsSearchCriteria.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/basic/dto/PlateMaterialsSearchCriteria.java
index 152e3914101..3c09d8f95e0 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/basic/dto/PlateMaterialsSearchCriteria.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/basic/dto/PlateMaterialsSearchCriteria.java
@@ -136,6 +136,8 @@ public class PlateMaterialsSearchCriteria implements IsSerializable, Serializabl
 
         private String[] materialTypeCodes;
 
+        private boolean exactMatchOnly;
+
         // GWT only
         @SuppressWarnings("unused")
         private MaterialSearchCodesCriteria()
@@ -143,8 +145,9 @@ public class PlateMaterialsSearchCriteria implements IsSerializable, Serializabl
         }
 
         public MaterialSearchCodesCriteria(String[] materialCodesOrProperties,
-                String[] materialTypeCodes)
+                String[] materialTypeCodes, boolean exactMatchOnly)
         {
+            this.exactMatchOnly = exactMatchOnly;
             for (int i = 0; i < materialCodesOrProperties.length; i++)
             {
                 materialCodesOrProperties[i] = materialCodesOrProperties[i].toUpperCase();
@@ -158,6 +161,11 @@ public class PlateMaterialsSearchCriteria implements IsSerializable, Serializabl
             return materialCodesOrProperties;
         }
 
+        public boolean isExactMatchOnly()
+        {
+            return exactMatchOnly;
+        }
+
         public String[] getMaterialTypeCodes()
         {
             return materialTypeCodes;
@@ -188,10 +196,10 @@ public class PlateMaterialsSearchCriteria implements IsSerializable, Serializabl
          * of codes and type contained in the specified list of types.
          */
         public static final MaterialSearchCriteria createCodesCriteria(String[] materialCodes,
-                String[] materialTypeCodes)
+                String[] materialTypeCodes, boolean exactMatchOnly)
         {
             return new MaterialSearchCriteria(new MaterialSearchCodesCriteria(materialCodes,
-                    materialTypeCodes), null);
+                    materialTypeCodes, exactMatchOnly), null);
         }
 
         public static final MaterialSearchCriteria createIdCriteria(TechId materialId)
-- 
GitLab