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
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
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
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
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
}\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
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
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