You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by dw...@apache.org on 2009/07/27 18:47:27 UTC

svn commit: r798212 - /geronimo/specs/branches/geronimo-jpa_2.0_spec-1.0-EA5/src/main/java/javax/persistence/Persistence.java

Author: dwoods
Date: Mon Jul 27 16:47:27 2009
New Revision: 798212

URL: http://svn.apache.org/viewvc?rev=798212&view=rev
Log:
GERONIMO-4410 - OPENJPA-1175 Implement PersistenceUtil and isLoaded methods on the provider

Modified:
    geronimo/specs/branches/geronimo-jpa_2.0_spec-1.0-EA5/src/main/java/javax/persistence/Persistence.java

Modified: geronimo/specs/branches/geronimo-jpa_2.0_spec-1.0-EA5/src/main/java/javax/persistence/Persistence.java
URL: http://svn.apache.org/viewvc/geronimo/specs/branches/geronimo-jpa_2.0_spec-1.0-EA5/src/main/java/javax/persistence/Persistence.java?rev=798212&r1=798211&r2=798212&view=diff
==============================================================================
--- geronimo/specs/branches/geronimo-jpa_2.0_spec-1.0-EA5/src/main/java/javax/persistence/Persistence.java (original)
+++ geronimo/specs/branches/geronimo-jpa_2.0_spec-1.0-EA5/src/main/java/javax/persistence/Persistence.java Mon Jul 27 16:47:27 2009
@@ -30,9 +30,11 @@
 import java.util.Map;
 import java.util.Set;
 
+import javax.persistence.spi.LoadState;
 import javax.persistence.spi.PersistenceProvider;
 import javax.persistence.spi.PersistenceProviderResolver;
 import javax.persistence.spi.PersistenceProviderResolverHolder;
+import javax.persistence.spi.ProviderUtil;
 
 /**
  * @version $Rev$ $Date$
@@ -161,13 +163,78 @@
      */
     private static class PersistenceUtilImpl implements PersistenceUtil {
 
+        /*
+         * Determines the load state of the attribute of an entity 
+         * @see javax.persistence.PersistenceUtil#isLoaded(java.lang.Object, java.lang.String)
+         */
             public boolean isLoaded(Object entity, String attributeName) {
-                // TODO Auto-generated dummy method stub
+                boolean isLoaded = true;
+
+                // Get the list of persistence providers from the resolver
+                PersistenceProviderResolver ppr = 
+                    PersistenceProviderResolverHolder.getPersistenceProviderResolver();
+                List<PersistenceProvider> pps = ppr.getPersistenceProviders();
+
+                // Iterate through the list using ProviderUtil.isLoadedWithoutReference()
+                for (PersistenceProvider pp : pps) {
+                    try {
+                        ProviderUtil pu = pp.getProviderUtil();                        
+                        LoadState ls = pu.isLoadedWithoutReference(entity, attributeName);
+                        if (ls == LoadState.LOADED)
+                            return true;
+                        if (ls == LoadState.NOT_LOADED)
+                            return false;
+                    }
+                    catch (Throwable t) {
+                        // JPA 1.0 providers will not implement the getProviderUtil
+                        // method.  Eat the exception and try the next provider.
+                    }
+                 }
+                // Iterate through the list a second time using ProviderUtil.isLoadedWithReference()
+                for (PersistenceProvider pp : pps) {
+                    try {
+                        ProviderUtil pu = pp.getProviderUtil();                        
+                        LoadState ls = pu.isLoadedWithoutReference(entity, attributeName);
+                        if (ls == LoadState.LOADED)
+                            return true;
+                        if (ls == LoadState.NOT_LOADED)
+                            return false;
+                    }
+                    catch (Throwable t) {
+                        // JPA 1.0 providers will not implement the getProviderUtil
+                        // method.  Eat the exception and try the next provider.
+                    }
+                 }
+                
+                // All providers returned a load state of unknown.  Return true.
                 return true;
             }
 
             public boolean isLoaded(Object entity) {
-                // TODO Auto-generated dummy method stub
+                // Get the list of persistence providers from the resolver
+                PersistenceProviderResolver ppr = 
+                    PersistenceProviderResolverHolder.getPersistenceProviderResolver();
+                List<PersistenceProvider> pps = ppr.getPersistenceProviders();
+
+                // Iterate through the list of providers, using ProviderUtil to
+                // determine the load state
+                for (PersistenceProvider pp : pps) {
+                    try {
+                        ProviderUtil pu = pp.getProviderUtil();
+                        LoadState ls = pu.isLoaded(entity);
+                        if (ls == LoadState.LOADED)
+                            return true;
+                        if (ls == LoadState.NOT_LOADED)
+                            return false;
+                        // Otherwise, load state is unknown.  Query the next provider.
+                    }
+                    catch (Throwable t) {
+                        // JPA 1.0 providers will not implement the getProviderUtil
+                        // method.  Eat the exception and try the next provider.
+                    }                   
+                }
+                
+                // All providers returned a load state of unknown.  Return true.
                 return true;
             }
     }