[Buix-commits] r1502 - in trunk/guix-compiler-gwt/src/main/java/org/nuiton/guix: events generator tags/gwt
Author: kmorin Date: 2009-07-22 15:07:30 +0200 (Wed, 22 Jul 2009) New Revision: 1502 Added: trunk/guix-compiler-gwt/src/main/java/org/nuiton/guix/generator/GwtGenerator1.java trunk/guix-compiler-gwt/src/main/java/org/nuiton/guix/tags/gwt/UIObjectHandler.java Modified: trunk/guix-compiler-gwt/src/main/java/org/nuiton/guix/events/GwtEventHandler.java trunk/guix-compiler-gwt/src/main/java/org/nuiton/guix/generator/GwtAbstractClassGenerator.java trunk/guix-compiler-gwt/src/main/java/org/nuiton/guix/generator/GwtGenerator.java trunk/guix-compiler-gwt/src/main/java/org/nuiton/guix/generator/GwtInterfaceGenerator.java trunk/guix-compiler-gwt/src/main/java/org/nuiton/guix/tags/gwt/ApplicationHandler.java trunk/guix-compiler-gwt/src/main/java/org/nuiton/guix/tags/gwt/ButtonHandler.java trunk/guix-compiler-gwt/src/main/java/org/nuiton/guix/tags/gwt/CellHandler.java trunk/guix-compiler-gwt/src/main/java/org/nuiton/guix/tags/gwt/LabelHandler.java trunk/guix-compiler-gwt/src/main/java/org/nuiton/guix/tags/gwt/MenuBarHandler.java trunk/guix-compiler-gwt/src/main/java/org/nuiton/guix/tags/gwt/MenuHandler.java trunk/guix-compiler-gwt/src/main/java/org/nuiton/guix/tags/gwt/MenuItemHandler.java trunk/guix-compiler-gwt/src/main/java/org/nuiton/guix/tags/gwt/PanelHandler.java trunk/guix-compiler-gwt/src/main/java/org/nuiton/guix/tags/gwt/RowHandler.java trunk/guix-compiler-gwt/src/main/java/org/nuiton/guix/tags/gwt/TabPanelHandler.java trunk/guix-compiler-gwt/src/main/java/org/nuiton/guix/tags/gwt/TableHandler.java trunk/guix-compiler-gwt/src/main/java/org/nuiton/guix/tags/gwt/TextFieldHandler.java trunk/guix-compiler-gwt/src/main/java/org/nuiton/guix/tags/gwt/ToggleButtonHandler.java Log: Added the proxyEventInfo Modified: trunk/guix-compiler-gwt/src/main/java/org/nuiton/guix/events/GwtEventHandler.java =================================================================== --- trunk/guix-compiler-gwt/src/main/java/org/nuiton/guix/events/GwtEventHandler.java 2009-07-22 13:06:43 UTC (rev 1501) +++ trunk/guix-compiler-gwt/src/main/java/org/nuiton/guix/events/GwtEventHandler.java 2009-07-22 13:07:30 UTC (rev 1502) @@ -128,12 +128,12 @@ .append(" ") .append(m.getName()) .append("("); - for(Class clazz : m.getParameterTypes()) - result.append(clazz.getCanonicalName()) - .append(" ") - .append(Character.toLowerCase(clazz.getName().charAt(clazz.getName().lastIndexOf('.') + 1))) - .append(clazz.getName().substring(clazz.getName().lastIndexOf('.') + 2)) - .append(", "); + for(int n = 0 ; n < m.getParameterTypes().length ; n++) { + result.append(m.getParameterTypes()[n].getCanonicalName()) + .append(" arg") + .append(n) + .append(", "); + } result.delete(result.length() - 2, result.length()) .append(")") .append("{\n") Modified: trunk/guix-compiler-gwt/src/main/java/org/nuiton/guix/generator/GwtAbstractClassGenerator.java =================================================================== --- trunk/guix-compiler-gwt/src/main/java/org/nuiton/guix/generator/GwtAbstractClassGenerator.java 2009-07-22 13:06:43 UTC (rev 1501) +++ trunk/guix-compiler-gwt/src/main/java/org/nuiton/guix/generator/GwtAbstractClassGenerator.java 2009-07-22 13:07:30 UTC (rev 1502) @@ -19,10 +19,8 @@ package org.nuiton.guix.generator; //~--- non-JDK imports -------------------------------------------------------- -import com.google.gwt.user.client.Command; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.MenuBar; -import com.google.gwt.user.client.ui.MenuItem; import com.google.gwt.user.client.ui.TabPanel; import java.beans.IntrospectionException; import org.nuiton.guix.model.GuixModelObject; @@ -46,6 +44,8 @@ import org.nuiton.guix.tags.TagManager; import org.nuiton.guix.tags.gwt.CellHandler; import org.nuiton.guix.tags.gwt.MenuBarHandler; +import org.nuiton.guix.tags.gwt.MenuHandler; +import org.nuiton.guix.tags.gwt.MenuItemHandler; import org.nuiton.guix.tags.gwt.RowHandler; import org.nuiton.guix.tags.gwt.TabPanelHandler; import org.nuiton.guix.tags.gwt.TableHandler; @@ -61,6 +61,8 @@ List<StyleSheet> styleSheets = new ArrayList<StyleSheet>(); /** map of the different parts of the script associated with gmo */ Map<ScriptPart, Object> script; + /** Bindings to generate */ + Map<String,Map<String, String>> bindings2Generate = new HashMap<String,Map<String, String>>(); /** * Constructor @@ -80,8 +82,8 @@ script = sh.decomposeScript(gmo.getClassDescriptor().getScript()); } - @Override - public void generate(File out) { + //@Override + public JavaFile generates() { super.generate(); //add imports @@ -92,8 +94,11 @@ //add bodycode jf.addBodyCode((String) script.get(ScriptPart.BODYCODE)); - //add fields - addFields(gmo); +// //add implementation of firePropertyChange +// JavaArgument[] args = new JavaArgument[]{new JavaArgument("String", "name"), +// new JavaArgument("Object", "oldValue"), +// new JavaArgument("Object", "newValue")}; +// jf.addMethod(new JavaMethod(Modifier.PUBLIC, "void", "firePropertyChange", args, null, "super.firePropertyChange(name, oldValue, newValue);", null)); //add constructor jf.addMethod(new JavaMethod(Modifier.PUBLIC, null, gmo.getClassDescriptor().getName() + "Abstract", @@ -141,65 +146,18 @@ jf.addMethod(m); } } - //set superclass and interface - jf.setSuperClass(gmo.getClassDescriptor().getSuperClass().getPackageName() + "." + gmo.getClassDescriptor().getSuperClass().getName()); - jf.addInterface(gmo.getClassDescriptor().getName()); - - //save the file - saveFile(out); + + return jf; } catch (ClassNotFoundException eee) { if (log.isErrorEnabled()) { log.error(eee); } } + return null; } /** - * Adds fields to the file to generate - * - * @param gmo the GuixModelObject to analyze - */ - private void addFields(GuixModelObject gmo) { - for (GuixModelObject child : gmo.getChildren()) { - //if gmo represents a Guix tag - if (child.getClassDescriptor().getPackageName() == null - && TagManager.getGuixClassHandler(child.getClassDescriptor().getName()) != null) { - Class clazz; - try { - TagHandler th = (TagHandler)TagManager.getGuixClassHandler(child.getClassDescriptor().getName()).newInstance(); - if(th.getClassToGenerate() != null) { - clazz = th.getClassToGenerate(); - jf.addField(new JavaField(Modifier.FINAL | Modifier.PRIVATE, - clazz.getSimpleName(), child.getId(), - " new " + clazz.getSimpleName() + "(" + - ((child.getConstructor() != null) ? child.getConstructor() : "") + ")", child.getJavadoc()), - false); - } - } - catch (InstantiationException eee) { - if(log.isErrorEnabled()) { - log.error(eee); - } - } - catch (IllegalAccessException eee) { - if(log.isErrorEnabled()) { - log.error(eee); - } - } - } - else { - jf.addField(new JavaField(Modifier.FINAL | Modifier.PRIVATE, - (classes != null && classes.contains(child.getClassDescriptor().toString())) ? child.getClassDescriptor().getName() + "Abstract" : child.getClassDescriptor().getName(), - child.getId(), "new " + ((classes != null && classes.contains(child.getClassDescriptor().toString())) ? child.getClassDescriptor().getName() + "Impl" : child.getClassDescriptor().getName()) + "(" + - ((child.getConstructor() != null) ? child.getConstructor() : "") + ")", child.getJavadoc()), - false); - } - addFields(child); - } - } - - /** * Browse the GuixModelObjects to add the creation, initialization and bindings methods to the file to gnerate * * @param gmo the GuixModelObject to analyze @@ -214,7 +172,10 @@ String tabName = null; Class clazz = null; - if(gmo.getParent() != null && gmo.getParent().getClassDescriptor().toString().equals(TabPanel.class.getName())) { + if(gmo.getParent() != null + && (gmo.getParent().getClassDescriptor().toString().equals(TabPanel.class.getName()) + || (gmo.getParent().getClassDescriptor().getPackageName() == null + && gmo.getParent().getClassDescriptor().getName().equals("TabPanel")))) { int i = 0; while(i < gmo.getAttributeDescriptors().size() && tabName == null) { if(gmo.getAttributeDescriptors().get(i).getName().equalsIgnoreCase("name")) { @@ -233,9 +194,15 @@ TableHandler table = new TableHandler(gmo); //the table is a FlexPanel clazz = table.getClassToGenerate(); + jf.addField(new JavaField(Modifier.FINAL | Modifier.PRIVATE, + clazz.getSimpleName(), gmo.getId(), + " new " + clazz.getSimpleName() + "(" + + ((gmo.getConstructor() != null) ? gmo.getConstructor() : "") + ")", gmo.getJavadoc(), table), + false); + creationMethod.append(gmo.getId()) .append(".addStyleName(\"Table\");\n"); - processAttributes(clazz, gmo, creationMethod, null, geh); + processAttributes(clazz, gmo, creationMethod, null, geh, table); //add the component to its parent componentsTree.append(gmo.getParent().getId() == null ? "this" : gmo.getParent().getId()).append(".add(").append(gmo.getId()); @@ -270,7 +237,7 @@ //the cell can contain only one component else if (cell.getChildren().size() != 1) { if (log.isErrorEnabled()) { - log.error("Cells must contain only one tag !"); + log.error("Cells must contain only one tag ! : " + cell.getId() + " has " + cell.getChildren().size() + "children"); } } else { @@ -295,8 +262,13 @@ StringBuffer creationMethod = new StringBuffer(); MenuBarHandler menuBar = new MenuBarHandler(); clazz = menuBar.getClassToGenerate(); + jf.addField(new JavaField(Modifier.FINAL | Modifier.PRIVATE, + clazz.getSimpleName(), gmo.getId(), + " new " + clazz.getSimpleName() + "(" + + ((gmo.getConstructor() != null) ? gmo.getConstructor() : "") + ")", gmo.getJavadoc(), menuBar), + false); - processAttributes(clazz, gmo, creationMethod, null, geh); + processAttributes(clazz, gmo, creationMethod, null, geh, menuBar); //add the component to its parent componentsTree.append(gmo.getParent().getId() == null ? "this" : gmo.getParent().getId()).append(".add(").append(gmo.getId()); @@ -318,11 +290,12 @@ } //if gmo represents a "normal" tag else { + TagHandler th = null; + if(TagManager.getGuixClassHandler(gmo.getClassDescriptor().getName()) != null) { try { - clazz = ((TagHandler)TagManager.getGuixClassHandler(gmo.getClassDescriptor().getName()).newInstance()).getClassToGenerate(); - gmo.getClassDescriptor().setPackageName(clazz.getPackage().getName()); - gmo.getClassDescriptor().setName(clazz.getSimpleName()); + th = (TagHandler) TagManager.getGuixClassHandler(gmo.getClassDescriptor().getName()).newInstance(); + clazz = th.getClassToGenerate(); } catch (InstantiationException eee) { if(log.isErrorEnabled()) { @@ -337,10 +310,8 @@ } else if(gmo.getClassDescriptor().getSuperClass() != null && TagManager.getGuixClassHandler(gmo.getClassDescriptor().getSuperClass().getName()) != null) { try { - TagHandler th = (TagHandler)TagManager.getGuixClassHandler(gmo.getClassDescriptor().getSuperClass().getName()).newInstance(); + th = (TagHandler) TagManager.getGuixClassHandler(gmo.getClassDescriptor().getSuperClass().getName()).newInstance(); clazz = th.getClassToGenerate(); - gmo.getClassDescriptor().getSuperClass().setPackageName(clazz.getPackage().getName()); - gmo.getClassDescriptor().getSuperClass().setName(clazz.getSimpleName()); } catch (InstantiationException eee) { if(log.isErrorEnabled()) { @@ -353,13 +324,14 @@ } } } + ClassLoader cl = Label.class.getClassLoader(); ClassDescriptor cd = gmo.getClassDescriptor(); while (clazz == null && cd != null) { try { clazz = cl.loadClass(cd.getPackageName() + "." + cd.getName()); } - catch (ClassNotFoundException ex) { + catch (ClassNotFoundException eee) { cd = cd.getSuperClass(); } } @@ -370,7 +342,7 @@ try { clazz = cl.loadClass(cd.getPackageName() + "." + cd.getName()); } - catch (ClassNotFoundException ex) { + catch (ClassNotFoundException eee) { cd = cd.getSuperClass(); } } @@ -379,6 +351,28 @@ throw new ClassNotFoundException(); } + if (gmo.getClassDescriptor().getPackageName() == null + && TagManager.getGuixClassHandler(gmo.getClassDescriptor().getName()) != null) { + jf.addField(new JavaField(Modifier.FINAL | Modifier.PRIVATE, + clazz.getName(), gmo.getId(), + " new " + clazz.getSimpleName() + "(" + + ((gmo.getConstructor() != null) ? gmo.getConstructor() : "") + ")", gmo.getJavadoc(), th), + false); + } + else if(gmo.getId() == null) { + jf.addField(new JavaField(Modifier.FINAL | Modifier.PRIVATE, + (classes != null && classes.contains(gmo.getClassDescriptor().toString())) ? gmo.getClassDescriptor().getPackageName() + ".client." + gmo.getClassDescriptor().getName() + "Abstract" : gmo.getClassDescriptor().getPackageName() + "." + gmo.getClassDescriptor().getName(), + gmo.getClassDescriptor().getName().toLowerCase(), "this", gmo.getJavadoc(), th), + false); + } + else { + jf.addField(new JavaField(Modifier.FINAL | Modifier.PRIVATE, + (classes != null && classes.contains(gmo.getClassDescriptor().toString())) ? gmo.getClassDescriptor().getPackageName() + ".client." + gmo.getClassDescriptor().getName() + "Abstract" : gmo.getClassDescriptor().getPackageName() + "." + gmo.getClassDescriptor().getName(), + gmo.getId(), "new " + ((classes != null && classes.contains(gmo.getClassDescriptor().toString())) ? gmo.getClassDescriptor().getName() + "Impl" : gmo.getClassDescriptor().getName()) + "(" + + ((gmo.getConstructor() != null) ? gmo.getConstructor() : "") + ")", gmo.getJavadoc(), th), + false); + } + if (gmo.getParent() != null) { String capitalizedId = (gmo.getId().length() > 0) ? Character.toUpperCase(gmo.getId().charAt(0)) + gmo.getId().substring(1) : gmo.getId(); StringBuffer creationMethod = new StringBuffer(); @@ -392,11 +386,19 @@ } componentsTree.append(");\n"); } - processAttributes(clazz, gmo, creationMethod, null, geh); + processAttributes(clazz, gmo, creationMethod, null, geh, th); } else { - processAttributes(clazz, gmo, null, componentsTree, geh); + processAttributes(clazz, gmo, null, componentsTree, geh, th); + //set superclass and interface + if(th != null) { + jf.setSuperClass(th.getClassToGenerate().getName()); + } + else { + jf.setSuperClass(gmo.getClassDescriptor().getSuperClass().getPackageName() + "." + gmo.getClassDescriptor().getSuperClass().getName()); + } + jf.addInterface(gmo.getClassDescriptor().getName()); } for (GuixModelObject child : gmo.getChildren()) { Map<Method, String> methodBodies = browseModelObjects(child); @@ -422,11 +424,13 @@ * @param geh the event handler * @return */ - private void processAttributes(Class clazz, GuixModelObject gmo, StringBuffer creationMethod, StringBuffer componentsTree, GwtEventHandler geh) { + private void processAttributes(Class clazz, GuixModelObject gmo, StringBuffer creationMethod, StringBuffer componentsTree, GwtEventHandler geh, TagHandler th) { //browses the attributes for (AttributeDescriptor attr : gmo.getAttributeDescriptors()) { - boolean addQuote = false; + if(th != null && th.getAttrToGenerate(attr.getName()) != null) { + attr.setName(th.getAttrToGenerate(attr.getName())); + } //the attribute name with the first letter capitalized String capitalizedAttribute = (attr.getName().length() > 0) ? Character.toUpperCase(attr.getName().charAt(0)) + attr.getName().substring(1) : attr.getName(); //is the attribute a "real" attribute ? false if it represents an event or a constraint @@ -444,8 +448,10 @@ String binding = BindingUtils.processDataBindings(attr.getValue()); //if the attribute binds the value of another component attribute if (binding != null) { -// bindings.append("bindingGroup.addBinding(\n").append("org.jdesktop.beansbinding.Bindings.createAutoBinding(\n" + -// "org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ,").append("this").append(",org.jdesktop.beansbinding.ELProperty.create(\"${").append(binding).append("}\"),").append(gmo.getId()).append(",org.jdesktop.beansbinding.BeanProperty.create(\"").append(attr.getName()).append("\")").append("));\n").append("bindingGroup.bind();\n"); + if(!bindings2Generate.containsKey(gmo.getId())) { + bindings2Generate.put(gmo.getId(), new HashMap<String, String>()); + } + bindings2Generate.get(gmo.getId()).put(attr.getName(), binding); } else { java.lang.reflect.Method[] methods = clazz.getMethods(); @@ -500,11 +506,21 @@ String text = null, cmd = null; if(gmo.getClassDescriptor().getPackageName() == null && gmo.getClassDescriptor().getName().equals("Menu")) { + TagHandler th = new MenuHandler(); + Class clazz = th.getClassToGenerate(); + jf.addField(new JavaField(Modifier.FINAL | Modifier.PRIVATE, + clazz.getName(), gmo.getId(), + " new " + clazz.getSimpleName() + "(" + + ((gmo.getConstructor() != null) ? gmo.getConstructor() : "") + ")", gmo.getJavadoc(), th), + false); for(AttributeDescriptor attr : gmo.getAttributeDescriptors()) { if(attr.getName().equalsIgnoreCase("text")) { text = attr.getValue(); } else { + if(th.getAttrToGenerate(attr.getName()) != null) { + attr.setName(th.getAttrToGenerate(attr.getName())); + } //the attribute name with the first letter capitalized String capitalizedAttribute = (attr.getName().length() > 0) ? Character.toUpperCase(attr.getName().charAt(0)) + attr.getName().substring(1) : attr.getName(); @@ -536,14 +552,18 @@ } } else if(gmo.getClassDescriptor().getPackageName() == null && gmo.getClassDescriptor().getName().equals("MenuItem")) { + TagHandler th = new MenuItemHandler(); for(AttributeDescriptor attr : gmo.getAttributeDescriptors()) { if(attr.getName().equalsIgnoreCase("text")) { text = attr.getValue(); } - if(attr.getName().equalsIgnoreCase("command")) { + if(attr.getName().equalsIgnoreCase("action")) { cmd = attr.getValue(); } else { + if(th.getAttrToGenerate(attr.getName()) != null) { + attr.setName(th.getAttrToGenerate(attr.getName())); + } if (log.isErrorEnabled()) { log.error(attr.getName() + " cannot be set."); } @@ -563,5 +583,14 @@ result.put(Method.DATABINDING_INIT, bindings.toString()); return result; } + + public Map<String, Map<String, String>> getBindings2Generate() { + return bindings2Generate; + } + + @Override + public void generate(File out) { + throw new UnsupportedOperationException("Not supported yet."); + } } Modified: trunk/guix-compiler-gwt/src/main/java/org/nuiton/guix/generator/GwtGenerator.java =================================================================== --- trunk/guix-compiler-gwt/src/main/java/org/nuiton/guix/generator/GwtGenerator.java 2009-07-22 13:06:43 UTC (rev 1501) +++ trunk/guix-compiler-gwt/src/main/java/org/nuiton/guix/generator/GwtGenerator.java 2009-07-22 13:07:30 UTC (rev 1502) @@ -18,10 +18,18 @@ */ package org.nuiton.guix.generator; +import com.google.gwt.user.client.ui.Label; import java.io.File; import java.io.IOException; +import java.lang.annotation.Annotation; +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.nuiton.guix.tags.TagHandler; /** * Generates the interface, abstract class and implementation class @@ -34,13 +42,15 @@ /** log */ private Log log = LogFactory.getLog(GwtGenerator.class); - + Map<GwtJavaFileGenerator, File> generators = new HashMap<GwtJavaFileGenerator, File>(); + @Override - public void generate() { + public JavaFile generate() { String gmoClassName = gmo.getClassDescriptor().getName(); File outDir = new File(destDir, "client"); - if(!outDir.exists()) + if (!outDir.exists()) { outDir.mkdir(); + } File out = new File(outDir, gmoClassName + ".java"); File outAbstract = new File(outDir, gmoClassName + "Abstract.java"); File outImpl = new File(outDir, gmoClassName + "Impl.java"); @@ -69,21 +79,28 @@ GwtConfigGenerator gcg = new GwtConfigGenerator(gmo); GwtHtmlGenerator ghg = new GwtHtmlGenerator(gmo, launcherName); File outConfigMain = new File(destDir, launcherName.substring(launcherName.lastIndexOf('.') + 1) + ".gwt.xml"); - File publicDir = new File(destDir,"public"); - if(!publicDir.exists()) + File publicDir = new File(destDir, "public"); + if (!publicDir.exists()) { publicDir.mkdir(); + } File outHtmlMain = new File(publicDir, launcherName.substring(launcherName.lastIndexOf('.') + 1) + ".html"); gcg.generate(outConfigMain); ghg.generate(outHtmlMain); } ging.generate(out); - gacg.generate(outAbstract); + generators.put(ging, out); + JavaFile jf = gacg.generates(); + generators.put(gacg, outAbstract); gimg.generate(outImpl); + generators.put(gimg, outImpl); serializer.startTag("", "bean"); serializer.attribute("", "id", gmoClassName.replace(out.getName().charAt(0), Character.toLowerCase(out.getName().charAt(0)))).attribute("", "class", gmoClassName + "Impl").attribute("", "singleton", "false").endTag("", "bean"); + setBindingsToGenerate(gacg.getBindings2Generate()); + + return jf; } catch (IllegalArgumentException ex) { log.error(ex); @@ -98,6 +115,248 @@ else if (log.isWarnEnabled()) { log.warn(gmo.getClassDescriptor().getName() + " has already been generated and is up to date."); } + return null; } + @Override + public void saveFiles() { + for (JavaFileGenerator gen : generators.keySet()) { + gen.saveFile(generators.get(gen)); + } + } + + @Override + public List<Class> generateBindings(StringBuffer dbCreation, StringBuffer dbDeletion, TagHandler prevTh, JavaFile jf, Class clazz, + String[] binding, int i, List<String> alreadyChecked, String methodToInvoke, Map<GuixGenerator, JavaFile> generatedFiles) { + boolean bindingExists = false; + String returnType = null; + String getter = null; + JavaFile nextFile = null; + Class nextClazz = null; + TagHandler th = null; + String model = null; + Class listener = null; + String addMethod = null; + String removeMethod = null; + List<Class> result = new ArrayList<Class>(); + + if (binding[i].endsWith(")")) { + String realMethodName = binding[i].substring(0, binding[i].indexOf("(")); + String realAttributename = null; + if(prevTh != null) { + if(binding[i].startsWith("get")) { + realAttributename = prevTh.getAttrToGenerate(Character.toLowerCase(binding[i].charAt(3)) + binding[i].substring(4, binding[i].indexOf("("))); + if(realAttributename != null) { + realMethodName = "get" + Character.toUpperCase(realAttributename.charAt(0)) + realAttributename.substring(1); + } + } + else if(binding[i].startsWith("is")){ + realAttributename = prevTh.getAttrToGenerate(Character.toLowerCase(binding[i].charAt(2)) + binding[i].substring(3, binding[i].indexOf("("))); + if(realAttributename != null) { + realMethodName = "is" + Character.toUpperCase(realAttributename.charAt(0)) + realAttributename.substring(1); + } + } + } + if(realAttributename == null) { + if(binding[i].startsWith("get")) { + realAttributename = Character.toLowerCase(binding[i].charAt(3)) + binding[i].substring(4, binding[i].indexOf("(")); + } + else if(binding[i].startsWith("is")){ + realAttributename = Character.toLowerCase(binding[i].charAt(2)) + binding[i].substring(3, binding[i].indexOf("(")); + } + else { + realAttributename = binding[i].substring(0, binding[i].indexOf("(")); + } + } + if (jf != null) { + bindingExists = jf.getMethod(realMethodName, null) != null; + if (bindingExists) { + returnType = jf.getMethod(realMethodName, null).getReturnType(); + JavaField f = jf.getField(realAttributename); + if (f != null) { + th = f.getTagHandler(); + } + } + } + else { + try { + clazz.getMethod(realMethodName, null); + returnType = clazz.getMethod(realMethodName, null).getReturnType().getName(); + bindingExists = true; + } + catch (NoSuchMethodException eee) { + bindingExists = false; + } + } + getter = realMethodName + binding[i].substring(binding[i].indexOf("(")); + binding[i] = getter; + } + else { + String realAttributename = null; + if(prevTh != null) { + realAttributename = prevTh.getAttrToGenerate(binding[i]); + } + if(realAttributename == null) { + realAttributename = binding[i]; + } + if (jf != null) { + bindingExists = jf.getMethod("get" + Character.toUpperCase(realAttributename.charAt(0)) + realAttributename.substring(1), null) != null || jf.getMethod("is" + Character.toUpperCase(realAttributename.charAt(0)) + realAttributename.substring(1), null) != null; + if (bindingExists) { + returnType = jf.getMethod("get" + Character.toUpperCase(realAttributename.charAt(0)) + realAttributename.substring(1), null) != null ? jf.getMethod("get" + Character.toUpperCase(realAttributename.charAt(0)) + realAttributename.substring(1), null).getReturnType() + : jf.getMethod("is" + Character.toUpperCase(realAttributename.charAt(0)) + realAttributename.substring(1), null).getReturnType(); + } + + getter = jf.getMethod("get" + Character.toUpperCase(realAttributename.charAt(0)) + realAttributename.substring(1), null) != null ? "get" + Character.toUpperCase(realAttributename.charAt(0)) + realAttributename.substring(1) + "()" + : "is" + Character.toUpperCase(realAttributename.charAt(0)) + realAttributename.substring(1) + "()"; + + JavaField f = jf.getField(realAttributename); + if (f != null) { + th = f.getTagHandler(); + } + } + else { + try { + clazz.getMethod("get" + Character.toUpperCase(realAttributename.charAt(0)) + realAttributename.substring(1), null); + returnType = clazz.getMethod("get" + Character.toUpperCase(realAttributename.charAt(0)) + realAttributename.substring(1), null).getReturnType().getName(); + getter = "get" + Character.toUpperCase(realAttributename.charAt(0)) + realAttributename.substring(1) + "()"; + bindingExists = true; + } + catch (NoSuchMethodException eee) { + try { + clazz.getMethod("is" + Character.toUpperCase(realAttributename.charAt(0)) + realAttributename.substring(1), null); + returnType = clazz.getMethod("is" + Character.toUpperCase(realAttributename.charAt(0)) + realAttributename.substring(1), null).getReturnType().getName(); + getter = "is" + Character.toUpperCase(realAttributename.charAt(0)) + realAttributename.substring(1) + "()"; + bindingExists = true; + } + catch (NoSuchMethodException eee2) { + bindingExists = false; + } + } + } + binding[i] = getter; + } + if (bindingExists) { + if (i == binding.length - 1 && prevTh != null) { + String getterWoBraces = getter.substring(0, getter.indexOf("(")); + if (prevTh.hasEventInfosAboutMethod(getterWoBraces)) { + model = prevTh.getEventInfosModelName(getterWoBraces); + listener = prevTh.getEventInfosListenerClass(getterWoBraces); + addMethod = prevTh.getEventInfosAddListenerMethodName(getterWoBraces); + removeMethod = prevTh.getEventInfosRemoveListenerMethodName(getterWoBraces); + } + else { + log.error("Impossible binding"); + return null; + } + + dbCreation.append("if("); + dbDeletion.append("if("); + if (alreadyChecked != null && !alreadyChecked.isEmpty()) { + for (int j = 0; j < alreadyChecked.size(); j++) { + dbCreation.append(alreadyChecked.get(0)); + dbDeletion.append(alreadyChecked.get(0)); + for (int k = 1; k <= j; k++) { + dbCreation.append(".").append(alreadyChecked.get(k)); + dbDeletion.append(".").append(alreadyChecked.get(k)); + } + dbCreation.append(" != null && "); + dbDeletion.append(" != null && "); + } + + if (binding.length > alreadyChecked.size() + 1) { + for (int j = 0; j < alreadyChecked.size(); j++) { + dbCreation.append(alreadyChecked.get(j)).append("."); + dbDeletion.append(alreadyChecked.get(j)).append("."); + } + dbCreation.append(getter).append(" != null"); + dbDeletion.append(getter).append(" != null"); + } + else { + dbCreation.delete(dbCreation.length() - 4, dbCreation.length()); + dbDeletion.delete(dbDeletion.length() - 4, dbDeletion.length()); + } + } + else { + dbCreation.append(getter).append(" != null"); + dbDeletion.append(getter).append(" != null"); + } + dbCreation.append(") {\n"); + dbDeletion.append(") {\n"); + + if (alreadyChecked != null) { + for (int j = 0; j < alreadyChecked.size(); j++) { + dbCreation.append(alreadyChecked.get(j)).append("."); + dbDeletion.append(alreadyChecked.get(j)).append("."); + } + } + if (model != null) { + dbCreation.append("get").append(Character.toUpperCase(model.charAt(0))).append(model.substring(1)).append("()").append("."); + dbDeletion.append("get").append(Character.toUpperCase(model.charAt(0))).append(model.substring(1)).append("()").append("."); + } +// dbCreation.append(addMethod).append("((").append(listener.getName()).append(") org.nuiton.guix.runtime.Util.getEventListener(").append(listener.getName()).append(".class,this,\"onChangeFrom").append(methodToInvoke).append("\"));\n}\n"); +// dbDeletion.append(removeMethod).append("((").append(listener.getName()).append(") org.nuiton.guix.runtime.Util.getEventListener(").append(listener.getName()).append(".class,this,\"onChangeFrom").append(methodToInvoke).append("\"));\n}\n"); + dbCreation.append(addMethod).append("(new ").append(listener.getName()).append("() {\n"); + dbDeletion.append(removeMethod).append("(new ").append(listener.getName()).append("() {\n"); + for(Method m : listener.getMethods()) { + StringBuffer sb = new StringBuffer(); + for(Annotation a : m.getDeclaredAnnotations()) { + dbCreation.append(a.toString()).append("\n"); + } + //add the method that handles the event + sb.append("public ") + .append(m.getReturnType().getCanonicalName()) + .append(" ") + .append(m.getName()) + .append("("); + for(int n = 0 ; n < m.getParameterTypes().length ; n++) { + sb.append(m.getParameterTypes()[n].getCanonicalName()) + .append(" arg") + .append(n) + .append(", "); + } + sb.delete(sb.length() - 2, sb.length()) + .append(")") + .append(" {\n") + .append("onChangeFrom").append(methodToInvoke) + .append("();\n}\n"); + dbCreation.append(sb); + dbDeletion.append(sb); + } + dbCreation.append("});\n}\n"); + dbDeletion.append("});\n}\n"); + } + + try { + nextClazz = Label.class.getClassLoader().loadClass(returnType); + } + catch (ClassNotFoundException eee) { + try { + nextClazz = ClassLoader.getSystemClassLoader().loadClass(returnType); + } + catch (ClassNotFoundException eee2) { + for (JavaFile javaFile : generatedFiles.values()) { + if (returnType.equals(javaFile.getPackageName() + "." + javaFile.getClassName())) { + nextFile = javaFile; + break; + } + } + } + } + if (alreadyChecked == null) { + alreadyChecked = new ArrayList<String>(); + } + alreadyChecked.add(getter); + if (i + 1 < binding.length) { + return generateBindings(dbCreation, dbDeletion, th, nextFile, nextClazz, binding, i + 1, alreadyChecked, methodToInvoke, generatedFiles); + } + else { + result.add(listener); + return result; + } + } + else if (log.isErrorEnabled()) { + log.error("unable to bind " + binding[i]); + } + return result; + } } Added: trunk/guix-compiler-gwt/src/main/java/org/nuiton/guix/generator/GwtGenerator1.java =================================================================== --- trunk/guix-compiler-gwt/src/main/java/org/nuiton/guix/generator/GwtGenerator1.java (rev 0) +++ trunk/guix-compiler-gwt/src/main/java/org/nuiton/guix/generator/GwtGenerator1.java 2009-07-22 13:07:30 UTC (rev 1502) @@ -0,0 +1,303 @@ +/** + * *##% guix-compiler-gwt + * Copyright (C) 2009 CodeLutin + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* + */ +package org.nuiton.guix.generator; + +import com.google.gwt.user.client.ui.Label; +import java.beans.PropertyChangeListener; +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.guix.tags.TagHandler; + +/** + * Generates the interface, abstract class and implementation class + * corresponding to the class described by the user, + * as well as the configuation file and html file if this class is the main class. + * + * @author kmorin + */ +public class GwtGenerator1 extends GuixGenerator { + + /** log */ + private Log log = LogFactory.getLog(GwtGenerator1.class); + Map<GwtJavaFileGenerator, File> generators = new HashMap<GwtJavaFileGenerator, File>(); + + @Override + public JavaFile generate() { + String gmoClassName = gmo.getClassDescriptor().getName(); + File outDir = new File(destDir, "client"); + if (!outDir.exists()) { + outDir.mkdir(); + } + File out = new File(outDir, gmoClassName + ".java"); + File outAbstract = new File(outDir, gmoClassName + "Abstract.java"); + File outImpl = new File(outDir, gmoClassName + "Impl.java"); + + if (lastModification > out.lastModified()) { + try { + if (log.isInfoEnabled()) { + log.info("Generation of " + gmo.getClassDescriptor().getName()); + } + if (!out.exists()) { + try { + out.createNewFile(); + outAbstract.createNewFile(); + outImpl.createNewFile(); + } + catch (IOException ex) { + log.error(ex); + } + } + GwtInterfaceGenerator ging = new GwtInterfaceGenerator(gmo, classes); + GwtAbstractClassGenerator gacg = new GwtAbstractClassGenerator(gmo, classes); + GwtImplementationGenerator gimg = new GwtImplementationGenerator(gmo, classes); + + if (mainClass) { + gimg.addMainMethod(); + GwtConfigGenerator gcg = new GwtConfigGenerator(gmo); + GwtHtmlGenerator ghg = new GwtHtmlGenerator(gmo, launcherName); + File outConfigMain = new File(destDir, launcherName.substring(launcherName.lastIndexOf('.') + 1) + ".gwt.xml"); + File publicDir = new File(destDir, "public"); + if (!publicDir.exists()) { + publicDir.mkdir(); + } + File outHtmlMain = new File(publicDir, launcherName.substring(launcherName.lastIndexOf('.') + 1) + ".html"); + gcg.generate(outConfigMain); + ghg.generate(outHtmlMain); + } + + ging.generate(out); + generators.put(ging, out); + JavaFile jf = gacg.generates(); + generators.put(gacg, outAbstract); + gimg.generate(outImpl); + generators.put(gimg, outImpl); + + serializer.startTag("", "bean"); + serializer.attribute("", "id", gmoClassName.replace(out.getName().charAt(0), + Character.toLowerCase(out.getName().charAt(0)))).attribute("", "class", gmoClassName + "Impl").attribute("", "singleton", "false").endTag("", "bean"); + setBindingsToGenerate(gacg.getBindings2Generate()); + + return jf; + } + catch (IllegalArgumentException ex) { + log.error(ex); + } + catch (IllegalStateException ex) { + log.error(ex); + } + catch (IOException ex) { + log.error(ex); + } + } + else if (log.isWarnEnabled()) { + log.warn(gmo.getClassDescriptor().getName() + " has already been generated and is up to date."); + } + return null; + } + + @Override + public void saveFiles() { + for (JavaFileGenerator gen : generators.keySet()) { + gen.saveFile(generators.get(gen)); + } + } + + @Override + public List<Class> generateBindings(StringBuffer dbCreation, StringBuffer dbDeletion, TagHandler prevTh, + JavaFile jf, Class clazz,String[] binding, int i, List<String> alreadyChecked, String methodToInvoke, Map<GuixGenerator, JavaFile> generatedFiles) { + boolean bindingExists = false; + String returnType = null; + String getter = null; + JavaFile nextFile = null; + Class nextClazz = null; + TagHandler th = null; + String model = null; + Class listener = null; + String addMethod = null; + String removeMethod = null; + List<Class> result = new ArrayList<Class>(); + + if (binding[i].endsWith(")")) { + if (jf != null) { + bindingExists = jf.getMethod(binding[i].substring(0, binding[i].lastIndexOf("(")), null) != null; + if (bindingExists) { + returnType = jf.getMethod(binding[i].substring(0, binding[i].lastIndexOf("(")), null).getReturnType(); + String s = binding[i]; + if (s.startsWith("get")) { + s = Character.toLowerCase(s.charAt(3)) + s.substring(4, s.lastIndexOf("(")); + } + else if (s.startsWith("is")) { + s = Character.toLowerCase(s.charAt(2)) + s.substring(3, s.lastIndexOf("(")); + } + JavaField f = jf.getField(s); + if (f != null) { + th = f.getTagHandler(); + } + } + } + else { + try { + clazz.getMethod(binding[i].substring(0, binding[i].lastIndexOf("(")), null); + returnType = clazz.getMethod(binding[i].substring(0, binding[i].lastIndexOf("(")), null).getReturnType().getName(); + bindingExists = true; + } + catch (NoSuchMethodException eee) { + bindingExists = false; + } + } + getter = binding[i]; + } + else { + if (jf != null) { + bindingExists = jf.getMethod("get" + Character.toUpperCase(binding[i].charAt(0)) + binding[i].substring(1), null) != null || jf.getMethod("is" + Character.toUpperCase(binding[i].charAt(0)) + binding[i].substring(1), null) != null; + if (bindingExists) { + returnType = jf.getMethod("get" + Character.toUpperCase(binding[i].charAt(0)) + binding[i].substring(1), null) != null ? jf.getMethod("get" + Character.toUpperCase(binding[i].charAt(0)) + binding[i].substring(1), null).getReturnType() + : jf.getMethod("is" + Character.toUpperCase(binding[i].charAt(0)) + binding[i].substring(1), null).getReturnType(); + } + + getter = jf.getMethod("get" + Character.toUpperCase(binding[i].charAt(0)) + binding[i].substring(1), null) != null ? "get" + Character.toUpperCase(binding[i].charAt(0)) + binding[i].substring(1) + "()" + : "is" + Character.toUpperCase(binding[i].charAt(0)) + binding[i].substring(1) + "()"; + + JavaField f = jf.getField(binding[i]); + if (f != null) { + th = f.getTagHandler(); + } + } + else { + try { + clazz.getMethod("get" + Character.toUpperCase(binding[i].charAt(0)) + binding[i].substring(1), null); + returnType = clazz.getMethod("get" + Character.toUpperCase(binding[i].charAt(0)) + binding[i].substring(1), null).getReturnType().getName(); + getter = "get" + Character.toUpperCase(binding[i].charAt(0)) + binding[i].substring(1) + "()"; + bindingExists = true; + } + catch (NoSuchMethodException eee) { + try { + clazz.getMethod("is" + Character.toUpperCase(binding[i].charAt(0)) + binding[i].substring(1), null); + returnType = clazz.getMethod("is" + Character.toUpperCase(binding[i].charAt(0)) + binding[i].substring(1), null).getReturnType().getName(); + getter = "is" + Character.toUpperCase(binding[i].charAt(0)) + binding[i].substring(1) + "()"; + bindingExists = true; + } + catch (NoSuchMethodException eee2) { + bindingExists = false; + } + } + } + } + if (bindingExists) { + if (i == binding.length - 1 && prevTh != null) { + String getterWoBraces = getter.substring(0, getter.lastIndexOf("(")); + if (prevTh.hasEventInfosAboutMethod(getterWoBraces)) { + model = prevTh.getEventInfosModelName(getterWoBraces); + listener = prevTh.getEventInfosListenerClass(getterWoBraces); + addMethod = prevTh.getEventInfosAddListenerMethodName(getterWoBraces); + removeMethod = prevTh.getEventInfosRemoveListenerMethodName(getterWoBraces); + } + else { + log.error("Impossible binding"); + return null; + } + + dbCreation.append("if("); + dbDeletion.append("if("); + if (alreadyChecked != null && !alreadyChecked.isEmpty()) { + for (int j = 0; j < alreadyChecked.size(); j++) { + dbCreation.append(alreadyChecked.get(0)); + dbDeletion.append(alreadyChecked.get(0)); + for (int k = 1; k <= j; k++) { + dbCreation.append(".").append(alreadyChecked.get(k)); + dbDeletion.append(".").append(alreadyChecked.get(k)); + } + dbCreation.append(" != null && "); + dbDeletion.append(" != null && "); + } + + if (binding.length > alreadyChecked.size() + 1) { + for (int j = 0; j < alreadyChecked.size(); j++) { + dbCreation.append(alreadyChecked.get(j)).append("."); + dbDeletion.append(alreadyChecked.get(j)).append("."); + } + dbCreation.append(getter).append(" != null"); + dbDeletion.append(getter).append(" != null"); + } + else { + dbCreation.delete(dbCreation.length() - 4, dbCreation.length()); + dbDeletion.delete(dbDeletion.length() - 4, dbDeletion.length()); + } + } + else { + dbCreation.append(getter).append(" != null"); + dbDeletion.append(getter).append(" != null"); + } + dbCreation.append(") {\n"); + dbDeletion.append(") {\n"); + + if (alreadyChecked != null) { + for (int j = 0; j < alreadyChecked.size(); j++) { + dbCreation.append(alreadyChecked.get(j)).append("."); + dbDeletion.append(alreadyChecked.get(j)).append("."); + } + } + if (model != null) { + dbCreation.append("get").append(Character.toUpperCase(model.charAt(0))).append(model.substring(1)).append("()").append("."); + dbDeletion.append("get").append(Character.toUpperCase(model.charAt(0))).append(model.substring(1)).append("()").append("."); + } + dbCreation.append(addMethod).append("((").append(listener.getName()).append(") org.nuiton.guix.runtime.Util.getEventListener(").append(listener.getName()).append(".class,this,\"onChangeFrom").append(methodToInvoke).append("\"));\n}\n"); + dbDeletion.append(removeMethod).append("((").append(listener.getName()).append(") org.nuiton.guix.runtime.Util.getEventListener(").append(listener.getName()).append(".class,this,\"onChangeFrom").append(methodToInvoke).append("\"));\n}\n"); + } + + try { + nextClazz = Label.class.getClassLoader().loadClass(returnType); + } + catch (ClassNotFoundException eee) { + try { + nextClazz = ClassLoader.getSystemClassLoader().loadClass(returnType); + } + catch (ClassNotFoundException eee2) { + for (JavaFile javaFile : generatedFiles.values()) { + if (returnType.equals(javaFile.getPackageName() + "." + javaFile.getClassName())) { + nextFile = javaFile; + break; + } + } + } + } + if (alreadyChecked == null) { + alreadyChecked = new ArrayList<String>(); + } + alreadyChecked.add(getter); + if (i + 1 < binding.length) { + return generateBindings(dbCreation, dbDeletion, th, nextFile, nextClazz,null, i + 1, alreadyChecked, methodToInvoke, generatedFiles); + } + else { + result.add(listener); + return result; + } + } + else if (log.isErrorEnabled()) { + log.error("unable to bind " + binding[i]); + } + return result; + } +} Modified: trunk/guix-compiler-gwt/src/main/java/org/nuiton/guix/generator/GwtInterfaceGenerator.java =================================================================== --- trunk/guix-compiler-gwt/src/main/java/org/nuiton/guix/generator/GwtInterfaceGenerator.java 2009-07-22 13:06:43 UTC (rev 1501) +++ trunk/guix-compiler-gwt/src/main/java/org/nuiton/guix/generator/GwtInterfaceGenerator.java 2009-07-22 13:07:30 UTC (rev 1502) @@ -48,8 +48,7 @@ JavaFile.INTERFACE, gmo.getClassDescriptor().getPackageName() + ".client", gmo.getClassDescriptor().getName(), - null, - gmo.getJavadoc()); + null, gmo.getJavadoc()); } @Override Modified: trunk/guix-compiler-gwt/src/main/java/org/nuiton/guix/tags/gwt/ApplicationHandler.java =================================================================== --- trunk/guix-compiler-gwt/src/main/java/org/nuiton/guix/tags/gwt/ApplicationHandler.java 2009-07-22 13:06:43 UTC (rev 1501) +++ trunk/guix-compiler-gwt/src/main/java/org/nuiton/guix/tags/gwt/ApplicationHandler.java 2009-07-22 13:07:30 UTC (rev 1502) @@ -9,7 +9,7 @@ * * @author kevin */ -public class ApplicationHandler extends org.nuiton.guix.tags.ApplicationHandler { +public class ApplicationHandler extends UIObjectHandler { public ApplicationHandler() { super(); Modified: trunk/guix-compiler-gwt/src/main/java/org/nuiton/guix/tags/gwt/ButtonHandler.java =================================================================== --- trunk/guix-compiler-gwt/src/main/java/org/nuiton/guix/tags/gwt/ButtonHandler.java 2009-07-22 13:06:43 UTC (rev 1501) +++ trunk/guix-compiler-gwt/src/main/java/org/nuiton/guix/tags/gwt/ButtonHandler.java 2009-07-22 13:07:30 UTC (rev 1502) @@ -9,8 +9,12 @@ * * @author kevin */ -public class ButtonHandler extends org.nuiton.guix.tags.ButtonHandler { +public class ButtonHandler extends UIObjectHandler { + public ButtonHandler() { + super(); + } + @Override public Class getClassToGenerate() { return com.google.gwt.user.client.ui.Button.class; Modified: trunk/guix-compiler-gwt/src/main/java/org/nuiton/guix/tags/gwt/CellHandler.java =================================================================== --- trunk/guix-compiler-gwt/src/main/java/org/nuiton/guix/tags/gwt/CellHandler.java 2009-07-22 13:06:43 UTC (rev 1501) +++ trunk/guix-compiler-gwt/src/main/java/org/nuiton/guix/tags/gwt/CellHandler.java 2009-07-22 13:07:30 UTC (rev 1502) @@ -18,6 +18,7 @@ */ package org.nuiton.guix.tags.gwt; +import org.nuiton.guix.model.AttributeDescriptor; import org.nuiton.guix.model.GuixModelObject; /** @@ -25,8 +26,18 @@ * * @author kevin */ -public class CellHandler extends org.nuiton.guix.tags.CellHandler { - +public class CellHandler extends TableHandler { + /** id of the object contained by the cell */ + private String id = null; + /** number of columns of the cell */ + private int columns = 1; + /** number of rows of the cell */ + private int rows = 1; + /** index of the row */ + private int row = -1; + /** index of the column */ + private int column = -1; + /** * Constructor */ @@ -40,7 +51,43 @@ * @param cell the GuixModelObject which represents the cell */ public CellHandler(GuixModelObject cell) { - super(cell); + assert cell.getChildren().size() == 1; + id = cell.getChildren().get(0).getId(); + for (AttributeDescriptor attr : cell.getAttributeDescriptors()) { + if (attr.getName().equals("columns")) { + columns = Integer.valueOf(attr.getValue()); + } + else if (attr.getName().equals("column")) { + column = Integer.valueOf(attr.getValue()); + } + else if (attr.getName().equals("rows")) { + rows = Integer.valueOf(attr.getValue()); + } + else if (attr.getName().equals("weightx")) { + weightx = Double.valueOf(attr.getValue()); + } + else if (attr.getName().equals("weighty")) { + weighty = Double.valueOf(attr.getValue()); + } + else if (attr.getName().equals("ipadx")) { + ipadx = Integer.valueOf(attr.getValue()); + } + else if (attr.getName().equals("ipady")) { + ipady = Integer.valueOf(attr.getValue()); + } + else if (attr.getName().equals("halign")) { + horizontalAlignment = getHalign(attr.getValue()); + } + else if (attr.getName().equals("valign")) { + verticalAlignment = getValign(attr.getValue()); + } + else if (attr.getName().equals("fill")) { + fill = attr.getValue(); + } + else if (attr.getName().equals("insets")) { + insets = attr.getValue(); + } + } } /** @@ -50,13 +97,82 @@ * @param row the row which contains the cell */ public CellHandler(GuixModelObject cell, RowHandler row) { - super(cell,row); + this(cell); + //if the attributes that the row contains too have not been defined by the user within the cell, + //but have been defined in the row (or the table), set them + if (horizontalAlignment == null) { + horizontalAlignment = row.getHorizontalAlignment() == null ? TableHandler.DEFAULT_HORIZONTAL_ALIGNMENT : row.getHorizontalAlignment(); + } + if (verticalAlignment == null) { + verticalAlignment = row.getVerticalAlignment() == null ? TableHandler.DEFAULT_VERTICAL_ALIGNMENT : row.getVerticalAlignment(); + } + if (fill == null) { + fill = row.getFill() == null ? TableHandler.DEFAULT_FILL : row.getFill(); + } + if (insets == null) { + insets = row.getInsets() == null ? TableHandler.DEFAULT_INSETS : row.getInsets(); + } + if (ipadx == null) { + ipadx = row.getIpadx() == null ? TableHandler.DEFAULT_IPADX : row.getIpadx(); + } + if (ipady == null) { + ipady = row.getIpady() == null ? TableHandler.DEFAULT_IPADY : row.getIpady(); + } + if (weightx == null) { + weightx = row.getWeightx() == null ? TableHandler.DEFAULT_WEIGHTX : row.getWeightx(); + } + if (weighty == null) { + weighty = row.getWeighty() == null ? TableHandler.DEFAULT_WEIGHTY : row.getWeighty(); + } + if(this.row == -1) { + this.row = row.getRow() < 0 ? -1 : row.getRow(); + } } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public int getColumn() { + return column; + } + + public void setColumn(int column) { + this.column = column; + } + + public int getColumns() { + return columns; + } + + public void setColumns(int columns) { + this.columns = columns; + } + + public int getRow() { + return row; + } + + public void setRow(int row) { + this.row = row; + } + + public int getRows() { + return rows; + } + + public void setRows(int rows) { + this.rows = rows; + } + @Override public Class getClassToGenerate() { return null; } - } Modified: trunk/guix-compiler-gwt/src/main/java/org/nuiton/guix/tags/gwt/LabelHandler.java =================================================================== --- trunk/guix-compiler-gwt/src/main/java/org/nuiton/guix/tags/gwt/LabelHandler.java 2009-07-22 13:06:43 UTC (rev 1501) +++ trunk/guix-compiler-gwt/src/main/java/org/nuiton/guix/tags/gwt/LabelHandler.java 2009-07-22 13:07:30 UTC (rev 1502) @@ -4,12 +4,13 @@ */ package org.nuiton.guix.tags.gwt; +import com.google.gwt.user.client.EventListener; /** * * @author kevin */ -public class LabelHandler extends org.nuiton.guix.tags.LabelHandler { +public class LabelHandler extends UIObjectHandler { /** * Constructor Modified: trunk/guix-compiler-gwt/src/main/java/org/nuiton/guix/tags/gwt/MenuBarHandler.java =================================================================== --- trunk/guix-compiler-gwt/src/main/java/org/nuiton/guix/tags/gwt/MenuBarHandler.java 2009-07-22 13:06:43 UTC (rev 1501) +++ trunk/guix-compiler-gwt/src/main/java/org/nuiton/guix/tags/gwt/MenuBarHandler.java 2009-07-22 13:07:30 UTC (rev 1502) @@ -4,12 +4,13 @@ */ package org.nuiton.guix.tags.gwt; +import com.google.gwt.user.client.EventListener; /** * * @author kevin */ -public class MenuBarHandler extends org.nuiton.guix.tags.MenuBarHandler { +public class MenuBarHandler extends UIObjectHandler { /** * Constructor Modified: trunk/guix-compiler-gwt/src/main/java/org/nuiton/guix/tags/gwt/MenuHandler.java =================================================================== --- trunk/guix-compiler-gwt/src/main/java/org/nuiton/guix/tags/gwt/MenuHandler.java 2009-07-22 13:06:43 UTC (rev 1501) +++ trunk/guix-compiler-gwt/src/main/java/org/nuiton/guix/tags/gwt/MenuHandler.java 2009-07-22 13:07:30 UTC (rev 1502) @@ -9,7 +9,7 @@ * * @author kevin */ -public class MenuHandler extends org.nuiton.guix.tags.MenuHandler { +public class MenuHandler extends UIObjectHandler { /** * Constructor Modified: trunk/guix-compiler-gwt/src/main/java/org/nuiton/guix/tags/gwt/MenuItemHandler.java =================================================================== --- trunk/guix-compiler-gwt/src/main/java/org/nuiton/guix/tags/gwt/MenuItemHandler.java 2009-07-22 13:06:43 UTC (rev 1501) +++ trunk/guix-compiler-gwt/src/main/java/org/nuiton/guix/tags/gwt/MenuItemHandler.java 2009-07-22 13:07:30 UTC (rev 1502) @@ -9,13 +9,14 @@ * * @author kevin */ -public class MenuItemHandler extends org.nuiton.guix.tags.MenuItemHandler { +public class MenuItemHandler extends UIObjectHandler { /** * Constructor */ public MenuItemHandler() { super(); + attrMap.put("action", "command"); } @Override Modified: trunk/guix-compiler-gwt/src/main/java/org/nuiton/guix/tags/gwt/PanelHandler.java =================================================================== --- trunk/guix-compiler-gwt/src/main/java/org/nuiton/guix/tags/gwt/PanelHandler.java 2009-07-22 13:06:43 UTC (rev 1501) +++ trunk/guix-compiler-gwt/src/main/java/org/nuiton/guix/tags/gwt/PanelHandler.java 2009-07-22 13:07:30 UTC (rev 1502) @@ -9,7 +9,7 @@ * * @author kevin */ -public class PanelHandler extends org.nuiton.guix.tags.PanelHandler { +public class PanelHandler extends UIObjectHandler { /** * Constructor Modified: trunk/guix-compiler-gwt/src/main/java/org/nuiton/guix/tags/gwt/RowHandler.java =================================================================== --- trunk/guix-compiler-gwt/src/main/java/org/nuiton/guix/tags/gwt/RowHandler.java 2009-07-22 13:06:43 UTC (rev 1501) +++ trunk/guix-compiler-gwt/src/main/java/org/nuiton/guix/tags/gwt/RowHandler.java 2009-07-22 13:07:30 UTC (rev 1502) @@ -18,6 +18,7 @@ */ package org.nuiton.guix.tags.gwt; +import org.nuiton.guix.model.AttributeDescriptor; import org.nuiton.guix.model.GuixModelObject; /** @@ -25,7 +26,10 @@ * * @author kevin */ -public class RowHandler extends org.nuiton.guix.tags.RowHandler { +public class RowHandler extends TableHandler { + + /** index of the row */ + private int row = -1; /** * Constructor @@ -40,7 +44,35 @@ * @param row the GuixModelObject which represents the row */ public RowHandler(GuixModelObject row) { - super(row); + for (AttributeDescriptor attr : row.getAttributeDescriptors()) { + if (attr.getName().equals("row")) { + this.row = Integer.valueOf(attr.getValue()); + } + else if (attr.getName().equals("weightx")) { + weightx = Double.valueOf(attr.getValue()); + } + else if (attr.getName().equals("weighty")) { + weighty = Double.valueOf(attr.getValue()); + } + else if (attr.getName().equals("ipadx")) { + ipadx = Integer.valueOf(attr.getValue()); + } + else if (attr.getName().equals("ipady")) { + ipady = Integer.valueOf(attr.getValue()); + } + else if (attr.getName().equals("halign")) { + horizontalAlignment = getHalign(attr.getValue()); + } + else if (attr.getName().equals("valign")) { + verticalAlignment = getValign(attr.getValue()); + } + else if (attr.getName().equals("fill")) { + fill = attr.getValue(); + } + else if (attr.getName().equals("insets")) { + insets = attr.getValue(); + } + } } /** @@ -50,11 +82,45 @@ * @param table the table which contains the row */ public RowHandler(GuixModelObject row, TableHandler table) { - super(row, table); + this(row); + //if the attributes that the table contains too have not been defined by the user within the row, + //but have been defined in the table, set them + if (horizontalAlignment == null) { + horizontalAlignment = table.getHorizontalAlignment() == null ? TableHandler.DEFAULT_HORIZONTAL_ALIGNMENT : table.getHorizontalAlignment(); + } + if (verticalAlignment == null) { + verticalAlignment = table.getVerticalAlignment() == null ? TableHandler.DEFAULT_VERTICAL_ALIGNMENT : table.getVerticalAlignment(); + } + if (fill == null) { + fill = table.getFill() == null ? TableHandler.DEFAULT_FILL : table.getFill(); + } + if (insets == null) { + insets = table.getInsets() == null ? TableHandler.DEFAULT_INSETS : table.getInsets(); + } + if (ipadx == null) { + ipadx = table.getIpadx() == null ? TableHandler.DEFAULT_IPADX : table.getIpadx(); + } + if (ipady == null) { + ipady = table.getIpady() == null ? TableHandler.DEFAULT_IPADY : table.getIpady(); + } + if (weightx == null) { + weightx = table.getWeightx() == null ? TableHandler.DEFAULT_WEIGHTX : table.getWeightx(); + } + if (weighty == null) { + weighty = table.getWeighty() == null ? TableHandler.DEFAULT_WEIGHTY : table.getWeighty(); + } } @Override public Class getClassToGenerate() { return null; } + + public int getRow() { + return row; + } + + public void setRow(int row) { + this.row = row; + } } Modified: trunk/guix-compiler-gwt/src/main/java/org/nuiton/guix/tags/gwt/TabPanelHandler.java =================================================================== --- trunk/guix-compiler-gwt/src/main/java/org/nuiton/guix/tags/gwt/TabPanelHandler.java 2009-07-22 13:06:43 UTC (rev 1501) +++ trunk/guix-compiler-gwt/src/main/java/org/nuiton/guix/tags/gwt/TabPanelHandler.java 2009-07-22 13:07:30 UTC (rev 1502) @@ -9,7 +9,7 @@ * * @author kevin */ -public class TabPanelHandler extends org.nuiton.guix.tags.TabPanelHandler { +public class TabPanelHandler extends UIObjectHandler { /** * Constructor Modified: trunk/guix-compiler-gwt/src/main/java/org/nuiton/guix/tags/gwt/TableHandler.java =================================================================== --- trunk/guix-compiler-gwt/src/main/java/org/nuiton/guix/tags/gwt/TableHandler.java 2009-07-22 13:06:43 UTC (rev 1501) +++ trunk/guix-compiler-gwt/src/main/java/org/nuiton/guix/tags/gwt/TableHandler.java 2009-07-22 13:07:30 UTC (rev 1502) @@ -22,6 +22,7 @@ import java.util.List; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.nuiton.guix.model.AttributeDescriptor; import org.nuiton.guix.model.GuixModelObject; /** @@ -29,10 +30,35 @@ * * @author kevin */ -public class TableHandler extends org.nuiton.guix.tags.TableHandler { +public class TableHandler extends UIObjectHandler { private static Log log = LogFactory.getLog(TableHandler.class); + protected enum VerticalAlignment { + + ALIGN_TOP, ALIGN_MIDDLE, ALIGN_BOTTOM + } + protected enum HorizontalAlignment { + + ALIGN_LEFT, ALIGN_CENTER, ALIGN_RIGHT, ALIGN_DEFAULT + } + public static final String DEFAULT_INSETS = "3, 3, 3, 3"; + public static final HorizontalAlignment DEFAULT_HORIZONTAL_ALIGNMENT = HorizontalAlignment.ALIGN_DEFAULT; + public static final VerticalAlignment DEFAULT_VERTICAL_ALIGNMENT = VerticalAlignment.ALIGN_TOP; + public static final String DEFAULT_FILL = "java.awt.GridBagConstraints.BOTH"; + public static final Integer DEFAULT_IPADX = 1; + public static final Integer DEFAULT_IPADY = 1; + public static final Double DEFAULT_WEIGHTX = 0.0; + public static final Double DEFAULT_WEIGHTY = 0.0; + protected Double weightx = null; + protected Double weighty = null; + protected Integer ipadx = null; + protected Integer ipady = null; + protected HorizontalAlignment horizontalAlignment = null; + protected VerticalAlignment verticalAlignment = null; + protected String fill = null; + protected String insets = null; + /** * Constructor */ @@ -46,9 +72,137 @@ * @param table the GuixModelObject which represents the table */ public TableHandler(GuixModelObject table) { - super(table); + for (AttributeDescriptor attr : table.getAttributeDescriptors()) { + if (attr.getName().equals("weightx")) { + weightx = Double.valueOf(attr.getValue()); + } + else if (attr.getName().equals("weighty")) { + weighty = Double.valueOf(attr.getValue()); + } + else if (attr.getName().equals("ipadx")) { + ipadx = Integer.valueOf(attr.getValue()); + } + else if (attr.getName().equals("ipady")) { + ipady = Integer.valueOf(attr.getValue()); + } + else if (attr.getName().equals("halign")) { + horizontalAlignment = getHalign(attr.getValue()); + if (horizontalAlignment == null) { + if (log.isErrorEnabled()) { + log.error(table.getId() + "'s halign attribute has a wrong value : " + attr.getValue()); + } + horizontalAlignment = HorizontalAlignment.ALIGN_DEFAULT; + } + } + else if (attr.getName().equals("valign")) { + verticalAlignment = getValign(attr.getValue()); + if (verticalAlignment == null) { + if (log.isErrorEnabled()) { + log.error(table.getId() + "'s halign attribute has a wrong value : " + attr.getValue()); + } + verticalAlignment = VerticalAlignment.ALIGN_TOP; + } + } + else if (attr.getName().equals("fill")) { + fill = attr.getValue(); + } + else if (attr.getName().equals("insets")) { + insets = attr.getValue(); + } + } } - + + + public HorizontalAlignment getHorizontalAlignment() { + return horizontalAlignment; + } + + public void setHorizontalAlignment(HorizontalAlignment horizontalAlignment) { + this.horizontalAlignment = horizontalAlignment; + } + + public VerticalAlignment getVerticalAlignment() { + return verticalAlignment; + } + + public void setVerticalAlignment(VerticalAlignment verticalAlignment) { + this.verticalAlignment = verticalAlignment; + } + + public String getFill() { + return fill; + } + + public void setFill(String fill) { + this.fill = fill; + } + + public String getInsets() { + return insets; + } + + public void setInsets(String insets) { + this.insets = insets; + } + + public Integer getIpadx() { + return ipadx; + } + + public void setIpadx(Integer ipadx) { + this.ipadx = ipadx; + } + + public Integer getIpady() { + return ipady; + } + + public void setIpady(Integer ipady) { + this.ipady = ipady; + } + + public Double getWeightx() { + return weightx; + } + + public void setWeightx(Double weightx) { + this.weightx = weightx; + } + + public Double getWeighty() { + return weighty; + } + + public void setWeighty(Double weighty) { + this.weighty = weighty; + } + + public HorizontalAlignment getHalign(String halign) { + if (halign.equalsIgnoreCase("left")) { + return HorizontalAlignment.ALIGN_LEFT; + } + if (halign.equalsIgnoreCase("right")) { + return HorizontalAlignment.ALIGN_RIGHT; + } + if (halign.equalsIgnoreCase("center")) { + return HorizontalAlignment.ALIGN_CENTER; + } + return null; + } + + public VerticalAlignment getValign(String valign) { + if (valign.equalsIgnoreCase("top")) { + return VerticalAlignment.ALIGN_TOP; + } + if (valign.equalsIgnoreCase("bottom")) { + return VerticalAlignment.ALIGN_BOTTOM; + } + if (valign.equalsIgnoreCase("middle")) { + return VerticalAlignment.ALIGN_MIDDLE; + } + return null; + } + /** * Creates a cell with the right column and generates the code to add it to the table * Modified: trunk/guix-compiler-gwt/src/main/java/org/nuiton/guix/tags/gwt/TextFieldHandler.java =================================================================== --- trunk/guix-compiler-gwt/src/main/java/org/nuiton/guix/tags/gwt/TextFieldHandler.java 2009-07-22 13:06:43 UTC (rev 1501) +++ trunk/guix-compiler-gwt/src/main/java/org/nuiton/guix/tags/gwt/TextFieldHandler.java 2009-07-22 13:07:30 UTC (rev 1502) @@ -4,12 +4,13 @@ */ package org.nuiton.guix.tags.gwt; +import com.google.gwt.user.client.ui.KeyboardListener; /** * * @author kevin */ -public class TextFieldHandler extends org.nuiton.guix.tags.TextFieldHandler { +public class TextFieldHandler extends UIObjectHandler { /** * Constructor @@ -23,4 +24,9 @@ return com.google.gwt.user.client.ui.TextBox.class; } + @Override + public void configureProxyEventInfo() { + super.configureProxyEventInfo(); + addProxyEventInfo("getText", KeyboardListener.class); + } } Modified: trunk/guix-compiler-gwt/src/main/java/org/nuiton/guix/tags/gwt/ToggleButtonHandler.java =================================================================== --- trunk/guix-compiler-gwt/src/main/java/org/nuiton/guix/tags/gwt/ToggleButtonHandler.java 2009-07-22 13:06:43 UTC (rev 1501) +++ trunk/guix-compiler-gwt/src/main/java/org/nuiton/guix/tags/gwt/ToggleButtonHandler.java 2009-07-22 13:07:30 UTC (rev 1502) @@ -4,16 +4,27 @@ */ package org.nuiton.guix.tags.gwt; +import com.google.gwt.user.client.ui.ClickListener; /** * * @author kevin */ -public class ToggleButtonHandler extends org.nuiton.guix.tags.ToggleButtonHandler { +public class ToggleButtonHandler extends ButtonHandler { + public ToggleButtonHandler() { + super(); + attrMap.put("selected", "down"); + } + @Override public Class getClassToGenerate() { return com.google.gwt.user.client.ui.ToggleButton.class; } + @Override + public void configureProxyEventInfo() { + super.configureProxyEventInfo(); + addProxyEventInfo("isDown", ClickListener.class); + } } Added: trunk/guix-compiler-gwt/src/main/java/org/nuiton/guix/tags/gwt/UIObjectHandler.java =================================================================== --- trunk/guix-compiler-gwt/src/main/java/org/nuiton/guix/tags/gwt/UIObjectHandler.java (rev 0) +++ trunk/guix-compiler-gwt/src/main/java/org/nuiton/guix/tags/gwt/UIObjectHandler.java 2009-07-22 13:07:30 UTC (rev 1502) @@ -0,0 +1,22 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ + +package org.nuiton.guix.tags.gwt; +import com.google.gwt.user.client.EventListener; +import com.google.gwt.user.client.ui.FocusListener; +import org.nuiton.guix.tags.DefaultTagHandler; + +/** + * + * @author kevin + */ +public abstract class UIObjectHandler extends DefaultTagHandler { + + public UIObjectHandler() { + super(); + configureProxyEventInfo(); + } + +}
participants (1)
-
kmorin@users.labs.libre-entreprise.org