openjpa-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From jrba...@apache.org
Subject svn commit: r798182 - in /openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence: EntityManagerFactoryImpl.java OpenJPAPersistenceUtil.java PersistenceProviderImpl.java
Date Mon, 27 Jul 2009 15:04:50 GMT
Author: jrbauer
Date: Mon Jul 27 15:04:50 2009
New Revision: 798182

URL: http://svn.apache.org/viewvc?rev=798182&view=rev
Log:
OPENJPA-1175  Refactor of perisistence utility methods

Added:
    openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/OpenJPAPersistenceUtil.java
  (with props)
Modified:
    openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/EntityManagerFactoryImpl.java
    openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceProviderImpl.java

Modified: openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/EntityManagerFactoryImpl.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/EntityManagerFactoryImpl.java?rev=798182&r1=798181&r2=798182&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/EntityManagerFactoryImpl.java
(original)
+++ openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/EntityManagerFactoryImpl.java
Mon Jul 27 15:04:50 2009
@@ -34,6 +34,7 @@
 import javax.persistence.EntityManagerFactory;
 import javax.persistence.PersistenceUnitUtil;
 import javax.persistence.criteria.QueryBuilder;
+import javax.persistence.spi.LoadState;
 
 import org.apache.openjpa.conf.OpenJPAConfiguration;
 import org.apache.openjpa.enhance.PersistenceCapable;
@@ -392,19 +393,7 @@
      * of the em's in this PU or not persistence capable, return null.
      */
     public Object getIdentifier(Object entity) {
-        if (entity instanceof PersistenceCapable) {
-            PersistenceCapable pc = (PersistenceCapable)entity;
-            // Per contract, if not managed by the owning emf, return null.
-            if (!isManagedBy(pc))
-                return null;
-            StateManager sm = pc.pcGetStateManager();
-            
-            if (sm != null && sm instanceof OpenJPAStateManager) {
-                OpenJPAStateManager osm = (OpenJPAStateManager)sm;
-                return osm.getObjectId();                
-            }
-        }
-        return null;
+        return OpenJPAPersistenceUtil.getIdentifier(this, entity);
     }
 
     public boolean isLoaded(Object entity) {
@@ -415,85 +404,8 @@
         if (entity == null) {
             return false;
         }
-               
-        if (entity instanceof PersistenceCapable) {
-            PersistenceCapable pc = (PersistenceCapable)entity;
-            if (!isManagedBy(pc)) {
-                return false;
-            }
-            StateManager sm = pc.pcGetStateManager();
-            if (sm != null && sm instanceof OpenJPAStateManager) {
-                return isLoaded((OpenJPAStateManager)sm, attribute); 
-            }
-        }        
-        return false;
-    }
-
-    /**
-     * Determines whether the specified state manager is managed by a broker
-     * within the persistence unit of this util instance.
-     * @param sm StateManager
-     * @return true if this state manager is managed by a broker within
-     * this persistence unit.
-     */
-    private boolean isManagedBy(PersistenceCapable entity) {
-        if (!isOpen()) {
-            return false; 
-        }
-        Object abfobj = JPAFacadeHelper.toBrokerFactory(this);
-        if (abfobj == null) {
-            return false;
-        }
-        if (abfobj instanceof AbstractBrokerFactory) {
-            AbstractBrokerFactory abf = (AbstractBrokerFactory)abfobj;
-            Collection<?> brokers = abf.getOpenBrokers();
-            if (brokers == null || brokers.size() == 0) { 
-                return false;
-            }
-            // Cycle through all brokers managed by this factory.  
-            Broker[] brokerArr = brokers.toArray(new Broker[brokers.size()]);
-            for (Broker broker : brokerArr) {
-                if (broker != null && !broker.isClosed() && 
-                    broker.isPersistent(entity)) {
-                    return true;
-                }
-            }
-        }
-        return false;
-    }
-    
-    /**
-     * Returns the load state for a given state manager and attribute.  If
-     * attr is null, only determines the load state based upon all persistent 
-     * attributes.  If an attribute is specified and not known to be 
-     * persistent by this provider, returns false.
-     */
-    private boolean isLoaded(OpenJPAStateManager sm, String attr) {
-        boolean isLoaded = true;
-        BitSet loadSet = sm.getLoaded();        
-        if (attr != null) {
-            FieldMetaData fmd = sm.getMetaData().getField(attr);
-            // Could not find field metadata for the specified attribute.
-            if (fmd == null) {
-                return false;
-            }
-            // If the attribute is not loaded, return false.
-            if (!loadSet.get(fmd.getIndex())) {
-                return false;
-            }
-        }
-        // Check load state of all persistent eager fetch attributes. Per
-        // contract, if any of them are not loaded, return false.
-        FieldMetaData[] fmds = sm.getMetaData().getFields();
-        for (FieldMetaData fmd : fmds) {
-            if (fmd.isInDefaultFetchGroup()) {
-                if (!loadSet.get(fmd.getIndex())) {
-                    isLoaded = false;
-                    break;
-                }
-                // TODO JRB: Complete contract for collections
-            }
-        } 
-        return isLoaded;        
-    }
+        
+        return (OpenJPAPersistenceUtil.isLoaded(this, entity, attribute) ==
+            LoadState.LOADED);
+    }    
 }

