You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by jc...@apache.org on 2013/01/14 15:02:15 UTC

[2/3] git commit: ISIS-301: Error when using class name as discriminator strategy

ISIS-301: Error when using class name as discriminator strategy


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

Branch: refs/heads/master
Commit: b75cc3e80607d219587555fe476d004f7eaf1f88
Parents: eebe9f8
Author: Jeroen van der Wal <je...@stromboli.it>
Authored: Mon Jan 14 13:39:11 2013 +0100
Committer: Jeroen van der Wal <je...@stromboli.it>
Committed: Mon Jan 14 13:39:11 2013 +0100

----------------------------------------------------------------------
 .../JdoDiscriminatorAnnotationFacetFactory.java    |   27 +++++++++++++--
 1 files changed, 24 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/b75cc3e8/component/objectstore/jdo/jdo-metamodel/src/main/java/org/apache/isis/objectstore/jdo/metamodel/facets/object/discriminator/JdoDiscriminatorAnnotationFacetFactory.java
----------------------------------------------------------------------
diff --git a/component/objectstore/jdo/jdo-metamodel/src/main/java/org/apache/isis/objectstore/jdo/metamodel/facets/object/discriminator/JdoDiscriminatorAnnotationFacetFactory.java b/component/objectstore/jdo/jdo-metamodel/src/main/java/org/apache/isis/objectstore/jdo/metamodel/facets/object/discriminator/JdoDiscriminatorAnnotationFacetFactory.java
index 8976bd4..1ffb553 100644
--- a/component/objectstore/jdo/jdo-metamodel/src/main/java/org/apache/isis/objectstore/jdo/metamodel/facets/object/discriminator/JdoDiscriminatorAnnotationFacetFactory.java
+++ b/component/objectstore/jdo/jdo-metamodel/src/main/java/org/apache/isis/objectstore/jdo/metamodel/facets/object/discriminator/JdoDiscriminatorAnnotationFacetFactory.java
@@ -21,12 +21,21 @@ package org.apache.isis.objectstore.jdo.metamodel.facets.object.discriminator;
 
 import javax.jdo.annotations.Discriminator;
 
+import com.google.common.base.Strings;
+
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facetapi.FacetUtil;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
 import org.apache.isis.core.metamodel.facets.Annotations;
 import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
+import org.apache.isis.core.metamodel.facets.object.objecttype.ObjectSpecIdFacet;
+import org.apache.isis.core.metamodel.specloader.classsubstitutor.ClassSubstitutor;
+import org.apache.isis.core.metamodel.specloader.classsubstitutor.ClassSubstitutorAware;
+import org.apache.isis.core.progmodel.facets.object.objecttype.ObjectSpecIdFacetDerivedFromClassName;
+
+public class JdoDiscriminatorAnnotationFacetFactory extends FacetFactoryAbstract implements ClassSubstitutorAware  {
 
-public class JdoDiscriminatorAnnotationFacetFactory extends FacetFactoryAbstract {
+    private ClassSubstitutor classSubstitutor;
 
     public JdoDiscriminatorAnnotationFacetFactory() {
         super(FeatureType.OBJECTS_ONLY);
@@ -39,10 +48,22 @@ public class JdoDiscriminatorAnnotationFacetFactory extends FacetFactoryAbstract
         if (annotation == null) {
             return;
         }
-        final String annotationValueAttribute = annotation.value();
+        String annotationValueAttribute = annotation.value();
+        if(!Strings.isNullOrEmpty(annotationValueAttribute)) {
+            FacetUtil.addFacet(new ObjectSpecIdFacetInferredFromJdoDiscriminatorValueAnnotation(annotationValueAttribute, processClassContext.getFacetHolder()));
+        } else {
+            final FacetHolder facetHolder = processClassContext.getFacetHolder();
+            final Class<?> originalClass = processClassContext.getCls();
+            final Class<?> substitutedClass = classSubstitutor.getClass(originalClass);
+            FacetUtil.addFacet(new ObjectSpecIdFacetDerivedFromClassName(substitutedClass.getCanonicalName(), facetHolder));
+        }
 
-        FacetUtil.addFacet(new ObjectSpecIdFacetInferredFromJdoDiscriminatorValueAnnotation(annotationValueAttribute, processClassContext.getFacetHolder()));
         FacetUtil.addFacet(new JdoDiscriminatorFacetDefault(annotationValueAttribute, processClassContext.getFacetHolder()));
     }
 
+    @Override
+    public void setClassSubstitutor(ClassSubstitutor classSubstitutor) {
+        this.classSubstitutor = classSubstitutor;
+    }
+
 }