From 30f64abca2760cb7b581718929a4a2e3ed754fe6 Mon Sep 17 00:00:00 2001
From: felmer <felmer>
Date: Tue, 25 Oct 2011 09:22:24 +0000
Subject: [PATCH] LMS-2587 QueryApiFacade extended

SVN: 23410
---
 openbis/build/build.xml                       |  5 +++-
 .../query/client/api/v1/FacadeFactory.java    | 28 +++++++++++++------
 .../query/client/api/v1/IQueryApiFacade.java  |  6 ++++
 .../query/client/api/v1/QueryApiFacade.java   | 12 +++++++-
 4 files changed, 41 insertions(+), 10 deletions(-)

diff --git a/openbis/build/build.xml b/openbis/build/build.xml
index 28c30903190..530dd4b657a 100644
--- a/openbis/build/build.xml
+++ b/openbis/build/build.xml
@@ -235,6 +235,8 @@
       <packageset dir="../openbis/${sources}">
         <include name="ch/systemsx/cisd/openbis/plugin/query/client/api/v1/**" />
         <include name="ch/systemsx/cisd/openbis/plugin/query/shared/api/v1/dto/**" />
+        <include name="ch/systemsx/cisd/openbis/generic/shared/api/v1/**" />
+        <include name="ch/systemsx/cisd/openbis/generic/shared/api/v1/dto/**" />
       </packageset>
     </javadoc>
     <zip destfile="${query.api.doc.zip}">
@@ -243,7 +245,7 @@
     <delete dir="${dist}/${query.api}" />
     <zip destfile="${query.api.src.zip}">
       <zipfileset dir="../openbis/${sources}" includes="ch/systemsx/cisd/openbis/plugin/query/shared/api/v1/dto/**" />
-      <zipfileset dir="../openbis/${sources}" includes="ch/systemsx/cisd/openbis/plugin/query/client/api/v1/*.java" />
+      <zipfileset dir="../openbis/${sources}" includes="ch/systemsx/cisd/openbis/plugin/query/shared/api/v1/dto/**" />
     </zip>
   </target>
 	
@@ -569,6 +571,7 @@
         <include name="ch/systemsx/cisd/common/spring/HttpInvokerUtils.class" />
         <include name="ch/systemsx/cisd/common/api/**/*.class" />
         <exclude name="ch/systemsx/cisd/common/api/server/**/*.class" />
+        <include name="ch/systemsx/cisd/openbis/generic/shared/api/**/*.class" />
         <include name="ch/systemsx/cisd/openbis/plugin/query/**/api/**/*.class" />
         <exclude name="ch/systemsx/cisd/openbis/**/server/api/**/*.class" />
         <include name="ch/systemsx/cisd/openbis/BuildAndEnvironmentInfo.class" />
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/client/api/v1/FacadeFactory.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/client/api/v1/FacadeFactory.java
index 17c5b712a26..38983c1c333 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/client/api/v1/FacadeFactory.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/client/api/v1/FacadeFactory.java
@@ -17,6 +17,7 @@
 package ch.systemsx.cisd.openbis.plugin.query.client.api.v1;
 
 import ch.systemsx.cisd.common.api.client.ServiceFinder;
