X-Git-Url: https://dev.e-taxonomy.eu/gitweb/cdmlib.git/blobdiff_plain/6dea51d8ac5f6882ebaf00e3e356c70a7567cb4d..305e7252c6eb73a0a0f823fb6c3ea505d39f452e:/cdmlib-remote/src/main/java/eu/etaxonomy/cdm/remote/controller/BaseController.java?ds=sidebyside diff --git a/cdmlib-remote/src/main/java/eu/etaxonomy/cdm/remote/controller/BaseController.java b/cdmlib-remote/src/main/java/eu/etaxonomy/cdm/remote/controller/BaseController.java index 75e8210422..80202e8e5e 100644 --- a/cdmlib-remote/src/main/java/eu/etaxonomy/cdm/remote/controller/BaseController.java +++ b/cdmlib-remote/src/main/java/eu/etaxonomy/cdm/remote/controller/BaseController.java @@ -14,6 +14,8 @@ import java.beans.PropertyDescriptor; import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; +import java.lang.reflect.ParameterizedType; +import java.lang.reflect.Type; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -27,6 +29,7 @@ import org.apache.commons.beanutils.PropertyUtils; import org.apache.commons.io.FilenameUtils; import org.apache.commons.lang.StringUtils; import org.hibernate.mapping.Map; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.WebDataBinder; import org.springframework.web.bind.annotation.InitBinder; import org.springframework.web.bind.annotation.PathVariable; @@ -38,7 +41,9 @@ import org.springframework.web.servlet.ModelAndView; import eu.etaxonomy.cdm.api.service.IService; import eu.etaxonomy.cdm.api.service.pager.Pager; import eu.etaxonomy.cdm.api.service.pager.impl.DefaultPagerImpl; +import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper; import eu.etaxonomy.cdm.model.common.CdmBase; +import eu.etaxonomy.cdm.model.reference.INomenclaturalReference; import eu.etaxonomy.cdm.remote.editor.UUIDPropertyEditor; /** @@ -57,6 +62,21 @@ public abstract class BaseController baseClass; public abstract void setService(SERVICE service); + + public BaseController (){ + + Type superClass = this.getClass().getGenericSuperclass(); + if(superClass instanceof ParameterizedType){ + ParameterizedType parametrizedSuperClass = (ParameterizedType) superClass; + Type[] typeArguments = parametrizedSuperClass.getActualTypeArguments(); + + if(typeArguments.length > 1 && typeArguments[0] instanceof Class){ + baseClass = (Class) typeArguments[0]; + } else { + logger.error("unable to find baseClass"); + } + } + } @InitBinder public void initBinder(WebDataBinder binder) { @@ -68,7 +88,8 @@ public abstract class BaseController)null); //Class propertyClass = propertyClass(instance, baseName); - Object objectFromProperty = doGetProperty(uuid, baseName, response);// invokeProperty(instance, baseName, response); + Object objectFromProperty = getCdmBaseProperty(uuid, baseName, response);// invokeProperty(instance, baseName, response); // CUT> if(objectFromProperty != null){ if( Collection.class.isAssignableFrom(objectFromProperty.getClass())){ - // Map types cannot be returend as list or in a pager! + // Map types cannot be returned as list or in a pager! Collection c = (Collection)objectFromProperty; if(start != null){ @@ -123,6 +145,8 @@ public abstract class BaseController returnType = method.getReturnType(); if(CdmBase.class.isAssignableFrom(returnType) || Collection.class.isAssignableFrom(returnType) - || Map.class.isAssignableFrom(returnType)){ + || Map.class.isAssignableFrom(returnType) + || INomenclaturalReference.class.isAssignableFrom(returnType)){ + result = method.invoke(instance, (Object[])null); + + result = HibernateProxyHelper.deproxy(result); + }else{ HttpStatusMessage.UUID_REFERENCES_WRONG_TYPE.send(response); }