Author: maksimkaszynski
Date: 2007-10-31 12:39:47 -0400 (Wed, 31 Oct 2007)
New Revision: 3645
Added:
trunk/cdk/generator/src/main/java/org/ajax4jsf/builder/component/ActionSource2PropertyProcessor.java
trunk/cdk/generator/src/main/java/org/ajax4jsf/builder/config/ClassVisitor.java
trunk/cdk/generator/src/main/java/org/ajax4jsf/builder/config/ClassWalkingLogic.java
trunk/cdk/generator/src/main/java/org/ajax4jsf/builder/model/ClassImport.java
trunk/cdk/generator/src/main/java/org/ajax4jsf/builder/model/JavaImport.java
trunk/cdk/generator/src/main/java/org/ajax4jsf/builder/model/RuntimeImport.java
trunk/cdk/generator/src/main/resources/META-INF/templates12/snippets/get-action.vm
trunk/cdk/generator/src/main/resources/META-INF/templates12/snippets/set-action.vm
trunk/cdk/generator/src/test/java/org/ajax4jsf/builder/config/
trunk/cdk/generator/src/test/java/org/ajax4jsf/builder/config/ClassWalkingLogicTest.java
Modified:
trunk/cdk/generator/src/main/java/org/ajax4jsf/builder/component/ComponentModelBuilder.java
trunk/cdk/generator/src/main/java/org/ajax4jsf/builder/component/ComponentPropertyProcessor.java
trunk/cdk/generator/src/main/java/org/ajax4jsf/builder/component/ELPropertyProcessor.java
trunk/cdk/generator/src/main/java/org/ajax4jsf/builder/component/PrimitivePropertyProcessor.java
trunk/cdk/generator/src/main/java/org/ajax4jsf/builder/component/PropertyProcessor.java
trunk/cdk/generator/src/main/java/org/ajax4jsf/builder/config/ComponentBaseBean.java
trunk/cdk/generator/src/main/java/org/ajax4jsf/builder/model/JavaAnnotation.java
trunk/cdk/generator/src/main/java/org/ajax4jsf/builder/model/JavaClass.java
trunk/cdk/generator/src/main/java/org/ajax4jsf/builder/model/JavaLanguageElement.java
trunk/cdk/generator/src/main/java/org/ajax4jsf/builder/render/JavaClassRenderer.java
trunk/cdk/generator/src/main/java/org/ajax4jsf/builder/render/JavaLanguageElementRenderer.java
Log:
http://jira.jboss.com/jira/browse/RF-775
Better handling of actionSource2 in CDK
Added:
trunk/cdk/generator/src/main/java/org/ajax4jsf/builder/component/ActionSource2PropertyProcessor.java
===================================================================
---
trunk/cdk/generator/src/main/java/org/ajax4jsf/builder/component/ActionSource2PropertyProcessor.java
(rev 0)
+++
trunk/cdk/generator/src/main/java/org/ajax4jsf/builder/component/ActionSource2PropertyProcessor.java 2007-10-31
16:39:47 UTC (rev 3645)
@@ -0,0 +1,111 @@
+/**
+ * License Agreement.
+ *
+ * Rich Faces - Natural Ajax for Java Server Faces (JSF)
+ *
+ * Copyright (C) 2007 Exadel, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation.
+ *
+ * This library 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+package org.ajax4jsf.builder.component;
+
+import java.util.Arrays;
+import java.util.List;
+
+import javax.faces.component.ActionSource2;
+import javax.faces.el.MethodBinding;
+
+import org.ajax4jsf.builder.component.methods.VelocityMethodBody;
+import org.ajax4jsf.builder.config.PropertyBean;
+import org.ajax4jsf.builder.generator.GeneratorException;
+import org.ajax4jsf.builder.generator.JSFGeneratorConfiguration;
+import org.ajax4jsf.builder.model.JavaClass;
+import org.ajax4jsf.builder.model.JavaField;
+import org.ajax4jsf.builder.model.JavaLanguageElement;
+import org.ajax4jsf.builder.model.JavaMethod;
+
+/**
+ * @author Maksim Kaszynski
+ *
+ */
+@SuppressWarnings("deprecation")
+public class ActionSource2PropertyProcessor extends ComponentPropertyProcessor {
+
+ private static final List<String> ACCEPTED_NAMES =
Arrays.asList("action", "actionListener",
"actionExpression");
+
+ @Override
+ public boolean accept(PropertyBean propertyBean, JavaClass javaClass,
+ JSFGeneratorConfiguration configuration) {
+
+ boolean result = !propertyBean.isExist();
+
+ if (result) {
+ result = ActionSource2.class.isAssignableFrom(javaClass.getSuperClass());
+ if (result) {
+ result = ACCEPTED_NAMES.contains(propertyBean.getName());
+ }
+ }
+
+ return result;
+ }
+
+ @Override
+ public void process(PropertyBean propertyBean, JavaClass javaClass,
+ JSFGeneratorConfiguration configuration) {
+
+ JavaField field = getField(propertyBean, configuration);
+ JavaMethod accessor = getAccessor(configuration, propertyBean, field);
+ JavaMethod mutator = getMutator(configuration, propertyBean, field);
+
+ if("action".equals(propertyBean.getName())) {
+
+ try {
+ accessor.setMethodBody(new VelocityMethodBody(configuration) {
+ @Override
+ public String getTemplate() {
+ return "snippets/get-action.vm";
+ }
+ });
+ mutator.setMethodBody(new VelocityMethodBody(configuration) {
+ @Override
+ public String getTemplate() {
+ return "snippets/set-action.vm";
+ }
+ });
+
+ } catch (GeneratorException e) {
+ e.printStackTrace();
+ }
+
+ } else {
+ javaClass.addField(field);
+ }
+
+ if (field.getType().getName().equals(MethodBinding.class.getName())) {
+
+ for(JavaLanguageElement el : new JavaLanguageElement[] {field, accessor, mutator}) {
+ el.addAnnotation(SuppressWarnings.class, "\"deprecation\"");
+ }
+
+ }
+
+
+ //Do not add variable
+ javaClass.addMethod(accessor);
+ javaClass.addMethod(mutator);
+
+ }
+
+}
Modified:
trunk/cdk/generator/src/main/java/org/ajax4jsf/builder/component/ComponentModelBuilder.java
===================================================================
---
trunk/cdk/generator/src/main/java/org/ajax4jsf/builder/component/ComponentModelBuilder.java 2007-10-31
16:35:48 UTC (rev 3644)
+++
trunk/cdk/generator/src/main/java/org/ajax4jsf/builder/component/ComponentModelBuilder.java 2007-10-31
16:39:47 UTC (rev 3645)
@@ -50,6 +50,7 @@
public class ComponentModelBuilder {
private PropertyProcessor[] propertyProcessors = {
+ new ActionSource2PropertyProcessor(),
new PrimitivePropertyProcessor(),
new ELPropertyProcessor(),
new ComponentPropertyProcessor()};
@@ -91,7 +92,7 @@
PropertyProcessor processor =
propertyProcessors[i];
- if (processor.accept(propertyBean)) {
+ if (processor.accept(propertyBean, javaClass, configuration)) {
proc = processor;
}
}
Modified:
trunk/cdk/generator/src/main/java/org/ajax4jsf/builder/component/ComponentPropertyProcessor.java
===================================================================
---
trunk/cdk/generator/src/main/java/org/ajax4jsf/builder/component/ComponentPropertyProcessor.java 2007-10-31
16:35:48 UTC (rev 3644)
+++
trunk/cdk/generator/src/main/java/org/ajax4jsf/builder/component/ComponentPropertyProcessor.java 2007-10-31
16:39:47 UTC (rev 3645)
@@ -27,6 +27,7 @@
import org.ajax4jsf.builder.model.JavaClass;
import org.ajax4jsf.builder.model.JavaComment;
import org.ajax4jsf.builder.model.JavaField;
+import org.ajax4jsf.builder.model.JavaLanguageElement;
import org.ajax4jsf.builder.model.JavaMethod;
import org.ajax4jsf.builder.model.JavaModifier;
import org.ajax4jsf.builder.model.JavaPrimitive;
@@ -39,7 +40,7 @@
*/
public class ComponentPropertyProcessor implements PropertyProcessor {
- public boolean accept(PropertyBean propertyBean) {
+ public boolean accept(PropertyBean propertyBean, JavaClass javaClass,
JSFGeneratorConfiguration configuration) {
return !propertyBean.isExist();
}
@@ -47,21 +48,21 @@
* @see
org.ajax4jsf.builder.render.PropertyProcessor#process(org.ajax4jsf.builder.config.PropertyBean,
org.ajax4jsf.builder.model.JavaClass)
*/
public void process(PropertyBean propertyBean, JavaClass javaClass,
JSFGeneratorConfiguration configuration) {
- JavaField field = getField(propertyBean, configuration.getClassLoader());
+ JavaField field = getField(propertyBean, configuration);
javaClass.addField(field);
javaClass.addMethod(getAccessor(configuration, propertyBean, field));
javaClass.addMethod(getMutator(configuration, propertyBean, field));
}
- protected JavaField getField(PropertyBean propertyBean, ClassLoader classLoader) {
+ protected JavaField getField(PropertyBean propertyBean, JSFGeneratorConfiguration
configuration) {
String name = propertyBean.getName();
String defaultvalue = propertyBean.getDefaultvalue();
- Class<?> propertyClass = getType(propertyBean, classLoader);
+ Class<?> propertyClass = getType(propertyBean, configuration.getClassLoader());
JavaField field = new JavaField(propertyClass, "_" + name, defaultvalue);
field.getComments().add(new JavaComment(propertyBean.getDescription()));
field.getModifiers().add(JavaModifier.PRIVATE);
-
+ handleDeprecation(field.getType(), field);
return field;
}
@@ -97,6 +98,7 @@
});
accessor.addModifier(JavaModifier.PUBLIC);
+ handleDeprecation(field.getType(), accessor);
return accessor;
}
@@ -113,8 +115,14 @@
}
});
+ handleDeprecation(field.getType(), mutator);
mutator.addModifier(JavaModifier.PUBLIC);
-
return mutator;
}
+
+ protected void handleDeprecation(Class<?> type, JavaLanguageElement element) {
+ if (type.isAnnotationPresent(Deprecated.class)) {
+ element.addAnnotation(SuppressWarnings.class, "\"deprecation\"");
+ }
+ }
}
Modified:
trunk/cdk/generator/src/main/java/org/ajax4jsf/builder/component/ELPropertyProcessor.java
===================================================================
---
trunk/cdk/generator/src/main/java/org/ajax4jsf/builder/component/ELPropertyProcessor.java 2007-10-31
16:35:48 UTC (rev 3644)
+++
trunk/cdk/generator/src/main/java/org/ajax4jsf/builder/component/ELPropertyProcessor.java 2007-10-31
16:39:47 UTC (rev 3645)
@@ -25,6 +25,7 @@
import org.ajax4jsf.builder.config.PropertyBean;
import org.ajax4jsf.builder.generator.GeneratorException;
import org.ajax4jsf.builder.generator.JSFGeneratorConfiguration;
+import org.ajax4jsf.builder.model.JavaClass;
import org.ajax4jsf.builder.model.JavaField;
import org.ajax4jsf.builder.model.JavaMethod;
import org.ajax4jsf.builder.model.MethodBody;
@@ -37,7 +38,7 @@
public class ELPropertyProcessor extends ComponentPropertyProcessor {
@Override
- public boolean accept(PropertyBean propertyBean) {
+ public boolean accept(PropertyBean propertyBean, JavaClass javaClass,
JSFGeneratorConfiguration configuration) {
return !(propertyBean.isExist() || propertyBean.isSimpleType() ||
propertyBean.isElonly()) && propertyBean.isEl() ;
}
Modified:
trunk/cdk/generator/src/main/java/org/ajax4jsf/builder/component/PrimitivePropertyProcessor.java
===================================================================
---
trunk/cdk/generator/src/main/java/org/ajax4jsf/builder/component/PrimitivePropertyProcessor.java 2007-10-31
16:35:48 UTC (rev 3644)
+++
trunk/cdk/generator/src/main/java/org/ajax4jsf/builder/component/PrimitivePropertyProcessor.java 2007-10-31
16:39:47 UTC (rev 3645)
@@ -97,13 +97,13 @@
}
@Override
- public boolean accept(PropertyBean propertyBean) {
- return propertyBean.isSimpleType() && super.accept(propertyBean);
+ public boolean accept(PropertyBean propertyBean, JavaClass javaClass,
JSFGeneratorConfiguration configuration) {
+ return propertyBean.isSimpleType() && super.accept(propertyBean, javaClass,
configuration);
}
@Override
public void process(PropertyBean propertyBean, JavaClass javaClass,
JSFGeneratorConfiguration configuration) {
- JavaField field = getField(propertyBean, configuration.getClassLoader());
+ JavaField field = getField(propertyBean, configuration);
JavaField field2 = new JavaField(boolean.class, field.getName() + "Set",
"false");
field2.addModifier(JavaModifier.PRIVATE);
Modified:
trunk/cdk/generator/src/main/java/org/ajax4jsf/builder/component/PropertyProcessor.java
===================================================================
---
trunk/cdk/generator/src/main/java/org/ajax4jsf/builder/component/PropertyProcessor.java 2007-10-31
16:35:48 UTC (rev 3644)
+++
trunk/cdk/generator/src/main/java/org/ajax4jsf/builder/component/PropertyProcessor.java 2007-10-31
16:39:47 UTC (rev 3645)
@@ -31,6 +31,6 @@
*
*/
public interface PropertyProcessor {
- boolean accept(PropertyBean propertyBean);
+ boolean accept(PropertyBean propertyBean, JavaClass javaClass, JSFGeneratorConfiguration
configuration);
void process(PropertyBean propertyBean, JavaClass javaClass, JSFGeneratorConfiguration
configuration);
}
Added: trunk/cdk/generator/src/main/java/org/ajax4jsf/builder/config/ClassVisitor.java
===================================================================
--- trunk/cdk/generator/src/main/java/org/ajax4jsf/builder/config/ClassVisitor.java
(rev 0)
+++
trunk/cdk/generator/src/main/java/org/ajax4jsf/builder/config/ClassVisitor.java 2007-10-31
16:39:47 UTC (rev 3645)
@@ -0,0 +1,30 @@
+/**
+ * License Agreement.
+ *
+ * Rich Faces - Natural Ajax for Java Server Faces (JSF)
+ *
+ * Copyright (C) 2007 Exadel, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation.
+ *
+ * This library 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+package org.ajax4jsf.builder.config;
+
+/**
+ * @author Maksim Kaszynski
+ *
+ */
+public interface ClassVisitor {
+ public void visit(Class<?> clazz);
+}
Added:
trunk/cdk/generator/src/main/java/org/ajax4jsf/builder/config/ClassWalkingLogic.java
===================================================================
--- trunk/cdk/generator/src/main/java/org/ajax4jsf/builder/config/ClassWalkingLogic.java
(rev 0)
+++
trunk/cdk/generator/src/main/java/org/ajax4jsf/builder/config/ClassWalkingLogic.java 2007-10-31
16:39:47 UTC (rev 3645)
@@ -0,0 +1,53 @@
+/**
+ * License Agreement.
+ *
+ * Rich Faces - Natural Ajax for Java Server Faces (JSF)
+ *
+ * Copyright (C) 2007 Exadel, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation.
+ *
+ * This library 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+package org.ajax4jsf.builder.config;
+
+/**
+ * @author Maksim Kaszynski
+ *
+ */
+public class ClassWalkingLogic {
+ private Class<?> clazz;
+
+ public ClassWalkingLogic(Class<?> clazz) {
+ super();
+ this.clazz = clazz;
+ }
+
+ public void walk(ClassVisitor visitor) {
+ walkClass(clazz, visitor);
+ }
+
+ private void walkClass(Class<?> c, ClassVisitor visitor) {
+ if (c == null || Object.class.getName().equals(c.getName())) {
+ return;
+ }
+
+ Class<?>[] interfaces = c.getInterfaces();
+ for (Class<?> class1 : interfaces) {
+ walkClass(class1, visitor);
+ }
+ walkClass(c.getSuperclass(), visitor);
+
+ visitor.visit(c);
+ }
+}
Modified:
trunk/cdk/generator/src/main/java/org/ajax4jsf/builder/config/ComponentBaseBean.java
===================================================================
---
trunk/cdk/generator/src/main/java/org/ajax4jsf/builder/config/ComponentBaseBean.java 2007-10-31
16:35:48 UTC (rev 3644)
+++
trunk/cdk/generator/src/main/java/org/ajax4jsf/builder/config/ComponentBaseBean.java 2007-10-31
16:39:47 UTC (rev 3645)
@@ -7,6 +7,7 @@
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
+import java.util.TreeMap;
import javax.faces.component.StateHolder;
import javax.faces.context.FacesContext;
@@ -49,7 +50,7 @@
/**
* Descriptions of component JavaBean properties
*/
- private Map<String,PropertyBean> properties = new
HashMap<String,PropertyBean>();
+ private Map<String,PropertyBean> properties = new
TreeMap<String,PropertyBean>();
/**
* Flag for generate component instance class
*/
@@ -141,17 +142,12 @@
{
Class <?> superClass = getLoader().loadClass(getSuperclass());
- Class<?> superSuperClass = superClass;
-
- while (null != superSuperClass ) {
- Class<?>[] interfaces = superSuperClass.getInterfaces();
- for (int i = 0; i < interfaces.length; i++) {
- Class<?> interfaceClass = interfaces[i];
- checkPropertiesForClass(interfaceClass);
- }
- superSuperClass = superSuperClass.getSuperclass();
- }
- checkPropertiesForClass(superClass);
+ new ClassWalkingLogic(superClass)
+ .walk(new ClassVisitor() {
+ public void visit(Class<?> clazz) {
+ checkPropertiesForClass(clazz);
+ }
+ });
}
} catch (ClassNotFoundException e) {
getLog().error("superclass not found for component "+getName(), e);
Added: trunk/cdk/generator/src/main/java/org/ajax4jsf/builder/model/ClassImport.java
===================================================================
--- trunk/cdk/generator/src/main/java/org/ajax4jsf/builder/model/ClassImport.java
(rev 0)
+++
trunk/cdk/generator/src/main/java/org/ajax4jsf/builder/model/ClassImport.java 2007-10-31
16:39:47 UTC (rev 3645)
@@ -0,0 +1,40 @@
+/**
+ * License Agreement.
+ *
+ * Rich Faces - Natural Ajax for Java Server Faces (JSF)
+ *
+ * Copyright (C) 2007 Exadel, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation.
+ *
+ * This library 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+package org.ajax4jsf.builder.model;
+
+/**
+ * @author Maksim Kaszynski
+ *
+ */
+public class ClassImport implements JavaImport{
+ private Class<?> clazz;
+
+ public ClassImport(Class<?> clazz) {
+ super();
+ this.clazz = clazz;
+ }
+
+ public String getName() {
+ return clazz.getName();
+ }
+
+}
Modified:
trunk/cdk/generator/src/main/java/org/ajax4jsf/builder/model/JavaAnnotation.java
===================================================================
---
trunk/cdk/generator/src/main/java/org/ajax4jsf/builder/model/JavaAnnotation.java 2007-10-31
16:35:48 UTC (rev 3644)
+++
trunk/cdk/generator/src/main/java/org/ajax4jsf/builder/model/JavaAnnotation.java 2007-10-31
16:39:47 UTC (rev 3645)
@@ -21,8 +21,12 @@
package org.ajax4jsf.builder.model;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
/**
* Wrapper for '@annotations
* @author Maksim Kaszynski
@@ -31,14 +35,25 @@
public class JavaAnnotation {
private Class<?> type;
-
+
+ private List <String> arguments = new ArrayList <String>();
+
public JavaAnnotation(Class<?> type) {
super();
this.type = type;
}
+
+ public JavaAnnotation(Class<?> type, String ... parameters) {
+ this(type);
+ this.arguments = Arrays.asList(parameters);
+ }
public Class<?> getType() {
return type;
}
+ public List<String> getArguments() {
+ return arguments;
+ }
+
}
Modified: trunk/cdk/generator/src/main/java/org/ajax4jsf/builder/model/JavaClass.java
===================================================================
--- trunk/cdk/generator/src/main/java/org/ajax4jsf/builder/model/JavaClass.java 2007-10-31
16:35:48 UTC (rev 3644)
+++ trunk/cdk/generator/src/main/java/org/ajax4jsf/builder/model/JavaClass.java 2007-10-31
16:39:47 UTC (rev 3645)
@@ -36,9 +36,9 @@
public class JavaClass extends JavaLanguageElement{
private List<JavaField> fields = new ArrayList<JavaField>();
private List<JavaMethod> methods = new ArrayList<JavaMethod>();
- private Set<Class<?>> imports = new TreeSet<Class<?>>(
- new Comparator<Class<?>> () {
- public int compare(Class<?> o1, Class<?> o2) {
+ private Set<JavaImport> imports = new TreeSet<JavaImport>(
+ new Comparator<JavaImport> () {
+ public int compare(JavaImport o1, JavaImport o2) {
return o1.getName().compareTo(o2.getName());
}
});
@@ -56,9 +56,13 @@
this.pakg = pakg;
}
+ public void addImport(String name) {
+ imports.add(new RuntimeImport(name));
+ }
+
public void addImport(Class<?> claz) {
if (shouldAddToImports(claz)) {
- imports.add(claz);
+ imports.add(new ClassImport(claz));
}
}
@@ -140,7 +144,7 @@
public List<JavaMethod> getMethods() {
return methods;
}
- public Set<Class<?>> getImports() {
+ public Set<JavaImport> getImports() {
return imports;
}
Added: trunk/cdk/generator/src/main/java/org/ajax4jsf/builder/model/JavaImport.java
===================================================================
--- trunk/cdk/generator/src/main/java/org/ajax4jsf/builder/model/JavaImport.java
(rev 0)
+++
trunk/cdk/generator/src/main/java/org/ajax4jsf/builder/model/JavaImport.java 2007-10-31
16:39:47 UTC (rev 3645)
@@ -0,0 +1,30 @@
+/**
+ * License Agreement.
+ *
+ * Rich Faces - Natural Ajax for Java Server Faces (JSF)
+ *
+ * Copyright (C) 2007 Exadel, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation.
+ *
+ * This library 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+package org.ajax4jsf.builder.model;
+
+/**
+ * @author Maksim Kaszynski
+ *
+ */
+public interface JavaImport {
+ public String getName();
+}
Modified:
trunk/cdk/generator/src/main/java/org/ajax4jsf/builder/model/JavaLanguageElement.java
===================================================================
---
trunk/cdk/generator/src/main/java/org/ajax4jsf/builder/model/JavaLanguageElement.java 2007-10-31
16:35:48 UTC (rev 3644)
+++
trunk/cdk/generator/src/main/java/org/ajax4jsf/builder/model/JavaLanguageElement.java 2007-10-31
16:39:47 UTC (rev 3645)
@@ -65,6 +65,9 @@
public void addAnnotation(JavaAnnotation annotation) {
annotations.add(annotation);
}
+ public void addAnnotation(Class<?> annotation, String ... arguments) {
+ annotations.add(new JavaAnnotation(annotation, arguments));
+ }
public void addAnnotation(Class<?> annotation) {
annotations.add(new JavaAnnotation(annotation));
}
Added: trunk/cdk/generator/src/main/java/org/ajax4jsf/builder/model/RuntimeImport.java
===================================================================
--- trunk/cdk/generator/src/main/java/org/ajax4jsf/builder/model/RuntimeImport.java
(rev 0)
+++
trunk/cdk/generator/src/main/java/org/ajax4jsf/builder/model/RuntimeImport.java 2007-10-31
16:39:47 UTC (rev 3645)
@@ -0,0 +1,43 @@
+/**
+ * License Agreement.
+ *
+ * Rich Faces - Natural Ajax for Java Server Faces (JSF)
+ *
+ * Copyright (C) 2007 Exadel, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation.
+ *
+ * This library 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+package org.ajax4jsf.builder.model;
+
+/**
+ * Implementation of import taht cannot be resolved in design time
+ * @author Maksim Kaszynski
+ *
+ */
+public class RuntimeImport implements JavaImport {
+
+ private String name;
+
+ public RuntimeImport(String name) {
+ super();
+ this.name = name;
+ }
+
+
+ public String getName() {
+ return name;
+ }
+
+}
Modified:
trunk/cdk/generator/src/main/java/org/ajax4jsf/builder/render/JavaClassRenderer.java
===================================================================
---
trunk/cdk/generator/src/main/java/org/ajax4jsf/builder/render/JavaClassRenderer.java 2007-10-31
16:35:48 UTC (rev 3644)
+++
trunk/cdk/generator/src/main/java/org/ajax4jsf/builder/render/JavaClassRenderer.java 2007-10-31
16:39:47 UTC (rev 3645)
@@ -30,6 +30,7 @@
import org.ajax4jsf.builder.model.Argument;
import org.ajax4jsf.builder.model.JavaClass;
import org.ajax4jsf.builder.model.JavaField;
+import org.ajax4jsf.builder.model.JavaImport;
import org.ajax4jsf.builder.model.JavaMethod;
import org.ajax4jsf.builder.model.JavaModifier;
import org.ajax4jsf.builder.model.JavaPackage;
@@ -48,9 +49,9 @@
public void render(JavaClass javaClass, PrintWriter out){
out.println("package " + javaClass.getPackage().getName() + ";");
out.println();
- Set<Class<?>> imports = javaClass.getImports();
+ Set<JavaImport> imports = javaClass.getImports();
- for (Class<?> impord : imports) {
+ for (JavaImport impord : imports) {
out.println("import " + impord.getName() + ";");
}
Modified:
trunk/cdk/generator/src/main/java/org/ajax4jsf/builder/render/JavaLanguageElementRenderer.java
===================================================================
---
trunk/cdk/generator/src/main/java/org/ajax4jsf/builder/render/JavaLanguageElementRenderer.java 2007-10-31
16:35:48 UTC (rev 3644)
+++
trunk/cdk/generator/src/main/java/org/ajax4jsf/builder/render/JavaLanguageElementRenderer.java 2007-10-31
16:39:47 UTC (rev 3645)
@@ -21,6 +21,7 @@
package org.ajax4jsf.builder.render;
import java.io.PrintWriter;
+import java.util.Iterator;
import java.util.List;
import java.util.Set;
@@ -52,9 +53,24 @@
List<JavaAnnotation> annotations = element.getAnnotations();
if (annotations != null) {
for (JavaAnnotation javaAnnotation : annotations) {
- out.println("@" + javaAnnotation.getType().getSimpleName());
+ out.print("@" + javaAnnotation.getType().getSimpleName());
+ List<String> arguments = javaAnnotation.getArguments();
+ if (arguments != null && !arguments.isEmpty()) {
+ out.print("(");
+ for (Iterator<String> iterator = arguments.iterator(); iterator
+ .hasNext();) {
+ String string = iterator.next();
+ out.print(string);
+ if (iterator.hasNext()) {
+ out.print(", ");
+ }
+ }
+ out.print(")");
+ }
+ out.println();
}
}
+
}
public void renderComments(T element, PrintWriter out) {
Added: trunk/cdk/generator/src/main/resources/META-INF/templates12/snippets/get-action.vm
===================================================================
--- trunk/cdk/generator/src/main/resources/META-INF/templates12/snippets/get-action.vm
(rev 0)
+++
trunk/cdk/generator/src/main/resources/META-INF/templates12/snippets/get-action.vm 2007-10-31
16:39:47 UTC (rev 3645)
@@ -0,0 +1,7 @@
+ MethodExpression expression = getActionExpression();
+ if (expression instanceof
org.richfaces.webapp.taglib.MethodExpressionMethodBindingAdaptor) {
+ return ((org.richfaces.webapp.taglib.MethodExpressionMethodBindingAdaptor)
expression).getBinding();
+ } else if (expression != null) {
+ return new
org.richfaces.webapp.taglib.MethodBindingMethodExpressionAdaptor(expression);
+ }
+ return null;
Added: trunk/cdk/generator/src/main/resources/META-INF/templates12/snippets/set-action.vm
===================================================================
--- trunk/cdk/generator/src/main/resources/META-INF/templates12/snippets/set-action.vm
(rev 0)
+++
trunk/cdk/generator/src/main/resources/META-INF/templates12/snippets/set-action.vm 2007-10-31
16:39:47 UTC (rev 3645)
@@ -0,0 +1,5 @@
+ if (_action != null) {
+ setActionExpression(new
org.richfaces.webapp.taglib.MethodExpressionMethodBindingAdaptor(_action));
+ } else {
+ setActionExpression(null);
+ }
Added:
trunk/cdk/generator/src/test/java/org/ajax4jsf/builder/config/ClassWalkingLogicTest.java
===================================================================
---
trunk/cdk/generator/src/test/java/org/ajax4jsf/builder/config/ClassWalkingLogicTest.java
(rev 0)
+++
trunk/cdk/generator/src/test/java/org/ajax4jsf/builder/config/ClassWalkingLogicTest.java 2007-10-31
16:39:47 UTC (rev 3645)
@@ -0,0 +1,58 @@
+/**
+ * License Agreement.
+ *
+ * Rich Faces - Natural Ajax for Java Server Faces (JSF)
+ *
+ * Copyright (C) 2007 Exadel, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation.
+ *
+ * This library 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+package org.ajax4jsf.builder.config;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.faces.component.ActionSource;
+import javax.faces.component.StateHolder;
+import javax.faces.component.UIComponent;
+import javax.faces.component.html.HtmlCommandButton;
+
+import junit.framework.TestCase;
+
+/**
+ * @author Maksim Kaszynski
+ *
+ */
+public class ClassWalkingLogicTest extends TestCase {
+
+ public void testWalking() {
+
+ final List<String> l = new ArrayList<String>();
+
+ new ClassWalkingLogic(HtmlCommandButton.class)
+ .walk(new ClassVisitor() {
+ public void visit(Class<?> clazz) {
+ l.add(clazz.getName());
+ //System.out.println(clazz);
+ }
+ });
+ assertFalse(l.isEmpty());
+ assertTrue(l.contains(ActionSource.class.getName()));
+ assertTrue(l.contains(StateHolder.class.getName()));
+ assertTrue(l.contains(UIComponent.class.getName()));
+ assertTrue(l.contains(HtmlCommandButton.class.getName()));
+ assertFalse(l.contains(Object.class.getName()));
+ }
+}