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