You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by mi...@apache.org on 2014/09/02 13:49:31 UTC

[11/50] [abbrv] git commit: [OLINGO-306] Replace Static fields with Instance fields to prevent concurrent modifications to the ArrayList.

[OLINGO-306] Replace Static fields with Instance fields to prevent
concurrent modifications to the ArrayList.

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

Branch: refs/heads/Olingo-129_PocJpaDataStore
Commit: db50903b1856ef3cb079d6e0e9e21b5a376b67c2
Parents: 0e99c01
Author: Chandan V A <ch...@sap.com>
Authored: Sun Jun 15 16:02:33 2014 +0530
Committer: Chandan V A <ch...@sap.com>
Committed: Sun Jun 15 16:02:33 2014 +0530

----------------------------------------------------------------------
 .../processor/api/model/JPAEdmPropertyView.java |  8 +++
 .../processor/core/model/JPAEdmProperty.java    |  9 ++-
 .../model/JPAEdmReferentialConstraintRole.java  | 62 ++------------------
 .../JPAEdmReferentialConstraintRoleTest.java    | 19 ++++++
 .../model/JPAEdmReferentialConstraintTest.java  | 18 ++++++
 .../core/model/JPAEdmTestModelView.java         |  7 +++
 6 files changed, 66 insertions(+), 57 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/db50903b/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/model/JPAEdmPropertyView.java
----------------------------------------------------------------------
diff --git a/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/model/JPAEdmPropertyView.java b/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/model/JPAEdmPropertyView.java
index ce06f68..419d622 100644
--- a/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/model/JPAEdmPropertyView.java
+++ b/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/model/JPAEdmPropertyView.java
@@ -20,6 +20,7 @@ package org.apache.olingo.odata2.jpa.processor.api.model;
 
 import java.util.List;
 
+import javax.persistence.JoinColumn;
 import javax.persistence.metamodel.Attribute;
 
 import org.apache.olingo.odata2.api.edm.provider.Property;
