[richfaces-svn-commits] JBoss Rich Faces SVN: r18580 - in branches/cdk-8570/cdk/generator/src/main/java/org/richfaces/cdk: model/validator and 1 other directory.
richfaces-svn-commits at lists.jboss.org
richfaces-svn-commits at lists.jboss.org
Wed Aug 11 19:28:17 EDT 2010
Author: alexsmirnov
Date: 2010-08-11 19:28:17 -0400 (Wed, 11 Aug 2010)
New Revision: 18580
Added:
branches/cdk-8570/cdk/generator/src/main/java/org/richfaces/cdk/model/validator/CallbackException.java
branches/cdk-8570/cdk/generator/src/main/java/org/richfaces/cdk/model/validator/NamingConventionsCallback.java
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/RichFacesConventions.java
branches/cdk-8570/cdk/generator/src/main/java/org/richfaces/cdk/model/validator/ValidatorImpl.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/generator/src/main/java/org/richfaces/cdk/NamingConventions.java
===================================================================
--- branches/cdk-8570/cdk/generator/src/main/java/org/richfaces/cdk/NamingConventions.java 2010-08-11 22:59:48 UTC (rev 18579)
+++ branches/cdk-8570/cdk/generator/src/main/java/org/richfaces/cdk/NamingConventions.java 2010-08-11 23:28:17 UTC (rev 18580)
@@ -69,7 +69,7 @@
/**
- * <p class="changed_added_4_0"></p>
+ * <p class="changed_added_4_0">Infer component family by component type</p>
* @param componentType
* @return
* @throws InvalidNameException
@@ -85,35 +85,73 @@
*/
public ClassName inferTagHandlerClass(FacesId componentType, String markup) throws InvalidNameException;
+ /**
+ * <p class="changed_added_4_0">Infer VDL tag name by component type</p>
+ * @param componentType
+ * @return
+ * @throws InvalidNameException
+ */
public String inferTagName(FacesId componentType) throws InvalidNameException;
- public String inferRendererTypeByRendererClass(ClassName rendererClass);
+ /**
+ * <p class="changed_added_4_0">Determine renderer type by Java class</p>
+ * @param targetClass
+ * @return
+ */
+ public FacesId inferRendererType(ClassName targetClass);
- public String inferRendererTypeByComponentType(FacesId componentType);
- public String inferComponentFamily(FacesId type);
+ /**
+ * <p class="changed_added_4_0">Infer renderer family by renderer type</p>
+ * @param type
+ * @return
+ */
+ public FacesId inferRendererFamily(FacesId type);
- public String inferTemplate(FacesId type);
+ /**
+ * <p class="changed_added_4_0">Infer renderer type from template file path</p>
+ * @param templateName
+ * @return
+ */
+ public FacesId inferRendererTypeByTemplatePath(String templateName);
- public String inferRendererTypeByTemplatePath(String templateName);
+ /**
+ * <p class="changed_added_4_0">Infer Java class name by renderer type.</p>
+ * @param id
+ * @return
+ */
+ public ClassName inferRendererClass(FacesId id);
- public String inferRendererName(FacesId type);
- public String inferComponentTypeByRendererClass(String s);
-
- public String inferComponentFamilyByRendererClass(String s);
-
- public String inferRendererBaseName(FacesId type);
-
+ /**
+ * <p class="changed_added_4_0">Infer behavior type by class name</p>
+ * @param targetClass
+ * @return
+ */
public FacesId inferBehaviorType(ClassName targetClass);
+ /**
+ * <p class="changed_added_4_0">Infer name for generated behavior class by type</p>
+ * @param id
+ * @return
+ */
public ClassName inferBehaviorClass(FacesId id);
+ /**
+ * <p class="changed_added_4_0">Determine default taglib uri from library model.</p>
+ * @param library
+ * @return
+ */
public String inferTaglibUri(ComponentLibrary library);
+ /**
+ * <p class="changed_added_4_0">Infer short taglib name from URI</p>
+ * @param uri
+ * @return
+ */
public String inferTaglibName(String uri);
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-11 22:59:48 UTC (rev 18579)
+++ branches/cdk-8570/cdk/generator/src/main/java/org/richfaces/cdk/RichFacesConventions.java 2010-08-11 23:28:17 UTC (rev 18580)
@@ -1,9 +1,6 @@
package org.richfaces.cdk;
import java.net.URI;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
import org.richfaces.cdk.model.ClassName;
import org.richfaces.cdk.model.ComponentLibrary;
import org.richfaces.cdk.model.FacesId;
@@ -133,53 +130,14 @@
return baseName;
}
- public String inferRendererTypeByRendererClass(ClassName rendererClass) {
- Pattern pattern = Pattern.compile("^(.*).renderkit.(.*\\.)?(.*)RendererBase$");
- Matcher matcher = pattern.matcher(rendererClass.getName());
- if (matcher.matches()) {
- return matcher.group(1) + "." + matcher.group(3) + "Renderer";
- }
- return "";
- }
-
- @Override
- public String inferRendererTypeByComponentType(FacesId componentType) {
- return componentType + "Renderer";
- }
-
- public String inferComponentFamily(FacesId type) {
+ public FacesId inferRendererFamily(FacesId type) {
return null;
}
- public String inferTemplate(FacesId type) {
- return null;
+ public FacesId inferRendererTypeByTemplatePath(String templateName) {
+ return FacesId.parseId(templateName.replace('/', '.'));
}
- public String inferRendererTypeByTemplatePath(String templateName) {
- return null;
- }
-
- public String inferRendererName(FacesId type) {
- return null;
- }
-
- public String inferRendererBaseName(FacesId type) {
- return null;
- }
-
- public String inferComponentTypeByRendererClass(String s) {
- Pattern pattern = Pattern.compile("^(.*).renderkit.(.*\\.)?(.*)RendererBase$");
- Matcher matcher = pattern.matcher(s);
- if (matcher.matches()) {
- return matcher.group(1) + "." + matcher.group(3);
- }
- return "";
- }
-
- public String inferComponentFamilyByRendererClass(String s) {
- return inferComponentTypeByRendererClass(s);
- }
-
@Override
public ClassName inferBehaviorClass(FacesId id) {
if (null == id) {
@@ -269,4 +227,16 @@
// TODO infer name from library base names.
return "http://richfaces.org/a4j";
}
+
+ @Override
+ public ClassName inferRendererClass(FacesId id) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public FacesId inferRendererType(ClassName targetClass) {
+ // TODO Auto-generated method stub
+ return null;
+ }
}
Added: branches/cdk-8570/cdk/generator/src/main/java/org/richfaces/cdk/model/validator/CallbackException.java
===================================================================
--- branches/cdk-8570/cdk/generator/src/main/java/org/richfaces/cdk/model/validator/CallbackException.java (rev 0)
+++ branches/cdk-8570/cdk/generator/src/main/java/org/richfaces/cdk/model/validator/CallbackException.java 2010-08-11 23:28:17 UTC (rev 18580)
@@ -0,0 +1,38 @@
+/*
+ * $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.validator;
+
+/**
+ * <p class="changed_added_4_0"></p>
+ * @author asmirnov at exadel.com
+ *
+ */
+ at SuppressWarnings("serial")
+public class CallbackException extends Exception {
+
+ public CallbackException(String message) {
+ super(message);
+ }
+
+}
Property changes on: branches/cdk-8570/cdk/generator/src/main/java/org/richfaces/cdk/model/validator/CallbackException.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added: branches/cdk-8570/cdk/generator/src/main/java/org/richfaces/cdk/model/validator/NamingConventionsCallback.java
===================================================================
--- branches/cdk-8570/cdk/generator/src/main/java/org/richfaces/cdk/model/validator/NamingConventionsCallback.java (rev 0)
+++ branches/cdk-8570/cdk/generator/src/main/java/org/richfaces/cdk/model/validator/NamingConventionsCallback.java 2010-08-11 23:28:17 UTC (rev 18580)
@@ -0,0 +1,49 @@
+package org.richfaces.cdk.model.validator;
+
+import org.richfaces.cdk.model.ClassName;
+import org.richfaces.cdk.model.FacesId;
+
+/**
+ * <p class="changed_added_4_0">
+ * </p>
+ *
+ * @author asmirnov at exadel.com
+ *
+ */
+interface NamingConventionsCallback {
+
+ /**
+ * <p class="changed_added_4_0">Infer JSF type by Java class name</p>
+ * @param targetClass
+ * @return
+ */
+ FacesId inferType(ClassName targetClass) throws CallbackException;
+
+ /**
+ * <p class="changed_added_4_0">Last resort - infer default JSF type</p>
+ * @return
+ */
+ FacesId inferType() throws CallbackException;
+
+ /**
+ * <p class="changed_added_4_0">Infer Java class name by JSF type</p>
+ * @param id
+ * @return
+ */
+ ClassName inferClass(FacesId id) throws CallbackException;
+
+ /**
+ * <p class="changed_added_4_0">Infer default base class for cenerated component.</p>
+ * @return
+ * @throws CallbackException
+ */
+ ClassName inferBaseClass() throws CallbackException;
+
+ /**
+ * <p class="changed_added_4_0">Infer default Java class name.</p>
+ * @return
+ * @throws CallbackException
+ */
+ ClassName inferClass() throws CallbackException;
+
+}
\ No newline at end of file
Property changes on: branches/cdk-8570/cdk/generator/src/main/java/org/richfaces/cdk/model/validator/NamingConventionsCallback.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
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-11 22:59:48 UTC (rev 18579)
+++ branches/cdk-8570/cdk/generator/src/main/java/org/richfaces/cdk/model/validator/ValidatorImpl.java 2010-08-11 23:28:17 UTC (rev 18580)
@@ -27,6 +27,10 @@
import java.util.HashSet;
import java.util.NoSuchElementException;
+import javax.faces.component.UIComponentBase;
+import javax.faces.component.behavior.ClientBehavior;
+import javax.faces.component.behavior.ClientBehaviorBase;
+import javax.faces.render.Renderer;
import javax.faces.view.facelets.BehaviorHandler;
import javax.faces.view.facelets.ComponentHandler;
import javax.faces.view.facelets.ConverterHandler;
@@ -74,21 +78,6 @@
public static final ClassName DEFAULT_CONVERTER_HANDLER = new ClassName(ConverterHandler.class);
public static final ClassName DEFAULT_BEHAVIOR_HANDLER = new ClassName(BehaviorHandler.class);
- /**
- * <p class="changed_added_4_0">
- * </p>
- *
- * @author asmirnov at exadel.com
- *
- */
- interface NamingConventionsCallback {
-
- FacesId inferType(ClassName targetClass);
-
- ClassName inferClass(FacesId id);
-
- }
-
@Inject
private Logger log;
@@ -177,20 +166,33 @@
* @param library
*/
protected void verifyBehaviors(ComponentLibrary library) {
- for (BehaviorModel behavior : library.getBehaviors()) {
+ for (final BehaviorModel behavior : library.getBehaviors()) {
verifyTypes(behavior, new NamingConventionsCallback() {
@Override
public FacesId inferType(ClassName targetClass) {
- // TODO Auto-generated method stub
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) {
- // TODO Auto-generated method stub
return namingConventions.inferBehaviorClass(id);
}
+
+ @Override
+ public ClassName inferBaseClass() throws CallbackException {
+ return ClassName.get(ClientBehaviorBase.class);
+ }
+
+ @Override
+ public ClassName inferClass() throws CallbackException {
+ throw new CallbackException("Cannot infer Java class name for behavior "+behavior);
+ }
});
for (TagModel tag : behavior.getTags()) {
verifyTag(tag, behavior.getId(), DEFAULT_BEHAVIOR_HANDLER);
@@ -203,19 +205,56 @@
for (RenderKitModel renderKit : library.getRenderKits()) {
// Check render kit name and class.
for (RendererModel renderer : renderKit.getRenderers()) {
-
vefifyRenderer(library, renderer);
}
}
}
- protected void vefifyRenderer(ComponentLibrary library, RendererModel renderer) {
+ protected void vefifyRenderer(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 {
+ FacesId rendererType;
+ String templatePath = renderer.getTemplatePath();
+ if(null != templatePath){
+ rendererType = namingConventions.inferRendererTypeByTemplatePath(templatePath);
+ } else {
+ // lookup for renderer-specific component type.
+ String componentType = renderer.getComponentType();
+ throw new CallbackException("Cannot determine renderer type");
+ }
+ return rendererType;
+ }
+
+ @Override
+ public ClassName inferClass(FacesId id) {
+ return namingConventions.inferRendererClass(id);
+ }
+
+ @Override
+ public ClassName inferClass() throws CallbackException {
+ throw new CallbackException("Cannot determine renderer class name");
+ }
+
+ @Override
+ public ClassName inferBaseClass() throws CallbackException {
+ return ClassName.get(Renderer.class);
+ }
+ });
+ // Check component type.
// Check family.
- // Check generated class.
- // Check superclass.
- // Check component type.
+ if(null == renderer.getFamily()){
+// renderer.setFamily(namingConventions.inferRendererBaseName(renderer.getId()));
+ }
+ // Check attributes ( propagate descriptions from renderer-specific component ).
}
protected void verifyComponents(ComponentLibrary library) throws CdkException {
@@ -324,41 +363,65 @@
public ClassName inferClass(FacesId id) {
return namingConventions.inferUIComponentClass(id);
}
+
+ @Override
+ public ClassName inferBaseClass() throws CallbackException {
+ return ClassName.get(UIComponentBase.class);
+ }
+
+ @Override
+ public ClassName inferClass() 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()) {
// Check family.
component.setFamily(namingConventions.inferUIComponentFamily(component.getId()));
}
}
+ /**
+ * <p class="changed_added_4_0">This method virifies type/family attributes for JSF objects ( components, renderers, validators, converters, behaviors )</p>
+ * @param component object to verify.
+ * @param callback callback to corresponding naming conventions.
+ * @return
+ */
protected boolean verifyTypes(FacesComponent component, NamingConventionsCallback callback) {
// Check JsfComponent type.
+ try {
if (null == component.getId()) {
if (null != component.getTargetClass()) {
component.setId(callback.inferType(component.getTargetClass()));
} else if (null != component.getBaseClass()) {
component.setId(callback.inferType(component.getBaseClass()));
} else {
- // No clue for component type, log error and return.
- log.error("No type information available for component: " + component);
- return false;
+ component.setId(callback.inferType());
}
}
// Check classes.
if (component.isGenerate()) {
if (null == component.getBaseClass()) {
- log.error("Base class for generated component is not set :" + component.getId());
+ component.setBaseClass(callback.inferBaseClass());
// return;
} else if (null == component.getTargetClass()) {
component.setTargetClass(callback.inferClass(component.getId()));
}
} else if (null == component.getTargetClass()) {
- if (null != component.getBaseClass()) {
- component.setTargetClass(component.getBaseClass());
- } else {
- log.error("No class information available for component: " + component);
- return false;
+ if (null == component.getBaseClass()) {
+ component.setBaseClass(callback.inferClass());
}
+ component.setTargetClass(component.getBaseClass());
+
}
+ } catch (CallbackException e) {
+ log.error(e.getMessage());
+ return false;
+ }
return true;
}
More information about the richfaces-svn-commits
mailing list