Author: kmorin Date: 2009-05-19 08:39:07 +0000 (Tue, 19 May 2009) New Revision: 1432 Modified: guix/trunk/guix-compiler-swing/src/main/java/org/nuiton/guix/generator/SwingFileGenerator.java Log: Ajout du module (pas encore fonctionnel) guix-runtime Modified: guix/trunk/guix-compiler-swing/src/main/java/org/nuiton/guix/generator/SwingFileGenerator.java =================================================================== --- guix/trunk/guix-compiler-swing/src/main/java/org/nuiton/guix/generator/SwingFileGenerator.java 2009-05-19 08:39:00 UTC (rev 1431) +++ guix/trunk/guix-compiler-swing/src/main/java/org/nuiton/guix/generator/SwingFileGenerator.java 2009-05-19 08:39:07 UTC (rev 1432) @@ -8,11 +8,20 @@ //~--- JDK imports ------------------------------------------------------------ import java.io.File; +import java.lang.reflect.Constructor; import java.lang.reflect.Modifier; +import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import java.util.Map; +import java.util.Map.Entry; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import org.nuiton.guix.databinding.BindingUtils; import org.nuiton.guix.model.AttributeDescriptor; +import org.nuiton.guix.model.Rule; +import org.nuiton.guix.model.Selector; +import org.nuiton.guix.model.StyleSheet; /** * @@ -20,12 +29,16 @@ */ public class SwingFileGenerator extends JavaFileGenerator { + List<StyleSheet> styleSheets = new ArrayList<StyleSheet>(); + public SwingFileGenerator(GuixModelObject gmo) { super(gmo); jf = new JavaFile(gmo.getClassDescriptor().getPackageName(), Modifier.PUBLIC, gmo.getClassDescriptor().getName(), null); + if(gmo.getStyleSheets() != null) + styleSheets.addAll(gmo.getStyleSheets()); } @Override @@ -82,11 +95,10 @@ 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(gmo.getId()).append(" = new ").append(gmo.getClassDescriptor().getName()).append("();"); - jf.addMethod(new JavaMethod(Modifier.PRIVATE, "void", "create" + capitalizedId, null, null, creationMethod.toString())); + StringBuffer creationMethod = new StringBuffer(); + creationMethod.append(gmo.getId()).append(" = new ").append(gmo.getClassDescriptor().getName()).append("(").append(gmo.getConstructor() != null ? gmo.getConstructor() : ""). append(");\n"); componentsCreation.append("create").append(capitalizedId).append("();\n"); - componentsTree.append(gmo.getParent().getId() == null ? "this" : gmo.getParent().getId()).append(".add(").append(gmo.getId()).append(");\n"); for (AttributeDescriptor attr : gmo.getAttributeDescriptors()) { @@ -101,23 +113,78 @@ addQuote = Class.forName(gmo.getClassDescriptor().getPackageName() + "." + gmo.getClassDescriptor().getName()).getMethod("get" + capitalizedAttribute, null).getReturnType().equals(String.class); } catch (ClassNotFoundException ex) { - log.error(ex); + if(log.isErrorEnabled()) + log.error(ex); } catch (NoSuchMethodException ex) { try { addQuote = Class.forName(gmo.getClassDescriptor().getPackageName() + "." + gmo.getClassDescriptor().getName()).getMethod("is" + capitalizedAttribute, null).getReturnType().equals(String.class); } catch (ClassNotFoundException ex2) { - log.error(ex2); + if(log.isErrorEnabled()) + log.error(ex2); } catch (NoSuchMethodException ex2) { - log.error(ex2); + if(log.isErrorEnabled()) + log.error(ex2); } } - componentsTree.append(gmo.getId()).append(".set").append(capitalizedAttribute).append("(").append(addQuote ? "\"" : "").append(attr.getValue()).append(addQuote ? "\"" : "").append(");\n"); + creationMethod.append(gmo.getId()).append(".set").append(capitalizedAttribute).append("(").append(addQuote ? "\"" : "").append(attr.getValue()).append(addQuote ? "\"" : "").append(");\n"); } } + + if(gmo.getStyleSheets() != null) + styleSheets.addAll(gmo.getStyleSheets()); + for(StyleSheet ss : styleSheets) { + for(Selector sel : ss.getSelectors()) { + if((sel.getJavaClassName() == null || sel.getJavaClassName().equals(gmo.getClassDescriptor().getPackageName() + "." + gmo.getClassDescriptor().getName())) + && (sel.getId() == null || sel.getId().equals(gmo.getId())) + //&& sel.getPseudoClass().equals("") + && (sel.getStyleClass() == null || sel.getStyleClass().equals(gmo.getStyleClass()))) { + for(Rule rule : sel.getRules()) { + for(Entry<String,String> entry : rule.getProperties().entrySet()) { + String capitalizedAttribute = (entry.getKey().length() > 0) ? Character.toUpperCase(entry.getKey().charAt(0)) + entry.getKey().substring(1) : entry.getKey(); + creationMethod.append(gmo.getId()).append(".set").append(capitalizedAttribute).append("(").append(entry.getValue()).append(");\n"); + } + } + } + } + } + jf.addMethod(new JavaMethod(Modifier.PRIVATE, "void", "create" + capitalizedId, null, null, creationMethod.toString())); } + else { + for (AttributeDescriptor attr : gmo.getAttributeDescriptors()) { + String binding = BindingUtils.processDataBindings(attr.getValue()); + if (binding != null) { + bindings.append("bindingGroup.addBinding(\n").append("org.jdesktop.beansbinding.Bindings.createAutoBinding(\norg.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"); + } + else { + String capitalizedAttribute = (attr.getName().length() > 0) ? Character.toUpperCase(attr.getName().charAt(0)) + attr.getName().substring(1) : attr.getName(); + boolean addQuote = false; + try { + addQuote = Class.forName(gmo.getClassDescriptor().getSuperClass().getPackageName() + "." + gmo.getClassDescriptor().getSuperClass().getName()).getMethod("get" + capitalizedAttribute, null).getReturnType().equals(String.class); + } + catch (ClassNotFoundException ex) { + if(log.isErrorEnabled()) + log.error(ex); + } + catch (NoSuchMethodException ex) { + try { + addQuote = Class.forName(gmo.getClassDescriptor().getSuperClass().getPackageName() + "." + gmo.getClassDescriptor().getSuperClass().getName()).getMethod("is" + capitalizedAttribute, null).getReturnType().equals(String.class); + } + catch (ClassNotFoundException ex2) { + if(log.isErrorEnabled()) + log.error(ex2); + } + catch (NoSuchMethodException ex2) { + if(log.isErrorEnabled()) + log.error(ex2); + } + } + componentsTree.append("this.set").append(capitalizedAttribute).append("(").append(addQuote ? "\"" : "").append(attr.getValue()).append(addQuote ? "\"" : "").append(");\n"); + } + } + } for (GuixModelObject child : gmo.getChildren()) { Map<String, String> methodBodies = browseModelObjects(child); componentsCreation.append(methodBodies.get("componentsCreation"));