[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