From 5e98380f6b74ca6ef1b00228de9d1baf3c35e059 Mon Sep 17 00:00:00 2001
From: felmer <felmer>
Date: Thu, 18 Feb 2010 14:58:03 +0000
Subject: [PATCH] LMS-1361 introducing IDAO

SVN: 14850
---
 .../cisd/openbis/plugin/query/server/DAO.java | 15 ++--
 .../openbis/plugin/query/server/IDAO.java     | 32 ++++++++
 .../plugin/query/server/QueryServer.java      | 79 +++++++++----------
 3 files changed, 75 insertions(+), 51 deletions(-)
 create mode 100644 openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/server/IDAO.java

diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/server/DAO.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/server/DAO.java
index ccea661c26c..32b5782cd57 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/server/DAO.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/server/DAO.java
@@ -34,7 +34,6 @@ import org.springframework.jdbc.support.JdbcUtils;
 
 import ch.systemsx.cisd.common.exceptions.UserFailureException;
 import ch.systemsx.cisd.common.utilities.Template;
-import ch.systemsx.cisd.openbis.generic.shared.basic.ExpressionUtil;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataTypeCode;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DoubleTableCell;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ISerializableComparable;
@@ -48,7 +47,7 @@ import ch.systemsx.cisd.openbis.plugin.query.shared.basic.dto.QueryParameterBind
 /**
  * @author Franz-Josef Elmer
  */
-class DAO extends SimpleJdbcDaoSupport
+class DAO extends SimpleJdbcDaoSupport implements IDAO
 {
     private static DataTypeCode getDataTypeCode(int sqlType)
     {
@@ -88,9 +87,6 @@ class DAO extends SimpleJdbcDaoSupport
             throw new UserFailureException("Sorry, only select statements are allowed.");
         }
 
-        sqlQuery.replace(ExpressionUtil.START, "");
-        sqlQuery.replace(ExpressionUtil.END, "");
-
         PreparedStatementCallback callback = new PreparedStatementCallback()
             {
                 public Object doInPreparedStatement(PreparedStatement ps) throws SQLException,
@@ -125,14 +121,13 @@ class DAO extends SimpleJdbcDaoSupport
                                 cells.add(new DoubleTableCell(number.doubleValue()));
                             } else
                             {
-                                cells
-                                        .add(new StringTableCell(value == null ? "" : value
-                                                .toString()));
+                                String string = value == null ? "" : value.toString();
+                                cells.add(new StringTableCell(string));
                             }
-                        }
+                       }
                         rows.add(new TableModelRow(cells));
                     }
-                    resultSet.close();
+                    JdbcUtils.closeResultSet(resultSet);
                     return new TableModel(headers, rows);
                 }
             };
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/server/IDAO.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/server/IDAO.java
new file mode 100644
index 00000000000..15b476c8ecd
--- /dev/null
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/server/IDAO.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright 2010 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.plugin.query.server;
+
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TableModel;
+import ch.systemsx.cisd.openbis.plugin.query.shared.basic.dto.QueryParameterBindings;
+
+/**
+ * 
+ *
+ * @author Franz-Josef Elmer
+ */
+interface IDAO
+{
+
+    public abstract TableModel query(String sqlQuery, QueryParameterBindings bindingsOrNull);
+
+}
\ No newline at end of file
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/server/QueryServer.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/server/QueryServer.java
index 3df2204e00d..da28a4e59c3 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/server/QueryServer.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/server/QueryServer.java
@@ -65,7 +65,7 @@ public class QueryServer extends AbstractServer<IQueryServer> implements IQueryS
 
     /** @deprecated don't use it directly - use getter instead */
     @Deprecated
