You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@deltaspike.apache.org by gp...@apache.org on 2015/09/17 00:12:46 UTC

deltaspike git commit: DELTASPIKE-987 support for @Version

Repository: deltaspike
Updated Branches:
  refs/heads/master 08dd95a31 -> 67d5ef8bb


DELTASPIKE-987 support for @Version


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

Branch: refs/heads/master
Commit: 67d5ef8bbf68c29e1c9dd3e99f15b89e458ed59d
Parents: 08dd95a
Author: gpetracek <gp...@apache.org>
Authored: Thu Sep 17 00:06:04 2015 +0200
Committer: gpetracek <gp...@apache.org>
Committed: Thu Sep 17 00:06:04 2015 +0200

----------------------------------------------------------------------
 .../impl/handler/CdiQueryInvocationContext.java |  8 ++++++
 .../data/impl/meta/unit/EntityDescriptor.java   |  5 ++--
 .../impl/meta/unit/EntityDescriptorReader.java  | 20 +++++++++------
 .../meta/unit/MappedSuperclassDescriptor.java   |  5 ++--
 .../data/impl/meta/unit/PersistenceUnits.java   | 10 ++++++++
 .../meta/unit/PersistentClassDescriptor.java    | 10 +++++++-
 .../deltaspike/data/impl/util/EntityUtils.java  | 27 ++++++++++++++++++++
 .../unit/DescriptorHierarchyBuilderTest.java    | 12 ++++-----
 8 files changed, 78 insertions(+), 19 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/deltaspike/blob/67d5ef8b/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/handler/CdiQueryInvocationContext.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/handler/CdiQueryInvocationContext.java b/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/handler/CdiQueryInvocationContext.java
index 0ca1cf2..2a19a40 100644
--- a/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/handler/CdiQueryInvocationContext.java
+++ b/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/handler/CdiQueryInvocationContext.java
@@ -22,6 +22,7 @@ import org.apache.deltaspike.data.api.SingleResultType;
 import org.apache.deltaspike.data.api.mapping.QueryInOutMapper;
 import org.apache.deltaspike.data.impl.meta.RepositoryMethod;
 import org.apache.deltaspike.data.impl.param.Parameters;
+import org.apache.deltaspike.data.impl.property.Property;
 import org.apache.deltaspike.data.impl.util.EntityUtils;
 import org.apache.deltaspike.data.impl.util.bean.Destroyable;
 import org.apache.deltaspike.data.spi.QueryInvocationContext;
@@ -30,6 +31,7 @@ import javax.persistence.EntityManager;
 import javax.persistence.LockModeType;
 import javax.persistence.Query;
 import javax.persistence.QueryHint;
+import java.io.Serializable;
 import java.lang.reflect.Method;
 import java.util.LinkedList;
 import java.util.List;
