[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