Author: alexsmirnov
Date: 2010-01-11 20:19:54 -0500 (Mon, 11 Jan 2010)
New Revision: 16260
Added:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/ConverterProcessor.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/ProcessorBase.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/RendererProcessor.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/ConverterAdapter.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/ConverterBean.java
root/cdk/trunk/plugins/generator/src/test/java/org/richfaces/cdk/xmlconfig/testmodel/ConverterBeanTest.java
Modified:
root/cdk/trunk/plugins/generator/pom.xml
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/BehaviorProcessor.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/CdkAnnotationProcessor.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/CdkProcessor.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/apt/FacesComponentProcessor.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/SourceUtils.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/model/ConverterModel.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/model/ModelElementBase.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/FacesConfigParser.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/FacesConfigBean.java
root/cdk/trunk/pom.xml
Log:
https://jira.jboss.org/jira/browse/RF-7725
Modified: root/cdk/trunk/plugins/generator/pom.xml
===================================================================
--- root/cdk/trunk/plugins/generator/pom.xml 2010-01-11 20:36:57 UTC (rev 16259)
+++ root/cdk/trunk/plugins/generator/pom.xml 2010-01-12 01:19:54 UTC (rev 16260)
@@ -23,7 +23,7 @@
<dependency>
<groupId>com.google.collections</groupId>
<artifactId>google-collections</artifactId>
- <version>1.0-rc3</version>
+ <version>1.0</version>
</dependency>
</dependencies>
</dependencyManagement>
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/BehaviorProcessor.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/BehaviorProcessor.java 2010-01-11
20:36:57 UTC (rev 16259)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/BehaviorProcessor.java 2010-01-12
01:19:54 UTC (rev 16260)
@@ -23,17 +23,20 @@
package org.richfaces.cdk.apt;
+import java.lang.annotation.Annotation;
+
import javax.lang.model.element.TypeElement;
import org.richfaces.cdk.CdkContext;
import org.richfaces.cdk.CdkProcessingException;
+import org.richfaces.cdk.annotations.Behavior;
/**
* <p class="changed_added_4_0"></p>
* @author asmirnov(a)exadel.com
*
*/
-public class BehaviorProcessor implements CdkAnnotationProcessor {
+public class BehaviorProcessor extends ProcessorBase implements CdkAnnotationProcessor {
/* (non-Javadoc)
* @see
org.richfaces.cdk.apt.CdkAnnotationProcessor#process(javax.lang.model.element.TypeElement)
@@ -44,13 +47,10 @@
}
- /* (non-Javadoc)
- * @see org.richfaces.cdk.CdkWorker#init(org.richfaces.cdk.CdkContext)
- */
@Override
- public void init(CdkContext context) {
- // TODO Auto-generated method stub
-
+ public Class<? extends Annotation> getProcessedAnnotation() {
+ return Behavior.class;
}
+
}
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/CdkAnnotationProcessor.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/CdkAnnotationProcessor.java 2010-01-11
20:36:57 UTC (rev 16259)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/CdkAnnotationProcessor.java 2010-01-12
01:19:54 UTC (rev 16260)
@@ -23,6 +23,8 @@
package org.richfaces.cdk.apt;
+import java.lang.annotation.Annotation;
+
import javax.lang.model.element.TypeElement;
import org.richfaces.cdk.CdkProcessingException;
@@ -41,5 +43,7 @@
* @throws CdkProcessingException
*/
public void process(TypeElement element) throws CdkProcessingException;
+
+ public Class<? extends Annotation> getProcessedAnnotation();
}
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/CdkProcessor.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/CdkProcessor.java 2010-01-11
20:36:57 UTC (rev 16259)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/CdkProcessor.java 2010-01-12
01:19:54 UTC (rev 16260)
@@ -23,29 +23,28 @@
package org.richfaces.cdk.apt;
-import java.lang.annotation.Annotation;
-import java.util.Collections;
-import java.util.Set;
-
-import javax.annotation.processing.AbstractProcessor;
-import javax.annotation.processing.RoundEnvironment;
-import javax.faces.component.FacesComponent;
-import javax.lang.model.SourceVersion;
-import javax.lang.model.element.TypeElement;
-
+import com.google.common.collect.ImmutableList;
import org.richfaces.cdk.CdkContext;
+import org.richfaces.cdk.CdkContext.OutputType;
import org.richfaces.cdk.CdkException;
import org.richfaces.cdk.CdkProcessingException;
import org.richfaces.cdk.CdkWorker;
import org.richfaces.cdk.ModelValidator;
import org.richfaces.cdk.StandardOutputs;
import org.richfaces.cdk.StandardSources;
-import org.richfaces.cdk.CdkContext.OutputType;
import org.richfaces.cdk.annotations.Behavior;
import org.richfaces.cdk.annotations.Component;
+import org.richfaces.cdk.annotations.Converter;
import org.richfaces.cdk.util.Pair;
-import com.google.common.collect.ImmutableList;
+import javax.annotation.processing.AbstractProcessor;
+import javax.annotation.processing.RoundEnvironment;
+import javax.faces.component.FacesComponent;
+import javax.lang.model.SourceVersion;
+import javax.lang.model.element.TypeElement;
+import java.lang.annotation.Annotation;
+import java.util.Collections;
+import java.util.Set;
/**
* <p class="changed_added_4_0">
@@ -60,9 +59,11 @@
private static final Set<String> ANY_ANNOTATION =
Collections.singleton("*");
- private static final ImmutableList<Pair<? extends Class<? extends
Annotation>, ? extends Class<? extends CdkAnnotationProcessor>>> PROCESSORS
= ImmutableList
- .of(Pair.of(Component.class, ComponentProcessor.class),
Pair.of(FacesComponent.class,
- FacesComponentProcessor.class), Pair.of(Behavior.class,
BehaviorProcessor.class));
+ private static final ImmutableList<? extends Class<? extends
CdkAnnotationProcessor>> PROCESSORS = ImmutableList
+ .of(ComponentProcessor.class,
+ FacesComponentProcessor.class,
+ BehaviorProcessor.class,
+ ConverterProcessor.class);
/**
* <p class="changed_added_4_0">
@@ -79,6 +80,7 @@
* current CDK context
* @throws CdkException
*/
+ @Override
public void init(CdkContext context) throws CdkException {
this.context = context;
}
@@ -90,8 +92,8 @@
getContext().setWorker(SourceUtils.class, sourceUtils);
if (!roundEnv.processingOver()) {
// Process annotations.
- for (Pair<? extends Class<? extends Annotation>, ? extends
Class<? extends CdkAnnotationProcessor>> process : PROCESSORS) {
- processAnnotation(process.getFirst(), process.getSecond());
+ for (Class<? extends CdkAnnotationProcessor> process : PROCESSORS) {
+ processAnnotation(process);
}
// parse non-java sources
getContext().getBuilderFor(StandardSources.FACES_CONFIGS).build();
@@ -108,11 +110,11 @@
return false;
}
- protected void processAnnotation(Class<? extends Annotation> annotation,
- Class<? extends CdkAnnotationProcessor> processor) {
- Set<? extends TypeElement> annotatedWith =
getContext().getWorker(SourceUtils.class).getClassesAnnotatedWith(
- annotation);
+ protected void processAnnotation(Class<? extends CdkAnnotationProcessor>
processor) {
CdkAnnotationProcessor cdkAnnotationProcessor =
getContext().getWorker(processor);
+ Set<? extends TypeElement> annotatedWith =
getContext().getWorker(SourceUtils.class)
+ .getClassesAnnotatedWith(cdkAnnotationProcessor.getProcessedAnnotation());
+
for (TypeElement typeElement : annotatedWith) {
try {
cdkAnnotationProcessor.process(typeElement);
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 2010-01-11
20:36:57 UTC (rev 16259)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/ComponentProcessor.java 2010-01-12
01:19:54 UTC (rev 16260)
@@ -25,6 +25,7 @@
package org.richfaces.cdk.apt;
+import java.lang.annotation.Annotation;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -37,7 +38,6 @@
import javax.lang.model.type.MirroredTypesException;
import javax.lang.model.type.TypeMirror;
-import org.richfaces.cdk.CdkContext;
import org.richfaces.cdk.CdkException;
import org.richfaces.cdk.NamingConventions;
import org.richfaces.cdk.annotations.Attribute;
@@ -59,7 +59,6 @@
import org.richfaces.cdk.apt.SourceUtils.SuperTypeVisitor;
import org.richfaces.cdk.model.ClassDescription;
import org.richfaces.cdk.model.ComponentLibrary;
-import org.richfaces.cdk.model.DescriptionGroup;
import org.richfaces.cdk.model.Property;
import org.richfaces.cdk.model.ComponentModel;
import org.richfaces.cdk.model.FacetModel;
@@ -79,8 +78,7 @@
*
*/
@SupportedAnnotationTypes({"javax.faces.component.FacesComponent",
Component.NAME})
-public class ComponentProcessor implements CdkAnnotationProcessor {
- private CdkContext context;
+public class ComponentProcessor extends ProcessorBase implements CdkAnnotationProcessor
{
public void process(TypeElement componentElement) {
ComponentLibrary library = getLibrary();
// Process class-level annotations.
@@ -105,7 +103,7 @@
}
private NamingConventions getNamingConventions() {
- return context.getWorker(NamingConventions.class);
+ return getContext().getWorker(NamingConventions.class);
}
@@ -114,7 +112,7 @@
// Component family
setComponeneFamily(componentElement, component);
- setComponentDescription(componentElement, component);
+ setDescription(componentElement, component);
processFacets(componentElement, component);
// process Events.
@@ -126,7 +124,7 @@
}
private void processFacets(TypeElement componentElement, ComponentModel component) {
- SourceUtils sourceUtils = context.getWorker(SourceUtils.class);
+ SourceUtils sourceUtils = getContext().getWorker(SourceUtils.class);
Set<BeanProperty> properties =
sourceUtils.getBeanPropertiesAnnotatedWith(Facet.class, componentElement);
// TODO - encapsulate attribute builder into utility class.
@@ -169,44 +167,6 @@
}
}
- private void setComponentDescription(TypeElement componentElement, ComponentModel
component) {
-
- SourceUtils sourceUtils = context.getWorker(SourceUtils.class);
- // JavaDoc comments
- component.setDescription(sourceUtils.getDocComment(componentElement));
-
- Icon icon = componentElement.getAnnotation(Icon.class);
-
- if (null != icon) {
- setIcon(component, icon);
- }
-
- DisplayName displayName = componentElement.getAnnotation(DisplayName.class);
-
- if (null != displayName) {
- component.setDisplayname(displayName.value());
- }
- }
-
- /**
- * <p class="changed_added_4_0"></p>
- * @param component
- * @param icon
- */
- private void setIcon(DescriptionGroup component, Icon icon) {
- DescriptionGroup.Icon iconValue = new DescriptionGroup.Icon();
-
- if (icon.small().length() > 0) {
- iconValue.setSmallIcon(icon.small());
- }
-
- if (icon.large().length() > 0) {
- iconValue.setLargeIcon(icon.large());
- }
-
- component.setIcon(iconValue);
- }
-
private void setComponeneFamily(TypeElement componentElement, ComponentModel
component) {
Family family = componentElement.getAnnotation(Family.class);
@@ -216,7 +176,7 @@
component.setFamily(family.value());
} else {
// static final COMPONENT_FAMILY string constant.
- Object value =
context.getWorker(SourceUtils.class).getConstant(componentElement,
"COMPONENT_FAMILY");
+ Object value =
getContext().getWorker(SourceUtils.class).getConstant(componentElement,
"COMPONENT_FAMILY");
if (null != value) {
component.setFamily(value.toString());
}
@@ -280,7 +240,7 @@
}
}
- SourceUtils sourceUtils = context.getWorker(SourceUtils.class);
+ SourceUtils sourceUtils = getContext().getWorker(SourceUtils.class);
sourceUtils.visitSupertypes(componentElement.asType(), new SuperTypeVisitor() {
@Override
@@ -383,7 +343,7 @@
}
private Map<String, Property> parseProperties(String attributesConfig) {
- return
context.getWorker(FragmentParser.class).parseProperties(CdkEntityResolver.URN_ATTRIBUTES
+attributesConfig+".xml");
+ return
getContext().getWorker(FragmentParser.class).parseProperties(CdkEntityResolver.URN_ATTRIBUTES
+attributesConfig+".xml");
}
private void setBehaviorEvent(Property attribute, EventName eventName) {
@@ -396,12 +356,8 @@
}
}
- public ComponentLibrary getLibrary() {
- return context.getLibrary();
- }
-
@Override
- public void init(CdkContext context) {
- this.context = context;
+ public Class<? extends Annotation> getProcessedAnnotation() {
+ return Component.class;
}
}
Added:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/ConverterProcessor.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/ConverterProcessor.java
(rev 0)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/ConverterProcessor.java 2010-01-12
01:19:54 UTC (rev 16260)
@@ -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.richfaces.cdk.apt;
+
+import java.lang.annotation.Annotation;
+
+import org.richfaces.cdk.CdkContext;
+import org.richfaces.cdk.CdkProcessingException;
+import org.richfaces.cdk.annotations.Converter;
+import org.richfaces.cdk.annotations.DisplayName;
+import org.richfaces.cdk.annotations.Icon;
+import org.richfaces.cdk.model.ConverterModel;
+
+import javax.annotation.processing.SupportedAnnotationTypes;
+import javax.lang.model.element.TypeElement;
+
+/**
+ * @author akolonitsky
+ * @since Jan 4, 2010
+ */
+(a)SupportedAnnotationTypes({"javax.faces.component.FacesComponent",
Converter.NAME})
+public class ConverterProcessor extends ProcessorBase implements CdkAnnotationProcessor
{
+
+ @Override
+ public void process(TypeElement element) throws CdkProcessingException {
+ Converter converter = element.getAnnotation(Converter.class);
+ ConverterModel converterModel = new ConverterModel();
+ converterModel.setConverterId(converter.id());
+ converterModel.setConverterForClass(converter.forClass());
+ setDescription(element, converterModel);
+ getLibrary().getConverters().add(converterModel);
+ }
+
+ @Override
+ public Class<? extends Annotation> getProcessedAnnotation() {
+ return Converter.class;
+ }
+
+}
Property changes on:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/ConverterProcessor.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/FacesComponentProcessor.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/FacesComponentProcessor.java 2010-01-11
20:36:57 UTC (rev 16259)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/FacesComponentProcessor.java 2010-01-12
01:19:54 UTC (rev 16260)
@@ -23,6 +23,8 @@
package org.richfaces.cdk.apt;
+import java.lang.annotation.Annotation;
+
import javax.faces.component.FacesComponent;
import javax.lang.model.element.TypeElement;
@@ -38,4 +40,9 @@
FacesComponent facesComponent =
componentElement.getAnnotation(FacesComponent.class);
return facesComponent.value();
}
+ @Override
+ public Class<? extends Annotation> getProcessedAnnotation() {
+ return FacesComponent.class;
+ }
+
}
Added:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/ProcessorBase.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/ProcessorBase.java
(rev 0)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/ProcessorBase.java 2010-01-12
01:19:54 UTC (rev 16260)
@@ -0,0 +1,71 @@
+package org.richfaces.cdk.apt;
+
+import javax.lang.model.element.TypeElement;
+
+import org.richfaces.cdk.CdkContext;
+import org.richfaces.cdk.CdkWorker;
+import org.richfaces.cdk.annotations.DisplayName;
+import org.richfaces.cdk.annotations.Icon;
+import org.richfaces.cdk.model.ComponentLibrary;
+import org.richfaces.cdk.model.DescriptionGroup;
+
+public class ProcessorBase implements CdkWorker {
+
+ private CdkContext context;
+
+ /**
+ * <p class="changed_added_4_0"></p>
+ * @param component
+ * @param icon
+ */
+ protected void setIcon(DescriptionGroup component, Icon icon) {
+ DescriptionGroup.Icon iconValue = new DescriptionGroup.Icon();
+
+ if (icon.small().length() > 0) {
+ iconValue.setSmallIcon(icon.small());
+ }
+
+ if (icon.large().length() > 0) {
+ iconValue.setLargeIcon(icon.large());
+ }
+
+ component.setIcon(iconValue);
+ }
+
+ public ComponentLibrary getLibrary() {
+ return getContext().getLibrary();
+ }
+
+ @Override
+ public void init(CdkContext context) {
+ this.context=context;
+ }
+
+ /**
+ * <p class="changed_added_4_0"></p>
+ * @return the context
+ */
+ protected CdkContext getContext() {
+ return context;
+ }
+
+ protected void setDescription(TypeElement element, DescriptionGroup component) {
+
+ SourceUtils sourceUtils = getContext().getWorker(SourceUtils.class);
+ // JavaDoc comments
+ component.setDescription(sourceUtils.getDocComment(element));
+
+ Icon icon = element.getAnnotation(Icon.class);
+
+ if (null != icon) {
+ setIcon(component, icon);
+ }
+
+ DisplayName displayName = element.getAnnotation(DisplayName.class);
+
+ if (null != displayName) {
+ component.setDisplayname(displayName.value());
+ }
+ }
+
+}
Property changes on:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/ProcessorBase.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/RendererProcessor.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/RendererProcessor.java
(rev 0)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/RendererProcessor.java 2010-01-12
01:19:54 UTC (rev 16260)
@@ -0,0 +1,194 @@
+/**
+ * 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.apt;
+
+import org.richfaces.cdk.CdkContext;
+import org.richfaces.cdk.CdkException;
+import org.richfaces.cdk.NamingConventions;
+import org.richfaces.cdk.annotations.Component;
+import org.richfaces.cdk.annotations.DisplayName;
+import org.richfaces.cdk.annotations.EventName;
+import org.richfaces.cdk.annotations.Family;
+import org.richfaces.cdk.annotations.Icon;
+import org.richfaces.cdk.annotations.Renderer;
+import org.richfaces.cdk.model.ComponentLibrary;
+import org.richfaces.cdk.model.DescriptionGroup;
+import org.richfaces.cdk.model.Property;
+import org.richfaces.cdk.model.RendererModel;
+import org.richfaces.cdk.xmlconfig.CdkEntityResolver;
+import org.richfaces.cdk.xmlconfig.FragmentParser;
+
+import javax.annotation.processing.SupportedAnnotationTypes;
+import javax.lang.model.element.TypeElement;
+
+import java.lang.annotation.Annotation;
+import java.util.Map;
+
+/**
+ * @author akolonitsky
+ * @since Dec 30, 2009
+ */
+(a)SupportedAnnotationTypes({"javax.faces.component.FacesComponent",
Renderer.NAME})
+public class RendererProcessor extends ProcessorBase implements CdkAnnotationProcessor {
+
+
+ public void process(TypeElement rendererElement) {
+ ComponentLibrary library = getLibrary();
+
+ // Process class-level annotations. Calculate type for base UI component class.
+ String explicitType = getComponentType(rendererElement);
+
+ // Because component type is a primary key for components collection, we have to
infer explicit value here.
+ String type = getNamingConventions()
+ .inferComponentType(explicitType,
rendererElement.getQualifiedName().toString());
+
+ RendererModel renderer = new RendererModel();
+ renderer.setType(new RendererModel.Type(type));
+
+ // Should that component be generated ?
+// setClassNames(rendererElement, renderer);
+ setRendererProperties(rendererElement, renderer);
+
+ //library.getComponents().add(renderer);
+ }
+
+ protected String getComponentType(TypeElement componentElement) {
+ return componentElement.getAnnotation(Component.class).value();
+ }
+
+ private NamingConventions getNamingConventions() {
+ return getContext().getWorker(NamingConventions.class);
+ }
+
+
+ private void setRendererProperties(TypeElement componentElement, RendererModel
renderer)
+ throws CdkException {
+
+ // Component family
+ setRendererFamily(componentElement, renderer);
+ setRendererDescription(componentElement, renderer);
+// processFacets(componentElement, renderer);
+
+ // process Events.
+// setEvents(componentElement, renderer);
+ // TODO - process renderers ( @Renderer and @RendererTemplate attribute.
+ // TODO - process @Test annotations.
+ // Process attributes.
+// processAttributes(componentElement, component);
+ }
+
+ private void setRendererDescription(TypeElement componentElement, RendererModel
component) {
+
+ SourceUtils sourceUtils = getContext().getWorker(SourceUtils.class);
+ // JavaDoc comments
+ component.setDescription(sourceUtils.getDocComment(componentElement));
+
+ Icon icon = componentElement.getAnnotation(Icon.class);
+
+ if (null != icon) {
+ setIcon(component, icon);
+ }
+
+ DisplayName displayName = componentElement.getAnnotation(DisplayName.class);
+
+ if (null != displayName) {
+ component.setDisplayname(displayName.value());
+ }
+ }
+
+ private void setRendererFamily(TypeElement rendererElement, RendererModel renderer)
{
+ Family family = rendererElement.getAnnotation(Family.class);
+
+ if (null != family) {
+
+ // @Family annotation
+ renderer.setFamily(family.value());
+ } else {
+ // static final COMPONENT_FAMILY string constant.
+ Object value =
getContext().getWorker(SourceUtils.class).getConstant(rendererElement,
"COMPONENT_FAMILY");
+ if (null != value) {
+ renderer.setFamily(value.toString());
+ }
+ }
+ }
+
+
+// private void setEvents(TypeElement componentElement,
org.richfaces.cdk.model.Renderer component) {
+// Fires fires = componentElement.getAnnotation(Fires.class);
+//
+// if (null != fires) {
+// try {
+// for (Class<? extends FacesEvent> eventClass : fires.value()) {
+// component.addEvent(eventClass.getName());
+// }
+// } catch (MirroredTypesException mirror) {
+// for (TypeMirror eventType : mirror.getTypeMirrors()) {
+// component.addEvent(eventType.toString());
+// // TODO - check does component already implement eventSource
interface
+// }
+// } catch (MirroredTypeException mirror) {
+// component.addEvent(mirror.getTypeMirror().toString());
+// }
+// }
+// }
+//
+// private void setClassNames(TypeElement componentElement,
org.richfaces.cdk.model.Renderer renderer) {
+// Generate generate = componentElement.getAnnotation(Generate.class);
+//
+// // Set generated and base class names.
+// ClassDescription baseClass = new
ClassDescription(componentElement.getQualifiedName().toString());
+//
+// if (null != generate) {
+// renderer.setRendererClass(new ClassDescription(generate.value()));
+// renderer.setBaseClass(baseClass);
+// renderer.setGenerate(true);
+// } else if (componentElement.getModifiers().contains(Modifier.ABSTRACT)) {
+//
+// // Final component class will be set by validator.
+// renderer.setBaseClass(baseClass);
+// renderer.setGenerate(true);
+// } else {
+// renderer.setRendererClass(baseClass);
+// renderer.setGenerate(false);
+// }
+// }
+
+ private Map<String, Property> parseProperties(String attributesConfig) {
+ return
getContext().getWorker(FragmentParser.class).parseProperties(CdkEntityResolver.URN_ATTRIBUTES
+attributesConfig+".xml");
+ }
+
+ private void setBehaviorEvent(Property attribute, EventName eventName) {
+ if (null != eventName) {
+ org.richfaces.cdk.model.EventName event = new
org.richfaces.cdk.model.EventName();
+
+ event.setName(eventName.value());
+ event.setDefaultEvent(eventName.defaultEvent());
+ attribute.getEventNames().add(event);
+ }
+ }
+
+ @Override
+ public Class<? extends Annotation> getProcessedAnnotation() {
+ return Renderer.class;
+ }
+
+}
Property changes on:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/RendererProcessor.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/SourceUtils.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/SourceUtils.java 2010-01-11
20:36:57 UTC (rev 16259)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/SourceUtils.java 2010-01-12
01:19:54 UTC (rev 16260)
@@ -96,14 +96,12 @@
*/
public Set<? extends TypeElement> getClassesAnnotatedWith(
Class<? extends Annotation> annotation) {
- Set<TypeElement> classes = Sets.newHashSet();
Set<? extends Element> annotatedWith =
roundEnvironment.getElementsAnnotatedWith(annotation);
+ Set<TypeElement> classes =
Sets.newHashSetWithExpectedSize(annotatedWith.size());
for (Element element : annotatedWith) {
if (ElementKind.CLASS.equals(element.getKind())) {
- TypeElement classElement = (TypeElement) element;
-
- classes.add(classElement);
+ classes.add((TypeElement) element);
}
}
@@ -314,7 +312,7 @@
}
- public void visitSupertypes(TypeMirror type, SuperTypeVisitor visitor){
+ public void visitSupertypes(TypeMirror type, SuperTypeVisitor visitor) {
List<? extends TypeMirror> supertypes =
this.processingEnv.getTypeUtils().directSupertypes(type);
for (TypeMirror typeMirror : supertypes) {
visitSupertypes(typeMirror, visitor);
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/model/ConverterModel.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/model/ConverterModel.java 2010-01-11
20:36:57 UTC (rev 16259)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/model/ConverterModel.java 2010-01-12
01:19:54 UTC (rev 16260)
@@ -30,34 +30,50 @@
* @author asmirnov(a)exadel.com
*
*/
-//@SuppressWarnings("serial")
-public class ConverterModel implements ModelElement<ConverterModel> {
+public class ConverterModel extends ModelElementBase implements
ModelElement<ConverterModel> {
private static final long serialVersionUID = -6238591637703737886L;
- private String id;
+ private String converterId;
- private Class<?> forClass;
+ private Class<?> converterClass;
+ private Class<?> converterForClass;
+
public ConverterModel() {
}
- public String getId() {
- return id;
+ public ConverterModel(String converterId, Class<?> converterClass) {
+ this.converterId = converterId;
+ this.converterClass = converterClass;
}
- public void setId(String id) {
- this.id = id;
+ public String getConverterId() {
+ return converterId;
}
- public Class<?> getForClass() {
- return forClass;
+ public void setConverterId(String converterId) {
+ this.converterId = converterId;
}
- public void setForClass(Class<?> forClass) {
- this.forClass = forClass;
+ @Merge(false)
+ public Class<?> getConverterForClass() {
+ return converterForClass;
}
+ public void setConverterForClass(Class<?> converterForClass) {
+ this.converterForClass = converterForClass;
+ }
+
+ @Merge(false)
+ public Class<?> getConverterClass() {
+ return converterClass;
+ }
+
+ public void setConverterClass(Class<?> converterClass) {
+ this.converterClass = converterClass;
+ }
+
@Override
public <R, P> R accept(LibraryVisitor<R, P> visitor, P param) throws
CdkException {
return visitor.visit(this, param);
@@ -65,10 +81,12 @@
@Override
public void merge(ConverterModel other) {
+ ComponentLibrary.merge(this, other);
+
}
@Override
public boolean same(ConverterModel other) {
- return false; /*null != getType() &&
getType().equals(other.getType());*/
+ return null != getConverterId() &&
getConverterId().equals(other.getConverterId());
}
}
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/model/ModelElementBase.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/model/ModelElementBase.java 2010-01-11
20:36:57 UTC (rev 16259)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/model/ModelElementBase.java 2010-01-12
01:19:54 UTC (rev 16260)
@@ -2,6 +2,12 @@
import javax.xml.bind.annotation.XmlElement;
+/**
+ * <p class="changed_added_4_0">Base class for the most JSF components
taht have description
+ * attributes and support extensions in faces-config.</p>
+ * @author asmirnov(a)exadel.com
+ *
+ */
public class ModelElementBase implements DescriptionGroup,
Extensible<ConfigExtension> {
/**
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/FacesConfigParser.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/FacesConfigParser.java 2010-01-11
20:36:57 UTC (rev 16259)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/FacesConfigParser.java 2010-01-12
01:19:54 UTC (rev 16260)
@@ -69,6 +69,7 @@
ComponentLibrary facesConfig = ADAPTER.unmarshal(unmarshal);
library.getComponents().addAll(facesConfig.getComponents());
library.getRenderKits().putAll(facesConfig.getRenderKits());
+ library.getConverters().addAll(facesConfig.getConverters());
// TODO - merge changes into library.
// library.getRenderers().addAll(unmarshal.getRenderers());
// library.getValidators().addAll(unmarshal.getValidators);
Added:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/ConverterAdapter.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/ConverterAdapter.java
(rev 0)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/ConverterAdapter.java 2010-01-12
01:19:54 UTC (rev 16260)
@@ -0,0 +1,41 @@
+/**
+ * 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.xmlconfig.model;
+
+import org.richfaces.cdk.model.ConverterModel;
+
+/**
+ * @author akolonitsky
+ * @since Jan 10, 2010
+ */
+public class ConverterAdapter extends AdapterBase<ConverterBean, ConverterModel>{
+
+ @Override
+ protected Class<? extends ConverterBean> getBeanClass(ConverterModel model) {
+ return ConverterBean.class;
+ }
+
+ @Override
+ protected Class<? extends ConverterModel> getModelClass(ConverterBean bean) {
+ return ConverterModel.class;
+ }
+}
Property changes on:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/ConverterAdapter.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/ConverterBean.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/ConverterBean.java
(rev 0)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/ConverterBean.java 2010-01-12
01:19:54 UTC (rev 16260)
@@ -0,0 +1,79 @@
+/**
+ * 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.xmlconfig.model;
+
+import org.richfaces.cdk.model.ComponentLibrary;
+import org.richfaces.cdk.model.ConfigExtension;
+
+import javax.xml.bind.annotation.XmlType;
+import javax.xml.bind.annotation.XmlElement;
+
+/**
+ * @author akolonitsky
+ * @since Jan 6, 2010
+ */
+public class ConverterBean extends ExtensibleBean<ConfigExtension> {
+
+ private String converterId;
+
+ private String converterForClass;
+
+ private String converterClass;
+
+ @XmlElement(name = "converter-id", namespace =
ComponentLibrary.FACES_CONFIG_NAMESPACE)
+ public String getConverterId() {
+ return converterId;
+ }
+
+ public void setConverterId(String converterId) {
+ this.converterId = converterId;
+ }
+
+ @XmlElement(name = "converter-for-class", namespace =
ComponentLibrary.FACES_CONFIG_NAMESPACE)
+ public String getConverterForClass() {
+ return converterForClass;
+ }
+
+ public void setConverterForClass(String converterForClass) {
+ this.converterForClass = converterForClass;
+ }
+
+ @XmlElement(name = "converter-class", namespace =
ComponentLibrary.FACES_CONFIG_NAMESPACE)
+ public String getConverterClass() {
+ return converterClass;
+ }
+
+ public void setConverterClass(String converterClass) {
+ this.converterClass = converterClass;
+ }
+
+ @XmlElement(name = "converter-extension", namespace =
ComponentLibrary.FACES_CONFIG_NAMESPACE)
+ @Override
+ public ConfigExtension getExtension() {
+ return super.getExtension();
+ }
+
+ @Override
+ public void setExtension(ConfigExtension extension) {
+ super.setExtension(extension);
+ }
+}
Property changes on:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/ConverterBean.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/FacesConfigBean.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/FacesConfigBean.java 2010-01-11
20:36:57 UTC (rev 16259)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/xmlconfig/model/FacesConfigBean.java 2010-01-12
01:19:54 UTC (rev 16260)
@@ -36,6 +36,7 @@
import org.richfaces.cdk.model.ConfigExtension;
import org.richfaces.cdk.model.EventModel;
import org.richfaces.cdk.model.Extensible;
+import org.richfaces.cdk.model.ConverterModel;
import com.google.common.collect.Lists;
@@ -50,12 +51,20 @@
@XmlElement(name = "component", namespace =
ComponentLibrary.FACES_CONFIG_NAMESPACE)
@XmlJavaTypeAdapter(ComponentAdapter.class)
private List<ComponentModel> components = Lists.newArrayList();
+
@XmlElement(name = "render-kit", namespace =
ComponentLibrary.FACES_CONFIG_NAMESPACE)
private List<RenderKitBean> renderKits = Lists.newArrayList();
+
+ @XmlElement(name = "converter", namespace =
ComponentLibrary.FACES_CONFIG_NAMESPACE)
+ @XmlJavaTypeAdapter(ConverterAdapter.class)
+ private List<ConverterModel> converters = Lists.newArrayList();
+
@XmlAttribute
private String version = "2.0";
+
@XmlAttribute(name="metadata-complete")
private boolean metadataComplete;
+
@XmlElement(name = "faces-config-extension", namespace =
ComponentLibrary.FACES_CONFIG_NAMESPACE)
private FacesConfigExtension extension;
@@ -129,6 +138,14 @@
this.renderKits = renderKits;
}
+ public List<ConverterModel> getConverters() {
+ return converters;
+ }
+
+ public void setConverters(List<ConverterModel> converters) {
+ this.converters = converters;
+ }
+
/**
* <p class="changed_added_4_0"></p>
*
Added:
root/cdk/trunk/plugins/generator/src/test/java/org/richfaces/cdk/xmlconfig/testmodel/ConverterBeanTest.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/test/java/org/richfaces/cdk/xmlconfig/testmodel/ConverterBeanTest.java
(rev 0)
+++
root/cdk/trunk/plugins/generator/src/test/java/org/richfaces/cdk/xmlconfig/testmodel/ConverterBeanTest.java 2010-01-12
01:19:54 UTC (rev 16260)
@@ -0,0 +1,76 @@
+/**
+ * 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.xmlconfig.testmodel;
+
+import org.junit.Test;
+import org.richfaces.cdk.CdkContextBase;
+import org.richfaces.cdk.model.ComponentLibrary;
+import org.richfaces.cdk.model.ComponentModel;
+import org.richfaces.cdk.model.RenderKitModel;
+import org.richfaces.cdk.model.RendererModel;
+import org.richfaces.cdk.model.ConverterModel;
+import org.richfaces.cdk.xmlconfig.JAXBBinding;
+import org.richfaces.cdk.xmlconfig.FacesConfigGenerator;
+import org.richfaces.cdk.xmlconfig.JaxbTestBase;
+import org.richfaces.cdk.xmlconfig.model.FacesConfigAdapter;
+
+import javax.xml.transform.stream.StreamResult;
+import java.io.StringWriter;
+
+/**
+ * @author akolonitsky
+ * @since Jan 10, 2010
+ */
+public class ConverterBeanTest extends JaxbTestBase {
+
+ @Test
+ public void testMarshalResultStringT() throws Exception {
+ CdkContextBase contextBase = new CdkContextBase(createClassLoader());
+ JAXBBinding jaxbBinding = new JAXBBinding();
+
+ jaxbBinding.init(contextBase);
+
+ ComponentLibrary library = new ComponentLibrary();
+
+ // add component
+ ComponentModel component = new ComponentModel( new
ComponentModel.Type("foo.bar"));
+ library.getComponents().add(component);
+
+ // add render kit
+ RenderKitModel renderKit = library.addRenderKit("HTML");
+
+ // add renderer
+ RendererModel renderer = new RendererModel(new
RendererModel.Type("foo.Renderer"));
+ renderKit.getRenderers().add(renderer);
+
+ // add converter
+ ConverterModel converterModel = new ConverterModel("my_converter",
Object.class);
+ library.getConverters().add(converterModel);
+
+ StringWriter writer = new StringWriter();
+ StreamResult result = new StreamResult(writer);
+ FacesConfigAdapter adapter = new FacesConfigAdapter();
+
+ jaxbBinding.marshal(result, FacesConfigGenerator.FACES_SCHEMA_LOCATION,
adapter.marshal(library));
+ System.out.println(writer.toString());
+ }
+}
Property changes on:
root/cdk/trunk/plugins/generator/src/test/java/org/richfaces/cdk/xmlconfig/testmodel/ConverterBeanTest.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Modified: root/cdk/trunk/pom.xml
===================================================================
--- root/cdk/trunk/pom.xml 2010-01-11 20:36:57 UTC (rev 16259)
+++ root/cdk/trunk/pom.xml 2010-01-12 01:19:54 UTC (rev 16260)
@@ -136,7 +136,7 @@
<suppressionsLocation>checkstyle-suppressions.xml</suppressionsLocation>
</configuration>
- <phase>process-sources</phase>
+ <phase>verify</phase>
<goals>
<goal>check</goal>
</goals>