@@ -92,6 +94,12 @@ public class CdiQueryInvocationContext implements QueryInvocationContext
     {
         try
         {
+            Property<Serializable> versionProperty = EntityUtils.getVersionProperty(entity);
+            if (versionProperty != null)
+            {
+                return versionProperty.getValue(entity) == null;
+            }
+
             if (EntityUtils.primaryKeyValue(entity) == null)
             {
                 return true;

http://git-wip-us.apache.org/repos/asf/deltaspike/blob/67d5ef8b/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/meta/unit/EntityDescriptor.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/meta/unit/EntityDescriptor.java b/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/meta/unit/EntityDescriptor.java
index 662e687..9d8a78c 100644
--- a/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/meta/unit/EntityDescriptor.java
+++ b/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/meta/unit/EntityDescriptor.java
@@ -27,9 +27,10 @@ class EntityDescriptor extends PersistentClassDescriptor
 
     protected final String tableName;
 
-    EntityDescriptor(String name, String packageName, String className, String idClass, String id, String tableName)
+    EntityDescriptor(String name, String packageName, String className, String idClass, String id,
+                     String version, String tableName)
     {
-        super(name, packageName, className, idClass, id);
+        super(name, packageName, className, idClass, id, version);
         this.tableName = tableName;
     }
 

http://git-wip-us.apache.org/repos/asf/deltaspike/blob/67d5ef8b/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/meta/unit/EntityDescriptorReader.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/meta/unit/EntityDescriptorReader.java b/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/meta/unit/EntityDescriptorReader.java
index 170f7ea..6b60a20 100644
--- a/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/meta/unit/EntityDescriptorReader.java
+++ b/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/meta/unit/EntityDescriptorReader.java
@@ -56,9 +56,9 @@ public class EntityDescriptorReader extends DescriptorReader
         {
             @Override
             protected EntityDescriptor instance(String name, String packageName, String className,
-                                      String idClass, String id, String tableName)
+                                      String idClass, String id, String version, String tableName)
             {
-                return new EntityDescriptor(name, packageName, className, idClass, id, tableName);
+                return new EntityDescriptor(name, packageName, className, idClass, id, version, tableName);
             }
 
             @Override
@@ -72,9 +72,9 @@ public class EntityDescriptorReader extends DescriptorReader
         {
             @Override
             protected MappedSuperclassDescriptor instance(String name, String packageName, String className,
-                                                String idClass, String id)
+                                                String idClass, String id, String version)
             {
-                return new MappedSuperclassDescriptor(name, packageName, className, idClass, id);
+                return new MappedSuperclassDescriptor(name, packageName, className, idClass, id, version);
             }
 
             @Override
@@ -148,6 +148,7 @@ public class EntityDescriptorReader extends DescriptorReader
         protected String className;
         protected String idClass;
         protected String id;
+        protected String version;
         protected String embeddedId;
 
         public List<T> build(Document doc)
@@ -161,6 +162,7 @@ public class EntityDescriptorReader extends DescriptorReader
                 this.className = extractAttribute(mappings.item(i), "class");
                 this.idClass = extractNodeAttribute((Element) mappings.item(i), "id-class", "class");
                 this.id = extractNodeAttribute((Element) mappings.item(i), "id", "name");
+                this.version = extractNodeAttribute((Element) mappings.item(i), "version", "name");
                 this.embeddedId = extractNodeAttribute((Element) mappings.item(i), "embedded-id", "name");
                 addFields((Element) mappings.item(i));
                 addInResult();
@@ -177,14 +179,15 @@ public class EntityDescriptorReader extends DescriptorReader
 
     private abstract class MappedSuperClassBuilder<T extends PersistentClassDescriptor> extends PersistenceBuilder
     {
-        protected abstract T instance(String name, String packageName, String className, String idClass, String id);
+        protected abstract T instance(String name, String packageName, String className, String idClass, String id,
+                                      String version);
 
         protected abstract String tagName();
 
         @Override
         protected void addInResult()
         {
-            result.add(instance(name, packageName, className, idClass, id != null ? id : embeddedId));
+            result.add(instance(name, packageName, className, idClass, id != null ? id : embeddedId, version));
         }
 
         @Override
@@ -200,14 +203,15 @@ public class EntityDescriptorReader extends DescriptorReader
         protected String tableName;
 
         protected abstract T instance(String name, String packageName, String className, String idClass, String id,
-                            String tableName);
+                                      String version, String tableName);
 
         protected abstract String tagName();
 
         @Override
         protected void addInResult()
         {
-            result.add(instance(name, packageName, className, idClass, id != null ? id : embeddedId, tableName));
+            result.add(instance(name, packageName, className, idClass, id != null ? id : embeddedId,
+                version, tableName));
         }
 
         @Override

http://git-wip-us.apache.org/repos/asf/deltaspike/blob/67d5ef8b/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/meta/unit/MappedSuperclassDescriptor.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/meta/unit/MappedSuperclassDescriptor.java b/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/meta/unit/MappedSuperclassDescriptor.java
index 6a6fcfa..6c5ffe9 100644
--- a/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/meta/unit/MappedSuperclassDescriptor.java
+++ b/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/meta/unit/MappedSuperclassDescriptor.java
@@ -25,9 +25,10 @@ import java.io.Serializable;
 class MappedSuperclassDescriptor extends PersistentClassDescriptor
 {
 
-    MappedSuperclassDescriptor(String name, String packageName, String className, String idClass, String id)
+    MappedSuperclassDescriptor(String name, String packageName, String className, String idClass, String id,
+                               String version)
     {
-        super(name, packageName, className, idClass, id);
+        super(name, packageName, className, idClass, id, version);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/deltaspike/blob/67d5ef8b/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/meta/unit/PersistenceUnits.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/meta/unit/PersistenceUnits.java b/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/meta/unit/PersistenceUnits.java
index 384dfb3..a3a2d75 100644
--- a/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/meta/unit/PersistenceUnits.java
+++ b/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/meta/unit/PersistenceUnits.java
@@ -60,6 +60,16 @@ public final class PersistenceUnits
         return null;
     }
 
+    public String versionField(Class<?> entityClass)
+    {
+        EntityDescriptor entity = find(entityClass);
+        if (entity != null)
+        {
+            return entity.getVersion();
+        }
+        return null;
+    }
+
     public Class<?> primaryKeyIdClass(Class<?> entityClass)
     {
         EntityDescriptor entity = find(entityClass);

http://git-wip-us.apache.org/repos/asf/deltaspike/blob/67d5ef8b/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/meta/unit/PersistentClassDescriptor.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/meta/unit/PersistentClassDescriptor.java b/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/meta/unit/PersistentClassDescriptor.java
index a0ba3fa..6c45b4f 100644
--- a/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/meta/unit/PersistentClassDescriptor.java
+++ b/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/meta/unit/PersistentClassDescriptor.java
@@ -31,15 +31,18 @@ abstract class PersistentClassDescriptor
     protected final Class<?> entityClass;
     protected final Class<? extends Serializable> idClass;
     protected final String id;
+    protected final String version;
     private PersistentClassDescriptor parent;
 
-    PersistentClassDescriptor(String name, String packageName, String className, String idClass, String id)
+    PersistentClassDescriptor(String name, String packageName, String className, String idClass, String id,
+                              String version)
     {
         Class<?> clazz = entityClass(className, packageName);
         this.name = name;
         this.entityClass = clazz;
         this.idClass = idClass(clazz, idClass, packageName, id);
         this.id = id;
+        this.version = version;
     }
 
     public Class<? extends Serializable> getIdClass()
@@ -52,6 +55,11 @@ abstract class PersistentClassDescriptor
         return id;
     }
 
+    public String getVersion()
+    {
+        return version;
+    }
+
     public String getName()
     {
         return name;

http://git-wip-us.apache.org/repos/asf/deltaspike/blob/67d5ef8b/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/util/EntityUtils.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/util/EntityUtils.java b/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/util/EntityUtils.java
index 0075ea5..b3e1ac5 100755
--- a/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/util/EntityUtils.java
+++ b/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/util/EntityUtils.java
@@ -26,6 +26,7 @@ import javax.persistence.EmbeddedId;
 import javax.persistence.Entity;
 import javax.persistence.Id;
 import javax.persistence.IdClass;
+import javax.persistence.Version;
 
 import org.apache.deltaspike.data.impl.meta.unit.PersistenceUnits;
 import org.apache.deltaspike.data.impl.meta.verifier.EntityVerifier;
@@ -111,4 +112,30 @@ public final class EntityUtils
         }
         return criteria;
     }
+
+    public static Property<Serializable> getVersionProperty(Object entity)
+    {
+        Class<?> entityClass = entity.getClass();
+        List<PropertyCriteria> criteriaList = new LinkedList<PropertyCriteria>();
+        criteriaList.add(new AnnotatedPropertyCriteria(Version.class));
+
+        String fromMappingFiles = PersistenceUnits.instance().versionField(entityClass);
+        if (fromMappingFiles != null)
+        {
+            criteriaList.add(new NamedPropertyCriteria(fromMappingFiles));
+        }
+
+        for (PropertyCriteria criteria : criteriaList)
+        {
+            PropertyQuery<Serializable> query =
+                PropertyQueries.<Serializable> createQuery(entityClass).addCriteria(criteria);
+            Property<Serializable> result = query.getFirstResult();
+            if (result != null)
+            {
+                return result;
+            }
+        }
+
+        return null;
+    }
 }

http://git-wip-us.apache.org/repos/asf/deltaspike/blob/67d5ef8b/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/impl/meta/unit/DescriptorHierarchyBuilderTest.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/impl/meta/unit/DescriptorHierarchyBuilderTest.java b/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/impl/meta/unit/DescriptorHierarchyBuilderTest.java
index df0ed15..4cf9a43 100644
--- a/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/impl/meta/unit/DescriptorHierarchyBuilderTest.java
+++ b/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/impl/meta/unit/DescriptorHierarchyBuilderTest.java
@@ -39,13 +39,13 @@ public class DescriptorHierarchyBuilderTest
     @Before
     public void before()
     {
-        entities.add(new EntityDescriptor("test", null, EntityLevel3.class.getName(), null, null, null));
-        entities.add(new EntityDescriptor("test", null, EntityLevel5.class.getName(), null, null, null));
+        entities.add(new EntityDescriptor("test", null, EntityLevel3.class.getName(), null, null, null, null));
+        entities.add(new EntityDescriptor("test", null, EntityLevel5.class.getName(), null, null, null, null));
 
-        superClasses.add(new MappedSuperclassDescriptor("test", null, MappedLevel1.class.getName(), null, "id"));
-        superClasses.add(new MappedSuperclassDescriptor("test", null, MappedLevel4.class.getName(), null, null));
-        superClasses.add(new MappedSuperclassDescriptor("test", null, MappedUnrelated.class.getName(), null, null));
-        superClasses.add(new MappedSuperclassDescriptor("test", null, MappedLevel2.class.getName(), null, null));
+        superClasses.add(new MappedSuperclassDescriptor("test", null, MappedLevel1.class.getName(), null, "id", null));
+        superClasses.add(new MappedSuperclassDescriptor("test", null, MappedLevel4.class.getName(), null, null, null));
+        superClasses.add(new MappedSuperclassDescriptor("test", null, MappedUnrelated.class.getName(), null, null, null));
+        superClasses.add(new MappedSuperclassDescriptor("test", null, MappedLevel2.class.getName(), null, null, null));
     }
 
     @Test