Added a couple of controllers
[cdmlib.git] / cdmlib-remote / src / main / java / eu / etaxonomy / cdm / remote / controller / BaseController.java
index 83033f228893181ae228490e2f0db82445e165f5..1f284e9785a7eb86cc99b1d8e0efe30d1d4abd24 100644 (file)
@@ -14,6 +14,8 @@ import java.beans.PropertyDescriptor;
 import java.io.IOException;\r
 import java.lang.reflect.InvocationTargetException;\r
 import java.lang.reflect.Method;\r
+import java.lang.reflect.ParameterizedType;\r
+import java.lang.reflect.Type;\r
 import java.util.ArrayList;\r
 import java.util.Arrays;\r
 import java.util.Collection;\r
@@ -34,7 +36,6 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;\r
 import org.springframework.web.bind.annotation.RequestParam;\r
 import org.springframework.web.servlet.ModelAndView;\r
-import org.unitils.hibernate.HibernateUnitils;\r
 \r
 import eu.etaxonomy.cdm.api.service.IService;\r
 import eu.etaxonomy.cdm.api.service.pager.Pager;\r
@@ -59,6 +60,21 @@ public abstract class BaseController<T extends CdmBase, SERVICE extends IService
        protected Class<T> baseClass;\r
        \r
        public abstract void setService(SERVICE service);\r
+       \r
+       public BaseController (){\r
+               \r
+               Type superClass = this.getClass().getGenericSuperclass();\r
+               if(superClass instanceof ParameterizedType){\r
+                       ParameterizedType parametrizedSuperClass = (ParameterizedType) superClass;\r
+                       Type[] typeArguments = parametrizedSuperClass.getActualTypeArguments();\r
+                       \r
+                       if(typeArguments.length > 1 && typeArguments[0] instanceof Class<?>){\r
+                               baseClass = (Class<T>) typeArguments[0];\r
+                       } else {\r
+                               logger.error("unable to find baseClass");\r
+                       }\r
+               }\r
+       }\r
 \r
        @InitBinder\r
     public void initBinder(WebDataBinder binder) {\r
@@ -70,7 +86,8 @@ public abstract class BaseController<T extends CdmBase, SERVICE extends IService
        public T doGet(@PathVariable("uuid") UUID uuid,\r
                                HttpServletRequest request, \r
                                HttpServletResponse response) throws IOException {\r
-               logger.info("doGet() " + request.getServletPath());\r
+               if(request != null)\r
+                       logger.info("doGet() " + request.getServletPath());\r
                T obj = (T) getCdmBaseInstance(uuid, response, initializationStrategy);\r
                return obj;\r
        }\r
@@ -101,14 +118,15 @@ public abstract class BaseController<T extends CdmBase, SERVICE extends IService
                String servletPath = request.getServletPath();\r
                String baseName = FilenameUtils.getBaseName(servletPath);\r
                \r
-               logger.info("doGetMethod()[doGet" + StringUtils.capitalize(baseName) + "] " + request.getServletPath());\r
+               if(request != null)\r
+                       logger.info("doGetMethod()[doGet" + StringUtils.capitalize(baseName) + "] " + request.getServletPath());\r
                \r
                // <CUT\r
 //             T instance = getCdmBaseInstance(uuid, response, (List<String>)null);\r
                \r
                //Class<?> propertyClass = propertyClass(instance, baseName);\r
                \r
-               Object objectFromProperty = doGetProperty(uuid, baseName, response);//   invokeProperty(instance, baseName, response);\r
+               Object objectFromProperty = getCdmBaseProperty(uuid, baseName, response);//   invokeProperty(instance, baseName, response);\r
                \r
                // CUT>\r
                \r
@@ -147,7 +165,7 @@ public abstract class BaseController<T extends CdmBase, SERVICE extends IService
                }\r
        }\r
 \r
-       public Object doGetProperty(UUID uuid, String property, HttpServletResponse response) throws IOException{\r
+       public Object getCdmBaseProperty(UUID uuid, String property, HttpServletResponse response) throws IOException{\r
                \r
                T instance = getCdmBaseInstance(uuid, response, property);\r
                \r
@@ -191,10 +209,9 @@ public abstract class BaseController<T extends CdmBase, SERVICE extends IService
        throws IOException {\r
 \r
                CdmBase cdmBaseObject = getCdmBaseInstance(uuid, response, pathProperties);\r
-//             FIXME clazz is always null !!!! use intanceof instead\r
-//             if(!clazz.isAssignableFrom(cdmBaseObject.getClass())){\r
-//                     HttpStatusMessage.UUID_REFERENCES_WRONG_TYPE.send(response);\r
-//             }\r
+               if(!clazz.isAssignableFrom(cdmBaseObject.getClass())){\r
+                       HttpStatusMessage.UUID_REFERENCES_WRONG_TYPE.send(response);\r
+               }\r
                return (SUB_T) cdmBaseObject;\r
        }\r
        \r
@@ -212,10 +229,9 @@ public abstract class BaseController<T extends CdmBase, SERVICE extends IService
        throws IOException {\r
                \r
                CdmBase cdmBaseObject = getCdmBaseInstance(uuid, response, pathProperty);\r
-//             FIXME clazz is always null !!!! use intanceof instead\r
-//             if(!clazz.isAssignableFrom(cdmBaseObject.getClass())){\r
-//                     HttpStatusMessage.UUID_REFERENCES_WRONG_TYPE.send(response);\r
-//             }\r
+               if(!clazz.isAssignableFrom(cdmBaseObject.getClass())){\r
+                       HttpStatusMessage.UUID_REFERENCES_WRONG_TYPE.send(response);\r
+               }\r
                return (SUB_T) cdmBaseObject;\r
        }\r
        \r