Integrate intial version of PersitenceUtilImpl. PersitenceProvider.isLoaded*() methods are stubbed out to return LoadState.Unknown.
Reviewed by Gordon.
diff --git a/src/javax/persistence/Persistence.java b/src/javax/persistence/Persistence.java
index 9aa005f..c390917 100644
--- a/src/javax/persistence/Persistence.java
+++ b/src/javax/persistence/Persistence.java
@@ -31,6 +31,7 @@
import javax.persistence.spi.PersistenceProvider;
import javax.persistence.spi.PersistenceProviderResolver;
import javax.persistence.spi.PersistenceProviderResolverHolder;
+import javax.persistence.spi.LoadState;
/**
* Bootstrap class that is used to obtain an {@link EntityManagerFactory}.
@@ -87,9 +88,59 @@
* Return the PersistenceUtil instance
*/
public static PersistenceUtil getPersistenceUtil() {
- // TODO - Implement Util
- throw new RuntimeException("JPA 2.0 Feature Not yet Implemented");
- // return new PersistenceUtilImpl();
+ return new PersistenceUtilImpl();
+ }
+
+
+ /**
+ * Implementation of PersistenceUtil interface
+ * @since Java Persistence 2.0
+ */
+ private static class PersistenceUtilImpl implements PersistenceUtil {
+ public boolean isLoaded(Object entity, String attributeName) {
+ PersistenceProviderResolver resolver = PersistenceProviderResolverHolder.getPersistenceProviderResolver();
+
+ List<PersistenceProvider> providers = resolver.getPersistenceProviders();
+
+ for (PersistenceProvider provider : providers) {
+ LoadState loadstate = provider.isLoadedWithoutReference(entity, attributeName);
+ if(loadstate == LoadState.LOADED) {
+ return true;
+ } else if (loadstate == LoadState.NOT_LOADED) {
+ return false;
+ } // else continue
+ }
+
+ //None of the providers could determine the load state try isLoadedWithReference
+ for (PersistenceProvider provider : providers) {
+ LoadState loadstate = provider.isLoadedWithReference(entity, attributeName);
+ if(loadstate == LoadState.LOADED) {
+ return true;
+ } else if (loadstate == LoadState.NOT_LOADED) {
+ return false;
+ } // else continue
+ }
+
+ //None of the providers could determine the load state.
+ return true;
+ }
+
+ public boolean isLoaded(Object entity) {
+ PersistenceProviderResolver resolver = PersistenceProviderResolverHolder.getPersistenceProviderResolver();
+
+ List<PersistenceProvider> providers = resolver.getPersistenceProviders();
+
+ for (PersistenceProvider provider : providers) {
+ LoadState loadstate = provider.isLoaded(entity);
+ if(loadstate == LoadState.LOADED) {
+ return true;
+ } else if (loadstate == LoadState.NOT_LOADED) {
+ return false;
+ } // else continue
+ }
+ //None of the providers could determine the load state
+ return true;
+ }
}
/**