/** * We don't want to return the node as created in {@link #createNode(Object, Map, Object)} * but the one made ready by {@link #nodeCompleted(Object, Object)} * * @see groovy.util.BuilderSupport#doInvokeMethod(java.lang.String, java.lang.Object, java.lang.Object) */ protected Object doInvokeMethod(String methodName, Object name, Object args) { super.doInvokeMethod(methodName, name, args); // return the completed node return lastCompletedNode; }
node = proxyBuilder.createNode(name); break; case 1: { Object object = list.get(0); if (object instanceof Map) { node = proxyBuilder.createNode(name, (Map) object); } else if (object instanceof Closure) { closure = (Closure) object; node = proxyBuilder.createNode(name); } else { node = proxyBuilder.createNode(name, object); if (object2 instanceof Closure) { closure = (Closure) object2; node = proxyBuilder.createNode(name, (Map) object1); } else { node = proxyBuilder.createNode(name, (Map) object1, object2); node = proxyBuilder.createNode(name, object1); } else if (object2 instanceof Map) { node = proxyBuilder.createNode(name, (Map) object2, object1); } else { throw new MissingMethodException(name.toString(), getClass(), list.toArray(), false); if (arg0 instanceof Map && arg2 instanceof Closure) { closure = (Closure) arg2; node = proxyBuilder.createNode(name, (Map) arg0, arg1); } else if (arg1 instanceof Map && arg2 instanceof Closure) { closure = (Closure) arg2;
/** * Convenience method when no arguments are required * * @param methodName the name of the method to invoke * @return the result of the call */ public Object invokeMethod(String methodName) { return invokeMethod(methodName, null); }
public Object invokeMethod(String methodName, Object args) { Object name = getName(methodName); return doInvokeMethod(methodName, name, args); }
@Override protected void nodeCompleted(Object parent, Object child) { if (parent == null) { elements.add((Element)child); } super.nodeCompleted(parent, child); }
@Override protected Object getCurrent() { // TODO a better way to do this? if (builder instanceof NodeBuilder) return InvokerHelper.invokeMethod(builder, "getCurrent", null); else return super.getCurrent(); }
@Override protected void setCurrent(Object current) { // TODO a better way to do this? if (builder instanceof NodeBuilder) InvokerHelper.invokeMethod(builder, "setCurrent", current); else super.setCurrent(current); }
protected Object getName(String methodName) { return super.getName(methodName); }
return super.postNodeCompletion(parent, node);
public Object invokeMethod(String methodName, Object args) { Object name = getName(methodName); return doInvokeMethod(methodName, name, args); }
@Override protected void nodeCompleted(Object parent, Object child) { if (parent == null) { elements.add((Element)child); } super.nodeCompleted(parent, child); }
@Override protected Object getCurrent() { // TODO a better way to do this? if (builder instanceof NodeBuilder) return InvokerHelper.invokeMethod(builder, "getCurrent", null); else return super.getCurrent(); }
@Override protected void setCurrent(Object current) { // TODO a better way to do this? if (builder instanceof NodeBuilder) InvokerHelper.invokeMethod(builder, "setCurrent", current); else super.setCurrent(current); }
protected Object getName(String methodName) { return super.getName(methodName); }
node = proxyBuilder.createNode(name); break; case 1: { Object object = list.get(0); if (object instanceof Map) { node = proxyBuilder.createNode(name, (Map) object); } else if (object instanceof Closure) { closure = (Closure) object; node = proxyBuilder.createNode(name); } else { node = proxyBuilder.createNode(name, object); if (object2 instanceof Closure) { closure = (Closure) object2; node = proxyBuilder.createNode(name, (Map) object1); } else { node = proxyBuilder.createNode(name, (Map) object1, object2); node = proxyBuilder.createNode(name, object1); } else if (object2 instanceof Map) { node = proxyBuilder.createNode(name, (Map) object2, object1); } else { throw new MissingMethodException(name.toString(), getClass(), list.toArray(), false); if (arg0 instanceof Map && arg2 instanceof Closure) { closure = (Closure) arg2; node = proxyBuilder.createNode(name, (Map) arg0, arg1); } else if (arg1 instanceof Map && arg2 instanceof Closure) { closure = (Closure) arg2;
@Override protected Object doInvokeMethod(String methodName, Object name, Object args) { if ("eval".equals(name)) { List list = InvokerHelper.asList(args); if (list.size() == 1 && list.get(0) instanceof Closure) { EvalElement element = (EvalElement)super.doInvokeMethod(methodName, name, null); element.closure = (Closure)list.get(0); return element; } else { return super.doInvokeMethod(methodName, name, args); } } else { return super.doInvokeMethod(methodName, name, args); } }
public Object invokeMethod(String methodName, Object args) { Object name = getName(methodName); return doInvokeMethod(methodName, name, args); }
@Override protected void nodeCompleted(Object parent, Object child) { if (parent == null) { elements.add((Element)child); } super.nodeCompleted(parent, child); }
/** * Allow automatic detection of namespace declared in the attributes */ @Override public Object invokeMethod(String methodName, Object args) { // detect namespace declared on the added node like xmlns:foo="http:/foo" Map attributes = findAttributes(args); for (Iterator<Map.Entry> iter = attributes.entrySet().iterator(); iter.hasNext();) { Map.Entry entry = iter.next(); String key = String.valueOf(entry.getKey()); if (key.startsWith("xmlns:")) { String prefix = key.substring(6); String uri = String.valueOf(entry.getValue()); namespace(uri, prefix); iter.remove(); } } return super.invokeMethod(methodName, args); }
@Override protected Object getCurrent() { // TODO a better way to do this? if (builder instanceof NodeBuilder) return InvokerHelper.invokeMethod(builder, "getCurrent", null); else return super.getCurrent(); }