You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2015/03/17 19:04:04 UTC

[2/3] isis git commit: ISIS-1096: extend facet factory for @PersistenceCapable to also capture schema, and notice this in DomainObjectFacetFactory and use for the objectType if not otherwise specified.

ISIS-1096: extend facet factory for @PersistenceCapable to also capture schema, and notice this in DomainObjectFacetFactory and use for the objectType if not otherwise specified.

In addition:
- extended ProgrammingModel / ProgrammingModelAbstract API so that "refinements" to the programming model (ie  additional facet factories such as the JdoPersistenceCapableAnnotationFacetFactory) can be added to the beginning rather than to the end, thus ensuring that the JdoPersistenceCapableFacet is present by the time that DomainObjectFacetFactory processes the type.


Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/930ccfe7
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/930ccfe7
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/930ccfe7

Branch: refs/heads/master
Commit: 930ccfe7d2f24c187bd65c6dd5db1dce11b51f2c
Parents: b3b89d1
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Tue Mar 17 13:14:26 2015 +0000
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Tue Mar 17 13:14:55 2015 +0000

----------------------------------------------------------------------
 .../DomainObjectAnnotationFacetFactory.java     |  8 ++++
 ...FacetForJdoPersistenceCapableAnnotation.java | 50 ++++++++++++++++++++
 .../metamodel/progmodel/ProgrammingModel.java   |  7 ++-
 .../progmodel/ProgrammingModelAbstract.java     | 40 ++++++++++++----
 ...ersistenceCapableAnnotationFacetFactory.java |  2 +
 .../JdoPersistenceCapableFacet.java             | 13 ++++-
 .../JdoPersistenceCapableFacetAbstract.java     | 15 ++++--
 .../JdoPersistenceCapableFacetAnnotation.java   |  8 +++-
 .../JdoPersistenceCapableFacetImpl.java         |  8 +++-
 ...ataNucleusPersistenceMechanismInstaller.java |  3 +-
 10 files changed, 133 insertions(+), 21 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/930ccfe7/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactory.java
index 21d3605..8bca451 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactory.java
@@ -52,6 +52,7 @@ import org.apache.isis.core.metamodel.facets.object.domainobject.choices.Choices
 import org.apache.isis.core.metamodel.facets.object.domainobject.choices.ChoicesFacetFromBoundedAnnotation;
 import org.apache.isis.core.metamodel.facets.object.domainobject.editing.ImmutableFacetForDomainObjectAnnotation;
 import org.apache.isis.core.metamodel.facets.object.domainobject.objectspecid.ObjectSpecIdFacetForDomainObjectAnnotation;
+import org.apache.isis.core.metamodel.facets.object.domainobject.objectspecid.ObjectSpecIdFacetForJdoPersistenceCapableAnnotation;
 import org.apache.isis.core.metamodel.facets.object.domainobject.objectspecid.ObjectSpecIdFacetFromObjectTypeAnnotation;
 import org.apache.isis.core.metamodel.facets.object.domainobject.publishing.PublishedObjectFacetForDomainObjectAnnotation;
 import org.apache.isis.core.metamodel.facets.object.domainobject.publishing.PublishedObjectFacetForPublishedObjectAnnotation;
@@ -69,6 +70,7 @@ import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorCom
 import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorForDeprecatedAnnotation;
 import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorVisiting;
 import org.apache.isis.core.metamodel.specloader.validator.ValidationFailures;
+import org.apache.isis.objectstore.jdo.metamodel.facets.object.persistencecapable.JdoPersistenceCapableFacet;
 
 
 public class DomainObjectAnnotationFacetFactory extends FacetFactoryAbstract implements IsisConfigurationAware, AdapterManagerAware, ServicesInjectorAware, SpecificationLoaderAware, QuerySubmitterAware, MetaModelValidatorRefiner {
@@ -239,6 +241,12 @@ public class DomainObjectAnnotationFacetFactory extends FacetFactoryAbstract imp
             facet = ObjectSpecIdFacetForDomainObjectAnnotation.create(domainObject, facetHolder);
         }
 
