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 2009/08/31 02:50:50 UTC

svn commit: r809441 - in /labs/jaxmas/trunk/JaxMas: ./ src/main/java/org/apache/labs/jaxmas/registry/accessor/ src/main/java/org/apache/labs/jaxmas/registry/infomodel/ src/main/java/org/apache/labs/jaxmas/registry/schema/ src/main/java/org/apache/labs/...

Author: jochen
Date: Mon Aug 31 00:50:49 2009
New Revision: 809441

URL: http://svn.apache.org/viewvc?rev=809441&view=rev
Log:
Added support for custom object types.

Added:
    labs/jaxmas/trunk/JaxMas/src/test/java/org/apache/labs/jaxmas/registry/CustomTypeTest.java
    labs/jaxmas/trunk/JaxMas/src/test/java/org/apache/labs/jaxmas/registry/OrganizationTestCase.java
Modified:
    labs/jaxmas/trunk/JaxMas/pom.xml
    labs/jaxmas/trunk/JaxMas/src/main/java/org/apache/labs/jaxmas/registry/accessor/ClassificationSchemeAccessor.java
    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/ROAccessors.java
    labs/jaxmas/trunk/JaxMas/src/main/java/org/apache/labs/jaxmas/registry/infomodel/BusinessLifeCycleManagerImpl.java
    labs/jaxmas/trunk/JaxMas/src/main/java/org/apache/labs/jaxmas/registry/infomodel/BusinessQueryManagerImpl.java
    labs/jaxmas/trunk/JaxMas/src/main/java/org/apache/labs/jaxmas/registry/infomodel/ConceptImpl.java
    labs/jaxmas/trunk/JaxMas/src/main/java/org/apache/labs/jaxmas/registry/infomodel/LifeCycleManagerImpl.java
    labs/jaxmas/trunk/JaxMas/src/main/java/org/apache/labs/jaxmas/registry/infomodel/RegistryEntryImpl.java
    labs/jaxmas/trunk/JaxMas/src/main/java/org/apache/labs/jaxmas/registry/schema/schema-update.1.sql
    labs/jaxmas/trunk/JaxMas/src/main/java/org/apache/labs/jaxmas/registry/sql/AbstractDbDriver.java
    labs/jaxmas/trunk/JaxMas/src/main/java/org/apache/labs/jaxmas/registry/sql/DerbyDbDriver.java
    labs/jaxmas/trunk/JaxMas/src/main/java/org/apache/labs/jaxmas/registry/sql/HsqlDbDriver.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/StmtUser.java

Modified: labs/jaxmas/trunk/JaxMas/pom.xml
URL: http://svn.apache.org/viewvc/labs/jaxmas/trunk/JaxMas/pom.xml?rev=809441&r1=809440&r2=809441&view=diff
==============================================================================
--- labs/jaxmas/trunk/JaxMas/pom.xml (original)
+++ labs/jaxmas/trunk/JaxMas/pom.xml Mon Aug 31 00:50:49 2009
@@ -67,11 +67,6 @@
       <artifactId>hsqldb</artifactId>
       <version>1.8.0.7</version>
     </dependency>
-    <dependency>
-      <groupId>org.apache.derby</groupId>
-      <artifactId>derby</artifactId>
-      <version>10.3.2.1</version>
-    </dependency>
   </dependencies>
 
   <build>

Modified: labs/jaxmas/trunk/JaxMas/src/main/java/org/apache/labs/jaxmas/registry/accessor/ClassificationSchemeAccessor.java
URL: http://svn.apache.org/viewvc/labs/jaxmas/trunk/JaxMas/src/main/java/org/apache/labs/jaxmas/registry/accessor/ClassificationSchemeAccessor.java?rev=809441&r1=809440&r2=809441&view=diff
==============================================================================
--- labs/jaxmas/trunk/JaxMas/src/main/java/org/apache/labs/jaxmas/registry/accessor/ClassificationSchemeAccessor.java (original)
+++ labs/jaxmas/trunk/JaxMas/src/main/java/org/apache/labs/jaxmas/registry/accessor/ClassificationSchemeAccessor.java Mon Aug 31 00:50:49 2009
@@ -25,6 +25,7 @@
 import java.util.List;
 
 import javax.xml.registry.BusinessQueryManager;
+import javax.xml.registry.FindQualifier;
 import javax.xml.registry.JAXRException;
 import javax.xml.registry.RegistryService;
 import javax.xml.registry.infomodel.ClassificationScheme;