@@ -110,4 +111,11 @@ public interface JPAEdmPropertyView extends JPAEdmBaseView {
    * @return an instance of type {@link org.apache.olingo.odata2.jpa.processor.api.model.JPAEdmComplexTypeView}
    */
   JPAEdmComplexTypeView getJPAEdmComplexTypeView();
+
+  /**
+   * The method returns a list of JPA Join Column Annotations for the given JPA Attribute
+   * @return
+   * an instance of type {@link javax.persistence.JoinColumn}
+   */
+  List<JoinColumn> getJPAJoinColumns();
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/db50903b/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmProperty.java
----------------------------------------------------------------------
diff --git a/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmProperty.java b/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmProperty.java
index 8ea02f7..7298a58 100644
--- a/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmProperty.java
+++ b/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmProperty.java
@@ -74,6 +74,7 @@ public class JPAEdmProperty extends JPAEdmBaseViewImpl implements
   private Attribute<?, ?> currentRefAttribute;
   private boolean isBuildModeComplexType;
   private Map<String, Integer> associationCount;
+  private ArrayList<JoinColumn> bJoinColumns = null;
 
   public JPAEdmProperty(final JPAEdmSchemaView view) {
     super(view);
@@ -138,6 +139,11 @@ public class JPAEdmProperty extends JPAEdmBaseViewImpl implements
     return navigationPropertyView;
   }
 
+  @Override
+  public List<JoinColumn> getJPAJoinColumns() {
+    return bJoinColumns;
+  }
+
   private class JPAEdmPropertyBuilder implements JPAEdmBuilder {
     /*
      * 
@@ -352,6 +358,8 @@ public class JPAEdmProperty extends JPAEdmBaseViewImpl implements
           return;
         }
       } else {
+        bJoinColumns = bJoinColumns == null ? new ArrayList<JoinColumn>() : bJoinColumns;
+        bJoinColumns.add(joinColumn);
         if (joinColumn.insertable() && joinColumn.updatable()) {
           EntityType<?> referencedEntityType = metaModel.entity(jpaAttribute.getJavaType());
           for (Attribute<?, ?> referencedAttribute : referencedEntityType.getAttributes()) {
@@ -419,5 +427,4 @@ public class JPAEdmProperty extends JPAEdmBaseViewImpl implements
     }
     return isExcluded;
   }
-
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/db50903b/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmReferentialConstraintRole.java
----------------------------------------------------------------------
diff --git a/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmReferentialConstraintRole.java b/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmReferentialConstraintRole.java
index 2a2426b..b36398a 100644
--- a/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmReferentialConstraintRole.java
+++ b/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmReferentialConstraintRole.java
@@ -18,14 +18,12 @@
  ******************************************************************************/
 package org.apache.olingo.odata2.jpa.processor.core.model;
 
-import java.lang.reflect.AnnotatedElement;
 import java.lang.reflect.ParameterizedType;
 import java.lang.reflect.Type;
 import java.util.ArrayList;
 import java.util.List;
 
 import javax.persistence.JoinColumn;
-import javax.persistence.JoinColumns;
 import javax.persistence.metamodel.Attribute;
 
 import org.apache.olingo.odata2.api.edm.provider.Association;
@@ -43,14 +41,6 @@ import org.apache.olingo.odata2.jpa.processor.api.model.JPAEdmPropertyView;
 import org.apache.olingo.odata2.jpa.processor.api.model.JPAEdmReferentialConstraintRoleView;
 
 public class JPAEdmReferentialConstraintRole extends JPAEdmBaseViewImpl implements JPAEdmReferentialConstraintRoleView {
-  /*
-   * Static Buffer
-   */
-  private static Attribute<?, ?> bufferedJPAAttribute = null;
-  private static ArrayList<JoinColumn> bufferedJoinColumns = new ArrayList<JoinColumn>();
-  /*
-   * Static Buffer
-   */
 
   private boolean firstBuild = true;
 
@@ -60,6 +50,7 @@ public class JPAEdmReferentialConstraintRole extends JPAEdmBaseViewImpl implemen
   private Attribute<?, ?> jpaAttribute;
   private ArrayList<String> jpaColumnNames;
   private Association association;
+  private List<JoinColumn> bufferedJoinColumns = null;
 
   private boolean roleExists = false;
 
@@ -75,6 +66,7 @@ public class JPAEdmReferentialConstraintRole extends JPAEdmBaseViewImpl implemen
     this.roleType = roleType;
 
     jpaAttribute = propertyView.getJPAAttribute();
+    bufferedJoinColumns = propertyView.getJPAJoinColumns();
     association = associationView.getEdmAssociation();
 
   }
@@ -141,12 +133,12 @@ public class JPAEdmReferentialConstraintRole extends JPAEdmBaseViewImpl implemen
       firstBuild = false;
       isConsistent = false;
 
-      extractJoinColumns();
-
-      if (!roleExists) {
+      if (bufferedJoinColumns == null || bufferedJoinColumns.isEmpty()) {
+        roleExists = false;
         return;
+      } else {
+        roleExists = true;
       }
-
       jpaColumnNames = new ArrayList<String>();
 
       for (JoinColumn joinColumn : bufferedJoinColumns) {
@@ -156,7 +148,6 @@ public class JPAEdmReferentialConstraintRole extends JPAEdmBaseViewImpl implemen
           jpaColumnNames.add(joinColumn.name());
         }
       }
-
     }
 
     private void buildRole() throws SecurityException, NoSuchFieldException {
@@ -213,46 +204,5 @@ public class JPAEdmReferentialConstraintRole extends JPAEdmBaseViewImpl implemen
 
       }
     }