Added: openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/OpenJPAPersistenceUtil.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/OpenJPAPersistenceUtil.java?rev=798182&view=auto
==============================================================================
--- openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/OpenJPAPersistenceUtil.java
(added)
+++ openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/OpenJPAPersistenceUtil.java
Mon Jul 27 15:04:50 2009
@@ -0,0 +1,182 @@
+/*
+ * 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.openjpa.persistence;
+
+import java.util.BitSet;
+import java.util.Collection;
+
+import javax.persistence.spi.LoadState;
+
+import org.apache.openjpa.enhance.PersistenceCapable;
+import org.apache.openjpa.enhance.StateManager;
+import org.apache.openjpa.kernel.AbstractBrokerFactory;
+import org.apache.openjpa.kernel.Broker;
+import org.apache.openjpa.kernel.OpenJPAStateManager;
+import org.apache.openjpa.meta.FieldMetaData;
+
+public class OpenJPAPersistenceUtil {
+
+    /**
+     * Returns the identifier of the persistent entity.
+     * @param entity
+     * @return The identifier of the entity or null if the entity
+     * is not persistent.
+     */
+    public static Object getIdentifier(Object entity) {
+        return getIdentifier(null, entity);
+    }
+
+    /**
+     * Get the object identifier for a persistent entity managed by one
+     * of the entity managers of the specified entity manager factory.
+     * @return The identifier of the entity or null if the entity does
+     * not have an identifier assigned or is not managed by any of the
+     * entity managers of the entity manager factory.
+     */
+    public static Object getIdentifier(OpenJPAEntityManagerFactory emf, 
+        Object entity) {
+
+        if (entity instanceof PersistenceCapable) {
+            PersistenceCapable pc = (PersistenceCapable)entity;
+            // Per contract, if not managed by the owning emf, return null.
+            if (emf != null) {
+                if (!OpenJPAPersistenceUtil.isManagedBy(emf, pc)) {
+                    return null;
+                }
+            }
+            StateManager sm = pc.pcGetStateManager();
+            
+            if (sm != null && sm instanceof OpenJPAStateManager) {
+                OpenJPAStateManager osm = (OpenJPAStateManager)sm;
+                return osm.getObjectId();                
+            }
+        }
+        return null;
+    }
+
+    /**
+     * Determines whether the specified state manager is managed by a broker
+     * within the persistence unit of this util instance.
+     * @param sm StateManager
+     * @return true if this state manager is managed by a broker within
+     * this persistence unit.
+     */
+    public static boolean isManagedBy(OpenJPAEntityManagerFactory emf, 
+        Object entity) {
+        if (emf == null || !emf.isOpen()) {
+            return false;
+        }
+        Object abfobj = JPAFacadeHelper.toBrokerFactory(emf);
+        if (abfobj == null) {
+            return false;
+        }
+        if (abfobj instanceof AbstractBrokerFactory) {
+            AbstractBrokerFactory abf = (AbstractBrokerFactory)abfobj;
+            Collection<?> brokers = abf.getOpenBrokers();
+            if (brokers == null || brokers.size() == 0) {
+                return false;
+            }
+            // Cycle through all brokers managed by this factory.  
+            Broker[] brokerArr = brokers.toArray(new Broker[brokers.size()]);
+            for (Broker broker : brokerArr) {
+                if (broker != null && !broker.isClosed() && 
+                    broker.isPersistent(entity))
+                    return true;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * Determines whether the attribute on the specified object is loaded.
+     * 
+     * @return LoadState.LOADED - if the attribute is loaded.
+     *         LoadState.NOT_LOADED - if the attribute is not loaded or any
+     *         EAGER fetch attributes of the entity are not loaded.
+     *         LoadState.UNKNOWN - if the entity is not managed by this
+     *         provider or if it does not contain the persistent
+     *         attribute.
+     */
+    public static LoadState isLoaded(Object obj, String attr) {
+        return isLoaded(null, obj, attr);
+    }
+
+    /**
+     * Determines whether the attribute on the specified object is loaded and
+     * is managed by one of the entity managers of the specified entity manager
+     * factory.
+     * 
+     * @return LoadState.LOADED - if the attribute is loaded.
+     *         LoadState.NOT_LOADED - if the attribute is not loaded or any
+     *         EAGER fetch attributes of the entity are not loaded.
+     *         LoadState.UNKNOWN - if the entity is not managed by this
+     *         provider or one of the entity managers of the specified 
+     *         entity manager factory, or if it does not contain the persistent
+     *         attribute.
+     */
+    public static LoadState isLoaded(OpenJPAEntityManagerFactory emf, 
+        Object obj, String attr) {
+
+        if (obj == null) {
+            return LoadState.UNKNOWN;
+        }
+        
+        // If the object has a state manager, call it directly.
+        if (obj instanceof PersistenceCapable) {
+            PersistenceCapable pc = (PersistenceCapable)obj;
+            if (emf != null) {
+                if (!OpenJPAPersistenceUtil.isManagedBy(emf, pc))
+                    return LoadState.UNKNOWN;
+            }
+            StateManager sm = pc.pcGetStateManager();
+            if (sm != null && sm instanceof OpenJPAStateManager) {
+                return isLoaded((OpenJPAStateManager)sm, attr);
+            }
+        }        
+        return LoadState.UNKNOWN;
+    }
+
+    private static LoadState isLoaded(OpenJPAStateManager sm, String attr) {
+        boolean isLoaded = true;
+        BitSet loadSet = sm.getLoaded();
+        if (attr != null) {
+            FieldMetaData fmd = sm.getMetaData().getField(attr);
+            // Could not find field metadata for the specified attribute.
+            if (fmd == null) {
+                return LoadState.UNKNOWN;
+            }
+            // Otherwise, return the load state
+            if(!loadSet.get(fmd.getIndex())) {
+                return LoadState.NOT_LOADED;
+            }
+        }
+        FieldMetaData[] fmds = sm.getMetaData().getFields();
+        // Check load state of all persistent eager fetch attributes
+        for (FieldMetaData fmd : fmds) {
+            if (fmd.isInDefaultFetchGroup()) {
+                if (!loadSet.get(fmd.getIndex())) {
+                    isLoaded = false;
+                    break;
+                }
+                // TODO: Complete contract for collections
+            }
+        } 
+        return isLoaded ? LoadState.LOADED : LoadState.NOT_LOADED;        
+    }
+}

Propchange: openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/OpenJPAPersistenceUtil.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceProviderImpl.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceProviderImpl.java?rev=798182&r1=798181&r2=798182&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceProviderImpl.java
(original)
+++ openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceProviderImpl.java
Mon Jul 27 15:04:50 2009
@@ -321,51 +321,11 @@
      *         provider or if it does not contain the persistent
      *         attribute.
      */
-    public LoadState isLoadedWithoutReference(Object obj, String attr) {
-
-        if (obj == null)
+    public LoadState isLoadedWithoutReference(Object obj, String attr) {        
+        if (obj == null) {
             return LoadState.UNKNOWN;
-        
-        // If the object has a state manager, call it directly.
-        if (obj instanceof PersistenceCapable) {
-            PersistenceCapable pc = (PersistenceCapable)obj;
-            StateManager sm = pc.pcGetStateManager();
-            if (sm != null && sm instanceof OpenJPAStateManager)
-                return isLoaded((OpenJPAStateManager)sm, attr);
-        }        
-        return LoadState.UNKNOWN;
-    }
-
-    /*
-     * Returns the load state for a given state manager and attribute.  If
-     * attr is null, determines the load state based upon all persistent 
-     * attributes of the state manager.  If an attribute is specified and not 
-     * known to be persistent by this provider, returns a load state of unknown,
-     * otherwise, returns the load state of the attribute.
-     */
-    private LoadState isLoaded(OpenJPAStateManager sm, String attr) {
-        boolean isLoaded = true;
-        BitSet loadSet = sm.getLoaded();
-        if (attr != null) {
-            FieldMetaData fmd = sm.getMetaData().getField(attr);
-            // Could not find field metadata for the specified attribute.
-            if (fmd == null)
-                return LoadState.UNKNOWN;
-            // Otherwise, return the load state
-            if(!loadSet.get(fmd.getIndex()))
-                return LoadState.NOT_LOADED;
         }
-        FieldMetaData[] fmds = sm.getMetaData().getFields();
-        // Check load state of all persistent eager fetch attributes
-        for (FieldMetaData fmd : fmds) {
-            if (fmd.isInDefaultFetchGroup()) {
-                if (!loadSet.get(fmd.getIndex())) {
-                    isLoaded = false;
-                    break;
-                }
-                // TODO: Complete contract for collections
-            }
-        } 
-        return isLoaded ? LoadState.LOADED : LoadState.NOT_LOADED;        
+
+        return OpenJPAPersistenceUtil.isLoaded(obj, attr);
     }
 }



Mime
View raw message