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: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to