@@ -92,7 +93,11 @@
 			Collection<?> pExternalLinks) throws JAXRException {
 	    final List<Predicate> predicates = new ArrayList<Predicate>();
 	    if (pFindQualifiers != null  &&  !pFindQualifiers.isEmpty()) {
-			throw new JAXRException(RegistryServiceImpl.getNLSStrings(pRegistryService).format(NLSStrings.UNSUPPORTED_PARAMETER, "pFindQualifiers")); //$NON-NLS-1$
+	    	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 (pNamePatterns != null  &&  !pNamePatterns.isEmpty()) {
 		    predicates.add(new NamePredicate(asStringCollection(pNamePatterns)));

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=809441&r1=809440&r2=809441&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 00:50:49 2009
@@ -20,13 +20,22 @@
 
 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.BusinessQueryManager;
+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.Organization;
 
+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;
 
 
@@ -75,4 +84,48 @@
     public int getRegistryObjectType() {
         return ROAccessors.ObjectTypes.ORGANIZATION.ordinal();
     }
+
+	@SuppressWarnings("unchecked")
+    private static Collection<String> asStringCollection(Collection<?> pCollection) {
+	    return (Collection<String>) pCollection;
+	}
+
+	@SuppressWarnings("unchecked")
+	private static List<Organization> asOrganizationList(List<?> pList) {
+		return (List<Organization>) pList;
+	}
+
+	/**
+	 * Implementation of {@link BusinessQueryManager#findOrganizations(Collection, Collection, Collection, Collection, Collection, Collection)}.
+	 */
+	public List<Organization> findOrganizations(
+			final RegistryService pRegistryService, Collection<?> pFindQualifiers,
+			Collection<?> pNamePatterns, Collection<?> pClassifications,
+			Collection<?> pSpecifications, Collection<?> pExternalIdentifiers,
+			Collection<?> pExternalLinks) throws JAXRException {
+	    final List<Predicate> predicates = new ArrayList<Predicate>();
+	    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 (pNamePatterns != null  &&  !pNamePatterns.isEmpty()) {
+		    predicates.add(new NamePredicate(asStringCollection(pNamePatterns)));
+		}
+		if (pClassifications != null  &&  !pClassifications.isEmpty()) {
+			throw new JAXRException(RegistryServiceImpl.getNLSStrings(pRegistryService).format(NLSStrings.UNSUPPORTED_PARAMETER, "pClassifications")); //$NON-NLS-1$
+		}
+		if (pSpecifications != null  &&  !pSpecifications.isEmpty()) {
+			throw new JAXRException(RegistryServiceImpl.getNLSStrings(pRegistryService).format(NLSStrings.UNSUPPORTED_PARAMETER, "pSpecifications")); //$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 asOrganizationList(rol.getResultList(pRegistryService, predicates));
+	}
 }

Modified: labs/jaxmas/trunk/JaxMas/src/main/java/org/apache/labs/jaxmas/registry/accessor/ROAccessors.java
URL: http://svn.apache.org/viewvc/labs/jaxmas/trunk/JaxMas/src/main/java/org/apache/labs/jaxmas/registry/accessor/ROAccessors.java?rev=809441&r1=809440&r2=809441&view=diff
==============================================================================
--- labs/jaxmas/trunk/JaxMas/src/main/java/org/apache/labs/jaxmas/registry/accessor/ROAccessors.java (original)
+++ labs/jaxmas/trunk/JaxMas/src/main/java/org/apache/labs/jaxmas/registry/accessor/ROAccessors.java Mon Aug 31 00:50:49 2009
@@ -29,7 +29,38 @@
  * {@link ROAccessor}.
  */
 public class ROAccessors {
-    /**
+	/**
+	 * The enumeration of builtin taxonomies.
+	 */
+	public enum ClassificationSchemes {
+		/**
+		 * A classification scheme: ObjectType
+		 */
+		OBJECT_TYPE("00000000000000000000000000000001", "ObjectType"),  //$NON-NLS-1$//$NON-NLS-2$
+		/**
+		 * A classification scheme: ObjectType
+		 */
+		ASSOCIATION_TYPE("00000000000000000000000000000002", "AssociationType"); //$NON-NLS-1$ //$NON-NLS-2$
+
+		private final String id;
+		private final String name;
+
+		ClassificationSchemes(String pId, String pName) {
+			id = pId;
+			name = pName;
+		}
+
+		/**
+		 * Returns the classification schemes id.
+		 */
+		public String getId() { return id; }
+		/**
+		 * Returns the classification schemes name.
+		 */
+		public String getName() { return name; }
+	}
+
+	/**
      * The enumeration of available object types.
      */
     public enum ObjectTypes {

Modified: labs/jaxmas/trunk/JaxMas/src/main/java/org/apache/labs/jaxmas/registry/infomodel/BusinessLifeCycleManagerImpl.java
URL: http://svn.apache.org/viewvc/labs/jaxmas/trunk/JaxMas/src/main/java/org/apache/labs/jaxmas/registry/infomodel/BusinessLifeCycleManagerImpl.java?rev=809441&r1=809440&r2=809441&view=diff
==============================================================================
--- labs/jaxmas/trunk/JaxMas/src/main/java/org/apache/labs/jaxmas/registry/infomodel/BusinessLifeCycleManagerImpl.java (original)
+++ labs/jaxmas/trunk/JaxMas/src/main/java/org/apache/labs/jaxmas/registry/infomodel/BusinessLifeCycleManagerImpl.java Mon Aug 31 00:50:49 2009
@@ -87,7 +87,7 @@
 	@SuppressWarnings("unchecked")
 	@Override
 	public BulkResponse deleteOrganizations(Collection pOrganizationKeys) throws JAXRException {
-        throw new JAXRException(NLSStrings.OPERATION_NOT_IMPLEMENTED);
+		return deleteObjects(pOrganizationKeys);
 	}
 
 	@SuppressWarnings("unchecked")

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=809441&r1=809440&r2=809441&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 00:50:49 2009
@@ -30,9 +30,11 @@
 import javax.xml.registry.infomodel.ClassificationScheme;
 import javax.xml.registry.infomodel.Concept;
 import javax.xml.registry.infomodel.Key;
+import javax.xml.registry.infomodel.Organization;
 
 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.sql.AssociationSourcePredicate;
 import org.apache.labs.jaxmas.registry.sql.AssociationTargetPredicate;
 import org.apache.labs.jaxmas.registry.sql.AssociationTypePredicate;
@@ -163,7 +165,11 @@
 			Collection pNamePatterns, Collection pClassifications,
 			Collection pSpecifications, Collection pExternalIdentifiers,
 			Collection pExternalLinks) throws JAXRException {
-        throw new JAXRException(NLSStrings.OPERATION_NOT_IMPLEMENTED);
+		final List<Organization> list = OrganizationAccessor.getInstance().findOrganizations(getRegistryService(),
+				pFindQualifiers, pNamePatterns, pClassifications,
+				pSpecifications, pExternalIdentifiers,
+				pExternalLinks);
+		return new BulkResponseImpl(list);
 	}
 
 	@SuppressWarnings("unchecked")

Modified: labs/jaxmas/trunk/JaxMas/src/main/java/org/apache/labs/jaxmas/registry/infomodel/ConceptImpl.java
URL: http://svn.apache.org/viewvc/labs/jaxmas/trunk/JaxMas/src/main/java/org/apache/labs/jaxmas/registry/infomodel/ConceptImpl.java?rev=809441&r1=809440&r2=809441&view=diff
==============================================================================
--- labs/jaxmas/trunk/JaxMas/src/main/java/org/apache/labs/jaxmas/registry/infomodel/ConceptImpl.java (original)
+++ labs/jaxmas/trunk/JaxMas/src/main/java/org/apache/labs/jaxmas/registry/infomodel/ConceptImpl.java Mon Aug 31 00:50:49 2009
@@ -82,8 +82,7 @@
 
 	@Override
 	public RegistryObject getParent() throws JAXRException {
-	    final RegistryObject owner = getOwner();
-	    return (owner instanceof ClassificationScheme) ? null : owner;
+		return getOwner();
 	}
 
 	@Override

Modified: labs/jaxmas/trunk/JaxMas/src/main/java/org/apache/labs/jaxmas/registry/infomodel/LifeCycleManagerImpl.java
URL: http://svn.apache.org/viewvc/labs/jaxmas/trunk/JaxMas/src/main/java/org/apache/labs/jaxmas/registry/infomodel/LifeCycleManagerImpl.java?rev=809441&r1=809440&r2=809441&view=diff
==============================================================================
--- labs/jaxmas/trunk/JaxMas/src/main/java/org/apache/labs/jaxmas/registry/infomodel/LifeCycleManagerImpl.java (original)
+++ labs/jaxmas/trunk/JaxMas/src/main/java/org/apache/labs/jaxmas/registry/infomodel/LifeCycleManagerImpl.java Mon Aug 31 00:50:49 2009
@@ -266,7 +266,7 @@
             if (LifeCycleManager.TELEPHONE_NUMBER.equals(pInterfaceName)) {
                 return new TelephoneNumberImpl();
             }
-            if (LifeCycleManager.VERSIONABLE.equals(pInterfaceName)) {
+            if (LifeCycleManager.VERSIONABLE.equals(pInterfaceName)  ||  LifeCycleManager.REGISTRY_ENTRY.equals(pInterfaceName)) {
                 return ROAccessors.getROAccessor(ROAccessors.ObjectTypes.REGISTRY_ENTRY).create(getRegistryService());
             }
             throw new UnsupportedCapabilityException("Not implemented: " + pInterfaceName); //$NON-NLS-1$

Modified: labs/jaxmas/trunk/JaxMas/src/main/java/org/apache/labs/jaxmas/registry/infomodel/RegistryEntryImpl.java
URL: http://svn.apache.org/viewvc/labs/jaxmas/trunk/JaxMas/src/main/java/org/apache/labs/jaxmas/registry/infomodel/RegistryEntryImpl.java?rev=809441&r1=809440&r2=809441&view=diff
==============================================================================
--- labs/jaxmas/trunk/JaxMas/src/main/java/org/apache/labs/jaxmas/registry/infomodel/RegistryEntryImpl.java (original)
+++ labs/jaxmas/trunk/JaxMas/src/main/java/org/apache/labs/jaxmas/registry/infomodel/RegistryEntryImpl.java Mon Aug 31 00:50:49 2009
@@ -21,10 +21,13 @@
 import java.util.Date;
 
 import javax.xml.registry.JAXRException;
+import javax.xml.registry.infomodel.Classification;
+import javax.xml.registry.infomodel.Concept;
 import javax.xml.registry.infomodel.Key;
 import javax.xml.registry.infomodel.RegistryEntry;
 
 import org.apache.labs.jaxmas.registry.accessor.ROAccessor;
+import org.apache.labs.jaxmas.registry.accessor.ROAccessors;
 import org.apache.labs.jaxmas.registry.accessor.RegistryEntryAccessor;
 
 
@@ -34,7 +37,8 @@
 public class RegistryEntryImpl<RE extends RegistryEntry> extends RegistryObjectImpl<RE> implements RegistryEntry {
     private Date expiration;
 	private int stability, majorVersion, minorVersion, status;
-	private String userVersion;
+	private String userVersion, customType;
+	private Concept customTypeObject;
 
 	/**
 	 * Creates a new instance with the given registry service.
@@ -45,56 +49,67 @@
 
 	@Override
 	public Date getExpiration() throws JAXRException {
+		ensureLoaded();
 		return expiration;
 	}
 
 	@Override
 	public int getStability() throws JAXRException {
+		ensureLoaded();
 		return stability;
 	}
 
 	@Override
 	public int getStatus() throws JAXRException {
+		ensureLoaded();
 		return status;
 	}
 
 	@Override
 	public void setExpiration(Date pExpiration) throws JAXRException {
+		ensureLoaded();
 		expiration = pExpiration;
 	}
 
 	@Override
 	public void setStability(int pStability) throws JAXRException {
+		ensureLoaded();
 		stability = pStability;
 	}
 
 	@Override
 	public int getMajorVersion() throws JAXRException {
+		ensureLoaded();
 		return majorVersion;
 	}
 
 	@Override
 	public int getMinorVersion() throws JAXRException {
+		ensureLoaded();
 		return minorVersion;
 	}
 
 	@Override
 	public String getUserVersion() throws JAXRException {
+		ensureLoaded();
 		return userVersion;
 	}
 
 	@Override
 	public void setMajorVersion(int pVersion) throws JAXRException {
+		ensureLoaded();
 		majorVersion = pVersion;
 	}
 
 	@Override
 	public void setMinorVersion(int pVersion) throws JAXRException {
+		ensureLoaded();
 		minorVersion = pVersion;
 	}
 
 	@Override
 	public void setUserVersion(String pVersion) throws JAXRException {
+		ensureLoaded();
 		userVersion = pVersion;
 	}
 
@@ -103,4 +118,37 @@
     public ROAccessor<RE> getROLoader() {
         return (ROAccessor<RE>) RegistryEntryAccessor.getInstance();
     }
+
+    public String getCustomType() throws JAXRException {
+    	ensureLoaded();
+    	return customType;
+    }
+
+    public void setCustomType(String pCustomType) throws JAXRException {
+    	ensureLoaded();
+    	customType = pCustomType;
+    	customTypeObject = null;
+    }
+
+    @Override
+    public void addClassification(Classification pClassification) throws JAXRException {
+    	final Concept concept = pClassification.getConcept();
+    	if (concept.getParent().getKey().getId().equals(ROAccessors.ClassificationSchemes.OBJECT_TYPE.getId())) {
+    		setCustomType(concept.getKey().getId());
+    	} else {
+    		super.addClassification(pClassification);
+    	}
+    }
+
+    @Override
+    public Concept getObjectType() throws JAXRException {
+    	final String type = getCustomType();
+    	if (type == null) {
+    		return super.getObjectType();
+    	}
+    	if (customTypeObject == null) {
+    		customTypeObject = (Concept) getRegistryService().getBusinessQueryManager().getRegistryObject(type);
+    	}
+    	return customTypeObject;
+    }
 }

Modified: labs/jaxmas/trunk/JaxMas/src/main/java/org/apache/labs/jaxmas/registry/schema/schema-update.1.sql
URL: http://svn.apache.org/viewvc/labs/jaxmas/trunk/JaxMas/src/main/java/org/apache/labs/jaxmas/registry/schema/schema-update.1.sql?rev=809441&r1=809440&r2=809441&view=diff
==============================================================================
--- labs/jaxmas/trunk/JaxMas/src/main/java/org/apache/labs/jaxmas/registry/schema/schema-update.1.sql (original)
+++ labs/jaxmas/trunk/JaxMas/src/main/java/org/apache/labs/jaxmas/registry/schema/schema-update.1.sql Mon Aug 31 00:50:49 2009
@@ -18,13 +18,23 @@
 --
 
 
+DROP TABLE RegistryEntries;
+DROP TABLE Classifications;
+DROP TABLE Associations;
+DROP TABLE Concepts;
+DROP TABLE Ids;
+DROP TABLE RegistryObjectSlotValues;
+DROP TABLE RegistryObjectSlots;
+DROP TABLE LocalizedStrings;
+DROP TABLE RegistryObjects;
 DROP TABLE DbInfo;
+
+
 CREATE TABLE DbInfo (
     version INT NOT NULL
 );
 
 
-DROP TABLE RegistryObjects;
 CREATE TABLE RegistryObjects (
     roKey VARCHAR(32) NOT NULL PRIMARY KEY,
     roOwnerRestricting VARCHAR(32),
@@ -35,7 +45,6 @@
     CONSTRAINT FK_RegistryObjects_OwnerRestricting FOREIGN KEY (roOwnerRestricting) REFERENCES RegistryObjects ON DELETE RESTRICT
 );
 
-DROP TABLE LocalizedStrings;
 CREATE TABLE LocalizedStrings (
     roKey VARCHAR(32) NOT NULL,
     lsType INT NOT NULL,
@@ -46,19 +55,6 @@
 );
 CREATE INDEX LocalizedStrings_roKey_locale ON LocalizedStrings (roKey, locale);
 
-DROP TABLE RegistryEntries;
-CREATE TABLE RegistryEntries (
-    roKey VARCHAR(32) NOT NULL PRIMARY KEY,
-    expiration TIMESTAMP,
-    status INT NOT NULL,
-    stability INT NOT NULL,
-    majorVersion INT NOT NULL,
-    minorVersion INT NOT NULL,
-    userVersion VARCHAR(255),
-    CONSTRAINT FK_RegistryEntries_RO FOREIGN KEY (roKey) REFERENCES RegistryObjects ON DELETE CASCADE
-);
-
-DROP TABLE RegistryObjectSlots;
 CREATE TABLE RegistryObjectSlots (
     id BIGINT NOT NULL PRIMARY KEY,
     roKey VARCHAR(32) NOT NULL,
@@ -67,27 +63,23 @@
     CONSTRAINT FK_RegistryObjectSlots_RO FOREIGN KEY (roKey) REFERENCES RegistryObjects ON DELETE CASCADE
 );
 
-DROP TABLE RegistryObjectSlotValues;
 CREATE TABLE RegistryObjectSlotValues (
     id BIGINT NOT NULL,
     val ${CLOB} NOT NULL,
     CONSTRAINT FK_RegistryObjectSlotValues_Slot FOREIGN KEY (id) REFERENCES RegistryObjectSlots ON DELETE CASCADE
 );
 
-DROP TABLE Ids;
 CREATE TABLE Ids (
     name VARCHAR(32) NOT NULL PRIMARY KEY,
     nextValue BIGINT NOT NULL
 );
 
-DROP TABLE Concepts;
 CREATE TABLE Concepts (
     roKey VARCHAR(32) NOT NULL PRIMARY KEY,
     value ${CLOB},
     CONSTRAINT FK_Concepts_RO FOREIGN KEY (roKey) REFERENCES RegistryObjects ON DELETE CASCADE
 );
 
-DROP TABLE Associations;
 CREATE TABLE Associations (
     roKey VARCHAR(32) NOT NULL PRIMARY KEY,
     roKeyTarget VARCHAR(32) NOT NULL,
@@ -96,7 +88,6 @@
     CONSTRAINT FK_Associations_Target FOREIGN KEY (roKeyTarget) REFERENCES RegistryObjects ON DELETE RESTRICT
 );
 
-DROP TABLE Classifications;
 CREATE TABLE Classifications (
     roKey VARCHAR(32) NOT NULL PRIMARY KEY,
     roKeyConcept VARCHAR(32) NOT NULL,
@@ -104,6 +95,19 @@
     CONSTRAINT FK_Classifications_Concept FOREIGN KEY (roKeyConcept) REFERENCES RegistryObjects ON DELETE RESTRICT
 );
 
+CREATE TABLE RegistryEntries (
+    roKey VARCHAR(32) NOT NULL PRIMARY KEY,
+    customType VARCHAR(32),
+    expiration TIMESTAMP,
+    status INT NOT NULL,
+    stability INT NOT NULL,
+    majorVersion INT NOT NULL,
+    minorVersion INT NOT NULL,
+    userVersion VARCHAR(255),
+    CONSTRAINT FK_RegistryEntries_RO FOREIGN KEY (roKey) REFERENCES RegistryObjects ON DELETE CASCADE,
+    CONSTRAINT FK_ObjectType FOREIGN KEY (customType) REFERENCES Concepts
+);
+
 INSERT INTO Ids (name, nextValue) VALUES ('keys', 8000);
 INSERT INTO Ids (name, nextValue) VALUES ('Slots', 0);
 

Modified: labs/jaxmas/trunk/JaxMas/src/main/java/org/apache/labs/jaxmas/registry/sql/AbstractDbDriver.java
URL: http://svn.apache.org/viewvc/labs/jaxmas/trunk/JaxMas/src/main/java/org/apache/labs/jaxmas/registry/sql/AbstractDbDriver.java?rev=809441&r1=809440&r2=809441&view=diff
==============================================================================
--- labs/jaxmas/trunk/JaxMas/src/main/java/org/apache/labs/jaxmas/registry/sql/AbstractDbDriver.java (original)
+++ labs/jaxmas/trunk/JaxMas/src/main/java/org/apache/labs/jaxmas/registry/sql/AbstractDbDriver.java Mon Aug 31 00:50:49 2009
@@ -266,7 +266,7 @@
 		final Key key = pObject.getKey();
 		final Key ownerRestricting, ownerCascading;
 		final Integer pos;
-		if (ro instanceof OwnedRegistryObject) {
+		if (ro instanceof OwnedRegistryObject<?>) {
 		    final OwnedRegistryObject<?> oro = (OwnedRegistryObject<?>) ro;
 		    final RegistryObject roOwner = oro.getOwner();
 		    final Key owner = roOwner == null ? null : roOwner.getKey();
@@ -292,10 +292,10 @@
 
 		if (pObject instanceof RegistryEntry) {
 			RegistryEntryImpl<?> re = (RegistryEntryImpl<?>) pObject;
-			run("INSERT INTO RegistryEntries (roKey, expiration, status, stability, majorVersion, minorVersion, userVersion) VALUES (?, ?, ?, ?, ?, ?, ?)", //$NON-NLS-1$
-					key, re.getExpiration(), new Integer(re.getStatus()), new Integer(re.getStability()),
-					new Integer(re.getMajorVersion()), new Integer(re.getMinorVersion()),
-					re.getUserVersion());
+			run("INSERT INTO RegistryEntries (roKey, customType, expiration, status, stability, majorVersion, minorVersion, userVersion) VALUES (?, ?, ?, ?, ?, ?, ?, ?)", //$NON-NLS-1$
+					key, re.getCustomType(), re.getExpiration(), new Integer(re.getStatus()),
+					new Integer(re.getStability()), new Integer(re.getMajorVersion()),
+					new Integer(re.getMinorVersion()), re.getUserVersion());
 		}
 
 		if (pObject instanceof Concept) {
@@ -348,11 +348,11 @@
 		this.saveSlots(pObject);
 		
 		if (pObject instanceof RegistryEntry) {
-			RegistryEntry re = (RegistryEntry) pObject;
-			run("UPDATE RegistryEntries SET expiration=?, status=?, stability=?, majorVersion=?, minorVersion=?, userVersion=? WHERE roKey=?", //$NON-NLS-1$
-					re.getExpiration(), new Integer(re.getStatus()), new Integer(re.getStability()),
-					new Integer(re.getMajorVersion()), new Integer(re.getMinorVersion()),
-					re.getUserVersion(), key);
+			RegistryEntryImpl<?> re = (RegistryEntryImpl<?>) pObject;
+			run("UPDATE RegistryEntries SET customType=?, expiration=?, status=?, stability=?, majorVersion=?, minorVersion=?, userVersion=? WHERE roKey=?", //$NON-NLS-1$
+					re.getCustomType(), re.getExpiration(), new Integer(re.getStatus()),
+					new Integer(re.getStability()), new Integer(re.getMajorVersion()),
+					new Integer(re.getMinorVersion()), re.getUserVersion(), key);
 		}
 
 		if (pObject instanceof Concept) {

Modified: labs/jaxmas/trunk/JaxMas/src/main/java/org/apache/labs/jaxmas/registry/sql/DerbyDbDriver.java
URL: http://svn.apache.org/viewvc/labs/jaxmas/trunk/JaxMas/src/main/java/org/apache/labs/jaxmas/registry/sql/DerbyDbDriver.java?rev=809441&r1=809440&r2=809441&view=diff
==============================================================================
--- labs/jaxmas/trunk/JaxMas/src/main/java/org/apache/labs/jaxmas/registry/sql/DerbyDbDriver.java (original)
+++ labs/jaxmas/trunk/JaxMas/src/main/java/org/apache/labs/jaxmas/registry/sql/DerbyDbDriver.java Mon Aug 31 00:50:49 2009
@@ -59,7 +59,8 @@
 
     @Override
     public boolean isUnknownTableError(SQLException pException) {
-        return "42Y55".equals(pException.getSQLState()); //$NON-NLS-1$
+    	return "42X05".equals(pException.getSQLState()) //$NON-NLS-1$
+    	  ||   "42Y55".equals(pException.getSQLState()); //$NON-NLS-1$
     }
 
     @Override

Modified: labs/jaxmas/trunk/JaxMas/src/main/java/org/apache/labs/jaxmas/registry/sql/HsqlDbDriver.java
URL: http://svn.apache.org/viewvc/labs/jaxmas/trunk/JaxMas/src/main/java/org/apache/labs/jaxmas/registry/sql/HsqlDbDriver.java?rev=809441&r1=809440&r2=809441&view=diff
==============================================================================
--- labs/jaxmas/trunk/JaxMas/src/main/java/org/apache/labs/jaxmas/registry/sql/HsqlDbDriver.java (original)
+++ labs/jaxmas/trunk/JaxMas/src/main/java/org/apache/labs/jaxmas/registry/sql/HsqlDbDriver.java Mon Aug 31 00:50:49 2009
@@ -46,6 +46,9 @@
         if ("S0002".equals(pException.getSQLState())  &&  pException.getErrorCode() == -22) { //$NON-NLS-1$
             return true;
         }
+        if ("S1000".equals(pException.getSQLState())  &&  pException.getErrorCode() == -35) { //$NON-NLS-1$
+        	return true;
+        }
         return false;
     }
 

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=809441&r1=809440&r2=809441&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 Mon Aug 31 00:50:49 2009
@@ -167,8 +167,8 @@
 
         @Override
         protected int addColumns(StringBuilder pBuilder, int pIndex) {
-            pBuilder.append(", re.expiration, re.status, re.stability, re.majorVersion, re.minorVersion, re.userVersion"); //$NON-NLS-1$
-            return pIndex + 6;
+            pBuilder.append(", re.customType, re.expiration, re.status, re.stability, re.majorVersion, re.minorVersion, re.userVersion"); //$NON-NLS-1$
+            return pIndex + 7;
         }
 
         @Override
@@ -191,11 +191,12 @@
                 throws SQLException, JAXRException {
             if (pRegistryObject instanceof RegistryEntry) {
                 final RegistryEntryImpl<?> re = (RegistryEntryImpl<?>) pRegistryObject;
-                re.setExpiration(pResultSet.getDate(pIndex));
-                re.setStability(pResultSet.getInt(pIndex+2));
-                re.setMajorVersion(pResultSet.getInt(pIndex+3));
-                re.setMinorVersion(pResultSet.getInt(pIndex+4));
-                re.setUserVersion(pResultSet.getString(pIndex+5));
+                re.setCustomType(pResultSet.getString(pIndex));
+                re.setExpiration(pResultSet.getDate(pIndex+1));
+                re.setStability(pResultSet.getInt(pIndex+3));
+                re.setMajorVersion(pResultSet.getInt(pIndex+4));
+                re.setMinorVersion(pResultSet.getInt(pIndex+5));
+                re.setUserVersion(pResultSet.getString(pIndex+6));
             }
         }
     }
@@ -518,7 +519,7 @@
         final RegistryObjectImpl<?> ro = (RegistryObjectImpl<?>) pRegistryObject;
         ro.setState(ROState.loaded);
 
-        if (pRegistryObject instanceof OwnedRegistryObject) {
+        if (pRegistryObject instanceof OwnedRegistryObject<?>) {
             final OwnedRegistryObject<?> oro = (OwnedRegistryObject<?>) ro;
             final String ownerKeyRestricting = pResultSet.getString(2);
             final String ownerKeyCascading = pResultSet.getString(3);

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=809441&r1=809440&r2=809441&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 Mon Aug 31 00:50:49 2009
@@ -95,7 +95,7 @@
 					pStmt.setTimestamp(i+1, ts, cal);
 				} else if (o instanceof Key) {
 				    pStmt.setString(i+1, ((Key) o).getId());
-				} else if (o instanceof Enum) {
+				} else if (o instanceof Enum<?>) {
 				    pStmt.setInt(i+1, ((Enum<?>) o).ordinal());
 				} else {
 					throw new IllegalStateException("Invalid parameter type: " + o.getClass().getName()); //$NON-NLS-1$

Added: 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=809441&view=auto
==============================================================================
--- labs/jaxmas/trunk/JaxMas/src/test/java/org/apache/labs/jaxmas/registry/CustomTypeTest.java (added)
+++ labs/jaxmas/trunk/JaxMas/src/test/java/org/apache/labs/jaxmas/registry/CustomTypeTest.java Mon Aug 31 00:50:49 2009
@@ -0,0 +1,90 @@
+package org.apache.labs.jaxmas.registry;
+
+import java.util.Collections;
+
+import javax.xml.registry.Connection;
+import javax.xml.registry.JAXRException;
+import javax.xml.registry.LifeCycleManager;
+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.junit.Test;
+
+
+/**
+ * Test case for custom object types.
+ */
+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 Concept findObjectType(Connection pConnection, String pName, String pValue) throws JAXRException {
+		final ClassificationScheme objectTypes = findClassificationScheme("ObjectType"); //$NON-NLS-1$
+		Concept concept = findConcept(objectTypes, pValue);
+		if (concept == null) {
+			concept = pConnection.getRegistryService().getBusinessLifeCycleManager().createConcept(objectTypes, pName, pValue);
+			pConnection.getRegistryService().getBusinessLifeCycleManager().saveConcepts(Collections.singleton(concept));
+		}
+		return concept;
+	}
+	
+	@Test public void testCreateCustomObjectType() throws Exception {
+		final Concept myType1, myType2;
+		final RegistryEntry registryEntry;
+		Connection conn = newConnection();
+		try {
+			myType1 = findObjectType(conn, "My Type 1", MY_TYPE1); //$NON-NLS-1$
+			assertEquals(MY_TYPE1, myType1.getValue());
+
+			myType2 = findObjectType(conn, "My Type 2", MY_TYPE2); //$NON-NLS-1$
+			assertEquals(MY_TYPE2, myType2.getValue());
+			assertTrue(!myType1.equals(myType2));
+			assertEquals(myType1.getParent(), myType2.getParent());
+
+			registryEntry = (RegistryEntry) conn.getRegistryService().getBusinessLifeCycleManager().createObject(LifeCycleManager.REGISTRY_ENTRY);
+			final Concept registryEntryType = registryEntry.getObjectType();
+			assertTrue(!registryEntryType.equals(myType1));
+			assertTrue(!registryEntryType.equals(myType2));
+			assertEquals(registryEntryType.getParent(), myType1.getParent());
+			assertEquals(registryEntryType.getParent(), myType2.getParent());
+
+			final Classification cl1 = conn.getRegistryService().getBusinessLifeCycleManager().createClassification(myType1);
+			registryEntry.addClassification(cl1);
+			assertEquals(myType1, registryEntry.getObjectType());
+			conn.getRegistryService().getBusinessLifeCycleManager().saveObjects(Collections.singleton(registryEntry));
+			conn.close();
+			conn = null;
+		} finally {
+			if (conn != null) { try { conn.close(); } catch (Throwable t) { /* Ignore me */ } }
+		}
+
+		conn = newConnection();
+		try {
+			final RegistryObject ro1 = conn.getRegistryService().getBusinessQueryManager().getRegistryObject(registryEntry.getKey().getId());
+			assertEquals(myType1, ro1.getObjectType());
+
+			final Classification cl2 = conn.getRegistryService().getBusinessLifeCycleManager().createClassification(myType2);
+			ro1.addClassification(cl2);
+			assertEquals(myType2, ro1.getObjectType());
+			conn.getRegistryService().getBusinessLifeCycleManager().saveObjects(Collections.singleton(ro1));
+			conn.close();
+			conn = null;
+		} finally {
+			if (conn != null) { try { conn.close(); } catch (Throwable t) { /* Ignore me */ } }
+		}
+
+		conn = newConnection();
+		try {
+			final RegistryObject ro2 = conn.getRegistryService().getBusinessQueryManager().getRegistryObject(registryEntry.getKey().getId());
+			assertEquals(myType2, ro2.getObjectType());
+
+			conn.close();
+			conn = null;
+		} finally {
+			if (conn != null) { try { conn.close(); } catch (Throwable t) { /* Ignore me */ } }
+		}
+	}
+}

Added: labs/jaxmas/trunk/JaxMas/src/test/java/org/apache/labs/jaxmas/registry/OrganizationTestCase.java
URL: http://svn.apache.org/viewvc/labs/jaxmas/trunk/JaxMas/src/test/java/org/apache/labs/jaxmas/registry/OrganizationTestCase.java?rev=809441&view=auto
==============================================================================
--- labs/jaxmas/trunk/JaxMas/src/test/java/org/apache/labs/jaxmas/registry/OrganizationTestCase.java (added)
+++ labs/jaxmas/trunk/JaxMas/src/test/java/org/apache/labs/jaxmas/registry/OrganizationTestCase.java Mon Aug 31 00:50:49 2009
@@ -0,0 +1,58 @@
+package org.apache.labs.jaxmas.registry;
+
+import java.util.Collection;
+import java.util.Collections;
+
+import javax.xml.registry.BulkResponse;
+import javax.xml.registry.BusinessQueryManager;
+import javax.xml.registry.Connection;
+import javax.xml.registry.FindQualifier;
+import javax.xml.registry.JAXRException;
+import javax.xml.registry.RegistryService;
+import javax.xml.registry.infomodel.Organization;
+
+import junit.framework.Assert;
+
+import org.junit.Test;
+
+
+/**
+ * Test case for handling of organizations.
+ */
+public class OrganizationTestCase extends AbstractJaxMasTestCase {
+	private Organization findOrganization(BusinessQueryManager pBqm, String pName) throws JAXRException {
+		final BulkResponse br = pBqm.findOrganizations(Collections.singleton(FindQualifier.EXACT_NAME_MATCH),
+				Collections.singleton(pName), null, null, null, null);
+		final Collection<?> list = br.getCollection();
+		return (Organization) (list.isEmpty() ? null : list.iterator().next());
+	}
+
+	/**
+	 * Tests creating and deleting an organization.
+	 */
+	@Test public void testCreateOrganization() throws Exception {
+		final String name = OrganizationTestCase.class.getName() + System.currentTimeMillis();
+		Connection conn = newConnection();
+		try {
+			RegistryService service = conn.getRegistryService();
+			Organization org = findOrganization(service.getBusinessQueryManager(), name);
+			Assert.assertNull(org);
+			org = service.getBusinessLifeCycleManager().createOrganization(name);
+			Assert.assertNotNull(org);
+			service.getBusinessLifeCycleManager().saveOrganizations(Collections.singleton(org));
+			conn.close();
+			conn = null;
+			conn = newConnection();
+			service = conn.getRegistryService();
+			org = findOrganization(service.getBusinessQueryManager(), name);
+			Assert.assertNotNull(org);
+			service.getBusinessLifeCycleManager().deleteOrganizations(Collections.singleton(org.getKey()));
+			org = findOrganization(service.getBusinessQueryManager(), name);
+			Assert.assertNull(org);
+			conn.close();
+			conn = null;
+		} finally {
+			if (conn != null) { try { conn.close(); } catch (Throwable t) { /* Ignore me */ } }
+		}
+	}
+}



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