Author: alexsmirnov
Date: 2009-08-05 20:41:54 -0400 (Wed, 05 Aug 2009)
New Revision: 15118
Added:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/model/ClassDescription.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/model/JsfType.java
root/cdk/trunk/plugins/generator/src/test/resources/org/richfaces/cdk/test/
root/cdk/trunk/plugins/generator/src/test/resources/org/richfaces/cdk/test/component/
Removed:
root/cdk/trunk/plugins/generator/src/test/resources/org/richfaces/cdk/annotations/
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/AbstractCdkContext.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/CdkContext.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/LibraryBuilder.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/CdkCompiler.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/ComponentProcessor.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/model/Behavior.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/model/Component.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/model/ComponentLibrary.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/model/Converter.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/model/JsfComponent.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/model/Listener.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/model/Property.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/model/Renderer.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/model/TagLibrary.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/model/Validator.java
root/cdk/trunk/plugins/generator/src/test/java/org/richfaces/cdk/apt/ProcessorTest.java
root/cdk/trunk/plugins/generator/src/test/java/org/richfaces/cdk/apt/VirtualFileManagerTest.java
root/cdk/trunk/plugins/generator/src/test/resources/org/richfaces/cdk/test/component/AbstractTestComponent.java
Log:
Develop annotation processor
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/AbstractCdkContext.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/AbstractCdkContext.java 2009-08-05
19:47:36 UTC (rev 15117)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/AbstractCdkContext.java 2009-08-06
00:41:54 UTC (rev 15118)
@@ -43,7 +43,7 @@
private File resourceOutput;
- private ComponentLibrary library;
+ private String baseName;
/**
* <p class="changed_added_4_0"></p>
@@ -96,24 +96,6 @@
this.resourceOutput = resourceOutput;
}
- /**
- * <p class="changed_added_4_0"></p>
- * @return the library
- */
- @Override
- public ComponentLibrary getLibrary() {
- return library;
- }
-
- /**
- * <p class="changed_added_4_0"></p>
- * @param library the library to set
- */
- @Override
- public void setLibrary(ComponentLibrary library) {
- this.library = library;
- }
-
public AbstractCdkContext(ClassLoader loader) {
this.loader = loader;
// TODO Auto-generated constructor stub
@@ -126,4 +108,18 @@
return loader;
}
+ @Override
+ public String getBaseName() {
+ return this.baseName;
+ }
+
+ /**
+ * <p class="changed_added_4_0"></p>
+ * @param baseName the baseName to set
+ */
+ public void setBaseName(String baseName) {
+ this.baseName = baseName;
+ }
+
+
}
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/CdkContext.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/CdkContext.java 2009-08-05
19:47:36 UTC (rev 15117)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/CdkContext.java 2009-08-06
00:41:54 UTC (rev 15118)
@@ -17,14 +17,12 @@
*/
public ClassLoader getLoader();
- public abstract void setLibrary(ComponentLibrary library);
-
- public abstract ComponentLibrary getLibrary();
-
public abstract File getResourceOutput();
public abstract File getJavaSourceOutput();
public abstract File getJavaSource();
+
+ public String getBaseName();
}
\ No newline at end of file
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/LibraryBuilder.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/LibraryBuilder.java 2009-08-05
19:47:36 UTC (rev 15117)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/LibraryBuilder.java 2009-08-06
00:41:54 UTC (rev 15118)
@@ -64,15 +64,12 @@
* @param sources
* @throws CdkException
*/
- public void buildModelFromAnnotations(Iterable<File> sources) throws CdkException
{
+ public ComponentLibrary buildModelFromAnnotations(Iterable<File> sources) throws
CdkException {
CdkCompiler compiler = CdkCompiler.create(getContext());
- ComponentLibrary componentLibrary = getContext().getLibrary();
- if (null == componentLibrary) {
- componentLibrary = createLibrary();
- getContext().setLibrary(componentLibrary);
- }
- compiler.process(sources, new ComponentProcessor(getContext()));
- // TODO - check and fix library consittence.
+ ComponentLibrary library = createLibrary();
+ ComponentProcessor componentProcessor = new ComponentProcessor(getContext(),library);
+ compiler.process(sources, componentProcessor);
+ return library;
}
/**
@@ -90,13 +87,6 @@
* @throws CdkException
*/
public void applyFacesConfigToModel(Iterable<File> configs) throws CdkException {
- ComponentLibrary componentLibrary = getContext().getLibrary();
- // Read faces-config.xml and build a new model.
- buildModelFromFacesConfig(configs);
- if(null != componentLibrary){
- componentLibrary.apply(getContext().getLibrary());
- getContext().setLibrary(componentLibrary);
- }
}
public void buildModelFromFacesConfig(Iterable<File> configs) throws CdkException
{
@@ -109,7 +99,7 @@
* @return
*/
protected ComponentLibrary createLibrary(){
- return new ComponentLibrary();
+ return new ComponentLibrary(getContext().getBaseName());
}
/**
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/CdkCompiler.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/CdkCompiler.java 2009-08-05
19:47:36 UTC (rev 15117)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/CdkCompiler.java 2009-08-06
00:41:54 UTC (rev 15118)
@@ -99,15 +99,35 @@
log.info("Compiler classpath:" + classPathOption);
}
+ if(null != context.getJavaSource()){
+ options.add("-sourcepath");
+ options.add(context.getJavaSource().getAbsolutePath());
+ }
+ if(null != context.getJavaSourceOutput() || null != context.getResourceOutput()){
+ options.add("-s");
+ StringBuilder generatedSourceFolders = new StringBuilder();
+ if(null != context.getJavaSourceOutput()){
+ generatedSourceFolders.append(context.getJavaSourceOutput().getAbsolutePath());
+ }
+ if(null != context.getResourceOutput()){
+ if(generatedSourceFolders.length()>0){
+ generatedSourceFolders.append(File.pathSeparatorChar);
+ }
+ generatedSourceFolders.append(context.getResourceOutput().getAbsolutePath());
+ }
+ options.add(generatedSourceFolders.toString());
+ }
compiler.setOptions(options);
+ // TODO - provide source files locale.
+ compiler.setLocale(Locale.getDefault());
+ // TODO -set locale and charset for platform-independent processing. Provide own
diagnostics listener.
StandardJavaFileManager stdFileManager = javaCompiler
.getStandardFileManager(null, null, null);
+ // TODO - use standard file manager for all tasks.
VirtualFileManager fileManager = new VirtualFileManager(stdFileManager,
context.getLoader());
fileManager.setJavaSourceDirectory(context.getJavaSource());
compiler.setFileManager(fileManager);
- // TODO - provide source files locale.
- compiler.setLocale(Locale.getDefault());
return compiler;
}
@@ -144,7 +164,7 @@
*
* @return the options
*/
- public Iterable<String> getOptions() {
+ protected Iterable<String> getOptions() {
return options;
}
@@ -155,7 +175,7 @@
* @param options
* the options to set
*/
- public void setOptions(Iterable<String> options) {
+ protected void setOptions(Iterable<String> options) {
this.options = options;
}
@@ -189,7 +209,7 @@
*
* @return the javaCompiler
*/
- public JavaCompiler getJavaCompiler() {
+ protected JavaCompiler getJavaCompiler() {
return javaCompiler;
}
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/ComponentProcessor.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/ComponentProcessor.java 2009-08-05
19:47:36 UTC (rev 15117)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/ComponentProcessor.java 2009-08-06
00:41:54 UTC (rev 15118)
@@ -25,6 +25,7 @@
import java.util.Set;
+import javax.annotation.processing.ProcessingEnvironment;
import javax.annotation.processing.RoundEnvironment;
import javax.annotation.processing.SupportedAnnotationTypes;
import javax.lang.model.element.Element;
@@ -32,6 +33,7 @@
import org.richfaces.cdk.CdkContext;
import org.richfaces.cdk.annotations.Component;
+import org.richfaces.cdk.model.ComponentLibrary;
/**
* <p class="changed_added_4_0"></p>
@@ -40,13 +42,16 @@
*/
@SupportedAnnotationTypes(Component.NAME)
public class ComponentProcessor extends CdkProcessor {
+
+ private final ComponentLibrary library;
/**
* <p class="changed_added_4_0"></p>
* @param context
*/
- public ComponentProcessor(CdkContext context) {
+ public ComponentProcessor(CdkContext context,ComponentLibrary library) {
super(context);
+ this.library = library;
}
/* (non-Javadoc)
@@ -68,4 +73,8 @@
return false;
}
+ public ComponentLibrary getLibrary() {
+ return library;
+ }
+
}
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/model/Behavior.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/model/Behavior.java 2009-08-05
19:47:36 UTC (rev 15117)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/model/Behavior.java 2009-08-06
00:41:54 UTC (rev 15118)
@@ -30,13 +30,21 @@
*/
public class Behavior implements JsfComponent {
+ private JsfType type;
+
/* (non-Javadoc)
* @see org.richfaces.cdk.model.JsfComponent#getType()
*/
- @Override
- public String getType() {
- // TODO Auto-generated method stub
- return null;
+ public JsfType getType() {
+ return type;
}
+ /**
+ * <p class="changed_added_4_0"></p>
+ * @param type the type to set
+ */
+ public void setType(JsfType type) {
+ this.type = type;
+ }
+
}
Added:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/model/ClassDescription.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/model/ClassDescription.java
(rev 0)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/model/ClassDescription.java 2009-08-06
00:41:54 UTC (rev 15118)
@@ -0,0 +1,88 @@
+/*
+ * $Id$
+ *
+ * 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.richfaces.cdk.model;
+
+/**
+ * <p class="changed_added_4_0">Tthat class represents information about
Jsf object class.</p>
+ * @author asmirnov(a)exadel.com
+ *
+ */
+public class ClassDescription {
+
+ private final String name;
+
+ private boolean exists;
+
+ private ClassDescription superClass;
+
+ /**
+ * <p class="changed_added_4_0"></p>
+ * @param name
+ */
+ public ClassDescription(String name) {
+ this.name = name;
+ }
+
+ /**
+ * <p class="changed_added_4_0"></p>
+ * @return the exists
+ */
+ public boolean isExists() {
+ return exists;
+ }
+
+ /**
+ * <p class="changed_added_4_0"></p>
+ * @param exists the exists to set
+ */
+ public void setExists(boolean exists) {
+ this.exists = exists;
+ }
+
+ /**
+ * <p class="changed_added_4_0"></p>
+ * @return the superClass
+ */
+ public ClassDescription getSuperClass() {
+ return superClass;
+ }
+
+ /**
+ * <p class="changed_added_4_0"></p>
+ * @param superClass the superClass to set
+ */
+ public void setSuperClass(ClassDescription superClass) {
+ this.superClass = superClass;
+ }
+
+ /**
+ * <p class="changed_added_4_0"></p>
+ * @return the name
+ */
+ public String getName() {
+ return name;
+ }
+
+
+}
Property changes on:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/model/ClassDescription.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/model/Component.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/model/Component.java 2009-08-05
19:47:36 UTC (rev 15117)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/model/Component.java 2009-08-06
00:41:54 UTC (rev 15118)
@@ -1,18 +1,25 @@
package org.richfaces.cdk.model;
+import java.util.Collection;
+import java.util.Collections;
import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import com.google.common.collect.Maps;
+import com.google.common.collect.Sets;
+
/**
* That class represents JSF component in the CDK.
* @author asmirnov(a)exadel.com
*
*/
-public class Component implements JsfComponent {
+public final class Component implements JsfComponent {
/**
* <p class="changed_added_4_0">Component type</p>
*/
- private String type;
+ private final Type type;
/**
* <p class="changed_added_4_0">component family</p>
@@ -22,12 +29,8 @@
/**
* <p class="changed_added_4_0">Cenerated component class</p>
*/
- private String className;
+ private ClassDescription componentClass;
- /**
- * <p class="changed_added_4_0">Base class for generated
component</p>
- */
- private String superClass;
/**
* <p class="changed_added_4_0">Long description for
documentation</p>
@@ -47,12 +50,8 @@
/**
* <p class="changed_added_4_0">Component attributes</p>
*/
- private List<Property> attributes;
+ private final Map<String,Property> attributes = Maps.newHashMap();
- /**
- * <p class="changed_added_4_0">VDL tag. This is bidirectional one to
one relation.</p>
- */
- private Tag tag;
/**
* <p class="changed_added_4_0">Application level events fired by the
component</p>
@@ -62,26 +61,133 @@
/**
* <p class="changed_added_4_0">Renderer for the final component. This
is bidirectional one to one relation.</p>
*/
- private Attribute renderer;
+ private List<Renderer> renderers;
/**
* <p class="changed_added_4_0">Facets recognised by the
component</p>
*/
private List<Facet> facets;
+ /**
+ * <p class="changed_added_4_0"></p>
+ * @param type the type to set
+ */
+ Component(Type type) {
+ this.type = type;
+ }
+
/* (non-Javadoc)
* @see org.richfaces.cdk.model.JsfComponent#getType()
*/
- public String getType() {
+ public JsfType getType() {
return type;
}
/**
* <p class="changed_added_4_0"></p>
- * @param type the type to set
+ * @return the family
*/
- public void setType(String type) {
- this.type = type;
+ public String getFamily() {
+ return family;
}
+
+ /**
+ * <p class="changed_added_4_0"></p>
+ * @param family the family to set
+ */
+ public void setFamily(String family) {
+ this.family = family;
+ }
+
+ /**
+ * <p class="changed_added_4_0"></p>
+ * @return the componentClass
+ */
+ public ClassDescription getComponentClass() {
+ return componentClass;
+ }
+
+ /**
+ * <p class="changed_added_4_0"></p>
+ * @param componentClass the componentClass to set
+ */
+ public void setComponentClass(ClassDescription componentClass) {
+ this.componentClass = componentClass;
+ }
+
+ /**
+ * <p class="changed_added_4_0"></p>
+ * @return the description
+ */
+ public String getDescription() {
+ return description;
+ }
+
+ /**
+ * <p class="changed_added_4_0"></p>
+ * @param description the description to set
+ */
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+ /**
+ * <p class="changed_added_4_0"></p>
+ * @return the displayname
+ */
+ public String getDisplayname() {
+ return displayname;
+ }
+
+ /**
+ * <p class="changed_added_4_0"></p>
+ * @param displayname the displayname to set
+ */
+ public void setDisplayname(String displayname) {
+ this.displayname = displayname;
+ }
+
+ /**
+ * <p class="changed_added_4_0"></p>
+ * @return the icon
+ */
+ public String getIcon() {
+ return icon;
+ }
+
+ /**
+ * <p class="changed_added_4_0"></p>
+ * @param icon the icon to set
+ */
+ public void setIcon(String icon) {
+ this.icon = icon;
+ }
+
+ /**
+ * <p class="changed_added_4_0"></p>
+ * @return the attributes
+ */
+ public Collection<Property> getAttributes() {
+ return Collections.unmodifiableCollection(attributes.values());
+ }
+
+ public Property addAtribute(String attributeName) {
+ Property attribute;
+ if(attributes.containsKey(attributeName)){
+ attribute = attributes.get(attributeName);
+ } else {
+ attribute = new Property(attributeName);
+ attributes.put(attributeName, attribute);
+ }
+ return attribute;
+ }
+
+ public static class Type extends JsfType {
+
+ public Type(String type) {
+ super(type);
+ }
+
+ }
}
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/model/ComponentLibrary.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/model/ComponentLibrary.java 2009-08-05
19:47:36 UTC (rev 15117)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/model/ComponentLibrary.java 2009-08-06
00:41:54 UTC (rev 15118)
@@ -24,39 +24,63 @@
package org.richfaces.cdk.model;
import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
import java.util.List;
+import java.util.Map;
+import com.google.common.collect.Maps;
+
/**
* <p class="changed_added_4_0">That class contains model of all JSF
components asscoiated with that project</p>
+ * <p>To keep consistence of library references, only library methods are allowed
to components manipulations.</p>
* @author asmirnov(a)exadel.com
*
*/
public class ComponentLibrary {
+
/**
* <p class="changed_added_4_0">JSF components in that
library</p>
*/
- private List<Component> components = new ArrayList<Component>();
+ private final Map<Component.Type,Component> components = Maps.newHashMap();
+ private final Collection<Component> componentsSet =
Collections.unmodifiableCollection(components.values());
+
/**
* <p class="changed_added_4_0">JSF renderer associated with that
library</p>
*/
- private List<Renderer> renderers = new ArrayList<Renderer>();
+ private final List<Renderer> renderers = new ArrayList<Renderer>();
- private List<Converter> converters = new ArrayList<Converter>();
+ private final List<Converter> converters = new ArrayList<Converter>();
- private List<Validator> validators = new ArrayList<Validator>();
+ private final List<Validator> validators = new ArrayList<Validator>();
- private List<Behavior> behaviors = new ArrayList<Behavior>();
+ private final List<Behavior> behaviors = new ArrayList<Behavior>();
- private List<Listener> listeners = new ArrayList<Listener>();
+ private final List<Listener> listeners = new ArrayList<Listener>();
/**
* <p class="changed_added_4_0">Tag library with references of all used
tags</p>
*/
- private TagLibrary tagLibrary;
+ private final TagLibrary tagLibrary;
+
+ /**
+ * <p class="changed_added_4_0"></p>
+ */
+ private final String baseName;
+
+
/**
+ * <p class="changed_added_4_0"></p>
+ * @param baseName
+ */
+ public ComponentLibrary(String baseName) {
+ this.baseName = baseName;
+ this.tagLibrary = new TagLibrary(baseName);
+ }
+ /**
* <p class="changed_added_4_0">Merge component library model with
other.</p>
* @param otherLibrary
*/
@@ -68,15 +92,30 @@
* <p class="changed_added_4_0"></p>
* @return the components
*/
- public List<Component> getComponents() {
- return components;
+ public Collection<Component> getComponents() {
+ return componentsSet;
}
+
+
/**
- * <p class="changed_added_4_0"></p>
- * @param components the components to set
+ * <p class="changed_added_4_0">
+ * Lookup for component with given type. If such component did not exist and
+ * parameter {@code create} was set to {@code true} a new instance will be
+ * created
+ * </p>
+ *
+ * @param type
+ * @param create
+ * @return
*/
- public void setComponents(List<Component> components) {
- this.components = components;
+ public Component getComponent(String type, boolean create) {
+ Component.Type componentType = new Component.Type(type);
+ Component component = components.get(componentType);
+ if(null == component && create){
+ component = new Component(componentType);
+ components.put(componentType, component);
+ }
+ return component;
}
/**
* <p class="changed_added_4_0"></p>
@@ -87,13 +126,6 @@
}
/**
* <p class="changed_added_4_0"></p>
- * @param renderers the renderers to set
- */
- public void setRenderers(List<Renderer> renderers) {
- this.renderers = renderers;
- }
- /**
- * <p class="changed_added_4_0"></p>
* @return the converters
*/
public List<Converter> getConverters() {
@@ -101,13 +133,6 @@
}
/**
* <p class="changed_added_4_0"></p>
- * @param converters the converters to set
- */
- public void setConverters(List<Converter> converters) {
- this.converters = converters;
- }
- /**
- * <p class="changed_added_4_0"></p>
* @return the validators
*/
public List<Validator> getValidators() {
@@ -115,13 +140,6 @@
}
/**
* <p class="changed_added_4_0"></p>
- * @param validators the validators to set
- */
- public void setValidators(List<Validator> validators) {
- this.validators = validators;
- }
- /**
- * <p class="changed_added_4_0"></p>
* @return the behaviors
*/
public List<Behavior> getBehaviors() {
@@ -129,15 +147,6 @@
}
/**
* <p class="changed_added_4_0"></p>
- * @param behaviors the behaviors to set
- */
- public void setBehaviors(List<Behavior> behaviors) {
- this.behaviors = behaviors;
- }
-
-
- /**
- * <p class="changed_added_4_0"></p>
* @return the listeners
*/
public List<Listener> getListeners() {
@@ -145,10 +154,11 @@
}
/**
* <p class="changed_added_4_0"></p>
- * @param listeners the listeners to set
+ * @return the tagLibrary
*/
- public void setListeners(List<Listener> listeners) {
- this.listeners = listeners;
+ public TagLibrary getTagLibrary() {
+ return tagLibrary;
}
+
}
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/model/Converter.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/model/Converter.java 2009-08-05
19:47:36 UTC (rev 15117)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/model/Converter.java 2009-08-06
00:41:54 UTC (rev 15118)
@@ -30,13 +30,21 @@
*/
public class Converter implements JsfComponent {
+ private JsfType type;
+
/* (non-Javadoc)
* @see org.richfaces.cdk.model.JsfComponent#getType()
*/
- @Override
- public String getType() {
- // TODO Auto-generated method stub
- return null;
+ public JsfType getType() {
+ return type;
}
+ /**
+ * <p class="changed_added_4_0"></p>
+ * @param type the type to set
+ */
+ public void setType(JsfType type) {
+ this.type = type;
+ }
+
}
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/model/JsfComponent.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/model/JsfComponent.java 2009-08-05
19:47:36 UTC (rev 15117)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/model/JsfComponent.java 2009-08-06
00:41:54 UTC (rev 15118)
@@ -9,6 +9,6 @@
*
* @return the type of JSF object.
*/
- public String getType();
+ public JsfType getType();
}
\ No newline at end of file
Added:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/model/JsfType.java
===================================================================
--- root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/model/JsfType.java
(rev 0)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/model/JsfType.java 2009-08-06
00:41:54 UTC (rev 15118)
@@ -0,0 +1,79 @@
+/*
+ * $Id$
+ *
+ * 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.richfaces.cdk.model;
+
+/**
+ * <p class="changed_added_4_0">This is a Key class that should be used
to find JSF elements in {@link ComponentLibrary}</p>
+ * @author asmirnov(a)exadel.com
+ *
+ */
+public class JsfType {
+
+ private final String type;
+
+ /**
+ * <p class="changed_added_4_0"></p>
+ * @param type
+ */
+ public JsfType(String type) {
+ this.type = type;
+ }
+
+ @Override
+ public String toString() {
+ return type;
+ }
+ /* (non-Javadoc)
+ * @see java.lang.Object#hashCode()
+ */
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((type == null) ? 0 : type.hashCode());
+ return result;
+ }
+
+ /* (non-Javadoc)
+ * @see java.lang.Object#equals(java.lang.Object)
+ */
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ JsfType other = (JsfType) obj;
+ if (type == null) {
+ if (other.type != null)
+ return false;
+ } else if (!type.equals(other.type))
+ return false;
+ return true;
+ }
+
+
+}
Property changes on:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/model/JsfType.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/model/Listener.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/model/Listener.java 2009-08-05
19:47:36 UTC (rev 15117)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/model/Listener.java 2009-08-06
00:41:54 UTC (rev 15118)
@@ -30,13 +30,12 @@
*/
public class Listener implements JsfComponent {
- private String type;
+ private JsfType type;
- /**
- * <p class="changed_added_4_0"></p>
- * @return the type
+ /* (non-Javadoc)
+ * @see org.richfaces.cdk.model.JsfComponent#getType()
*/
- public String getType() {
+ public JsfType getType() {
return type;
}
@@ -44,7 +43,7 @@
* <p class="changed_added_4_0"></p>
* @param type the type to set
*/
- public void setType(String type) {
+ public void setType(JsfType type) {
this.type = type;
}
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/model/Property.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/model/Property.java 2009-08-05
19:47:36 UTC (rev 15117)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/model/Property.java 2009-08-06
00:41:54 UTC (rev 15118)
@@ -31,14 +31,12 @@
/**
* <p class="changed_added_4_0">Bean property name of component
attribute</p>
*/
- private String name;
+ private final String name;
+
+ private ClassDescription type;
+
/**
- * <p class="changed_added_4_0">Name of the attribute type
class</p>
- */
- private String classname;
-
- /**
* <p class="changed_added_4_0">Attribute description</p>
*/
private String description;
@@ -47,41 +45,26 @@
* <p class="changed_added_4_0">Display name for IDE</p>
*/
private String displayname;
+
/**
* <p class="changed_added_4_0"></p>
- * @return the name
+ * @param name
*/
- public String getName() {
- return name;
- }
-
- /**
- * <p class="changed_added_4_0"></p>
- * @param name the name to set
- */
- public void setName(String name) {
+ public Property(String name) {
this.name = name;
}
/**
* <p class="changed_added_4_0"></p>
- * @return the classname
+ * @return the name
*/
- public String getClassname() {
- return classname;
+ public String getName() {
+ return name;
}
/**
* <p class="changed_added_4_0"></p>
- * @param classname the classname to set
- */
- public void setClassname(String classname) {
- this.classname = classname;
- }
-
- /**
- * <p class="changed_added_4_0"></p>
* @return the description
*/
public String getDescription() {
@@ -112,4 +95,51 @@
this.displayname = displayname;
}
+ /**
+ * <p class="changed_added_4_0"></p>
+ * @return the type
+ */
+ public ClassDescription getType() {
+ return type;
+ }
+
+ /**
+ * <p class="changed_added_4_0"></p>
+ * @param type the type to set
+ */
+ public void setType(ClassDescription type) {
+ this.type = type;
+ }
+
+ /* (non-Javadoc)
+ * @see java.lang.Object#hashCode()
+ */
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((name == null) ? 0 : name.hashCode());
+ return result;
+ }
+
+ /* (non-Javadoc)
+ * @see java.lang.Object#equals(java.lang.Object)
+ */
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ Property other = (Property) obj;
+ if (name == null) {
+ if (other.name != null)
+ return false;
+ } else if (!name.equals(other.name))
+ return false;
+ return true;
+ }
+
}
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/model/Renderer.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/model/Renderer.java 2009-08-05
19:47:36 UTC (rev 15117)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/model/Renderer.java 2009-08-06
00:41:54 UTC (rev 15118)
@@ -30,13 +30,21 @@
*/
public class Renderer implements JsfComponent {
+ private JsfType type;
+
/* (non-Javadoc)
* @see org.richfaces.cdk.model.JsfComponent#getType()
*/
- @Override
- public String getType() {
- // TODO Auto-generated method stub
- return null;
+ public JsfType getType() {
+ return type;
}
+ /**
+ * <p class="changed_added_4_0"></p>
+ * @param type the type to set
+ */
+ public void setType(JsfType type) {
+ this.type = type;
+ }
+
}
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/model/TagLibrary.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/model/TagLibrary.java 2009-08-05
19:47:36 UTC (rev 15117)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/model/TagLibrary.java 2009-08-06
00:41:54 UTC (rev 15118)
@@ -23,6 +23,7 @@
package org.richfaces.cdk.model;
+import java.util.ArrayList;
import java.util.List;
/**
@@ -35,8 +36,14 @@
/**
* <p class="changed_added_4_0">Collection of tags associated with that
library</p>
*/
- private List<Tag> tags;
+ private final List<Tag> tags = new ArrayList<Tag>();
+
+ private final String baseName;
+ public TagLibrary(String baseName) {
+ this.baseName = baseName;
+ }
+
/**
* <p class="changed_added_4_0"></p>
* @return the tags
@@ -45,12 +52,5 @@
return tags;
}
- /**
- * <p class="changed_added_4_0"></p>
- * @param tags the tags to set
- */
- public void setTags(List<Tag> tags) {
- this.tags = tags;
- }
}
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/model/Validator.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/model/Validator.java 2009-08-05
19:47:36 UTC (rev 15117)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/model/Validator.java 2009-08-06
00:41:54 UTC (rev 15118)
@@ -30,13 +30,21 @@
*/
public class Validator implements JsfComponent {
+ private JsfType type;
+
/* (non-Javadoc)
* @see org.richfaces.cdk.model.JsfComponent#getType()
*/
- @Override
- public String getType() {
- // TODO Auto-generated method stub
- return null;
+ public JsfType getType() {
+ return type;
}
+ /**
+ * <p class="changed_added_4_0"></p>
+ * @param type the type to set
+ */
+ public void setType(JsfType type) {
+ this.type = type;
+ }
+
}
Modified:
root/cdk/trunk/plugins/generator/src/test/java/org/richfaces/cdk/apt/ProcessorTest.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/test/java/org/richfaces/cdk/apt/ProcessorTest.java 2009-08-05
19:47:36 UTC (rev 15117)
+++
root/cdk/trunk/plugins/generator/src/test/java/org/richfaces/cdk/apt/ProcessorTest.java 2009-08-06
00:41:54 UTC (rev 15118)
@@ -27,6 +27,9 @@
import static org.easymock.EasyMock.*;
import static org.hamcrest.CoreMatchers.*;
+import static javax.lang.model.util.ElementFilter.*;
+
+
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
@@ -51,8 +54,17 @@
import javax.annotation.processing.SupportedAnnotationTypes;
import javax.annotation.processing.SupportedSourceVersion;
import javax.lang.model.SourceVersion;
+import javax.lang.model.element.AnnotationMirror;
import javax.lang.model.element.Element;
+import javax.lang.model.element.ExecutableElement;
+import javax.lang.model.element.Modifier;
+import javax.lang.model.element.Name;
import javax.lang.model.element.TypeElement;
+import javax.lang.model.element.VariableElement;
+import javax.lang.model.type.TypeMirror;
+import javax.lang.model.util.ElementFilter;
+import javax.lang.model.util.Elements;
+import javax.lang.model.util.Types;
import javax.tools.Diagnostic;
import javax.tools.DiagnosticListener;
import javax.tools.JavaCompiler;
@@ -72,6 +84,10 @@
import org.junit.Test;
import org.richfaces.cdk.CdkContext;
import org.richfaces.cdk.LoggerFactory;
+import org.richfaces.cdk.annotations.Attribute;
+import org.richfaces.cdk.annotations.Component;
+import org.richfaces.cdk.model.ComponentLibrary;
+import org.richfaces.cdk.model.Property;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
@@ -87,44 +103,79 @@
private static final String ANNOTATION2 = TestAnnotation2.class.getName();
- @SupportedAnnotationTypes("org.richfaces.cdk.apt.TestAnnotation2")
+ @SupportedAnnotationTypes(Component.NAME)
@SupportedSourceVersion(SourceVersion.RELEASE_6)
private final class TestProcessor extends CdkProcessor {
+ ComponentLibrary library;
+
+ private int numOfComponents;
+
public TestProcessor(CdkContext context) {
super(context);
- // TODO Auto-generated constructor stub
}
+
+ @Override
+ public synchronized void init(ProcessingEnvironment processingEnv) {
+ super.init(processingEnv);
+ }
+
+ @Override
+ public synchronized boolean isInitialized() {
+ return super.isInitialized();
+ }
@Override
public boolean process(Set<? extends TypeElement> annotations,
RoundEnvironment environment) {
System.out.println("Run Process at round: "+environment.processingOver());
- for(Element element: environment.getRootElements()){
- System.out.println("Root element: "
- + element.getSimpleName() + " with javadoc:" +
processingEnv.getElementUtils().getDocComment(element));
- }
- for (TypeElement typeElement : annotations) {
- System.out.println("Process annotation: "
- + typeElement.getQualifiedName());
- Set<? extends Element> annotatedWith = environment
- .getElementsAnnotatedWith(typeElement);
+ if(!environment.processingOver()){
+ // Get all classes annotated by "component"
+ Set<? extends Element> annotatedWith =
environment.getElementsAnnotatedWith(Component.class);
+ numOfComponents = annotatedWith.size();
for (Element element : annotatedWith) {
- System.out.println("annotated element: "
- + element.getSimpleName());
+ Component annotation = element.getAnnotation(Component.class);
+ String type = annotation.type();
+ //TODO - infer type for an empty one. Is thart method for library or for
environment ?
+ if(isEmpty(type)){
+
+ }
+ org.richfaces.cdk.model.Component component = library.getComponent(type,true);
+ Elements elementUtils = processingEnv.getElementUtils();
+ Types typeUtils = processingEnv.getTypeUtils();
+ component.setDescription(elementUtils.getDocComment(element));
+ List<ExecutableElement> methodsIn =
ElementFilter.methodsIn(elementUtils.getAllMembers((TypeElement) element));
+ for (ExecutableElement method : methodsIn) {
+ Attribute attribute = method.getAnnotation(Attribute.class);
+ if(null != attribute){
+ TypeMirror returnType = method.getReturnType();
+ String methodName = method.getSimpleName().toString();
+ List<? extends VariableElement> parameters = method.getParameters();
+ Set<Modifier> modifiers = method.getModifiers();
+ if(methodName.startsWith("get") && parameters.isEmpty()
&& modifiers.contains(Modifier.PUBLIC)){
+ // Bean getter method.
+ String attributeName =
methodName.substring(3,4).toLowerCase()+methodName.substring(4);
+ Property atribute = component.addAtribute(attributeName);
+ atribute.setDescription(elementUtils.getDocComment(method));
+ }
+ }
+ }
}
}
- System.out.flush();
return true;
}
+ private boolean isEmpty(String type) {
+ return type == null || type.length()==0;
+ }
+
}
private static final String INTERFACE_JAVA =
"org/richfaces/cdk/apt/TestInterface.java";
private static final String SUB_CLASS_JAVA =
"org/richfaces/cdk/apt/TestSubClass.java";
private static final String CLASS_JAVA =
"org/richfaces/cdk/apt/TestClass.java";
private static final ImmutableSet<String> PROCESS_ANNOTATIONS =
ImmutableSet.of(TestAnnotation.class.getName());
- private static final String COMPONENT_CLASS_JAVA =
"org/richfaces/cdk/annotations/AbstractTestComponent.java";
+ private static final String COMPONENT_CLASS_JAVA =
"org/richfaces/cdk/test/component/AbstractTestComponent.java";
private File testSourceDirectory;
private ClassLoader testLoader;
@@ -167,6 +218,8 @@
// Prepare Mock compilation context.
CdkContext cdkContext = createMock(CdkContext.class);
expect(cdkContext.getJavaSource()).andStubReturn(testSourceDirectory);
+ expect(cdkContext.getJavaSourceOutput()).andStubReturn(null);
+ expect(cdkContext.getResourceOutput()).andStubReturn(null);
expect(cdkContext.getLoader()).andStubReturn(TestAnnotation.class.getClassLoader());
replay(cdkContext);
@@ -196,6 +249,8 @@
// Prepare Mock compilation context.
CdkContext cdkContext = createMock(CdkContext.class);
expect(cdkContext.getJavaSource()).andStubReturn(testSourceDirectory);
+ expect(cdkContext.getJavaSourceOutput()).andStubReturn( null);
+ expect(cdkContext.getResourceOutput()).andStubReturn(null);
expect(cdkContext.getLoader()).andStubReturn(TestAnnotation2.class.getClassLoader());
replay(cdkContext);
@@ -228,12 +283,22 @@
// Prepare Mock compilation context.
CdkContext cdkContext = createMock(CdkContext.class);
expect(cdkContext.getJavaSource()).andStubReturn(testSourceDirectory);
+ expect(cdkContext.getJavaSourceOutput()).andStubReturn(null);
+ expect(cdkContext.getResourceOutput()).andStubReturn(null);
expect(cdkContext.getLoader()).andStubReturn(TestAnnotation2.class.getClassLoader());
replay(cdkContext);
- Processor processor = new TestProcessor(cdkContext);
+ TestProcessor processor = new TestProcessor(cdkContext);
+ ComponentLibrary library = new ComponentLibrary("org.richfaces.cdk.test");
+ processor.library = library;
CdkCompiler compiler = CdkCompiler.create(cdkContext);
- compiler.process(ImmutableList.of(getJavaFile(SUB_CLASS_JAVA),getJavaFile(CLASS_JAVA),getJavaFile(INTERFACE_JAVA)),
processor);
+ compiler.process(ImmutableList.of(getJavaFile(COMPONENT_CLASS_JAVA)), processor);
verify(cdkContext);
+ assertTrue(processor.isInitialized());
+ assertEquals(1, processor.numOfComponents);
+ assertEquals(1, library.getComponents().size());
+ org.richfaces.cdk.model.Component component =
library.getComponents().iterator().next();
+ assertEquals(1, component.getAttributes().size());
+
}
/**
@@ -248,9 +313,12 @@
// Prepare Mock compilation context.
CdkContext cdkContext = createMock(CdkContext.class);
expect(cdkContext.getJavaSource()).andStubReturn(testSourceDirectory);
+ expect(cdkContext.getJavaSourceOutput()).andStubReturn(null);
+ expect(cdkContext.getResourceOutput()).andStubReturn(null);
expect(cdkContext.getLoader()).andStubReturn(TestAnnotation2.class.getClassLoader());
replay(cdkContext);
- Processor processor = new ComponentProcessor(cdkContext);
+ ComponentLibrary library = new ComponentLibrary("org.richfaces.cdk.test");
+ Processor processor = new ComponentProcessor(cdkContext,library);
CdkCompiler compiler = CdkCompiler.create(cdkContext);
compiler.process(ImmutableList.of(getJavaFile(COMPONENT_CLASS_JAVA)), processor);
verify(cdkContext);
Modified:
root/cdk/trunk/plugins/generator/src/test/java/org/richfaces/cdk/apt/VirtualFileManagerTest.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/test/java/org/richfaces/cdk/apt/VirtualFileManagerTest.java 2009-08-05
19:47:36 UTC (rev 15117)
+++
root/cdk/trunk/plugins/generator/src/test/java/org/richfaces/cdk/apt/VirtualFileManagerTest.java 2009-08-06
00:41:54 UTC (rev 15118)
@@ -90,7 +90,7 @@
fileManager.setJavaSourceDirectory(javaSourceDirectory);
replay(mockFileManager);
ArrayList<JavaFileObject> list =
Lists.newArrayList(fileManager.list(StandardLocation.SOURCE_PATH, "",
ImmutableSet.of(Kind.HTML,Kind.SOURCE), true));
- assertEquals(4, list.size());
+ assertEquals(5, list.size());
}
@Test
public void testGetFileForInputLocationStringString() throws Exception {
Copied:
root/cdk/trunk/plugins/generator/src/test/resources/org/richfaces/cdk/test/component (from
rev 15116,
root/cdk/trunk/plugins/generator/src/test/resources/org/richfaces/cdk/annotations)
Modified:
root/cdk/trunk/plugins/generator/src/test/resources/org/richfaces/cdk/test/component/AbstractTestComponent.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/test/resources/org/richfaces/cdk/annotations/AbstractTestComponent.java 2009-08-05
15:46:45 UTC (rev 15116)
+++
root/cdk/trunk/plugins/generator/src/test/resources/org/richfaces/cdk/test/component/AbstractTestComponent.java 2009-08-06
00:41:54 UTC (rev 15118)
@@ -21,8 +21,11 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
-package org.richfaces.cdk.annotations;
+package org.richfaces.cdk.test.component;
+import org.richfaces.cdk.annotations.Attribute;
+import org.richfaces.cdk.annotations.Component;
+
import javax.faces.component.UIComponent;
import javax.faces.component.ValueHolder;
@@ -31,10 +34,15 @@
* @author asmirnov(a)exadel.com
*
*/
-(a)Component(type="org.richfaces.Test",family="org.richfaces.Family")
+(a)Component(type="org.richfaces.cdk.test.TestComponent",family="org.richfaces.Family")
public abstract class AbstractTestComponent extends UIComponent implements
ValueHolder {
+ /**
+ *
+ * <p class="changed_added_4_0"></p>
+ * @return
+ */
@Attribute
public abstract Object getTestValue();