You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@labs.apache.org by jo...@apache.org on 2010/08/17 13:21:50 UTC

svn commit: r986265 - in /labs/jaxmas/trunk/JaxMas/src: main/java/org/apache/labs/jaxmas/registry/sql/ test/java/org/apache/labs/jaxmas/registry/

Author: jochen
Date: Tue Aug 17 11:21:38 2010
New Revision: 986265

URL: http://svn.apache.org/viewvc?rev=986265&view=rev
Log:
RegistryObjectLoader is now usable externally.

Modified:
    labs/jaxmas/trunk/JaxMas/src/main/java/org/apache/labs/jaxmas/registry/sql/CustomObjectTypePredicate.java
    labs/jaxmas/trunk/JaxMas/src/main/java/org/apache/labs/jaxmas/registry/sql/RegistryObjectLoader.java
    labs/jaxmas/trunk/JaxMas/src/main/java/org/apache/labs/jaxmas/registry/sql/RegistryObjectTypePredicate.java
    labs/jaxmas/trunk/JaxMas/src/main/java/org/apache/labs/jaxmas/registry/sql/StmtUser.java
    labs/jaxmas/trunk/JaxMas/src/test/java/org/apache/labs/jaxmas/registry/AbstractJaxMasTestCase.java

Modified: labs/jaxmas/trunk/JaxMas/src/main/java/org/apache/labs/jaxmas/registry/sql/CustomObjectTypePredicate.java
URL: http://svn.apache.org/viewvc/labs/jaxmas/trunk/JaxMas/src/main/java/org/apache/labs/jaxmas/registry/sql/CustomObjectTypePredicate.java?rev=986265&r1=986264&r2=986265&view=diff
==============================================================================
--- labs/jaxmas/trunk/JaxMas/src/main/java/org/apache/labs/jaxmas/registry/sql/CustomObjectTypePredicate.java (original)
+++ labs/jaxmas/trunk/JaxMas/src/main/java/org/apache/labs/jaxmas/registry/sql/CustomObjectTypePredicate.java Tue Aug 17 11:21:38 2010
@@ -32,18 +32,28 @@ import org.apache.labs.jaxmas.registry.a
  * Predicate for restricting a search to a particular registry object type.
  */
 public class CustomObjectTypePredicate extends RegistryObjectTypePredicate {
+    private final String prefix;
     private final Collection<String> types;
 
     /**
      * Creates a new instance, which restricts the search to the given
      * type.
      */
-    public CustomObjectTypePredicate(Collection<String> pTypes) {
-        super(ObjectTypes.REGISTRY_ENTRY);
+    public CustomObjectTypePredicate(Collection<String> pTypes, String pPrefix) {
+        super(ObjectTypes.REGISTRY_ENTRY, pPrefix);
     	if (pTypes == null  ||  pTypes.isEmpty()) {
     		throw new IllegalArgumentException("The list of custom object types must not be null."); //$NON-NLS-1$
     	}
     	types = pTypes;
+        prefix = pPrefix;
+    }
+
+    /**
+     * Creates a new instance, which restricts the search to the given
+     * type.
+     */
+    public CustomObjectTypePredicate(Collection<String> pTypes) {
+        this(pTypes, null);
     }
 
     /**
@@ -56,9 +66,11 @@ public class CustomObjectTypePredicate e
     @Override
     public void add(StringBuilder pBuffer, List<Object> pParameters) throws SQLException, JAXRException {
         super.add(pBuffer, pParameters);
+        final String reTable = RegistryObjectLoader.getTable(prefix, "re");
         pBuffer.append(" AND ");
     	final Collection<String> customTypes = getTypes();
-    	pBuffer.append("re.customType IN (SELECT ctro.roKey FROM RegistryObjects ctro JOIN Concepts ctco ON ctro.roType=? AND ctro.roKey=ctco.roKey WHERE ctro.roOwnerRestricting=? AND "); //$NON-NLS-1$
+    	pBuffer.append(reTable);
+    	pBuffer.append(".customType IN (SELECT ctro.roKey FROM RegistryObjects ctro JOIN Concepts ctco ON ctro.roType=? AND ctro.roKey=ctco.roKey WHERE ctro.roOwnerRestricting=? AND ");
     	pParameters.add(new Integer(ObjectTypes.CONCEPT.ordinal()));
     	pParameters.add(ClassificationSchemes.OBJECT_TYPE.getId());
     	if (customTypes.size() == 1) {

Modified: labs/jaxmas/trunk/JaxMas/src/main/java/org/apache/labs/jaxmas/registry/sql/RegistryObjectLoader.java
URL: http://svn.apache.org/viewvc/labs/jaxmas/trunk/JaxMas/src/main/java/org/apache/labs/jaxmas/registry/sql/RegistryObjectLoader.java?rev=986265&r1=986264&r2=986265&view=diff
==============================================================================
--- labs/jaxmas/trunk/JaxMas/src/main/java/org/apache/labs/jaxmas/registry/sql/RegistryObjectLoader.java (original)
+++ labs/jaxmas/trunk/JaxMas/src/main/java/org/apache/labs/jaxmas/registry/sql/RegistryObjectLoader.java Tue Aug 17 11:21:38 2010
@@ -18,6 +18,8 @@
  */
 package org.apache.labs.jaxmas.registry.sql;
 
+import java.sql.Connection;
+import java.sql.PreparedStatement;
 import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.util.ArrayList;
@@ -39,11 +41,13 @@ import org.apache.labs.jaxmas.registry.a
 import org.apache.labs.jaxmas.registry.accessor.ROAccessors.ObjectTypes;
 import org.apache.labs.jaxmas.registry.infomodel.AssociationImpl;
 import org.apache.labs.jaxmas.registry.infomodel.ClassificationImpl;
+import org.apache.labs.jaxmas.registry.infomodel.ConnectionImpl;
 import org.apache.labs.jaxmas.registry.infomodel.KeyImpl;
 import org.apache.labs.jaxmas.registry.infomodel.OwnedRegistryObject;
 import org.apache.labs.jaxmas.registry.infomodel.ROState;
 import org.apache.labs.jaxmas.registry.infomodel.RegistryEntryImpl;
 import org.apache.labs.jaxmas.registry.infomodel.RegistryObjectImpl;
+import org.apache.log4j.Logger;
 
 
 /**
@@ -51,6 +55,7 @@ import org.apache.labs.jaxmas.registry.i
  * objects.
  */
 public class RegistryObjectLoader {
+    private static final Logger log = Logger.getLogger(RegistryObjectLoader.class);
     private static final TableHandler[] EXTENSION_HANDLERS_REGISTRY_OBJECT = new TableHandler[]{
         new DefaultTableHandler()
     };
@@ -396,6 +401,25 @@ public class RegistryObjectLoader {
         }
     }
 
+    public static RegistryObjectQuery getRegistryObjectQuery(String pQName, String pPrefix) {
+        ObjectTypes registryObjectType = null;
+        Collection<FilterPredicate> predicates = null;
+        if (pQName != null) {
+            for (ObjectTypes objectType : ROAccessors.ObjectTypes.values()) {
+                if (objectType.getInterfaceName().equals(pQName)) {
+                    registryObjectType = objectType;
+                    break;
+                }
+            }
+            if (registryObjectType == null) {
+                registryObjectType = ObjectTypes.REGISTRY_ENTRY;
+                final Collection<String> objectTypes = Collections.singleton(pQName);
+                predicates = Collections.singleton((FilterPredicate) new CustomObjectTypePredicate(objectTypes, pPrefix));
+            }
+        }
+        return new RegistryObjectQuery(registryObjectType, pPrefix, predicates);
+    }
+    
     public static class RegistryObjectQuery {
         private final ROAccessors.ObjectTypes objectType;
         private final String prefix;
@@ -465,6 +489,27 @@ public class RegistryObjectLoader {
         }
     }
 
+
+    public static String getAliasAssociations(RegistryObjectQuery pSource) {
+        return getTable(pSource.getPrefix(), "assoc");
+    }
+
+    public static String getAliasRegistryObjects(RegistryObjectQuery pSource) {
+        return getTable(pSource.getPrefix(), "ro");
+    }
+
+    public static String getAliasRegistryEntries(RegistryObjectQuery pSource) {
+        return getTable(pSource.getPrefix(), "re");
+    }
+
+    public static String getAliasSlots(RegistryObjectQuery pSource) {
+        return getTable(pSource.getPrefix(), "ros");
+    }
+
+    public static String getAliasSlotValues(RegistryObjectQuery pSource) {
+        return getTable(pSource.getPrefix(), "rosv");
+    }
+
     static String getTable(String pPrefix, String pSuffix) {
         if (pPrefix == null || pPrefix.length() == 0) {
             return pSuffix;
@@ -485,7 +530,11 @@ public class RegistryObjectLoader {
         final StringBuilder sb = new StringBuilder();
         sb.append("SELECT ");
         int index = 1;
-        for (RegistryObjectQuery q : queries) {
+        for (int i = 0;  i < queries.length;  i++) {
+            final RegistryObjectQuery q = queries[i];
+            if (i > 0) {
+                sb.append(", ");
+            }
             final TableHandler[] tableHandlers = q.getTableHandlers();
             index = tableHandlers[0].addColumns(sb, q.getPrefix(), index);
         }
@@ -522,7 +571,7 @@ public class RegistryObjectLoader {
         for (RegistryObjectQuery q : queries) {
             final TableHandler[] otTableHandlers = q.getTableHandlers();
             for (int j = 1;  j < otTableHandlers.length;  j++) {
-                otTableHandlers[j].addJoin(sb, null, parameterList);
+                otTableHandlers[j].addJoin(sb, q.getPrefix(), parameterList);
             }
         }
         final RegistryObjectQuery q = queries[0];
@@ -608,6 +657,32 @@ public class RegistryObjectLoader {
         return getResultList(pRegistryService, query, parameters);
     }
 
+    public List<RegistryObject> getResultList(final RegistryService pService, final PreparedStatement pStmt)
+            throws JAXRException {
+        final List<RegistryObject> list = new ArrayList<RegistryObject>();
+        ResultSet rs = null;
+        try {
+            rs = pStmt.executeQuery();
+            while (rs.next()) {
+                int type = rs.getInt(2);
+                assert(!rs.wasNull());
+                final ROAccessor<?> roAcc = ROAccessors.getROAccessor(type);
+                final String key = rs.getString(1);
+                assert(key != null);
+                final RegistryObject ro = roAcc.create(pService, new KeyImpl(key));
+                load(ro, rs);
+                list.add(ro);
+            }
+            rs.close();
+            rs = null;
+            return list;
+        } catch (SQLException e) {
+            throw new JAXRException(e);
+        } finally {
+            if (rs != null) { try { rs.close(); } catch (Throwable t) { /* Ignore me */ } }
+        }
+    }
+    
     private <RO extends RegistryObject> List<RegistryObject> getResultList(final RegistryService pRegistryService,
             String pQuery, Object[] pParameters) throws JAXRException {
         final List<RegistryObject> list = new ArrayList<RegistryObject>();
@@ -731,4 +806,24 @@ public class RegistryObjectLoader {
             }
         }.run(pRegistryService);
     }
+
+    public String getQuery() {
+        return query;
+    }
+
+    public PreparedStatement getPreparedStatement(javax.xml.registry.Connection pConnection) throws JAXRException {
+        try {
+            return getPreparedStatement(((ConnectionImpl) pConnection).getConnection());
+        } catch (SQLException e) {
+            throw new JAXRException(e);
+        }
+    }
+
+    protected PreparedStatement getPreparedStatement(Connection pConnection) throws JAXRException, SQLException {
+        final String query = getQuery();
+        log.debug(query);
+        final PreparedStatement stmt = pConnection.prepareStatement(getQuery());
+        StmtUser.setParams(stmt, parameters);
+        return stmt;
+    }
 }

Modified: labs/jaxmas/trunk/JaxMas/src/main/java/org/apache/labs/jaxmas/registry/sql/RegistryObjectTypePredicate.java
URL: http://svn.apache.org/viewvc/labs/jaxmas/trunk/JaxMas/src/main/java/org/apache/labs/jaxmas/registry/sql/RegistryObjectTypePredicate.java?rev=986265&r1=986264&r2=986265&view=diff
==============================================================================
--- labs/jaxmas/trunk/JaxMas/src/main/java/org/apache/labs/jaxmas/registry/sql/RegistryObjectTypePredicate.java (original)
+++ labs/jaxmas/trunk/JaxMas/src/main/java/org/apache/labs/jaxmas/registry/sql/RegistryObjectTypePredicate.java Tue Aug 17 11:21:38 2010
@@ -30,6 +30,7 @@ import org.apache.labs.jaxmas.registry.a
  * Predicate for restricting a search to a particular registry object type.
  */
 public class RegistryObjectTypePredicate implements FilterPredicate {
+    private final String prefix;
     private final ROAccessors.ObjectTypes type;
 
     /**
@@ -37,6 +38,15 @@ public class RegistryObjectTypePredicate
      * type.
      */
     public RegistryObjectTypePredicate(ROAccessors.ObjectTypes pType) {
+        this(pType, null);
+    }
+
+    /**
+     * Creates a new instance, which restricts the search to the given
+     * type.
+     */
+    public RegistryObjectTypePredicate(ROAccessors.ObjectTypes pType, String pPrefix) {
+        prefix = pPrefix;
         type = pType;
     }
 
@@ -49,8 +59,10 @@ public class RegistryObjectTypePredicate
 
     @Override
     public void add(StringBuilder pBuffer, List<Object> pParameters) throws SQLException, JAXRException {
-        pBuffer.append("ro.roType=?"); //$NON-NLS-1$
-        pParameters.add(type);
+        final String roTable = RegistryObjectLoader.getRoTable(prefix);
+        pBuffer.append(roTable);
+        pBuffer.append(".roType=");
+        pBuffer.append(type.ordinal());
     }
 
 }

Modified: labs/jaxmas/trunk/JaxMas/src/main/java/org/apache/labs/jaxmas/registry/sql/StmtUser.java
URL: http://svn.apache.org/viewvc/labs/jaxmas/trunk/JaxMas/src/main/java/org/apache/labs/jaxmas/registry/sql/StmtUser.java?rev=986265&r1=986264&r2=986265&view=diff
==============================================================================
--- labs/jaxmas/trunk/JaxMas/src/main/java/org/apache/labs/jaxmas/registry/sql/StmtUser.java (original)
+++ labs/jaxmas/trunk/JaxMas/src/main/java/org/apache/labs/jaxmas/registry/sql/StmtUser.java Tue Aug 17 11:21:38 2010
@@ -67,7 +67,7 @@ public abstract class StmtUser<O extends
 	/**
 	 * Called to prepare a statement by setting the parameters.
 	 */
-	protected void setParams(PreparedStatement pStmt, Object[] pParams) throws SQLException, JAXRException {
+	public static void setParams(PreparedStatement pStmt, Object[] pParams) throws SQLException, JAXRException {
 		if (pParams != null) {
 			for (int i = 0;  i < pParams.length;  i++) {
 				Object o = pParams[i];

Modified: labs/jaxmas/trunk/JaxMas/src/test/java/org/apache/labs/jaxmas/registry/AbstractJaxMasTestCase.java
URL: http://svn.apache.org/viewvc/labs/jaxmas/trunk/JaxMas/src/test/java/org/apache/labs/jaxmas/registry/AbstractJaxMasTestCase.java?rev=986265&r1=986264&r2=986265&view=diff
==============================================================================
--- labs/jaxmas/trunk/JaxMas/src/test/java/org/apache/labs/jaxmas/registry/AbstractJaxMasTestCase.java (original)
+++ labs/jaxmas/trunk/JaxMas/src/test/java/org/apache/labs/jaxmas/registry/AbstractJaxMasTestCase.java Tue Aug 17 11:21:38 2010
@@ -30,8 +30,6 @@ import javax.xml.registry.ConnectionFact
 import javax.xml.registry.JAXRException;
 import javax.xml.registry.infomodel.InternationalString;
 
-import junit.framework.TestCase;
-
 import org.apache.labs.jaxmas.registry.infomodel.ConnectionImpl;
 import org.apache.labs.jaxmas.registry.schema.DbInitializer;
 import org.apache.labs.jaxmas.registry.util.DefaultLoggerFactory;



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@labs.apache.org
For additional commands, e-mail: commits-help@labs.apache.org