+import ch.systemsx.cisd.openbis.generic.shared.api.v1.IGeneralInformationService;
 import ch.systemsx.cisd.openbis.plugin.query.shared.api.v1.IQueryApiServer;
 
 /**
@@ -26,21 +27,25 @@ import ch.systemsx.cisd.openbis.plugin.query.shared.api.v1.IQueryApiServer;
  */
 public class FacadeFactory
 {
-    private static final ServiceFinder SERVICE_FINDER =
-            new ServiceFinder("openbis", IQueryApiServer.QUERY_PLUGIN_SERVER_URL);
+    private static final ServiceFinder QUERY_SERVICE_FINDER = new ServiceFinder("openbis",
+            IQueryApiServer.QUERY_PLUGIN_SERVER_URL);
+
+    private static final ServiceFinder GENERAL_INFORMATION_SERVICE_FINDER = new ServiceFinder(
+            "openbis", IGeneralInformationService.SERVICE_URL);
 
     /**
      * Creates a facade for specified server URL, user Id, and password.
      */
     public static IQueryApiFacade create(String serverURL, String userID, String password)
     {
-        IQueryApiServer service = createService(serverURL);
+        IQueryApiServer service = createQueryService(serverURL);
         String sessionToken = service.tryToAuthenticateAtQueryServer(userID, password);
         if (sessionToken == null)
         {
             throw new IllegalArgumentException("User " + userID + " couldn't be authenticated");
         }
-        return new QueryApiFacade(service, sessionToken);
+        // Login at one service is enough
+        return new QueryApiFacade(service, createGeneralInfoService(serverURL), sessionToken);
     }
 
     /**
@@ -48,11 +53,18 @@ public class FacadeFactory
      */
     public static IQueryApiFacade create(String serverURL, String sessionToken)
     {
-        return new QueryApiFacade(createService(serverURL), sessionToken);
+        return new QueryApiFacade(createQueryService(serverURL),
+                createGeneralInfoService(serverURL), sessionToken);
     }
-    
-    private static IQueryApiServer createService(String serverURL)
+
+    private static IQueryApiServer createQueryService(String serverURL)
+    {
+        return QUERY_SERVICE_FINDER.createService(IQueryApiServer.class, serverURL);
+    }
+
+    private static IGeneralInformationService createGeneralInfoService(String serverURL)
     {
-        return SERVICE_FINDER.createService(IQueryApiServer.class, serverURL);
+        return GENERAL_INFORMATION_SERVICE_FINDER.createService(IGeneralInformationService.class,
+                serverURL);
     }
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/client/api/v1/IQueryApiFacade.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/client/api/v1/IQueryApiFacade.java
index f8c1287d16d..84d4afa457f 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/client/api/v1/IQueryApiFacade.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/client/api/v1/IQueryApiFacade.java
@@ -19,6 +19,7 @@ package ch.systemsx.cisd.openbis.plugin.query.client.api.v1;
 import java.util.List;
 import java.util.Map;
 
+import ch.systemsx.cisd.openbis.generic.shared.api.v1.IGeneralInformationService;
 import ch.systemsx.cisd.openbis.plugin.query.shared.api.v1.dto.QueryDescription;
 import ch.systemsx.cisd.openbis.plugin.query.shared.api.v1.dto.QueryTableModel;
 import ch.systemsx.cisd.openbis.plugin.query.shared.api.v1.dto.ReportDescription;
@@ -57,6 +58,11 @@ public interface IQueryApiFacade
     public QueryTableModel createReportFromDataSets(ReportDescription reportDescription,
             List<String> dataSetCodes);
 
+    /**
+     * Returns a remote access to the {@link IGeneralInformationService}.
+     */
+    public IGeneralInformationService getGeneralInformationService();
+
     /**
      * Logs current user out.
      */
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/client/api/v1/QueryApiFacade.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/client/api/v1/QueryApiFacade.java
index a82723e8bd1..a8e1b94359e 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/client/api/v1/QueryApiFacade.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/client/api/v1/QueryApiFacade.java
@@ -19,6 +19,7 @@ package ch.systemsx.cisd.openbis.plugin.query.client.api.v1;
 import java.util.List;
 import java.util.Map;
 
+import ch.systemsx.cisd.openbis.generic.shared.api.v1.IGeneralInformationService;
 import ch.systemsx.cisd.openbis.plugin.query.shared.api.v1.IQueryApiServer;
 import ch.systemsx.cisd.openbis.plugin.query.shared.api.v1.dto.QueryDescription;
 import ch.systemsx.cisd.openbis.plugin.query.shared.api.v1.dto.QueryTableModel;
@@ -31,11 +32,15 @@ class QueryApiFacade implements IQueryApiFacade
 {
     private final IQueryApiServer service;
 
+    private final IGeneralInformationService generalInformationService;
+
     private final String sessionToken;
 
-    QueryApiFacade(IQueryApiServer service, String sessionToken)
+    QueryApiFacade(IQueryApiServer service, IGeneralInformationService generalInformationService,
+            String sessionToken)
     {
         this.service = service;
+        this.generalInformationService = generalInformationService;
         this.sessionToken = sessionToken;
     }
 
@@ -49,6 +54,11 @@ class QueryApiFacade implements IQueryApiFacade
         service.logout(sessionToken);
     }
 
+    public IGeneralInformationService getGeneralInformationService()
+    {
+        return generalInformationService;
+    }
+
     public List<QueryDescription> listQueries()
     {
         return service.listQueries(sessionToken);
-- 
GitLab