-
-    private void extractJoinColumns() {
-      /*
-       * Check against Static Buffer whether the join column was already
-       * extracted.
-       */
-      if (!jpaAttribute.equals(bufferedJPAAttribute)) {
-        bufferedJPAAttribute = jpaAttribute;
-        bufferedJoinColumns.clear();
-      } else if (bufferedJoinColumns.isEmpty()) {
-        roleExists = false;
-        return;
-      } else {
-        roleExists = true;
-        return;
-      }
-
-      AnnotatedElement annotatedElement = (AnnotatedElement) jpaAttribute.getJavaMember();
-
-      if (annotatedElement == null) {
-        return;
-      }
-
-      JoinColumn joinColumn = annotatedElement.getAnnotation(JoinColumn.class);
-      if (joinColumn == null) {
-        JoinColumns joinColumns = annotatedElement.getAnnotation(JoinColumns.class);
-
-        if (joinColumns != null) {
-          JoinColumn[] joinColumnArray = joinColumns.value();
-
-          for (JoinColumn element : joinColumnArray) {
-            bufferedJoinColumns.add(element);
-          }
-        } else {
-          return;
-        }
-      } else {
-        bufferedJoinColumns.add(joinColumn);
-      }
-      roleExists = true;
-    }
   }
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/db50903b/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmReferentialConstraintRoleTest.java
----------------------------------------------------------------------
diff --git a/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmReferentialConstraintRoleTest.java b/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmReferentialConstraintRoleTest.java
index 5737c41..cee6ead 100644
--- a/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmReferentialConstraintRoleTest.java
+++ b/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmReferentialConstraintRoleTest.java
@@ -55,6 +55,7 @@ public class JPAEdmReferentialConstraintRoleTest extends JPAEdmTestModelView {
 
   private static JPAEdmReferentialConstraintRole objJPAEdmReferentialConstraintRole = null;
   private static JPAEdmReferentialConstraintRoleTest objJPAEdmReferentialConstraintRoleTest = null;
+  private List<JoinColumn> bufferedJoinColumns = null;
 
   @Before
   public void setUp() {
@@ -147,6 +148,21 @@ public class JPAEdmReferentialConstraintRoleTest extends JPAEdmTestModelView {
   }
 
   @Override
+  public List<JoinColumn> getJPAJoinColumns() {
+    if (bufferedJoinColumns == null) {
+      JoinColumn joinColumn = EasyMock.createMock(JoinColumn.class);
+      EasyMock.expect(joinColumn.referencedColumnName()).andReturn("SOID");
+      EasyMock.expect(joinColumn.name()).andReturn("SOID");
+
+      EasyMock.replay(joinColumn);
+
+      bufferedJoinColumns = new ArrayList<JoinColumn>();
+      bufferedJoinColumns.add(joinColumn);
+    }
+    return bufferedJoinColumns;
+  }
+
+  @Override
   public Association getEdmAssociation() {
     Association association = new Association();
     association.setName("Assoc_SalesOrderHeader_SalesOrderItem");
@@ -227,6 +243,9 @@ public class JPAEdmReferentialConstraintRoleTest extends JPAEdmTestModelView {
       EasyMock.expect(joinColumn.name()).andReturn("SOID");
 
       EasyMock.replay(joinColumn);
+
+      bufferedJoinColumns = new ArrayList<JoinColumn>();
+      bufferedJoinColumns.add(joinColumn);
       return (T) joinColumn;
     }
   }

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/db50903b/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmReferentialConstraintTest.java
----------------------------------------------------------------------
diff --git a/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmReferentialConstraintTest.java b/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmReferentialConstraintTest.java
index 6e7f6b3..86181b7 100644
--- a/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmReferentialConstraintTest.java
+++ b/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmReferentialConstraintTest.java
@@ -25,6 +25,8 @@ import static org.junit.Assert.fail;
 
 import java.lang.annotation.Annotation;
 import java.lang.reflect.Member;
+import java.util.ArrayList;
+import java.util.List;
 
 import javax.persistence.JoinColumn;
 import javax.persistence.metamodel.Attribute;
@@ -48,6 +50,7 @@ public class JPAEdmReferentialConstraintTest extends JPAEdmTestModelView {
 
   private static JPAEdmReferentialConstraint objJPAEdmReferentialConstraint = null;
   private static JPAEdmReferentialConstraintTest objJPAEdmReferentialConstraintTest = null;
+  private List<JoinColumn> bufferedJoinColumns = null;
 
   @Before
   public void setUp() {
@@ -125,6 +128,21 @@ public class JPAEdmReferentialConstraintTest extends JPAEdmTestModelView {
     return getJPAAttributeLocal();
   }
 
+  @Override
+  public List<JoinColumn> getJPAJoinColumns() {
+    if (bufferedJoinColumns == null) {
+      JoinColumn joinColumn = EasyMock.createMock(JoinColumn.class);
+      EasyMock.expect(joinColumn.referencedColumnName()).andReturn("SOID");
+      EasyMock.expect(joinColumn.name()).andReturn("SOID");
+
+      EasyMock.replay(joinColumn);
+
+      bufferedJoinColumns = new ArrayList<JoinColumn>();
+      bufferedJoinColumns.add(joinColumn);
+    }
+    return bufferedJoinColumns;
+  }
+
   @SuppressWarnings("hiding")
   private class AttributeMock<Object, String> extends JPAAttributeMock<Object, String> {
 

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/db50903b/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmTestModelView.java
----------------------------------------------------------------------
diff --git a/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmTestModelView.java b/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmTestModelView.java
index 7a6f90f..639ad52 100644
--- a/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmTestModelView.java
+++ b/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmTestModelView.java
@@ -21,6 +21,7 @@ package org.apache.olingo.odata2.jpa.processor.core.model;
 import java.util.HashMap;
 import java.util.List;
 
+import javax.persistence.JoinColumn;
 import javax.persistence.metamodel.Attribute;
 import javax.persistence.metamodel.EmbeddableType;
 import javax.persistence.metamodel.Metamodel;
@@ -403,4 +404,10 @@ public class JPAEdmTestModelView implements JPAEdmAssociationEndView, JPAEdmAsso
     return null;
   }
 
+  @Override
+  public List<JoinColumn> getJPAJoinColumns() {
+    // TODO Auto-generated method stub
+    return null;
+  }
+
 }