From 65dd3f0861df88e2f0dc70c831053a2adafca101 Mon Sep 17 00:00:00 2001
From: buczekp <buczekp>
Date: Wed, 6 Jan 2010 09:04:03 +0000
Subject: [PATCH] [LMS-1311] added user settings dialog

SVN: 14167
---
 .../client/web/client/application/Dict.java   |  9 +++
 .../framework/DisplaySettingsManager.java     | 24 ++++++
 .../web/client/application/menu/TopMenu.java  |  2 +-
 .../application/menu/user/LoggedUserMenu.java |  3 +
 .../user/action/ChangeUserSettingsAction.java | 49 ++++++++++++
 .../ui/user/ChangeUserSettingsDialog.java     | 76 +++++++++++++++++++
 .../shared/basic/dto/DisplaySettings.java     | 23 +++++-
 .../cisd/openbis/public/common-dictionary.js  |  9 ++-
 8 files changed, 190 insertions(+), 5 deletions(-)
 create mode 100644 openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/user/action/ChangeUserSettingsAction.java
 create mode 100644 openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/user/ChangeUserSettingsDialog.java

diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/Dict.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/Dict.java
index 0314bc8763d..f4156039035 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/Dict.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/Dict.java
@@ -715,6 +715,15 @@ public abstract class Dict
 
     public static final String GRID_COLUMN_HAS_FILTER_HEADER = "GRID_COLUMN_HAS_FILTER_HEADER";
 
+    //
+    // User Settings Dialog
+    //
+
+    public static final String CHANGE_USER_SETTINGS_DIALOG_TITLE =
+            "change_user_settings_dialog_title";
+
+    public static final String USE_WILDCARD_SEARCH_MODE_LABEL = "use_wildcard_search_mode_label";
+
     //
     // Unclassified
     //
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/DisplaySettingsManager.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/DisplaySettingsManager.java
index 0cb47bc73ca..e4da9a18e14 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/DisplaySettingsManager.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/DisplaySettingsManager.java
@@ -359,6 +359,12 @@ public class DisplaySettingsManager
         updater.executeDelayed(delayMs);
     }
 
+    public void storeSearchMode(boolean useWildcardSearchMode)
+    {
+        updateUseWildcardSearchMode(useWildcardSearchMode);
+        updater.executeDelayed(1); // 0 not allowed
+    }
+
     private static List<ColumnSetting> createColumnsSettings(ColumnModel columnModel,
             List<String> filteredColumnIdsList)
     {
@@ -442,4 +448,22 @@ public class DisplaySettingsManager
         return sectionModifications.get(sectionDisplayTypeID);
     }
 
+    /**
+     * @returns section settings for given display id<br>
+     */
+    @SuppressWarnings("deprecation")
+    public final boolean isUseWildcardSearchMode()
+    {
+        return displaySettings.isUseWildcardSearchMode();
+    }
+
+    /**
+     * update section settings for given display id (modification date is updated automatically)
+     */
+    @SuppressWarnings("deprecation")
+    private final void updateUseWildcardSearchMode(Boolean newValue)
+    {
+        displaySettings.setUseWildcardSearchMode(newValue);
+    }
+
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/TopMenu.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/TopMenu.java
index 7cf304d4a1a..a5fdb326f39 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/TopMenu.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/TopMenu.java
@@ -72,7 +72,7 @@ public class TopMenu extends LayoutContainer
         PROPERTY_TYPES_MENU_ASSIGN_TO_MATERIAL_TYPE, PROPERTY_TYPES_MENU_ASSIGN_TO_DATA_SET_TYPE,
         PROPERTY_TYPES_MENU_ASSIGN_TO_SAMPLE_TYPE,
 