+        // else check for @PersistenceCapable(schema=...)
+        final JdoPersistenceCapableFacet jdoPersistenceCapableFacet = facetHolder.getFacet(JdoPersistenceCapableFacet.class);
+        if(jdoPersistenceCapableFacet != null) {
+            facet = ObjectSpecIdFacetForJdoPersistenceCapableAnnotation.create(jdoPersistenceCapableFacet, facetHolder);
+        }
+
         // then add
         FacetUtil.addFacet(facet);
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/930ccfe7/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/objectspecid/ObjectSpecIdFacetForJdoPersistenceCapableAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/objectspecid/ObjectSpecIdFacetForJdoPersistenceCapableAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/objectspecid/ObjectSpecIdFacetForJdoPersistenceCapableAnnotation.java
new file mode 100644
index 0000000..1789373
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/objectspecid/ObjectSpecIdFacetForJdoPersistenceCapableAnnotation.java
@@ -0,0 +1,50 @@
+/*
+ *  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.isis.core.metamodel.facets.object.domainobject.objectspecid;
+
+import java.util.Locale;
+import com.google.common.base.Strings;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.object.objectspecid.ObjectSpecIdFacet;
+import org.apache.isis.core.metamodel.facets.object.objectspecid.ObjectSpecIdFacetAbstract;
+import org.apache.isis.objectstore.jdo.metamodel.facets.object.persistencecapable.JdoPersistenceCapableFacet;
+
+public class ObjectSpecIdFacetForJdoPersistenceCapableAnnotation extends ObjectSpecIdFacetAbstract {
+
+    public static ObjectSpecIdFacet create(
+            final JdoPersistenceCapableFacet persistenceCapableFacet,
+            final FacetHolder holder) {
+
+        if(persistenceCapableFacet.isNoop()) {
+            return null;
+        }
+        final String schema = persistenceCapableFacet.getSchema();
+        if(schema == null) {
+            return null;
+        }
+        final String objectType = schema.toLowerCase(Locale.ROOT) + "." + persistenceCapableFacet.getTable();
+        return new ObjectSpecIdFacetForJdoPersistenceCapableAnnotation(objectType, holder);
+    }
+
+    private ObjectSpecIdFacetForJdoPersistenceCapableAnnotation(final String value,
+                                                                final FacetHolder holder) {
+        super(value, holder);
+    }
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/930ccfe7/core/metamodel/src/main/java/org/apache/isis/core/metamodel/progmodel/ProgrammingModel.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/progmodel/ProgrammingModel.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/progmodel/ProgrammingModel.java
index bd82a31..8566af3 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/progmodel/ProgrammingModel.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/progmodel/ProgrammingModel.java
@@ -30,9 +30,14 @@ public interface ProgrammingModel extends MetaModelValidatorRefiner {
 
     List<FacetFactory> getList();
 
+    enum Position {
+        BEGINNING,END
+    }
     void addFactory(Class<? extends FacetFactory> facetFactoryClass);
+    void addFactory(FacetFactory facetFactory);
+    void addFactory(Class<? extends FacetFactory> facetFactoryClass, Position position);
+    void addFactory(FacetFactory facetFactory, Position position);
 
     void removeFactory(Class<? extends FacetFactory> facetFactoryClass);
 
-    void addFactory(FacetFactory facetFactory);
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/930ccfe7/core/metamodel/src/main/java/org/apache/isis/core/metamodel/progmodel/ProgrammingModelAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/progmodel/ProgrammingModelAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/progmodel/ProgrammingModelAbstract.java
index b74daaa..2a90d47 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/progmodel/ProgrammingModelAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/progmodel/ProgrammingModelAbstract.java
@@ -58,7 +58,7 @@ public abstract class ProgrammingModelAbstract implements ProgrammingModel {
         if(factoryInstanceOrClass instanceof FacetFactory) {
             return (FacetFactory) factoryInstanceOrClass;
         } else {
-            @SuppressWarnings("unchecked")
+            @SuppressWarnings("unchecked") final
             Class<? extends FacetFactory> factoryClass = (Class<? extends FacetFactory>) factoryInstanceOrClass;
             return (FacetFactory) InstanceUtil.createInstance(factoryClass);
         }
@@ -79,27 +79,47 @@ public abstract class ProgrammingModelAbstract implements ProgrammingModel {
 
     @Override
     public final void addFactory(final Class<? extends FacetFactory> factoryClass) {
-        assertNotInitialized();
-        facetFactoryInstancesOrClasses.add(factoryClass);
+        addFactory(factoryClass, Position.END);
     }
 
     @Override
-    public final void removeFactory(final Class<? extends FacetFactory> factoryClass) {
+    public final void addFactory(final Class<? extends FacetFactory> factoryClass, final Position position) {
+        addFactory((Object)factoryClass, position);
+    }
+
+    @Override
+    public void addFactory(final FacetFactory facetFactory) {
+        addFactory(facetFactory, Position.END);
+    }
+
+    @Override
+    public void addFactory(final FacetFactory facetFactory, final Position position) {
+        addFactory((Object)facetFactory, position);
+    }
+
+    private void addFactory(final Object facetFactoryInstanceOrClass, final Position position) {
         assertNotInitialized();
-        facetFactoryInstancesOrClasses.remove(factoryClass);
+        switch (position){
+            case BEGINNING:
+                facetFactoryInstancesOrClasses.add(0, facetFactoryInstanceOrClass);
+                break;
+            case END:
+                facetFactoryInstancesOrClasses.add(facetFactoryInstanceOrClass);
+        }
     }
 
+
     @Override
-    public void addFactory(FacetFactory facetFactory) {
+    public final void removeFactory(final Class<? extends FacetFactory> factoryClass) {
         assertNotInitialized();
-        facetFactoryInstancesOrClasses.add(facetFactory);
+        facetFactoryInstancesOrClasses.remove(factoryClass);
     }
 
     @Override
-    public void refineMetaModelValidator(MetaModelValidatorComposite metaModelValidator, IsisConfiguration configuration) {
-        for (FacetFactory facetFactory : getList()) {
+    public void refineMetaModelValidator(final MetaModelValidatorComposite metaModelValidator, final IsisConfiguration configuration) {
+        for (final FacetFactory facetFactory : getList()) {
             if(facetFactory instanceof MetaModelValidatorRefiner) {
-                MetaModelValidatorRefiner metaModelValidatorRefiner = (MetaModelValidatorRefiner) facetFactory;
+                final MetaModelValidatorRefiner metaModelValidatorRefiner = (MetaModelValidatorRefiner) facetFactory;
                 metaModelValidatorRefiner.refineMetaModelValidator(metaModelValidator, configuration);
             }
         }

http://git-wip-us.apache.org/repos/asf/isis/blob/930ccfe7/core/metamodel/src/main/java/org/apache/isis/objectstore/jdo/metamodel/facets/object/persistencecapable/JdoPersistenceCapableAnnotationFacetFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/objectstore/jdo/metamodel/facets/object/persistencecapable/JdoPersistenceCapableAnnotationFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/objectstore/jdo/metamodel/facets/object/persistencecapable/JdoPersistenceCapableAnnotationFacetFactory.java
index 1bb3b10..86aab2e 100644
--- a/core/metamodel/src/main/java/org/apache/isis/objectstore/jdo/metamodel/facets/object/persistencecapable/JdoPersistenceCapableAnnotationFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/objectstore/jdo/metamodel/facets/object/persistencecapable/JdoPersistenceCapableAnnotationFacetFactory.java
@@ -43,6 +43,7 @@ public class JdoPersistenceCapableAnnotationFacetFactory extends FacetFactoryAbs
         if (annotation == null) {
             return;
         }
+        final String annotationSchemaAttribute = annotation.schema();
         String annotationTableAttribute = annotation.table();
         if (Strings.isNullOrEmpty(annotationTableAttribute)) {
             annotationTableAttribute = cls.getSimpleName();
@@ -51,6 +52,7 @@ public class JdoPersistenceCapableAnnotationFacetFactory extends FacetFactoryAbs
         final IdentityType annotationIdentityType = annotation.identityType();
         
         FacetUtil.addFacet(new JdoPersistenceCapableFacetAnnotation(
+                annotationSchemaAttribute,
                 annotationTableAttribute, annotationIdentityType, processClassContext.getFacetHolder()));
         return;
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/930ccfe7/core/metamodel/src/main/java/org/apache/isis/objectstore/jdo/metamodel/facets/object/persistencecapable/JdoPersistenceCapableFacet.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/objectstore/jdo/metamodel/facets/object/persistencecapable/JdoPersistenceCapableFacet.java b/core/metamodel/src/main/java/org/apache/isis/objectstore/jdo/metamodel/facets/object/persistencecapable/JdoPersistenceCapableFacet.java
index 2ed6d3f..048ab78 100644
--- a/core/metamodel/src/main/java/org/apache/isis/objectstore/jdo/metamodel/facets/object/persistencecapable/JdoPersistenceCapableFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/objectstore/jdo/metamodel/facets/object/persistencecapable/JdoPersistenceCapableFacet.java
@@ -25,12 +25,21 @@ import org.apache.isis.core.metamodel.facetapi.Facet;
 
 
 /**
- * Corresponds to annotating the class with the {@link PersistenceCapable} annotation.
+ * Corresponds to annotating the class with the {@link javax.jdo.annotations.PersistenceCapable} annotation.
  */
 public interface JdoPersistenceCapableFacet extends Facet {
 
     IdentityType getIdentityType();
-    
+
+    /**
+     * Corresponds to {@link javax.jdo.annotations.PersistenceCapable#schema()}, or null if not specified.
+     */
+    String getSchema();
+
+    /**
+     * Corresponds to {@link javax.jdo.annotations.PersistenceCapable#table()}, or to the
+     * class' {@link Class#getSimpleName() simple name} if no table specified.
+     */
     String getTable();
 
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/930ccfe7/core/metamodel/src/main/java/org/apache/isis/objectstore/jdo/metamodel/facets/object/persistencecapable/JdoPersistenceCapableFacetAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/objectstore/jdo/metamodel/facets/object/persistencecapable/JdoPersistenceCapableFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/objectstore/jdo/metamodel/facets/object/persistencecapable/JdoPersistenceCapableFacetAbstract.java
index 305d864..7439905 100644
--- a/core/metamodel/src/main/java/org/apache/isis/objectstore/jdo/metamodel/facets/object/persistencecapable/JdoPersistenceCapableFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/objectstore/jdo/metamodel/facets/object/persistencecapable/JdoPersistenceCapableFacetAbstract.java
@@ -32,19 +32,28 @@ public abstract class JdoPersistenceCapableFacetAbstract extends FacetAbstract i
         return JdoPersistenceCapableFacet.class;
     }
 
