From 54eb35fea9c2cf31147072079d6f35b537a48c04 Mon Sep 17 00:00:00 2001
From: felmer <felmer>
Date: Mon, 8 Jul 2013 12:11:53 +0000
Subject: [PATCH] SP-745, BIS-476: Introducing PermlinkEditingLocatorResolver.

SVN: 29524
---
 .../client/web/client/application/Client.java |  2 +
 .../PermlinkEditingLocatorResolver.java       | 63 +++++++++++++++++++
 .../locator/PermlinkLocatorResolver.java      |  9 ++-
 3 files changed, 72 insertions(+), 2 deletions(-)
 create mode 100644 openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/locator/PermlinkEditingLocatorResolver.java

diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/Client.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/Client.java
index 542ecb4e52e..38534a3beeb 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/Client.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/Client.java
@@ -46,6 +46,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.locator.Ma
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.locator.MetaprojectBrowserLocatorResolver;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.locator.MetaprojectLocatorResolver;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.locator.OpenViewAction;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.locator.PermlinkEditingLocatorResolver;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.locator.PermlinkLocatorResolver;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.locator.ProjectLocatorResolver;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.locator.SampleRegistrationLocatorResolver;
@@ -439,6 +440,7 @@ public class Client implements EntryPoint, ValueChangeHandler<String>
         handlerRegistry.registerHandler(new ProjectLocatorResolver(context));
         handlerRegistry.registerHandler(new MetaprojectLocatorResolver(context));
         handlerRegistry.registerHandler(new AttachmentDownloadLocatorResolver(context));
+        handlerRegistry.registerHandler(new PermlinkEditingLocatorResolver(context));
         handlerRegistry.registerHandler(new PermlinkLocatorResolver(context));
 
         handlerRegistry.registerHandler(new SearchLocatorResolver(context));
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/locator/PermlinkEditingLocatorResolver.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/locator/PermlinkEditingLocatorResolver.java
new file mode 100644
index 00000000000..5048d1ef1a9
--- /dev/null
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/locator/PermlinkEditingLocatorResolver.java
@@ -0,0 +1,63 @@
+/*
+ * Copyright 2013 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.locator;
+
+import ch.systemsx.cisd.openbis.generic.client.web.client.ICommonClientServiceAsync;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.AbstractAsyncCallback;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.listener.OpenEntityEditorTabClickListener;
+import ch.systemsx.cisd.openbis.generic.client.web.client.exception.UserFailureException;
+import ch.systemsx.cisd.openbis.generic.shared.basic.IEntityInformationHolderWithPermId;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityKind;
+
+/**
+ * Resolver for editing an entity.
+ * 
+ * @author Franz-Josef Elmer
+ */
+public class PermlinkEditingLocatorResolver extends PermlinkLocatorResolver
+{
+
+    private static final String EDIT_ACTION = "EDITING";
+
+    /**
+     * @param viewContext
+     */
+    public PermlinkEditingLocatorResolver(IViewContext<ICommonClientServiceAsync> viewContext)
+    {
+        super(EDIT_ACTION, viewContext);
+    }
+
+    @Override
+    protected void openInitialEntityViewer(String entityKindValue, String permIdValue) throws UserFailureException
+    {
+        EntityKind entityKind = getEntityKind(entityKindValue);
+
+        viewContext.getCommonService().getEntityInformationHolder(entityKind, permIdValue,
+                new AbstractAsyncCallback<IEntityInformationHolderWithPermId>(viewContext)
+                    {
+
+                        @Override
+                        protected void process(IEntityInformationHolderWithPermId result)
+                        {
+                            OpenEntityEditorTabClickListener.showEntityEditor(viewContext, result, false);
+
+                        }
+                    });
+    }
+
+}
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/locator/PermlinkLocatorResolver.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/locator/PermlinkLocatorResolver.java
index 5bfb17f6b2f..190ddfbcf08 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/locator/PermlinkLocatorResolver.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/locator/PermlinkLocatorResolver.java
@@ -17,11 +17,16 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityKind;
  */
 public class PermlinkLocatorResolver extends AbstractViewLocatorResolver
 {
-    private final IViewContext<ICommonClientServiceAsync> viewContext;
+    protected final IViewContext<ICommonClientServiceAsync> viewContext;
 
     public PermlinkLocatorResolver(IViewContext<ICommonClientServiceAsync> viewContext)
     {
-        super(ViewLocator.PERMLINK_ACTION);
+        this(ViewLocator.PERMLINK_ACTION, viewContext);
+    }
+
+    protected PermlinkLocatorResolver(String action, IViewContext<ICommonClientServiceAsync> viewContext)
+    {
+        super(action);
         this.viewContext = viewContext;
     }
 
-- 
GitLab