-    private DAO dao;
+    private IDAO dao;
 
     public QueryServer()
     {
@@ -73,9 +73,11 @@ public class QueryServer extends AbstractServer<IQueryServer> implements IQueryS
 
     QueryServer(final ISessionManager<Session> sessionManager, final IDAOFactory daoFactory,
             final ISampleTypeSlaveServerPlugin sampleTypeSlaveServerPlugin,
-            final IDataSetTypeSlaveServerPlugin dataSetTypeSlaveServerPlugin)
+            final IDataSetTypeSlaveServerPlugin dataSetTypeSlaveServerPlugin,
+            IDAO dao)
     {
         super(sessionManager, daoFactory, sampleTypeSlaveServerPlugin, dataSetTypeSlaveServerPlugin);
+        this.dao = dao;
     }
 
     public IQueryServer createLogger(boolean invocationSuccessful, long elapsedTime)
@@ -83,25 +85,6 @@ public class QueryServer extends AbstractServer<IQueryServer> implements IQueryS
         return new QueryServerLogger(getSessionManager(), invocationSuccessful, elapsedTime);
     }
 
-    private DAO getDAO()
-    {
-        if (dao == null)
-        {
-            dao = createDAO();
-        }
-        return dao;
-    }
-
-    private DAO createDAO()
-    {
-        DatabaseDefinition definition = tryToGetDatabaseDefinition();
-        if (definition == null)
-        {
-            throw new UnsupportedOperationException("Undefined query database");
-        }
-        return new DAO(definition.getConfigurationContext().getDataSource());
-    }
-
     public String tryToGetQueryDatabaseLabel(String sessionToken)
     {
         checkSession(sessionToken);
@@ -181,26 +164,6 @@ public class QueryServer extends AbstractServer<IQueryServer> implements IQueryS
         }
     }
 
-    private DatabaseDefinition tryToGetDatabaseDefinition()
-    {
-        if (databaseDefinition == null)
-        {
-            ExtendedProperties databaseProperties =
-                    ExtendedProperties.getSubset(configurer.getResolvedProps(),
-                            DATABASE_PROPERTIES_PREFIX, true);
-            if (databaseProperties.isEmpty() == false)
-            {
-                DatabaseConfigurationContext configurationContext =
-                        BeanUtils
-                                .createBean(DatabaseConfigurationContext.class, databaseProperties);
-                databaseDefinition =
-                        new DatabaseDefinition(PropertyUtils.getMandatoryProperty(
-                                databaseProperties, LABEL_PROPERTY_KEY), configurationContext);
-            }
-        }
-        return databaseDefinition;
-    }
-
     public TableModel queryDatabase(String sessionToken, String sqlQuery,
             QueryParameterBindings bindings)
     {
@@ -233,5 +196,39 @@ public class QueryServer extends AbstractServer<IQueryServer> implements IQueryS
     {
         return getDAO().query(sqlQuery, bindings);
     }
+    
+    private IDAO getDAO()
+    {
+        if (dao == null)
+        {
+            DatabaseDefinition definition = tryToGetDatabaseDefinition();
+            if (definition == null)
+            {
+                throw new UnsupportedOperationException("Undefined query database");
+            }
+            dao = new DAO(definition.getConfigurationContext().getDataSource());
+        }
+        return dao;
+    }
+
+    private DatabaseDefinition tryToGetDatabaseDefinition()
+    {
+        if (databaseDefinition == null)
+        {
+            ExtendedProperties databaseProperties =
+                    ExtendedProperties.getSubset(configurer.getResolvedProps(),
+                            DATABASE_PROPERTIES_PREFIX, true);
+            if (databaseProperties.isEmpty() == false)
+            {
+                DatabaseConfigurationContext configurationContext =
+                        BeanUtils
+                                .createBean(DatabaseConfigurationContext.class, databaseProperties);
+                databaseDefinition =
+                        new DatabaseDefinition(PropertyUtils.getMandatoryProperty(
+                                databaseProperties, LABEL_PROPERTY_KEY), configurationContext);
+            }
+        }
+        return databaseDefinition;
+    }
 
 }
-- 
GitLab