+    private final String schema;
     private final String table;
     private final IdentityType identityType;
 
-    public JdoPersistenceCapableFacetAbstract(final String table, IdentityType identityType, final FacetHolder holder) {
+    public JdoPersistenceCapableFacetAbstract(
+            final String schemaName,
+            final String tableOrTypeName,
+            final IdentityType identityType,
+            final FacetHolder holder) {
         super(JdoPersistenceCapableFacetAbstract.type(), holder, Derivation.NOT_DERIVED);
-        this.table = table;
+        this.schema = schemaName;
+        this.table = tableOrTypeName;
         this.identityType = identityType;
     }
 
     public IdentityType getIdentityType() {
         return identityType;
     }
-    
+
+    public String getSchema() {
+        return schema;
+    }
     public String getTable() {
         return table;
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/930ccfe7/core/metamodel/src/main/java/org/apache/isis/objectstore/jdo/metamodel/facets/object/persistencecapable/JdoPersistenceCapableFacetAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/objectstore/jdo/metamodel/facets/object/persistencecapable/JdoPersistenceCapableFacetAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/objectstore/jdo/metamodel/facets/object/persistencecapable/JdoPersistenceCapableFacetAnnotation.java
index 900b1ac..c7e6a9a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/objectstore/jdo/metamodel/facets/object/persistencecapable/JdoPersistenceCapableFacetAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/objectstore/jdo/metamodel/facets/object/persistencecapable/JdoPersistenceCapableFacetAnnotation.java
@@ -25,8 +25,12 @@ import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 
 public class JdoPersistenceCapableFacetAnnotation extends JdoPersistenceCapableFacetImpl {
 
-    public JdoPersistenceCapableFacetAnnotation(final String name, IdentityType identityType, final FacetHolder holder) {
-        super(name, identityType, holder);
+    public JdoPersistenceCapableFacetAnnotation(
+            final String schemaName,
+            final String tableOrTypeName,
+            final IdentityType identityType,
+            final FacetHolder holder) {
+        super(schemaName, tableOrTypeName, identityType, holder);
     }
 
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/930ccfe7/core/metamodel/src/main/java/org/apache/isis/objectstore/jdo/metamodel/facets/object/persistencecapable/JdoPersistenceCapableFacetImpl.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/objectstore/jdo/metamodel/facets/object/persistencecapable/JdoPersistenceCapableFacetImpl.java b/core/metamodel/src/main/java/org/apache/isis/objectstore/jdo/metamodel/facets/object/persistencecapable/JdoPersistenceCapableFacetImpl.java
index a3fedec..8caca75 100644
--- a/core/metamodel/src/main/java/org/apache/isis/objectstore/jdo/metamodel/facets/object/persistencecapable/JdoPersistenceCapableFacetImpl.java
+++ b/core/metamodel/src/main/java/org/apache/isis/objectstore/jdo/metamodel/facets/object/persistencecapable/JdoPersistenceCapableFacetImpl.java
@@ -25,8 +25,12 @@ import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 
 public class JdoPersistenceCapableFacetImpl extends JdoPersistenceCapableFacetAbstract {
 
-    public JdoPersistenceCapableFacetImpl(final String table, IdentityType identityType, final FacetHolder holder) {
-        super(table, identityType, holder);
+    public JdoPersistenceCapableFacetImpl(
+            final String schemaName,
+            final String tableOrTypeName,
+            final IdentityType identityType,
+            final FacetHolder holder) {
+        super(schemaName, tableOrTypeName, identityType, holder);
     }
 
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/930ccfe7/core/runtime/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/DataNucleusPersistenceMechanismInstaller.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/DataNucleusPersistenceMechanismInstaller.java b/core/runtime/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/DataNucleusPersistenceMechanismInstaller.java
index cf18228..d5e07c4 100644
--- a/core/runtime/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/DataNucleusPersistenceMechanismInstaller.java
+++ b/core/runtime/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/DataNucleusPersistenceMechanismInstaller.java
@@ -191,7 +191,8 @@ public class DataNucleusPersistenceMechanismInstaller extends PersistenceMechani
 
     @Override
     public void refineProgrammingModel(ProgrammingModel programmingModel, IsisConfiguration configuration) {
-        programmingModel.addFactory(JdoPersistenceCapableAnnotationFacetFactory.class);
+        programmingModel.addFactory(
+                JdoPersistenceCapableAnnotationFacetFactory.class, ProgrammingModel.Position.BEGINNING);
         programmingModel.addFactory(JdoDatastoreIdentityAnnotationFacetFactory.class);
         programmingModel.addFactory(JdoEmbeddedOnlyAnnotationFacetFactory.class);