r858 - in lutinjaxx/trunk/core/src/main/java/jaxx: compiler runtime
Author: tchemit Date: 2008-10-02 12:16:51 +0000 (Thu, 02 Oct 2008) New Revision: 858 Added: lutinjaxx/trunk/core/src/main/java/jaxx/runtime/JAXXContext.java Modified: lutinjaxx/trunk/core/src/main/java/jaxx/compiler/JAXXCompiler.java lutinjaxx/trunk/core/src/main/java/jaxx/runtime/JAXXObject.java Log: introduce JAXXContext (todo javadoc) Modified: lutinjaxx/trunk/core/src/main/java/jaxx/compiler/JAXXCompiler.java =================================================================== --- lutinjaxx/trunk/core/src/main/java/jaxx/compiler/JAXXCompiler.java 2008-09-24 19:58:26 UTC (rev 857) +++ lutinjaxx/trunk/core/src/main/java/jaxx/compiler/JAXXCompiler.java 2008-10-02 12:16:51 UTC (rev 858) @@ -719,6 +719,16 @@ javaFile.addField(createJAXXObjectDescriptorField()); javaFile.addMethod(createGetJAXXObjectDescriptorMethod()); +/* + * Gestion du context + */ + javaFile.addField(createContextField()); + javaFile.addMethod(createSetContextValueMethod()); + javaFile.addMethod(createSetContextValueNameMethod()); + javaFile.addMethod(createGetContextValueMethod()); + javaFile.addMethod(createGetContextValueNameMethod()); + javaFile.addMethod(createGetParentContainer()); + javaFile.addMethod(createGetParentContainerMore()); ClassDescriptor currentClass = root.getObjectClass(); MethodDescriptor firePropertyChange = null; while (firePropertyChange == null && currentClass != null) { @@ -778,7 +788,75 @@ } } +/* + * Gestion du context + */ + private JavaField createContextField() { + return new JavaField(Modifier.PROTECTED, "Map<Object,String>", "$contextMap", "new HashMap<Object,String>()"); + } + private JavaMethod createSetContextValueMethod() { + return new JavaMethod(Modifier.PUBLIC, "void", "setContextValue", + new JavaArgument[]{new JavaArgument("Object", "clazz")}, null, getSetContextValueMethodCode()); + } + private JavaMethod createSetContextValueNameMethod() { + return new JavaMethod(Modifier.PUBLIC, "void", "setContextValue", + new JavaArgument[]{new JavaArgument("Object", "clazz"),new JavaArgument("String", "name")}, null, getSetContextValueNameMethodCode()); + } + private JavaMethod createGetContextValueMethod() { + return new JavaMethod(Modifier.PUBLIC, "<T> T", "getContextValue", + new JavaArgument[]{new JavaArgument("Class<T>", "clazz")}, null, getGetContextValueMethodCode()); + } + private JavaMethod createGetContextValueNameMethod() { + return new JavaMethod(Modifier.PUBLIC, "<T> T", "getContextValue", + new JavaArgument[]{new JavaArgument("Class<T>", "clazz"),new JavaArgument("String", "name")}, null, getGetContextValueNameMethodCode()); + } + private JavaMethod createGetParentContainer(){ + return new JavaMethod(Modifier.PUBLIC, "<O extends Container> O", "getParentContainer", + new JavaArgument[]{new JavaArgument("Class<O>", "clazz")}, null, getGetParentContenerMethodCode()); + } + private JavaMethod createGetParentContainerMore(){ + return new JavaMethod(Modifier.PUBLIC, "<O extends Container> O", "getParentContainer", + new JavaArgument[]{new JavaArgument("Container", "top"),new JavaArgument("Class<O>", "clazz")}, null, getGetParentContenerMethodMoreCode()); + } + + private String getSetContextValueMethodCode() { + return "this.setContextValue(clazz, null);"; + } + + private String getSetContextValueNameMethodCode() { + StringBuffer result = new StringBuffer(); + result.append("$contextMap.put(clazz, name);"); + return result.toString(); + } + + private String getGetContextValueMethodCode() { + return "return this.getContextValue(clazz, null);"; + } + + private String getGetContextValueNameMethodCode() { + StringBuffer result = new StringBuffer(); + result.append("for (Map.Entry<Object,String> entry : $contextMap.entrySet()) {"); + result.append("if (clazz.isAssignableFrom(entry.getKey().getClass()) && (name == null || name == entry.getValue())) {"); + result.append("return (T) entry.getKey();}}"); + result.append("return null;"); + return result.toString(); + } + + private String getGetParentContenerMethodCode(){ + StringBuffer result = new StringBuffer(); + result.append("return this.getParentContainer(this, clazz);"); + return result.toString(); + } + + private String getGetParentContenerMethodMoreCode(){ + StringBuffer result = new StringBuffer(); + result.append("Container parent = top.getParent();"); + result.append("if (parent != null && !clazz.isAssignableFrom(parent.getClass())){parent = getParentContainer(parent, clazz);}"); + result.append("return (O)parent;"); + return result.toString(); + } + private JavaField createObjectMap() { return new JavaField(Modifier.PROTECTED, "Map<String,Object>", "$objectMap", "new HashMap<String,Object>()"); } Added: lutinjaxx/trunk/core/src/main/java/jaxx/runtime/JAXXContext.java =================================================================== --- lutinjaxx/trunk/core/src/main/java/jaxx/runtime/JAXXContext.java (rev 0) +++ lutinjaxx/trunk/core/src/main/java/jaxx/runtime/JAXXContext.java 2008-10-02 12:16:51 UTC (rev 858) @@ -0,0 +1,65 @@ +package jaxx.runtime; + +import java.awt.Container; + +/** + * todo (make javadoc :) ) + * + * @author letellier + */ +interface JAXXContext { + + /** + * Map actions objects used by JAXX interface. + * + * @param o todo + */ + public void setContextValue(Object o); + + /** + * Map actions objects used by JAXX interface and their names. + * + * @param o todo + * @param name todo + */ + public void setContextValue(Object o, String name); + + /** + * Return action object used by JAXX interface. + * This is an exemple to call a method in JAXX : + * + * <code> + * <JButton onActionPerformed='{getContextValue(Action.class).method(args[])}'/> + * </code> + * + * @param clazz todo + * @return todo + */ + public <T> T getContextValue(Class<T> clazz); + + /** + * Return action object used by JAXX interface. + * + * @param clazz todo + * @param name todo + * @return todo + */ + public <T> T getContextValue(Class<T> clazz, String name); + + /** + * Return parent's container corresponding to the Class clazz + * + * @param clazz clazz desired + * @return parent's container + */ + public <O extends Container> O getParentContainer(Class<O> clazz); + + /** + * Return parent's container corresponding to the Class clazz + * + * @param top todo + * @param clazz desired + * @return parent's container + */ + public <O extends Container> O getParentContainer(Container top, Class<O> clazz); +} Modified: lutinjaxx/trunk/core/src/main/java/jaxx/runtime/JAXXObject.java =================================================================== --- lutinjaxx/trunk/core/src/main/java/jaxx/runtime/JAXXObject.java 2008-09-24 19:58:26 UTC (rev 857) +++ lutinjaxx/trunk/core/src/main/java/jaxx/runtime/JAXXObject.java 2008-10-02 12:16:51 UTC (rev 858) @@ -5,7 +5,7 @@ package jaxx.runtime; /** The <code>JAXXObject</code> interface is implemented by all classes produced by the JAXX compiler. */ -public interface JAXXObject { +public interface JAXXObject extends JAXXContext{ /** * Retrieves an object defined in an XML tag by its ID. *
participants (1)
-
tchemit@users.labs.libre-entreprise.org