-        USER_MENU_CHANGE_HOME_GROUP, USER_MENU_LOGOUT,
+        USER_MENU_CHANGE_HOME_GROUP, USER_MENU_CHANGE_SETTINGS, USER_MENU_LOGOUT,
 
         VOCABULARY_MENU_BROWSE, VOCABULARY_MENU_NEW;
 
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/user/LoggedUserMenu.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/user/LoggedUserMenu.java
index 3fd8f8d01d3..d533e7a9a93 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/user/LoggedUserMenu.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/user/LoggedUserMenu.java
@@ -25,6 +25,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.menu.Actio
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.menu.TopMenu;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.menu.TopMenuItem;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.menu.user.action.ChangeHomeGroupAction;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.menu.user.action.ChangeUserSettingsAction;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.menu.user.action.LogoutAction;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.SessionContext;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.User;
@@ -47,6 +48,8 @@ public final class LoggedUserMenu extends TopMenuItem
         Menu submenu = new Menu();
         submenu.add(new ActionMenu(TopMenu.ActionMenuKind.USER_MENU_CHANGE_HOME_GROUP, viewContext,
                 new ChangeHomeGroupAction(viewContext, this)));
+        submenu.add(new ActionMenu(TopMenu.ActionMenuKind.USER_MENU_CHANGE_SETTINGS, viewContext,
+                new ChangeUserSettingsAction(viewContext)));
         submenu.add(new ActionMenu(TopMenu.ActionMenuKind.USER_MENU_LOGOUT, viewContext,
                 new LogoutAction(viewContext)));
         setMenu(submenu);
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/user/action/ChangeUserSettingsAction.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/user/action/ChangeUserSettingsAction.java
new file mode 100644
index 00000000000..2b0f610e6f7
--- /dev/null
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/user/action/ChangeUserSettingsAction.java
@@ -0,0 +1,49 @@
+/*
+ * 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.menu.user.action;
+
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.user.ChangeUserSettingsDialog;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.IDelegatedAction;
+
+/**
+ * An {@link IDelegatedAction} that opens a {@link ChangeUserSettingsDialog}.
+ * 
+ * @author Piotr Buczek
+ */
+public class ChangeUserSettingsAction implements IDelegatedAction
+{
+    private final IViewContext<?> viewContext;
+
+    public ChangeUserSettingsAction(final IViewContext<?> viewContext)
+    {
+        this.viewContext = viewContext;
+    }
+
+    public void execute()
+    {
+        ChangeUserSettingsDialog dialog =
+                new ChangeUserSettingsDialog(viewContext, new IDelegatedAction()
+                    {
+                        public void execute()
+                        {
+                            // nothing to do
+                        }
+                    });
+        dialog.show();
+    }
+}
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/user/ChangeUserSettingsDialog.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/user/ChangeUserSettingsDialog.java
new file mode 100644
index 00000000000..2f329eb870a
--- /dev/null
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/user/ChangeUserSettingsDialog.java
@@ -0,0 +1,76 @@
+/*
+ * 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.user;
+
+import com.extjs.gxt.ui.client.widget.Window;
+import com.google.gwt.user.client.rpc.AsyncCallback;
+
+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.IViewContext;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.field.CheckBoxField;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.AbstractSaveDialog;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.IDelegatedAction;
+
+/**
+ * {@link Window} containing form for changing logged user settings.
+ * 
+ * @author Piotr Buczek
+ */
+public class ChangeUserSettingsDialog extends AbstractSaveDialog
+{
+    public static final String DIALOG_ID =
+            GenericConstants.ID_PREFIX + "change-user-settings-dialog";
+
+    private final IViewContext<?> viewContext;
+
+    private final CheckBoxField useWildcardSearchModeCheckbox;
+
+    public ChangeUserSettingsDialog(final IViewContext<?> viewContext,
+            final IDelegatedAction saveCallback)
+    {
+        super(viewContext, viewContext.getMessage(Dict.CHANGE_USER_SETTINGS_DIALOG_TITLE),
+                saveCallback);
+        this.viewContext = viewContext;
+
+        useWildcardSearchModeCheckbox = createUseWildcardSearchModeField();
+        addField(useWildcardSearchModeCheckbox);
+    }
+
+    private final CheckBoxField createUseWildcardSearchModeField()
+    {
+        CheckBoxField field =
+                new CheckBoxField(viewContext.getMessage(Dict.USE_WILDCARD_SEARCH_MODE_LABEL), true);
+        field.setValue(viewContext.getDisplaySettingsManager().isUseWildcardSearchMode());
+        field
+                .setTitle("Wildcard search treats '*' and '?' as wildcards.\n"
+                        + "It requires adding a '*' at the beginning and the end of searched text for contains search.");
+        return field;
+    }
+
+    @Override
+    protected void save(AsyncCallback<Void> saveCallback)
+    {
+        boolean useWildcardSearchMode = extractUseWildcardSearchMode();
+        viewContext.getDisplaySettingsManager().storeSearchMode(useWildcardSearchMode);
+    }
+
+    private boolean extractUseWildcardSearchMode()
+    {
+        return useWildcardSearchModeCheckbox.getValue();
+    }
+}
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/DisplaySettings.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/DisplaySettings.java
index 49d27e3a610..12ba1d1ecb6 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/DisplaySettings.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/DisplaySettings.java
@@ -27,14 +27,14 @@ import com.google.gwt.user.client.rpc.IsSerializable;
 /**
  * Class storing personalised display settings. This class implements {@link Serializable} not only
  * for transferring it's content remotely but also to store it in the database. Thus, CHANGES IN
- * THIS CLASS MIGHT LEAD TO A LOST OF PERSONAL SETTINGS. In all cases deserialisation leads to an
+ * THIS CLASS MIGHT LEAD TO A LOST OF PERSONAL SETTINGS. In all cases deserialization leads to an
  * exception the default settings is used.
  * <p>
  * NOTE: This class has to be Java serializable and GWT serializable.
  * <p>
- * NOTE: Object of this class should be alwayes managed by DisplaySettingsManager on client side.
+ * NOTE: Object of this class should be always managed by DisplaySettingsManager on client side.
  * 
- * @author     Franz-Josef Elmer
+ * @author Franz-Josef Elmer
  */
 public class DisplaySettings implements Serializable, IsSerializable
 {
@@ -45,6 +45,9 @@ public class DisplaySettings implements Serializable, IsSerializable
 
     private Map<String, Boolean> sectionSettings = new HashMap<String, Boolean>();
 
+    // for new users with clean display settings basic search mode will be used by default
+    private boolean useWildcardSearchMode = false; 
+
     /** @deprecated Should be used only by DisplaySettingsManager. */
     @Deprecated
     public final Map<String, List<ColumnSetting>> getColumnSettings()
@@ -63,6 +66,13 @@ public class DisplaySettings implements Serializable, IsSerializable
         return sectionSettings;
     }
 
+    /** @deprecated Should be used only by DisplaySettingsManager. */
+    @Deprecated
+    public boolean isUseWildcardSearchMode()
+    {
+        return useWildcardSearchMode;
+    }
+
     // for serialization
 
     @SuppressWarnings("unused")
@@ -77,4 +87,11 @@ public class DisplaySettings implements Serializable, IsSerializable
         this.sectionSettings = sectionSettings;
     }
 
+    /** @deprecated Should be used only by DisplaySettingsManager. */
+    @Deprecated
+    public void setUseWildcardSearchMode(boolean useWildcardSearchMode)
+    {
+        this.useWildcardSearchMode = useWildcardSearchMode;
+    }
+
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/public/common-dictionary.js b/openbis/source/java/ch/systemsx/cisd/openbis/public/common-dictionary.js
index b2f9d53938d..c91da41b3a1 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/public/common-dictionary.js
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/public/common-dictionary.js
@@ -296,6 +296,7 @@ var common = {
   
   // menu user
   USER_MENU_CHANGE_HOME_GROUP: "Home Group",
+  USER_MENU_CHANGE_SETTINGS: "Settings",
   USER_MENU_LOGOUT: "Logout",
     
   menu_compute: "Perform",
@@ -324,9 +325,15 @@ var common = {
   confirm_title: "Confirmation",
   confirm_close_msg: "All unsaved changes will be lost. Are you sure?",
 
-  change_user_home_group_dialog_title: "Change Home Group",  
   
+  //
+  // User Settings Dialog
+  //
   
+  change_user_home_group_dialog_title: "Change Home Group",  
+  change_user_settings_dialog_title: "Change Settings",  
+  use_wildcard_search_mode_label: "Use wildcard search mode",
+    
   //
   // Role View
   //
-- 
GitLab