Author: jochen
Date: Mon Aug 31 13:30:54 2009
New Revision: 809581
URL: http://svn.apache.org/viewvc?rev=809581&view=rev
Log:
Added support for custom object type queries via the JaxMasQueryManager.
Added:
labs/jaxmas/trunk/JaxMas/src/main/java/org/apache/labs/jaxmas/registry/infomodel/JaxMasQueryManager.java
labs/jaxmas/trunk/JaxMas/src/main/java/org/apache/labs/jaxmas/registry/sql/CustomObjectTypePredicate.java
Modified:
labs/jaxmas/trunk/JaxMas/src/main/java/org/apache/labs/jaxmas/registry/accessor/OrganizationAccessor.java
labs/jaxmas/trunk/JaxMas/src/main/java/org/apache/labs/jaxmas/registry/accessor/RegistryEntryAccessor.java
labs/jaxmas/trunk/JaxMas/src/main/java/org/apache/labs/jaxmas/registry/infomodel/BusinessQueryManagerImpl.java
labs/jaxmas/trunk/JaxMas/src/test/java/org/apache/labs/jaxmas/registry/CustomTypeTest.java
Modified:
labs/jaxmas/trunk/JaxMas/src/main/java/org/apache/labs/jaxmas/registry/accessor/OrganizationAccessor.java
URL:
http://svn.apache.org/viewvc/labs/jaxmas/trunk/JaxMas/src/main/java/org/apache/labs/jaxmas/registry/accessor/OrganizationAccessor.java?rev=809581&r1=809580&r2=809581&view=diff
==============================================================================
---
labs/jaxmas/trunk/JaxMas/src/main/java/org/apache/labs/jaxmas/registry/accessor/OrganizationAccessor.java
(original)
+++
labs/jaxmas/trunk/JaxMas/src/main/java/org/apache/labs/jaxmas/registry/accessor/OrganizationAccessor.java
Mon Aug 31 13:30:54 2009
@@ -31,12 +31,14 @@
import javax.xml.registry.infomodel.Key;
import javax.xml.registry.infomodel.Organization;
+import org.apache.labs.jaxmas.registry.accessor.ROAccessors.ObjectTypes;
import org.apache.labs.jaxmas.registry.infomodel.NLSStrings;
import org.apache.labs.jaxmas.registry.infomodel.OrganizationImpl;
import org.apache.labs.jaxmas.registry.infomodel.RegistryServiceImpl;
import org.apache.labs.jaxmas.registry.sql.NamePredicate;
import org.apache.labs.jaxmas.registry.sql.Predicate;
import org.apache.labs.jaxmas.registry.sql.RegistryObjectLoader;
+import org.apache.labs.jaxmas.registry.sql.RegistryObjectTypePredicate;
/**
@@ -104,6 +106,7 @@
Collection<?> pSpecifications, Collection<?>
pExternalIdentifiers,
Collection<?> pExternalLinks) throws JAXRException {
final List<Predicate> predicates = new ArrayList<Predicate>();
+ predicates.add(new
RegistryObjectTypePredicate(ObjectTypes.ORGANIZATION));
if (pFindQualifiers != null && !pFindQualifiers.isEmpty()) {
for (Object o : pFindQualifiers) {
if (!FindQualifier.EXACT_NAME_MATCH.equals(o)) {
Modified:
labs/jaxmas/trunk/JaxMas/src/main/java/org/apache/labs/jaxmas/registry/accessor/RegistryEntryAccessor.java
URL:
http://svn.apache.org/viewvc/labs/jaxmas/trunk/JaxMas/src/main/java/org/apache/labs/jaxmas/registry/accessor/RegistryEntryAccessor.java?rev=809581&r1=809580&r2=809581&view=diff
==============================================================================
---
labs/jaxmas/trunk/JaxMas/src/main/java/org/apache/labs/jaxmas/registry/accessor/RegistryEntryAccessor.java
(original)
+++
labs/jaxmas/trunk/JaxMas/src/main/java/org/apache/labs/jaxmas/registry/accessor/RegistryEntryAccessor.java
Mon Aug 31 13:30:54 2009
@@ -20,14 +20,25 @@
import java.lang.reflect.UndeclaredThrowableException;
import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import javax.xml.registry.FindQualifier;
import javax.xml.registry.JAXRException;
+import javax.xml.registry.RegistryService;
import javax.xml.registry.infomodel.Key;
import javax.xml.registry.infomodel.RegistryEntry;
+import org.apache.labs.jaxmas.registry.accessor.ROAccessors.ObjectTypes;
+import org.apache.labs.jaxmas.registry.infomodel.NLSStrings;
import org.apache.labs.jaxmas.registry.infomodel.RegistryEntryImpl;
import org.apache.labs.jaxmas.registry.infomodel.RegistryServiceImpl;
+import org.apache.labs.jaxmas.registry.sql.CustomObjectTypePredicate;
+import org.apache.labs.jaxmas.registry.sql.NamePredicate;
+import org.apache.labs.jaxmas.registry.sql.Predicate;
import org.apache.labs.jaxmas.registry.sql.RegistryObjectLoader;
+import org.apache.labs.jaxmas.registry.sql.RegistryObjectTypePredicate;
/**
@@ -75,4 +86,45 @@
public RegistryObjectLoader getRegistryObjectLoader() {
return rol;
}
+
+ @SuppressWarnings("unchecked")
+ private static List<RegistryEntry> asRegistryEntryList(List<?> pList) {
+ return (List<RegistryEntry>) pList;
+ }
+
+ public List<RegistryEntry> findRegistryEntries(RegistryService
pRegistryService,
+ Collection<String> pFindQualifiers,
+ Collection<String> pObjectTypes, Collection<String>
pNamePatterns,
+ Collection<String> pDescriptionPatterns,
+ Collection<?> pClassifications, Collection<?>
pExternalIdentifiers,
+ Collection<?> pExternalLinks) throws JAXRException {
+ final List<Predicate> predicates = new ArrayList<Predicate>();
+ predicates.add(new
RegistryObjectTypePredicate(ObjectTypes.REGISTRY_ENTRY));
+ if (pFindQualifiers != null && !pFindQualifiers.isEmpty()) {
+ for (Object o : pFindQualifiers) {
+ if (!FindQualifier.EXACT_NAME_MATCH.equals(o)) {
+ throw new
JAXRException(RegistryServiceImpl.getNLSStrings(pRegistryService).format(NLSStrings.UNSUPPORTED_PARAMETER,
"pFindQualifiers")); //$NON-NLS-1$
+ }
+ }
+ }
+ if (pObjectTypes != null && !pObjectTypes.isEmpty()) {
+ predicates.add(new CustomObjectTypePredicate(pObjectTypes));
+ }
+ if (pNamePatterns != null && !pNamePatterns.isEmpty()) {
+ predicates.add(new NamePredicate(pNamePatterns));
+ }
+ if (pDescriptionPatterns != null &&
!pDescriptionPatterns.isEmpty()) {
+ throw new
JAXRException(RegistryServiceImpl.getNLSStrings(pRegistryService).format(NLSStrings.UNSUPPORTED_PARAMETER,
"pDescriptionPatterns")); //$NON-NLS-1$
+ }
+ if (pClassifications != null && !pClassifications.isEmpty()) {
+ throw new
JAXRException(RegistryServiceImpl.getNLSStrings(pRegistryService).format(NLSStrings.UNSUPPORTED_PARAMETER,
"pClassifications")); //$NON-NLS-1$
+ }
+ if (pExternalIdentifiers != null &&
!pExternalIdentifiers.isEmpty()) {
+ throw new
JAXRException(RegistryServiceImpl.getNLSStrings(pRegistryService).format(NLSStrings.UNSUPPORTED_PARAMETER,
"pExternalIdentifiers")); //$NON-NLS-1$
+ }
+ if (pExternalLinks != null && !pExternalLinks.isEmpty()) {
+ throw new
JAXRException(RegistryServiceImpl.getNLSStrings(pRegistryService).format(NLSStrings.UNSUPPORTED_PARAMETER,
"pExternalLinks")); //$NON-NLS-1$
+ }
+ return asRegistryEntryList(rol.getResultList(pRegistryService,
predicates));
+ }
}
Modified:
labs/jaxmas/trunk/JaxMas/src/main/java/org/apache/labs/jaxmas/registry/infomodel/BusinessQueryManagerImpl.java
URL:
http://svn.apache.org/viewvc/labs/jaxmas/trunk/JaxMas/src/main/java/org/apache/labs/jaxmas/registry/infomodel/BusinessQueryManagerImpl.java?rev=809581&r1=809580&r2=809581&view=diff
==============================================================================
---
labs/jaxmas/trunk/JaxMas/src/main/java/org/apache/labs/jaxmas/registry/infomodel/BusinessQueryManagerImpl.java
(original)
+++
labs/jaxmas/trunk/JaxMas/src/main/java/org/apache/labs/jaxmas/registry/infomodel/BusinessQueryManagerImpl.java
Mon Aug 31 13:30:54 2009
@@ -31,10 +31,12 @@
import javax.xml.registry.infomodel.Concept;
import javax.xml.registry.infomodel.Key;
import javax.xml.registry.infomodel.Organization;
+import javax.xml.registry.infomodel.RegistryEntry;
import org.apache.labs.jaxmas.registry.accessor.AssociationAccessor;
import org.apache.labs.jaxmas.registry.accessor.ClassificationSchemeAccessor;
import org.apache.labs.jaxmas.registry.accessor.OrganizationAccessor;
+import org.apache.labs.jaxmas.registry.accessor.RegistryEntryAccessor;
import org.apache.labs.jaxmas.registry.sql.AssociationSourcePredicate;
import org.apache.labs.jaxmas.registry.sql.AssociationTargetPredicate;
import org.apache.labs.jaxmas.registry.sql.AssociationTypePredicate;
@@ -44,7 +46,7 @@
/**
* Default implementation of {...@link BusinessQueryManager}.
*/
-public class BusinessQueryManagerImpl extends QueryManagerImpl implements
BusinessQueryManager {
+public class BusinessQueryManagerImpl extends QueryManagerImpl implements
BusinessQueryManager, JaxMasQueryManager {
/**
* Creates a new instance with the given registry service.
*/
@@ -195,4 +197,17 @@
Collection pSpecificationa) throws JAXRException {
throw new JAXRException(NLSStrings.OPERATION_NOT_IMPLEMENTED);
}
+
+ @Override
+ public BulkResponse findObjects(Collection<String> pFindQualifiers,
+ Collection<String> pObjectTypes, Collection<String>
pNamePatterns,
+ Collection<String> pDescriptionPatterns,
+ Collection<?> pClassifications, Collection<?>
pExternalIdentifiers,
+ Collection<?> pExternalLinks) throws JAXRException {
+ final List<RegistryEntry> list =
RegistryEntryAccessor.getInstance().findRegistryEntries(getRegistryService(),
+ pFindQualifiers,
+ pObjectTypes, pNamePatterns,
pDescriptionPatterns, pClassifications,
+ pExternalIdentifiers, pExternalLinks);
+ return new BulkResponseImpl(list);
+ }
}
Added:
labs/jaxmas/trunk/JaxMas/src/main/java/org/apache/labs/jaxmas/registry/infomodel/JaxMasQueryManager.java
URL:
http://svn.apache.org/viewvc/labs/jaxmas/trunk/JaxMas/src/main/java/org/apache/labs/jaxmas/registry/infomodel/JaxMasQueryManager.java?rev=809581&view=auto
==============================================================================
---
labs/jaxmas/trunk/JaxMas/src/main/java/org/apache/labs/jaxmas/registry/infomodel/JaxMasQueryManager.java
(added)
+++
labs/jaxmas/trunk/JaxMas/src/main/java/org/apache/labs/jaxmas/registry/infomodel/JaxMasQueryManager.java
Mon Aug 31 13:30:54 2009
@@ -0,0 +1,23 @@
+package org.apache.labs.jaxmas.registry.infomodel;
+
+import java.util.Collection;
+
+import javax.xml.registry.BulkResponse;
+import javax.xml.registry.BusinessQueryManager;
+
+
+/**
+ * JaxMas proprietary extension of {...@link BusinessQueryManager} with
+ * support for query to custom object types, closely modeled after
+ * the <a
href="http://documentation.softwareag.com/webmethods/soal8/jd/metamodelAPIclient/com/centrasite/jaxr/CentraSiteQueryManager.html">CentraSiteQueryManager</a>.
+ */
+public interface JaxMasQueryManager extends BusinessQueryManager {
+ BulkResponse findObjects(Collection<String> pFindQualifiers,
+ Collection<String> pObjectTypes,
+ Collection<String> pNamePatterns,
+ Collection<String> pDescriptionPatterns,
+ Collection<?> pClassifications,
+ Collection<?> pExternalIdentifiers,
+ Collection<?> pExternalLinks)
+ throws javax.xml.registry.JAXRException;
+}
Added:
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=809581&view=auto
==============================================================================
---
labs/jaxmas/trunk/JaxMas/src/main/java/org/apache/labs/jaxmas/registry/sql/CustomObjectTypePredicate.java
(added)
+++
labs/jaxmas/trunk/JaxMas/src/main/java/org/apache/labs/jaxmas/registry/sql/CustomObjectTypePredicate.java
Mon Aug 31 13:30:54 2009
@@ -0,0 +1,80 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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 org.apache.labs.jaxmas.registry.sql;
+
+import java.sql.SQLException;
+import java.util.Collection;
+import java.util.List;
+
+import javax.xml.registry.JAXRException;
+
+import
org.apache.labs.jaxmas.registry.accessor.ROAccessors.ClassificationSchemes;
+import org.apache.labs.jaxmas.registry.accessor.ROAccessors.ObjectTypes;
+
+
+/**
+ * Predicate for restricting a search to a particular registry object type.
+ */
+public class CustomObjectTypePredicate implements Predicate {
+ private final Collection<String> types;
+
+ /**
+ * Creates a new instance, which restricts the search to the given
+ * type.
+ */
+ public CustomObjectTypePredicate(Collection<String> pTypes) {
+ if (pTypes == null || pTypes.isEmpty()) {
+ throw new IllegalArgumentException("The list of custom object
types must not be null."); //$NON-NLS-1$
+ }
+ types = pTypes;
+ }
+
+ /**
+ * Returns the collection of custom object types.
+ */
+ public Collection<String> getTypes() {
+ return types;
+ }
+
+ @Override
+ public void add(StringBuilder pBuffer, List<Object> pParameters) throws
SQLException, JAXRException {
+ 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$
+ pParameters.add(new Integer(ObjectTypes.CONCEPT.ordinal()));
+ pParameters.add(ClassificationSchemes.OBJECT_TYPE.getId());
+ if (customTypes.size() == 1) {
+ pBuffer.append("ctco.value=?"); //$NON-NLS-1$
+ pParameters.add(customTypes.iterator().next());
+ } else {
+ pBuffer.append("ctco.value IN ("); //$NON-NLS-1$
+ boolean first = true;
+ for (String s : customTypes) {
+ if (first) {
+ first = false;
+ } else {
+ pBuffer.append(',');
+ }
+ pBuffer.append('?');
+ pParameters.add(s);
+ }
+ pBuffer.append(')');
+ }
+ pBuffer.append(')');
+ }
+}
Modified:
labs/jaxmas/trunk/JaxMas/src/test/java/org/apache/labs/jaxmas/registry/CustomTypeTest.java
URL:
http://svn.apache.org/viewvc/labs/jaxmas/trunk/JaxMas/src/test/java/org/apache/labs/jaxmas/registry/CustomTypeTest.java?rev=809581&r1=809580&r2=809581&view=diff
==============================================================================
---
labs/jaxmas/trunk/JaxMas/src/test/java/org/apache/labs/jaxmas/registry/CustomTypeTest.java
(original)
+++
labs/jaxmas/trunk/JaxMas/src/test/java/org/apache/labs/jaxmas/registry/CustomTypeTest.java
Mon Aug 31 13:30:54 2009
@@ -1,16 +1,22 @@
package org.apache.labs.jaxmas.registry;
+import java.util.Arrays;
+import java.util.Collection;
import java.util.Collections;
+import javax.xml.registry.BulkResponse;
import javax.xml.registry.Connection;
+import javax.xml.registry.FindQualifier;
import javax.xml.registry.JAXRException;
import javax.xml.registry.LifeCycleManager;
+import javax.xml.registry.RegistryService;
import javax.xml.registry.infomodel.Classification;
import javax.xml.registry.infomodel.ClassificationScheme;
import javax.xml.registry.infomodel.Concept;
import javax.xml.registry.infomodel.RegistryEntry;
import javax.xml.registry.infomodel.RegistryObject;
+import org.apache.labs.jaxmas.registry.infomodel.JaxMasQueryManager;
import org.junit.Test;
@@ -20,6 +26,7 @@
public class CustomTypeTest extends AbstractInitializedJaxMasTestCase {
private static final String MY_TYPE1 =
"{http://namespaces.foo.com/jaxr}MyType1"; //$NON-NLS-1$
private static final String MY_TYPE2 =
"{http://namespaces.foo.com/jaxr}MyType2"; //$NON-NLS-1$
+ private static final String RO_NAME = CustomTypeTest.class.getName();
private Concept findObjectType(Connection pConnection, String pName,
String pValue) throws JAXRException {
final ClassificationScheme objectTypes =
findClassificationScheme("ObjectType"); //$NON-NLS-1$
@@ -30,8 +37,31 @@
}
return concept;
}
+
+ @SuppressWarnings("unchecked")
+ private static Collection<RegistryEntry>
asRegistryEntryCollection(Collection<?> pCollection) {
+ return (Collection<RegistryEntry>) pCollection;
+ }
+
+ private RegistryEntry findObjectsByObjectType(RegistryService pService,
Collection<String> pObjectTypes, String pName)
+ throws JAXRException {
+ final JaxMasQueryManager jqm = (JaxMasQueryManager)
pService.getBusinessQueryManager();
+ final BulkResponse br =
jqm.findObjects(Collections.singleton(FindQualifier.EXACT_NAME_MATCH),
+ pObjectTypes, Collections.singleton(pName),
null,
+ null, null, null);
+ final Collection<RegistryEntry> list =
asRegistryEntryCollection(br.getCollection());
+ switch (list.size()) {
+ case 0:
+ return null;
+ case 1:
+ return list.iterator().next();
+ default:
+ throw new IllegalStateException("Multiple
matching objects named " + pName + " found."); //$NON-NLS-1$//$NON-NLS-2$
+ }
+ }
@Test public void testCreateCustomObjectType() throws Exception {
+ final String name = RO_NAME + '-' + System.currentTimeMillis();
final Concept myType1, myType2;
final RegistryEntry registryEntry;
Connection conn = newConnection();
@@ -45,6 +75,7 @@
assertEquals(myType1.getParent(), myType2.getParent());
registryEntry = (RegistryEntry)
conn.getRegistryService().getBusinessLifeCycleManager().createObject(LifeCycleManager.REGISTRY_ENTRY);
+
registryEntry.setName(conn.getRegistryService().getBusinessLifeCycleManager().createInternationalString(name));
final Concept registryEntryType =
registryEntry.getObjectType();
assertTrue(!registryEntryType.equals(myType1));
assertTrue(!registryEntryType.equals(myType2));
@@ -78,9 +109,18 @@
conn = newConnection();
try {
- final RegistryObject ro2 =
conn.getRegistryService().getBusinessQueryManager().getRegistryObject(registryEntry.getKey().getId());
+ final RegistryService rs = conn.getRegistryService();
+ final RegistryObject ro2 =
rs.getBusinessQueryManager().getRegistryObject(registryEntry.getKey().getId());
assertEquals(myType2, ro2.getObjectType());
+ assertNull(findObjectsByObjectType(rs,
Collections.singleton(MY_TYPE1), name));
+ final RegistryObject ro3 = findObjectsByObjectType(rs,
Arrays.asList(new String[]{MY_TYPE1, MY_TYPE2}), name);
+ assertNotNull(ro3);
+ assertEquals(ro2, ro3);
+ final RegistryObject ro4 = findObjectsByObjectType(rs,
Collections.singleton(MY_TYPE2), name);
+ assertNotNull(ro4);
+ assertEquals(ro2, ro4);
+
conn.close();
conn = null;
} finally {
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]