package org.mongodb.morphia.mapping.lazy.proxy;
Author: Uwe Schaefer, (us@thomas-daily.de)
/**
* @author Uwe Schaefer, (us@thomas-daily.de)
*/
public final class ProxyHelper {
private ProxyHelper() {
}
If proxied, returns the unwrapped entity.
Params: - entity – the entity to check
Type parameters: - <T> – the type of the entity
Returns: the bare entity
/**
* If proxied, returns the unwrapped entity.
*
* @param entity the entity to check
* @param <T> the type of the entity
* @return the bare entity
*/
@SuppressWarnings("unchecked")
public static <T> T unwrap(final T entity) {
if (isProxy(entity)) {
return (T) asProxy(entity).__unwrap();
}
return entity;
}
Checks if the Java reference passed is a proxy
Params: - entity – the entity to check
Returns: true if the reference is a proxied reference
/**
* Checks if the Java reference passed is a proxy
*
* @param entity the entity to check
* @return true if the reference is a proxied reference
*/
public static boolean isProxy(final Object entity) {
return (entity != null && isProxied(entity.getClass()));
}
private static <T> ProxiedReference asProxy(final T entity) {
return ((ProxiedReference) entity);
}
Checks if the Class passed is a ProxiedReference
Params: - clazz – the class to check
Returns: true if the class is a ProxiedReference
/**
* Checks if the Class passed is a ProxiedReference
*
* @param clazz the class to check
* @return true if the class is a ProxiedReference
*/
public static boolean isProxied(final Class<?> clazz) {
return ProxiedReference.class.isAssignableFrom(clazz);
}
Returns the class backing this entity
Params: - entity – the entity to check
Returns: if proxied, the Class of the proxied type. the entity's Class otherwise
/**
* Returns the class backing this entity
*
* @param entity the entity to check
* @return if proxied, the Class of the proxied type. the entity's Class otherwise
*/
public static Class getReferentClass(final Object entity) {
if (isProxy(entity)) {
return asProxy(entity).__getReferenceObjClass();
} else {
return entity != null ? entity.getClass() : null;
}
}
Checks if the proxied entity has been fetched.
Params: - entity – the entity to check
Returns: true if the proxy hasn't been fetched.
/**
* Checks if the proxied entity has been fetched.
*
* @param entity the entity to check
* @return true if the proxy hasn't been fetched.
*/
public static boolean isUnFetched(final Object entity) {
return !isFetched(entity);
}
Checks if the proxied entity has been fetched.
Params: - entity – the entity to check
Returns: true if the proxy has been fetched.
/**
* Checks if the proxied entity has been fetched.
*
* @param entity the entity to check
* @return true if the proxy has been fetched.
*/
public static boolean isFetched(final Object entity) {
return entity == null || !isProxy(entity) || asProxy(entity).__isFetched();
}
}