[richfaces-svn-commits] JBoss Rich Faces SVN: r18684 - in branches/cdk-8570/cdk: generator/src/main/java/org/richfaces/cdk and 3 other directories.
richfaces-svn-commits at lists.jboss.org
richfaces-svn-commits at lists.jboss.org
Mon Aug 16 19:09:38 EDT 2010
Author: alexsmirnov
Date: 2010-08-16 19:09:37 -0400 (Mon, 16 Aug 2010)
New Revision: 18684
Added:
branches/cdk-8570/cdk/generator/src/main/java/org/richfaces/cdk/templatecompiler/AlreadyProcessedException.java
Modified:
branches/cdk-8570/cdk/annotations/src/main/java/org/richfaces/cdk/annotations/JsfComponent.java
branches/cdk-8570/cdk/generator/src/main/java/org/richfaces/cdk/NamingConventions.java
branches/cdk-8570/cdk/generator/src/main/java/org/richfaces/cdk/RichFacesConventions.java
branches/cdk-8570/cdk/generator/src/main/java/org/richfaces/cdk/apt/processors/RendererProcessor.java
branches/cdk-8570/cdk/generator/src/main/java/org/richfaces/cdk/model/validator/ValidatorImpl.java
branches/cdk-8570/cdk/generator/src/main/java/org/richfaces/cdk/templatecompiler/RendererTemplateParser.java
Log:
CODING IN PROGRESS - issue RF-8909: CDK: renderer-type is not written into .taglib.xml
https://jira.jboss.org/browse/RF-8909
Modified: branches/cdk-8570/cdk/annotations/src/main/java/org/richfaces/cdk/annotations/JsfComponent.java
===================================================================
--- branches/cdk-8570/cdk/annotations/src/main/java/org/richfaces/cdk/annotations/JsfComponent.java 2010-08-16 23:07:36 UTC (rev 18683)
+++ branches/cdk-8570/cdk/annotations/src/main/java/org/richfaces/cdk/annotations/JsfComponent.java 2010-08-16 23:09:37 UTC (rev 18684)
@@ -125,7 +125,7 @@
*
* @return
*/
- public Tag[] tag() default { @Tag };
+ public Tag[] tag() default {};
/**
* <p class="changed_added_4_0">
Modified: branches/cdk-8570/cdk/generator/src/main/java/org/richfaces/cdk/NamingConventions.java
===================================================================
--- branches/cdk-8570/cdk/generator/src/main/java/org/richfaces/cdk/NamingConventions.java 2010-08-16 23:07:36 UTC (rev 18683)
+++ branches/cdk-8570/cdk/generator/src/main/java/org/richfaces/cdk/NamingConventions.java 2010-08-16 23:09:37 UTC (rev 18684)
@@ -153,6 +153,14 @@
* @return
*/
public String inferTaglibName(String uri);
+
+
+ /**
+ * <p class="changed_added_4_0">Infer renderer type by component type or family.</p>
+ * @param id
+ * @return
+ */
+ public FacesId inferRendererType(FacesId id);
}
Modified: branches/cdk-8570/cdk/generator/src/main/java/org/richfaces/cdk/RichFacesConventions.java
===================================================================
--- branches/cdk-8570/cdk/generator/src/main/java/org/richfaces/cdk/RichFacesConventions.java 2010-08-16 23:07:36 UTC (rev 18683)
+++ branches/cdk-8570/cdk/generator/src/main/java/org/richfaces/cdk/RichFacesConventions.java 2010-08-16 23:09:37 UTC (rev 18684)
@@ -32,6 +32,12 @@
@Override
public FacesId inferComponentType(ClassName componentClass) throws InvalidNameException {
+ Name name = inferNameByClass(componentClass, null, null);
+
+ return new FacesId(name.toString());
+ }
+
+ private Name inferNameByClass(ClassName componentClass, Classifier classifier, String markup) {
// check parameters.
if (null == componentClass) {
throw new IllegalArgumentException();
@@ -39,6 +45,22 @@
Name name = Name.create(componentClass.toString());
+ processName(classifier, markup, name);
+ return name;
+ }
+
+ private Name inferNameByType(FacesId type, Classifier classifier, String markup) {
+ // check parameters.
+ if (null == type) {
+ throw new IllegalArgumentException();
+ }
+
+ Name name = Name.create(type.toString());
+
+ processName(classifier, markup, name);
+ return name;
+ }
+ private void processName(Classifier classifier, String markup, Name name) {
// Use base library prefix.
String baseName = this.getBaseName();
@@ -47,32 +69,16 @@
}
// JsfComponent type does not contain class or markup parts.
- name.setClassifier(null);
- name.setMarkup(null);
+ name.setClassifier(classifier);
+ name.setMarkup(markup);
String simpleName = name.getSimpleName();
- // Remove common prefixes.
- for (int i = 0; i < COMPONENT_PREFIXES.length; i++) {
- if (simpleName.startsWith(COMPONENT_PREFIXES[i])) {
- simpleName = simpleName.substring(COMPONENT_PREFIXES[i].length());
+ simpleName = removeCommonPreffix(simpleName);
- break;
- }
- }
+ simpleName = removeCommonSuffix(simpleName);
- // Remove common suffixes.
- for (int i = 0; i < COMPONENT_SUFFIXES.length; i++) {
- if (simpleName.endsWith(COMPONENT_SUFFIXES[i])) {
- simpleName = simpleName.substring(0, simpleName.length() - COMPONENT_SUFFIXES[i].length());
-
- break;
- }
- }
-
name.setSimpleName(simpleName);
-
- return new FacesId(name.toString());
}
@Override
@@ -130,10 +136,6 @@
return baseName;
}
- public FacesId inferRendererFamily(FacesId type) {
- return null;
- }
-
public FacesId inferRendererTypeByTemplatePath(String templateName) {
return FacesId.parseId(templateName.replace('/', '.'));
}
@@ -156,27 +158,23 @@
@Override
public FacesId inferBehaviorType(ClassName targetClass) {
- // check parameters.
- if (null == targetClass) {
- throw new IllegalArgumentException();
- }
+ Name name = inferNameByClass(targetClass, Name.Classifier.component, "html");
- Name name = Name.create(targetClass.toString());
+ return new FacesId(name.toString());
+ }
- // Use base library prefix.
- String baseName = this.getBaseName();
+ private String removeCommonSuffix(String simpleName) {
+ for (int i = 0; i < COMPONENT_SUFFIXES.length; i++) {
+ if (simpleName.endsWith(COMPONENT_SUFFIXES[i])) {
+ simpleName = simpleName.substring(0, simpleName.length() - COMPONENT_SUFFIXES[i].length());
- if (null != baseName) {
- name.setPrefix(baseName);
+ break;
+ }
}
+ return simpleName;
+ }
- // Jsf Behavior type does not contain class or markup parts.
- name.setClassifier(null);
- name.setMarkup(null);
-
- String simpleName = name.getSimpleName();
-
- // Remove common prefixes.
+ private String removeCommonPreffix(String simpleName) {
for (int i = 0; i < COMPONENT_PREFIXES.length; i++) {
if (simpleName.startsWith(COMPONENT_PREFIXES[i])) {
simpleName = simpleName.substring(COMPONENT_PREFIXES[i].length());
@@ -184,19 +182,7 @@
break;
}
}
-
- // Remove common suffixes.
- for (int i = 0; i < COMPONENT_SUFFIXES.length; i++) {
- if (simpleName.endsWith(COMPONENT_SUFFIXES[i])) {
- simpleName = simpleName.substring(0, simpleName.length() - COMPONENT_SUFFIXES[i].length());
-
- break;
- }
- }
-
- name.setSimpleName(simpleName);
-
- return new FacesId(name.toString());
+ return simpleName;
}
@Override
@@ -230,13 +216,20 @@
@Override
public ClassName inferRendererClass(FacesId id) {
- // TODO Auto-generated method stub
- return null;
+ return ClassName.get(inferNameByType(id, Classifier.renderkit, null).toString());
}
+ public FacesId inferRendererFamily(FacesId type) {
+ return FacesId.parseId(inferNameByType(type, null, null).toString());
+ }
+
@Override
public FacesId inferRendererType(ClassName targetClass) {
- // TODO Auto-generated method stub
- return null;
+ return FacesId.parseId(inferNameByClass(targetClass, Classifier.renderkit, null).toString());
}
+
+ @Override
+ public FacesId inferRendererType(FacesId id) {
+ return FacesId.parseId(inferNameByType(id, Classifier.renderkit, null).toString());
+ }
}
Modified: branches/cdk-8570/cdk/generator/src/main/java/org/richfaces/cdk/apt/processors/RendererProcessor.java
===================================================================
--- branches/cdk-8570/cdk/generator/src/main/java/org/richfaces/cdk/apt/processors/RendererProcessor.java 2010-08-16 23:07:36 UTC (rev 18683)
+++ branches/cdk-8570/cdk/generator/src/main/java/org/richfaces/cdk/apt/processors/RendererProcessor.java 2010-08-16 23:09:37 UTC (rev 18684)
@@ -21,8 +21,6 @@
package org.richfaces.cdk.apt.processors;
-import java.io.File;
-import java.io.FileNotFoundException;
import java.lang.annotation.Annotation;
import javax.annotation.processing.SupportedAnnotationTypes;
@@ -33,17 +31,13 @@
import javax.lang.model.type.TypeKind;
import javax.lang.model.type.TypeMirror;
-import org.richfaces.cdk.FileManager;
import org.richfaces.cdk.Logger;
-import org.richfaces.cdk.Source;
-import org.richfaces.cdk.Sources;
import org.richfaces.cdk.annotations.JsfComponent;
import org.richfaces.cdk.annotations.JsfRenderer;
import org.richfaces.cdk.model.ClassName;
import org.richfaces.cdk.model.ComponentLibrary;
import org.richfaces.cdk.model.FacesId;
import org.richfaces.cdk.model.RendererModel;
-import org.richfaces.cdk.templatecompiler.RendererTemplateParser;
import org.richfaces.cdk.util.Strings;
import com.google.inject.Inject;
@@ -62,13 +56,7 @@
@Inject
private Logger log;
- @Inject
- @Source(Sources.RENDERER_TEMPLATES)
- private FileManager sources;
- @Inject
- private RendererTemplateParser templateParser;
-
public void process(Element rendererElement, ComponentLibrary library) {
JsfRenderer annotation = rendererElement.getAnnotation(JsfRenderer.class);
@@ -124,12 +112,6 @@
String template = annotation.template();
if (!Strings.isEmpty(template)) {
rendererModel.setTemplatePath(template);
- try {
- File file = sources.getFile(template);
- templateParser.build(file, rendererModel);
- } catch (FileNotFoundException e) {
- log.error("Template file not found", e);
- }
}
}
Modified: branches/cdk-8570/cdk/generator/src/main/java/org/richfaces/cdk/model/validator/ValidatorImpl.java
===================================================================
--- branches/cdk-8570/cdk/generator/src/main/java/org/richfaces/cdk/model/validator/ValidatorImpl.java 2010-08-16 23:07:36 UTC (rev 18683)
+++ branches/cdk-8570/cdk/generator/src/main/java/org/richfaces/cdk/model/validator/ValidatorImpl.java 2010-08-16 23:09:37 UTC (rev 18684)
@@ -72,6 +72,126 @@
*/
public class ValidatorImpl implements ModelValidator {
+ private final class ComponentTypeCallback implements NamingConventionsCallback {
+ @Override
+ public FacesId inferType(ClassName targetClass) {
+ return namingConventions.inferComponentType(targetClass);
+ }
+
+ @Override
+ public ClassName inferClass(FacesId id) {
+ return namingConventions.inferUIComponentClass(id);
+ }
+
+ @Override
+ public ClassName getDefaultBaseClass() throws CallbackException {
+ return ClassName.get(UIComponentBase.class);
+ }
+
+ @Override
+ public ClassName getDefaultClass() throws CallbackException {
+ throw new CallbackException("Cannot determine component class name");
+ }
+
+ @Override
+ public FacesId inferType() throws CallbackException {
+ throw new CallbackException("Cannot determine component type");
+ }
+ }
+
+ private final class BehaviorTypeCallback implements NamingConventionsCallback {
+ private final BehaviorModel behavior;
+
+ private BehaviorTypeCallback(BehaviorModel behavior) {
+ this.behavior = behavior;
+ }
+
+ @Override
+ public FacesId inferType(ClassName targetClass) {
+ return namingConventions.inferBehaviorType(targetClass);
+ }
+
+ @Override
+ public FacesId inferType() throws CallbackException {
+ throw new CallbackException("Cannot infer type for behavior " + this.behavior);
+ }
+
+ @Override
+ public ClassName inferClass(FacesId id) {
+ return namingConventions.inferBehaviorClass(id);
+ }
+
+ @Override
+ public ClassName getDefaultBaseClass() throws CallbackException {
+ return ClassName.get(ClientBehaviorBase.class);
+ }
+
+ @Override
+ public ClassName getDefaultClass() throws CallbackException {
+ throw new CallbackException("Cannot infer Java class name for behavior " + this.behavior);
+ }
+ }
+
+ private final class RendererTypeCallback implements NamingConventionsCallback {
+ private final ComponentLibrary library;
+ private final RendererModel renderer;
+
+ private RendererTypeCallback(ComponentLibrary library, RendererModel renderer) {
+ this.library = library;
+ this.renderer = renderer;
+ }
+
+ @Override
+ public FacesId inferType(ClassName targetClass) {
+ try {
+ return inferType();
+ } catch (CallbackException e) {
+ return namingConventions.inferRendererType(targetClass);
+ }
+ }
+
+ @Override
+ public FacesId inferType() throws CallbackException {
+ // For renderers with template - try to determine type by template file.
+ if (null != this.renderer.getTemplate()) {
+ for (ComponentModel component : this.library.getComponents()) {
+ if (null != component.getRendererTemplate()
+ && this.renderer.getTemplate().getTemplatePath().endsWith(component.getRendererTemplate())) {
+ if (null != component.getRendererType()) {
+ return component.getRendererType();
+ } else {
+ FacesId rendererType = namingConventions.inferRendererType(component.getId());
+ component.setRendererType(rendererType);
+ return rendererType;
+ }
+ }
+ }
+ // No component found, try to infer from template path.
+ return namingConventions.inferRendererTypeByTemplatePath(this.renderer.getTemplate().getTemplatePath());
+ }
+ // If previvious attempt fall, try to infer renderer type from family.
+ if (null != this.renderer.getFamily()) {
+ return namingConventions.inferRendererType(this.renderer.getFamily());
+ }
+ throw new CallbackException("Cannot determine renderer type");
+ }
+
+ @Override
+ public ClassName inferClass(FacesId id) {
+ return namingConventions.inferRendererClass(id);
+ }
+
+ @Override
+ public ClassName getDefaultClass() throws CallbackException {
+ throw new CallbackException("Cannot determine renderer class name");
+ }
+
+ @Override
+ public ClassName getDefaultBaseClass() throws CallbackException {
+ return ClassName.get(Renderer.class);
+ }
+ }
+
public static final ClassName DEFAULT_COMPONENT_HANDLER = new ClassName(ComponentHandler.class);
public static final ClassName DEFAULT_VALIDATOR_HANDLER = new ClassName(ValidatorHandler.class);
public static final ClassName DEFAULT_CONVERTER_HANDLER = new ClassName(ConverterHandler.class);
@@ -166,33 +286,7 @@
*/
protected void verifyBehaviors(ComponentLibrary library) {
for (final BehaviorModel behavior : library.getBehaviors()) {
- verifyTypes(behavior, new NamingConventionsCallback() {
-
- @Override
- public FacesId inferType(ClassName targetClass) {
- return namingConventions.inferBehaviorType(targetClass);
- }
-
- @Override
- public FacesId inferType() throws CallbackException {
- throw new CallbackException("Cannot infer type for behavior " + behavior);
- }
-
- @Override
- public ClassName inferClass(FacesId id) {
- return namingConventions.inferBehaviorClass(id);
- }
-
- @Override
- public ClassName getDefaultBaseClass() throws CallbackException {
- return ClassName.get(ClientBehaviorBase.class);
- }
-
- @Override
- public ClassName getDefaultClass() throws CallbackException {
- throw new CallbackException("Cannot infer Java class name for behavior " + behavior);
- }
- });
+ verifyTypes(behavior, new BehaviorTypeCallback(behavior));
for (TagModel tag : behavior.getTags()) {
verifyTag(tag, behavior.getId(), DEFAULT_BEHAVIOR_HANDLER);
}
@@ -209,39 +303,13 @@
}
}
- protected void vefifyRenderer(ComponentLibrary library, final RendererModel renderer) {
+ protected void vefifyRenderer(final ComponentLibrary library, final RendererModel renderer) {
// Check type.
- verifyTypes(renderer, new NamingConventionsCallback() {
-
- @Override
- public FacesId inferType(ClassName targetClass) {
- return namingConventions.inferRendererType(targetClass);
- }
-
- @Override
- public FacesId inferType() throws CallbackException {
- throw new CallbackException("Cannot determine renderer type");
- }
-
- @Override
- public ClassName inferClass(FacesId id) {
- return namingConventions.inferRendererClass(id);
- }
-
- @Override
- public ClassName getDefaultClass() throws CallbackException {
- throw new CallbackException("Cannot determine renderer class name");
- }
-
- @Override
- public ClassName getDefaultBaseClass() throws CallbackException {
- return ClassName.get(Renderer.class);
- }
- });
+ verifyTypes(renderer, new RendererTypeCallback(library, renderer));
// Check component type.
for (ComponentModel component : library.getComponents()) {
- if(renderer.getId().equals(component.getRendererType())){
+ if (renderer.getId().equals(component.getRendererType())) {
renderer.getAttributes().addAll(component.getAttributes());
renderer.setFamily(component.getFamily());
}
@@ -347,34 +415,7 @@
*/
protected void verifyComponentType(ComponentModel component) throws InvalidNameException {
// Check JsfComponent type.
- if (verifyTypes(component, new NamingConventionsCallback() {
-
- @Override
- public FacesId inferType(ClassName targetClass) {
- return namingConventions.inferComponentType(targetClass);
- }
-
- @Override
- public ClassName inferClass(FacesId id) {
- return namingConventions.inferUIComponentClass(id);
- }
-
- @Override
- public ClassName getDefaultBaseClass() throws CallbackException {
- return ClassName.get(UIComponentBase.class);
- }
-
- @Override
- public ClassName getDefaultClass() throws CallbackException {
- throw new CallbackException("Cannot determine component class name");
- }
-
- @Override
- public FacesId inferType() throws CallbackException {
- throw new CallbackException("Cannot determine component type");
- }
-
- }) && null == component.getFamily()) {
+ if (verifyTypes(component, new ComponentTypeCallback()) && null == component.getFamily()) {
// Check family.
component.setFamily(namingConventions.inferUIComponentFamily(component.getId()));
}
@@ -409,7 +450,7 @@
if (null == component.getBaseClass()) {
component.setBaseClass(callback.getDefaultBaseClass());
// return;
- }
+ }
if (null == component.getTargetClass()) {
component.setTargetClass(callback.inferClass(component.getId()));
}
Added: branches/cdk-8570/cdk/generator/src/main/java/org/richfaces/cdk/templatecompiler/AlreadyProcessedException.java
===================================================================
--- branches/cdk-8570/cdk/generator/src/main/java/org/richfaces/cdk/templatecompiler/AlreadyProcessedException.java (rev 0)
+++ branches/cdk-8570/cdk/generator/src/main/java/org/richfaces/cdk/templatecompiler/AlreadyProcessedException.java 2010-08-16 23:09:37 UTC (rev 18684)
@@ -0,0 +1,33 @@
+/*
+ * $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.templatecompiler;
+
+/**
+ * <p class="changed_added_4_0"></p>
+ * @author asmirnov at exadel.com
+ *
+ */
+public class AlreadyProcessedException extends RuntimeException {
+
+}
Property changes on: branches/cdk-8570/cdk/generator/src/main/java/org/richfaces/cdk/templatecompiler/AlreadyProcessedException.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Modified: branches/cdk-8570/cdk/generator/src/main/java/org/richfaces/cdk/templatecompiler/RendererTemplateParser.java
===================================================================
--- branches/cdk-8570/cdk/generator/src/main/java/org/richfaces/cdk/templatecompiler/RendererTemplateParser.java 2010-08-16 23:07:36 UTC (rev 18683)
+++ branches/cdk-8570/cdk/generator/src/main/java/org/richfaces/cdk/templatecompiler/RendererTemplateParser.java 2010-08-16 23:09:37 UTC (rev 18684)
@@ -158,35 +158,41 @@
public void build() throws CdkException {
Iterable<File> sourceFiles = this.sources.getFiles();
for (File file : sourceFiles) {
- build(file, null);
+ build(file);
}
}
- public RendererModel build(File file, RendererModel rendererModel) throws CdkException {
+ public void build(final File file) throws CdkException {
log.debug("RendererTemplateParser.build");
final String absolutePath = file.getAbsolutePath();
log.debug(" - file = " + absolutePath);
- log.debug(" - renderer = " + rendererModel);
-
- RendererModel existedModel = library.accept(new SimpleVisitor<RendererModel, String>() {
- @Override
- public RendererModel visitRender(RendererModel model, String absolutePath) {
- Template template = model.getTemplate();
- if (null != template && absolutePath.equals(template.getTemplatePath())) {
- return model;
- } else {
+ try {
+ RendererModel existedModel = library.accept(new SimpleVisitor<RendererModel, String>() {
+ @Override
+ public RendererModel visitRender(RendererModel model, String absolutePath) {
+ Template template = model.getTemplate();
+ if (null != template) {
+ if (absolutePath.equals(template.getTemplatePath())) {
+ throw new AlreadyProcessedException();
+ }
+ } else if (null != model.getTemplatePath()) {
+ try {
+ if (file.equals(sources.getFile(model.getTemplatePath()))) {
+ return model;
+ }
+ } catch (FileNotFoundException e) {
+ throw new CdkException("Template file defined in Renderer not found: "
+ + model.getTemplatePath(), e);
+ }
+ }
return null;
}
- }
- }, absolutePath);
- if (null != existedModel) {
- log.debug(" - Template was already processed.");
- return existedModel;
+ }, absolutePath);
+ Template template = parseTemplate(file);
+ mergeTemplateIntoModel(template, existedModel);
+ } catch (AlreadyProcessedException e) {
+ log.warn("Template " + absolutePath + "was already processed");
}
-
- Template template = parseTemplate(file);
- template.setTemplatePath(absolutePath);
- return mergeTemplateIntoModel(template, rendererModel);
}
protected RendererModel mergeTemplateIntoModel(Template template, RendererModel renderer) throws CdkException {
@@ -284,7 +290,9 @@
protected Template parseTemplate(File file) throws CdkException {
try {
- return jaxbBinding.unmarshal(file, "http://richfaces.org/cdk/cdk-template.xsd", Template.class);
+ Template template = jaxbBinding.unmarshal(file, "http://richfaces.org/cdk/cdk-template.xsd", Template.class);
+ template.setTemplatePath(file.getAbsolutePath());
+ return template;
} catch (FileNotFoundException e) {
throw new CdkException("Template file not found " + file.getAbsolutePath(), e);
}
More information about the richfaces-svn-commits
mailing list