From: <sim...@us...> - 2010-12-05 16:33:54
|
Revision: 1110 http://zkforge.svn.sourceforge.net/zkforge/?rev=1110&view=rev Author: simon_massey Date: 2010-12-05 16:33:48 +0000 (Sun, 05 Dec 2010) Log Message: ----------- CommandBinder now had converter. Modified Paths: -------------- trunk/zktodo2/src/main/java/org/zkforge/zktodo2/binding/CommandBinder.java trunk/zktodo2/src/main/java/org/zkforge/zktodo2/binding/CommandBinderInit.java trunk/zktodo2/src/main/webapp/demo/commandBinderDemo.zul Added Paths: ----------- trunk/zktodo2/src/main/java/org/zkforge/zktodo2/binding/CommandConverter.java trunk/zktodo2/src/main/java/org/zkforge/zktodo2/binding/InputEventCommandConverter.java Removed Paths: ------------- trunk/zktodo2/src/main/java/org/zkforge/zktodo2/binding/OnChangeCommandBinder.java Modified: trunk/zktodo2/src/main/java/org/zkforge/zktodo2/binding/CommandBinder.java =================================================================== --- trunk/zktodo2/src/main/java/org/zkforge/zktodo2/binding/CommandBinder.java 2010-12-05 15:20:38 UTC (rev 1109) +++ trunk/zktodo2/src/main/java/org/zkforge/zktodo2/binding/CommandBinder.java 2010-12-05 16:33:48 UTC (rev 1110) @@ -8,17 +8,16 @@ public class CommandBinder { - protected Object[] extractMethodParametersFromEvent( Event e ){ - return new Object[]{}; - } - - public CommandBinder(Component comp, String eventName, final Object target, String methodName) { + public CommandBinder(Component comp, String eventName, final Object target, String methodName, final CommandConverter converter) { Method[] methods = target.getClass().getDeclaredMethods(); for (final Method m : methods) { if (m.getName().equals(methodName)) { comp.addEventListener(eventName, new EventListener() { public void onEvent(Event event) throws Exception { - Object[] parameters = extractMethodParametersFromEvent(event); + Object[] parameters = new Object[]{}; // default is void method signiture + if( converter != null ){ + parameters = converter.coerceToModelParameters(event, m); + } try { m.invoke(target, parameters); } catch (Exception e) { Modified: trunk/zktodo2/src/main/java/org/zkforge/zktodo2/binding/CommandBinderInit.java =================================================================== --- trunk/zktodo2/src/main/java/org/zkforge/zktodo2/binding/CommandBinderInit.java 2010-12-05 15:20:38 UTC (rev 1109) +++ trunk/zktodo2/src/main/java/org/zkforge/zktodo2/binding/CommandBinderInit.java 2010-12-05 16:33:48 UTC (rev 1110) @@ -1,6 +1,5 @@ package org.zkforge.zktodo2.binding; -import java.lang.reflect.Constructor; import java.util.Iterator; import java.util.List; import java.util.Map; @@ -41,20 +40,10 @@ protected String root = null; - protected Class<? extends CommandBinder> commandClass = CommandBinder.class; - @SuppressWarnings("unchecked") public void doInit(Page page, Map args) throws Exception { this.page = page; - root = (String) args.get("root"); - - String commandClassName = (String) args.get("commandClass"); - - if( commandClassName != null && !"".equals(commandClassName) ){ - commandClass = (Class<? extends CommandBinder>) Class.forName(commandClassName, true, CommandBinderInit.class.getClassLoader()); - } - return; } @@ -116,18 +105,29 @@ if (propName.startsWith("on")) { final Object[] annotationDetails = loadPropertyAnnotation(comp, propName, annotName); - String value = (String) annotationDetails[0]; - final Object variable = page.getXelVariable(value); + + String targetName = (String) annotationDetails[0]; - try { - Constructor<? extends CommandBinder> constructor = commandClass.getConstructor(Component.class, String.class, Object.class, String.class); - CommandBinder binder = constructor.newInstance(comp, propName, variable, id); - System.out.println(binder); - } catch (Exception e) { - System.err.println("Cannot find constructor with signiture (Component, String, Object, String) for class "+commandClass.getCanonicalName()); - e.printStackTrace(); - } + final Object variable = page.getXelVariable(targetName); + + CommandConverter converter = null; + String converterClassName = (String) annotationDetails[4]; + + if( converterClassName != null && !"".equals(converterClassName)) { + + try { + @SuppressWarnings("unchecked") + Class<? extends CommandConverter> converterClass = (Class<? extends CommandConverter>) + Class.forName(converterClassName, true, CommandBinderInit.class.getClassLoader()); + converter = converterClass.newInstance(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + new CommandBinder(comp, propName, variable, id, converter); + } } } Added: trunk/zktodo2/src/main/java/org/zkforge/zktodo2/binding/CommandConverter.java =================================================================== --- trunk/zktodo2/src/main/java/org/zkforge/zktodo2/binding/CommandConverter.java (rev 0) +++ trunk/zktodo2/src/main/java/org/zkforge/zktodo2/binding/CommandConverter.java 2010-12-05 16:33:48 UTC (rev 1110) @@ -0,0 +1,9 @@ +package org.zkforge.zktodo2.binding; + +import java.lang.reflect.Method; + +import org.zkoss.zk.ui.event.Event; + +public interface CommandConverter { + Object[] coerceToModelParameters( Event e, Method m ); +} \ No newline at end of file Copied: trunk/zktodo2/src/main/java/org/zkforge/zktodo2/binding/InputEventCommandConverter.java (from rev 1109, trunk/zktodo2/src/main/java/org/zkforge/zktodo2/binding/OnChangeCommandBinder.java) =================================================================== --- trunk/zktodo2/src/main/java/org/zkforge/zktodo2/binding/InputEventCommandConverter.java (rev 0) +++ trunk/zktodo2/src/main/java/org/zkforge/zktodo2/binding/InputEventCommandConverter.java 2010-12-05 16:33:48 UTC (rev 1110) @@ -0,0 +1,30 @@ +package org.zkforge.zktodo2.binding; + +import java.lang.reflect.Method; + +import org.zkoss.zk.ui.Component; +import org.zkoss.zk.ui.event.Event; +import org.zkoss.zk.ui.event.InputEvent; +import org.zkoss.zul.api.Datebox; +import org.zkoss.zul.api.Intbox; + +public class InputEventCommandConverter implements CommandConverter { + + public Object[] coerceToModelParameters(Event e, Method m) { + Component target = e.getTarget(); + InputEvent ie = (InputEvent) e; + + Object data = null; + if( target instanceof Intbox ){ + data = Integer.parseInt(ie.getValue()); + } else if ( target instanceof Datebox ) { + Datebox db = (Datebox)target; + data = db.getValue(); + } else { + data = ie.getValue(); + } + + return new Object[]{data}; + } + +} Deleted: trunk/zktodo2/src/main/java/org/zkforge/zktodo2/binding/OnChangeCommandBinder.java =================================================================== --- trunk/zktodo2/src/main/java/org/zkforge/zktodo2/binding/OnChangeCommandBinder.java 2010-12-05 15:20:38 UTC (rev 1109) +++ trunk/zktodo2/src/main/java/org/zkforge/zktodo2/binding/OnChangeCommandBinder.java 2010-12-05 16:33:48 UTC (rev 1110) @@ -1,34 +0,0 @@ -package org.zkforge.zktodo2.binding; - -import org.zkoss.zk.ui.Component; -import org.zkoss.zk.ui.event.Event; -import org.zkoss.zk.ui.event.InputEvent; -import org.zkoss.zul.api.Datebox; -import org.zkoss.zul.api.Intbox; - -public class OnChangeCommandBinder extends CommandBinder { - - public OnChangeCommandBinder(Component comp, String eventName, - Object target, String methodName) { - super(comp, eventName, target, methodName); - } - - @Override - protected Object[] extractMethodParametersFromEvent(Event e) { - Component target = e.getTarget(); - InputEvent ie = (InputEvent) e; - - Object data = null; - if( target instanceof Intbox ){ - data = Integer.parseInt(ie.getValue()); - } else if ( target instanceof Datebox ) { - Datebox db = (Datebox)target; - data = db.getValue(); - } else { - data = ie.getValue(); - } - - return new Object[]{data}; - } - -} Modified: trunk/zktodo2/src/main/webapp/demo/commandBinderDemo.zul =================================================================== --- trunk/zktodo2/src/main/webapp/demo/commandBinderDemo.zul 2010-12-05 15:20:38 UTC (rev 1109) +++ trunk/zktodo2/src/main/webapp/demo/commandBinderDemo.zul 2010-12-05 16:33:48 UTC (rev 1110) @@ -1,15 +1,14 @@ <?xml version="1.0" encoding="UTF-8"?> <?page title="Test Command Binder"?> -<?init class="org.zkforge.zktodo2.binding.CommandBinderInit" root="./buttons" ?> -<?init class="org.zkforge.zktodo2.binding.CommandBinderInit" root="./inputs" commandClass="org.zkforge.zktodo2.binding.OnChangeCommandBinder"?> +<?init class="org.zkforge.zktodo2.binding.CommandBinderInit" ?> <?variable-resolver class="org.zkoss.zkplus.spring.DelegatingVariableResolver" ?> <zk xmlns="http://www.zkoss.org/2005/zul"> <window title="Test Command Binder" width="640px" border="normal"> <vbox> <hbox id="inputs"> - Textbox:<textbox id="text" cols="40" onChanging="@{testBean}"/> - Intbox:<intbox id="integer" cols="1" onChange="@{testBean}"/> - Datebox:<datebox id="date" cols="14" onChange="@{testBean}"/> + Textbox:<textbox id="text" cols="40" onChanging="@{testBean, converter='org.zkforge.zktodo2.binding.InputEventCommandConverter'}"/> + Intbox:<intbox id="integer" cols="1" onChange="@{testBean, converter='org.zkforge.zktodo2.binding.InputEventCommandConverter'}"/> + Datebox:<datebox id="date" cols="14" onChange="@{testBean, converter='org.zkforge.zktodo2.binding.InputEventCommandConverter'}"/> </hbox> <hbox id="buttons"> <button id="click" label="ClickMe" width="36px" height="24px" onClick="@{testBean}"/> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |