Author: Alex.Kolonitsky
Date: 2010-03-17 16:35:18 -0400 (Wed, 17 Mar 2010)
New Revision: 16589
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/NamingConventions.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/RichFacesConventions.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/RendererProcessor.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/templatecompiler/RendererTemplateParser.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/templatecompiler/model/Template.java
root/cdk/trunk/plugins/generator/src/test/java/org/richfaces/cdk/templatecompiler/RendererTemplateParserTest.java
Log:
RF-8232 Tags support
JsfRenderer processor
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/NamingConventions.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/NamingConventions.java 2010-03-17
15:47:54 UTC (rev 16588)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/NamingConventions.java 2010-03-17
20:35:18 UTC (rev 16589)
@@ -84,4 +84,8 @@
public String inferComponentFamily(RendererModel.Type type);
public String inferTemplate(RendererModel.Type type);
+
+ public String inferRendererTypeByTemplatePath(String templateName);
+
+ public String inferRendererName(RendererModel.Type type);
}
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/RichFacesConventions.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/RichFacesConventions.java 2010-03-17
15:47:54 UTC (rev 16588)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/RichFacesConventions.java 2010-03-17
20:35:18 UTC (rev 16589)
@@ -102,16 +102,6 @@
return componentType.toString();
}
-
- /**
- * @param generatedClass - component name in format
- * <prefix>.component.Abstract<Name>
- * <prefix>.component.UI<Name>
- *
- * @return tag handler name as
- * <prefix>.taglib.html.<Name>TagHandler
- *
- * */
@Override
public ClassName inferTagHandlerClass(FacesId componentType, String markup) {
if (null == componentType) {
@@ -154,4 +144,13 @@
public String inferTemplate(RendererModel.Type type) {
return null;
}
+
+ public String inferRendererTypeByTemplatePath(String templateName) {
+ return null;
+ }
+
+ public String inferRendererName(RendererModel.Type type) {
+ return null;
+ }
}
+
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-03-17
15:47:54 UTC (rev 16588)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/ComponentProcessor.java 2010-03-17
20:35:18 UTC (rev 16589)
@@ -26,6 +26,8 @@
package org.richfaces.cdk.apt;
import com.google.common.collect.Lists;
+import com.google.inject.Inject;
+import com.google.inject.Injector;
import org.richfaces.cdk.CdkException;
import org.richfaces.cdk.annotations.*;
import org.richfaces.cdk.annotations.EventName;
@@ -56,6 +58,9 @@
*/
@SupportedAnnotationTypes({"javax.faces.component.FacesComponent",
JsfComponent.NAME})
public class ComponentProcessor extends ProcessorBase implements CdkAnnotationProcessor
{
+
+ @Inject
+ private Injector injector;
public void process(TypeElement componentElement) {
ComponentLibrary library = getLibrary();
@@ -100,7 +105,12 @@
// process Events.
setEvents(componentElement, component);
- // TODO - process renderers ( @JsfRenderer and @RendererTemplate attribute.
+
+ RendererProcessor rendererProcessor =
injector.getInstance(RendererProcessor.class);
+ JsfComponent componentAnnotation =
componentElement.getAnnotation(JsfComponent.class);
+ JsfRenderer renderer = componentAnnotation.renderer();
+ rendererProcessor.process(componentElement, renderer);
+
// TODO - process @Test annotations.
// Process attributes.
processAttributes(componentElement, component);
Modified:
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 2010-03-17
15:47:54 UTC (rev 16588)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/apt/RendererProcessor.java 2010-03-17
20:35:18 UTC (rev 16589)
@@ -21,6 +21,8 @@
package org.richfaces.cdk.apt;
+import com.google.inject.Inject;
+import com.google.inject.Injector;
import org.richfaces.cdk.CdkException;
import org.richfaces.cdk.annotations.EventName;
import org.richfaces.cdk.annotations.Family;
@@ -30,6 +32,7 @@
import org.richfaces.cdk.model.ComponentModel;
import org.richfaces.cdk.model.Property;
import org.richfaces.cdk.model.RendererModel;
+import org.richfaces.cdk.templatecompiler.RendererTemplateParser;
import org.richfaces.cdk.util.Strings;
import javax.annotation.processing.SupportedAnnotationTypes;
@@ -43,8 +46,10 @@
*/
@SupportedAnnotationTypes({"javax.faces.component.FacesComponent",
JsfRenderer.NAME})
public class RendererProcessor extends ProcessorBase implements CdkAnnotationProcessor {
+
+ @Inject
+ private Injector injector;
-
public void process(TypeElement rendererElement) {
JsfRenderer annotation = rendererElement.getAnnotation(JsfRenderer.class);
@@ -83,8 +88,15 @@
template = getNamingConventions().inferTemplate(rendererModel.getType());
}
rendererModel.setTemplatePath(template);
+
+ processRendererTemplate(rendererModel);
}
+ private void processRendererTemplate(RendererModel renderer) {
+ RendererTemplateParser templateParser =
injector.getInstance(RendererTemplateParser.class);
+// templateParser.
+ }
+
private void setComponentFamily(RendererModel rendererModel, JsfRenderer annotation)
{
String family = annotation.family();
if (Strings.isEmpty(family)) {
@@ -173,5 +185,4 @@
public Class<? extends Annotation> getProcessedAnnotation() {
return JsfRenderer.class;
}
-
}
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 2010-03-17
15:47:54 UTC (rev 16588)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/model/ComponentLibrary.java 2010-03-17
20:35:18 UTC (rev 16589)
@@ -60,10 +60,6 @@
public static final String TAGLIB_SCHEMA_LOCATION =
"http://java.sun.com/xml/ns/javaee/web-facelettaglibrary_2_0.xsd";
- /**
- * <p class="changed_added_4_0">
- * </p>
- */
private static final long serialVersionUID = -6055670836731899832L;
private final ModelCollection<ComponentModel> components =
ModelCollection.<ComponentModel>create();
@@ -77,7 +73,11 @@
private final ModelCollection<ConverterModel> converters =
ModelCollection.<ConverterModel>create();
private final ModelCollection<ValidatorModel> validators =
ModelCollection.<ValidatorModel>create();
+
private final ModelCollection<ListenerModel> listeners =
ModelCollection.<ListenerModel>create();
+
+ private final ModelCollection<RendererModel> renderers =
ModelCollection.<RendererModel>create();
+
private long lastModified = Long.MIN_VALUE;
/**
@@ -108,6 +108,10 @@
this.tagLibrary = new TagLibrary();
}
+ public ModelCollection<RendererModel> getRenderers() {
+ return renderers;
+ }
+
@Override
public <R, P> R accept(LibraryVisitor<R, P> visitor, P param) throws
CdkException {
R result = accept(components, visitor, param, null);
@@ -199,6 +203,10 @@
return renderKits;
}
+ public RenderKitModel getRenderKit(RenderKitModel.Id id) {
+ return renderKits.get(id);
+ }
+
/**
* <p class="changed_added_4_0">
* </p>
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/templatecompiler/RendererTemplateParser.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/templatecompiler/RendererTemplateParser.java 2010-03-17
15:47:54 UTC (rev 16588)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/templatecompiler/RendererTemplateParser.java 2010-03-17
20:35:18 UTC (rev 16589)
@@ -26,9 +26,26 @@
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import com.google.inject.Inject;
-import org.richfaces.cdk.*;
-import org.richfaces.cdk.model.*;
-import org.richfaces.cdk.templatecompiler.model.*;
+import org.richfaces.cdk.CdkException;
+import org.richfaces.cdk.FileManager;
+import org.richfaces.cdk.Logger;
+import org.richfaces.cdk.ModelBuilder;
+import org.richfaces.cdk.Source;
+import org.richfaces.cdk.Sources;
+import org.richfaces.cdk.NamingConventions;
+import org.richfaces.cdk.RichFacesConventions;
+import org.richfaces.cdk.model.ClassName;
+import org.richfaces.cdk.model.ComponentLibrary;
+import org.richfaces.cdk.model.EventName;
+import org.richfaces.cdk.model.Property;
+import org.richfaces.cdk.model.RenderKitModel;
+import org.richfaces.cdk.model.RendererModel;
+import org.richfaces.cdk.templatecompiler.model.Attribute;
+import org.richfaces.cdk.templatecompiler.model.ClientBehavior;
+import org.richfaces.cdk.templatecompiler.model.CompositeInterface;
+import org.richfaces.cdk.templatecompiler.model.ImportAttributes;
+import org.richfaces.cdk.templatecompiler.model.Template;
+import org.richfaces.cdk.util.Strings;
import org.richfaces.cdk.xmlconfig.FragmentParser;
import org.richfaces.cdk.xmlconfig.JAXB;
@@ -62,9 +79,10 @@
private FileManager sources;
private FragmentParser fragmentParser;
-
-
+// @Inject
+ private NamingConventions namingConventions;
+
/**
* <p class="changed_added_4_0"></p>
* @param library
@@ -140,34 +158,41 @@
Iterable<File> sources = this.sources.getFiles();
if (null != sources) {
for (File file : sources) {
- Template template = parseTemplate(file);
- mergeTemplateIntoModel(template);
+ build(file, null);
}
}
}
- protected void mergeTemplateIntoModel(Template template) throws CdkException {
+ private void build(File file, RendererModel rendererModel) {
+ Template template = parseTemplate(file);
+
+ // TODO rewrite it
+ final String defaultTemplate = "src\\main\\templates";
+ String path = file.getPath();
+ String templateRelativePath = path.substring(path.indexOf(defaultTemplate) +
defaultTemplate.length());
+ template.setTemplatePath(templateRelativePath);
+
+ mergeTemplateIntoModel(template, rendererModel);
+ }
+
+ protected void mergeTemplateIntoModel(Template template, RendererModel renderer)
throws CdkException {
CompositeInterface compositeInterface = template.getInterface();
// TODO - infer values ?
- RenderKitModel renderKit =
library.addRenderKit(compositeInterface.getRenderKitId());
- RendererModel renderer = new RendererModel(new
RendererModel.Type(compositeInterface.getRendererType()));
- renderKit.getRenderers().add(renderer);
- // component.getRenderers().add(renderer);
-
- //TODO set default values according to template name
- String family = compositeInterface.getComponentFamily();
-
- if (null != family) {
- renderer.setFamily(family);
+ if (renderer == null) {
+ renderer = new RendererModel();
}
-
- renderer.setRendererClass(new ClassName(compositeInterface.getJavaClass()));
renderer.setTemplate(template);
+ setRendererType(template, compositeInterface, renderer);
+ setFamily(compositeInterface, renderer); //TODO set default values according to
template name
+ setRendererClass(compositeInterface, renderer);
+ RenderKitModel renderKit =
library.addRenderKit(compositeInterface.getRenderKitId());
+ renderKit.getRenderers().add(renderer);
+
Boolean rendersChildren = compositeInterface.getRendersChildren();
if (rendersChildren != null) {
- renderer.setRendersChildren(rendersChildren.booleanValue());
+ renderer.setRendersChildren(rendersChildren);
}
Collection<Property> rendererAttributes = renderer.getAttributes();
@@ -186,46 +211,73 @@
List<Attribute> templateAttributes = compositeInterface.getAttributes();
if (templateAttributes != null) {
for (Attribute templateAttribute : templateAttributes) {
- Property rendererProperty = new Property();
- rendererProperty.setName(templateAttribute.getName());
- rendererProperty.setDefaultValue(templateAttribute.getDefaultValue());
+ rendererAttributes.add(buildProperty(templateAttribute));
+ }
+ }
+ }
- // TODO is it the right one?
-
rendererProperty.setDescription(templateAttribute.getShortDescription());
- rendererProperty.setDisplayname(templateAttribute.getDisplayName());
+ private Property buildProperty(Attribute templateAttribute) {
+ Property rendererProperty = new Property();
+ rendererProperty.setName(templateAttribute.getName());
+ rendererProperty.setDefaultValue(templateAttribute.getDefaultValue());
- Set<EventName> eventNamesSet =
convert(templateAttribute.getClientBehaviors());
- if (eventNamesSet != null) {
- rendererProperty.getEventNames().addAll(eventNamesSet);
- }
+ // TODO is it the right one?
+ rendererProperty.setDescription(templateAttribute.getShortDescription());
+ rendererProperty.setDisplayname(templateAttribute.getDisplayName());
- // rendererProperty.setAliases(aliases)
- // rendererProperty.setExtension(extension)
- // rendererProperty.setGenerate(exists)
- // rendererProperty.setHidden(hidden)
- // rendererProperty.setIcon(icon)
- // rendererProperty.setLiteral(literal)
- // rendererProperty.setPassThrough(passThrough)
- // rendererProperty.setReadOnly(readOnly)
- // rendererProperty.setSuggestedValue(suggestedValue)
+ Set<EventName> eventNamesSet =
convert(templateAttribute.getClientBehaviors());
+ if (eventNamesSet != null) {
+ rendererProperty.getEventNames().addAll(eventNamesSet);
+ }
- rendererProperty.setRequired(templateAttribute.isRequired());
+ // rendererProperty.setAliases(aliases)
+ // rendererProperty.setExtension(extension)
+ // rendererProperty.setGenerate(exists)
+ // rendererProperty.setHidden(hidden)
+ // rendererProperty.setIcon(icon)
+ // rendererProperty.setLiteral(literal)
+ // rendererProperty.setPassThrough(passThrough)
+ // rendererProperty.setReadOnly(readOnly)
+ // rendererProperty.setSuggestedValue(suggestedValue)
- List<ClassName> parsedSignature =
parseSignature(templateAttribute.getMethodSignature());
- if (parsedSignature != null) {
- rendererProperty.getSignature().addAll(parsedSignature);
- }
+ rendererProperty.setRequired(templateAttribute.isRequired());
- String templateAttributeType = templateAttribute.getType();
- if (templateAttributeType != null) {
- rendererProperty.setType(new ClassName(templateAttributeType));
- }
+ List<ClassName> parsedSignature =
parseSignature(templateAttribute.getMethodSignature());
+ if (parsedSignature != null) {
+ rendererProperty.getSignature().addAll(parsedSignature);
+ }
- rendererAttributes.add(rendererProperty);
- }
+ String templateAttributeType = templateAttribute.getType();
+ if (templateAttributeType != null) {
+ rendererProperty.setType(new ClassName(templateAttributeType));
}
+ return rendererProperty;
}
+ private void setRendererClass(CompositeInterface compositeInterface, RendererModel
renderer) {
+ String javaClass = compositeInterface.getJavaClass();
+ if (javaClass == null) {
+ javaClass = getNamingConventions().inferRendererName(renderer.getType());
+ }
+ renderer.setRendererClass(new ClassName(javaClass));
+ }
+
+ private void setFamily(CompositeInterface compositeInterface, RendererModel renderer)
{
+ String family = compositeInterface.getComponentFamily();
+ if (family == null) {
+ family = getNamingConventions().inferComponentFamily(renderer.getType());
+ }
+ renderer.setFamily(family);
+ }
+
+ private void setRendererType(Template template, CompositeInterface
compositeInterface, RendererModel renderer) {
+ String type = compositeInterface.getRendererType();
+ if (Strings.isEmpty(type)) {
+ type =
getNamingConventions().inferRendererTypeByTemplatePath(template.getTemplatePath());
+ }
+ renderer.setType(new RendererModel.Type(type));
+ }
+
protected Template parseTemplate(String templateLocation) throws CdkException {
return jaxbBinding.unmarshal(templateLocation,
"http://richfaces.org/cdk/cdk-template.xsd", Template.class);
}
@@ -234,9 +286,14 @@
return jaxbBinding.unmarshal(file,
"http://richfaces.org/cdk/cdk-template.xsd", Template.class);
}
- /*
- * (non-Javadoc)
- *
- * @see org.richfaces.cdk.ModelBuilder#init(org.richfaces.cdk.CdkContext)
- */
+ public NamingConventions getNamingConventions() {
+ if (namingConventions == null) {
+ namingConventions = new RichFacesConventions();
+ }
+ return namingConventions;
+ }
+
+ public void setNamingConventions(NamingConventions namingConventions) {
+ this.namingConventions = namingConventions;
+ }
}
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/templatecompiler/model/Template.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/templatecompiler/model/Template.java 2010-03-17
15:47:54 UTC (rev 16588)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/templatecompiler/model/Template.java 2010-03-17
20:35:18 UTC (rev 16589)
@@ -23,10 +23,9 @@
package org.richfaces.cdk.templatecompiler.model;
-import java.io.Serializable;
-
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
+import java.io.Serializable;
/**
* <p class="changed_added_4_0"></p>
@@ -48,10 +47,20 @@
private static final long serialVersionUID = -6900382133123748812L;
+ private String templatePath;
+
private CompositeInterface compositeInterface;
private CompositeImplementation compositeImplementation;
+ public String getTemplatePath() {
+ return templatePath;
+ }
+
+ public void setTemplatePath(String templatePath) {
+ this.templatePath = templatePath;
+ }
+
/**
* <p class="changed_added_4_0"></p>
*
Modified:
root/cdk/trunk/plugins/generator/src/test/java/org/richfaces/cdk/templatecompiler/RendererTemplateParserTest.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/test/java/org/richfaces/cdk/templatecompiler/RendererTemplateParserTest.java 2010-03-17
15:47:54 UTC (rev 16588)
+++
root/cdk/trunk/plugins/generator/src/test/java/org/richfaces/cdk/templatecompiler/RendererTemplateParserTest.java 2010-03-17
20:35:18 UTC (rev 16589)
@@ -21,21 +21,21 @@
*/
package org.richfaces.cdk.templatecompiler;
-import static org.easymock.EasyMock.*;
-import static org.junit.Assert.*;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import javax.faces.event.ActionEvent;
-import javax.faces.render.RenderKitFactory;
-import javax.faces.validator.Validator;
-
+import com.google.common.collect.Lists;
+import com.google.inject.Inject;
import org.easymock.EasyMock;
+import static org.easymock.EasyMock.anyObject;
+import static org.easymock.EasyMock.eq;
+import static org.easymock.EasyMock.expect;
+import static org.easymock.EasyMock.isNull;
+import static org.easymock.EasyMock.replay;
+import static org.easymock.EasyMock.verify;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertSame;
+import static org.junit.Assert.assertTrue;
import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -46,15 +46,27 @@
import org.richfaces.cdk.Mock;
import org.richfaces.cdk.Source;
import org.richfaces.cdk.Sources;
-import org.richfaces.cdk.model.*;
+import org.richfaces.cdk.model.ClassName;
+import org.richfaces.cdk.model.ComponentLibrary;
+import org.richfaces.cdk.model.EventName;
+import org.richfaces.cdk.model.Property;
+import org.richfaces.cdk.model.RenderKitModel;
import org.richfaces.cdk.model.RenderKitModel.Id;
+import org.richfaces.cdk.model.RendererModel;
import org.richfaces.cdk.templatecompiler.model.Template;
import org.richfaces.cdk.xmlconfig.JAXB;
import org.richfaces.cdk.xmlconfig.JAXBBinding;
import org.xml.sax.ext.EntityResolver2;
-import com.google.common.collect.Lists;
-import com.google.inject.Inject;
+import javax.faces.event.ActionEvent;
+import javax.faces.render.RenderKitFactory;
+import javax.faces.validator.Validator;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
/**
* @author Nick Belaevski
@@ -210,7 +222,7 @@
* Checks that method signature satisfies the following declaration:
* <code>float coolMethod(int, java.lang.String,
javax.faces.validator.Validator)</code>
*
- * @param actionListenerProperty
+ * @param coolMethodProperty
*/
private void checkDummyComponentCoolMethod(Property coolMethodProperty) {
assertNotNull(coolMethodProperty);
@@ -224,7 +236,7 @@
}
/**
- * @param property
+ * @param integerAttribute
*/
private void checkDummyComponentIntegerAttribute(Property integerAttribute) {
assertNotNull(integerAttribute);
@@ -237,7 +249,7 @@
}
/**
- * @param property
+ * @param requiredAttribute
*/
private void checkDummyComponentRequiredAttribute(Property requiredAttribute) {
assertNotNull(requiredAttribute);
@@ -265,7 +277,7 @@
Template template =
parser.parseTemplate(getJavaFile("org/richfaces/cdk/templatecompiler/basic.template.xml"));
assertNotNull(template);
- parser.mergeTemplateIntoModel(template);
+ parser.mergeTemplateIntoModel(template, null);
RenderKitModel renderKit =
getRenderkitFromModel(RenderKitFactory.HTML_BASIC_RENDER_KIT);
RendererModel renderer = getFirstRendererFromRenderkit(renderKit);
@@ -285,7 +297,7 @@
Template template =
parser.parseTemplate(getJavaFile("org/richfaces/cdk/templatecompiler/dummy.template.xml"));
assertNotNull(template);
- parser.mergeTemplateIntoModel(template);
+ parser.mergeTemplateIntoModel(template, null);
verify(resolver, templatesSource);
RenderKitModel renderKit =
getRenderkitFromModel("org.richfaces.CUSTOM_RENDERKIT");