Author: mfortun Date: 2011-07-26 14:24:33 +0200 (Tue, 26 Jul 2011) New Revision: 1090 Url: http://nuiton.org/repositories/revision/wikitty/1090 Log: * add comments Modified: trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/engine/HtmlScriptEngine.java Modified: trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/engine/HtmlScriptEngine.java =================================================================== --- trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/engine/HtmlScriptEngine.java 2011-07-26 11:43:51 UTC (rev 1089) +++ trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/engine/HtmlScriptEngine.java 2011-07-26 12:24:33 UTC (rev 1090) @@ -14,11 +14,23 @@ import javax.script.SimpleBindings; import org.apache.commons.io.IOUtils; import org.apache.commons.lang.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.nuiton.util.ArrayUtil; import org.nuiton.util.StringUtil; +/** + * Script engine for html code. + * Use to handle binds element invocation inside html code. + * + * @author mfortun + * + */ public class HtmlScriptEngine implements ScriptEngine { + + final static Log log = LogFactory.getLog(HtmlScriptEngine.class); + /* * algo super simple en fait. * @@ -34,6 +46,9 @@ static public String REGEX_END = "$"; static public String REGEX_EMPTY = " +"; static public String REGEX_EMPTY_END = REGEX_EMPTY + REGEX_END; + /** + * regex to match string method argument + */ static public String REGEX_STRING_ARG = "\"[\\w\\d]*\""; protected ScriptEngineFactory factory; @@ -135,16 +150,23 @@ return factory; } + /** + * Finaly handle html to found invokation to bindings element + * @param code the html code + * @param binds the binding + * @return code with binds value/invokation replacement + */ protected String evaluateCodeInsideHtml(String code, Bindings binds) { String result = new String(code); for (String bindingElement : binds.keySet()) { Object oo = binds.get(bindingElement); - + + // parse to search method invokation on binds element String[] hmtl = result.split(bindingElement + REGEX_BIND_ELEMENT_METHOD); - + String pageModified = hmtl[0]; for (int i = 0; i < hmtl.length - 1; i++) { @@ -153,17 +175,15 @@ int end = code.indexOf(hmtl[i + 1]); // end = end; - + // Isolate method invocation String codeToExecude = code.substring(begin, end); codeToExecude = codeToExecude.trim(); - + //invoke String resultCode = invokeFromName(oo, codeToExecude, binds); // replace at position by result - pageModified += resultCode; - pageModified += hmtl[i + 1]; } @@ -186,11 +206,18 @@ * Si ça match seulement avec le nom alors on fait * getValue().tostring */ - } return result; } + /** + * use to invoke method on the object contained in the bindinds + * @param oo the object bind + * @param invokation the string containing the invokation + * @param binds binding used inside evaluation + * @return result of the invokation or if method not found the invokation + * string + */ protected String invokeFromName(Object oo, String invokation, Bindings binds) { int dotPosition = invokation.indexOf("."); @@ -203,15 +230,16 @@ // String methodName = invokation.substring(dotPosition + 1, openBracketPosition); - + // obtain param list String params = invokation.substring(openBracketPosition + 1, closingBracketPosition); - + // parse params String[] parsedParam = StringUtil.split(params, ","); List<Object> listParam = new LinkedList<Object>(); List<Class<?>> listType = new LinkedList<Class<?>>(); - + + // found param type and values for (String argument : parsedParam) { Object value = argument; /* @@ -261,8 +289,7 @@ result = methodBindin.invoke(oo, args).toString(); } catch (Exception e) { - e.printStackTrace(); - // TODO mfortun-2011-07-25 handle exception + log.debug("Method "+methodName+ " not found on:" + oo); } return result;
participants (1)
-
mfortun@users.nuiton.org