Author: bpoussin Date: 2013-02-23 15:20:54 +0100 (Sat, 23 Feb 2013) New Revision: 1542 Url: http://nuiton.org/projects/wikitty/repository/revisions/1542 Log: ajout de la possibilite de faire de fonction qui herite de WikittyQueryFunction Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/function/WikittyQueryFunction.java Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/function/WikittyQueryFunction.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/function/WikittyQueryFunction.java 2013-02-23 14:20:02 UTC (rev 1541) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/function/WikittyQueryFunction.java 2013-02-23 14:20:54 UTC (rev 1542) @@ -7,11 +7,16 @@ import java.util.List; import java.util.Map; import java.util.UUID; +import java.util.logging.Level; +import java.util.logging.Logger; +import org.apache.commons.lang3.ClassUtils; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.reflect.ConstructorUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.util.ObjectUtil; +import org.nuiton.wikitty.WikittyException; import org.nuiton.wikitty.WikittyUtil; import org.nuiton.wikitty.query.WikittyQuery; import org.nuiton.wikitty.query.WikittyQueryVisitor; @@ -82,7 +87,21 @@ } else if ("toDate".equalsIgnoreCase(methodName)) { result = new WikittyQueryFunctionWrapper(WikittyUtil.class.getName() + "#toDate", name, args); } else { - result = new WikittyQueryFunctionWrapper(methodName, name, args); + if (StringUtils.contains(methodName, ObjectUtil.CLASS_METHOD_SEPARATOR)) { + // c'est une methode quelconque. + result = new WikittyQueryFunctionWrapper(methodName, name, args); + } else { + try { + // c'est peut-etre une classe qui herite de WikittyQueryFunction + Class c = Class.forName(methodName); + result = (WikittyQueryFunction)ConstructorUtils.invokeConstructor(c, + new Object[]{methodName, name, args}, + new Class[]{String.class, String.class, List.class}); + } catch (Exception eee) { + throw new WikittyException(String.format( + "Can't instantiate function '%s'", methodName), eee); + } + } } return result;
participants (1)
-
bpoussin@users.nuiton.org