You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by ma...@apache.org on 2009/05/05 08:39:40 UTC

svn commit: r771586 - /myfaces/trinidad-maven/trunk/maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/parse/FacesConfigParser.java

Author: matzew
Date: Tue May  5 06:39:39 2009
New Revision: 771586

URL: http://svn.apache.org/viewvc?rev=771586&view=rev
Log:
TRINIDAD-1466 - Support xinclude'd property metadata

Thanks for the patch, Andy Schwartz

Modified:
    myfaces/trinidad-maven/trunk/maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/parse/FacesConfigParser.java

Modified: myfaces/trinidad-maven/trunk/maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/parse/FacesConfigParser.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad-maven/trunk/maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/parse/FacesConfigParser.java?rev=771586&r1=771585&r2=771586&view=diff
==============================================================================
--- myfaces/trinidad-maven/trunk/maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/parse/FacesConfigParser.java (original)
+++ myfaces/trinidad-maven/trunk/maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/parse/FacesConfigParser.java Tue May  5 06:39:39 2009
@@ -109,13 +109,7 @@
 
     // faces-config/component/property
     digester.addObjectCreate("faces-config/component/property", PropertyBean.class);
-    digester.addBeanPropertySetter("faces-config/component/property/property-name",
-                                   "propertyName");
-    digester.addBeanPropertySetter("faces-config/component/property/property-class",
-                                   "propertyClass");
-    digester.addBeanPropertySetter("faces-config/component/property/description");
-    digester.addBeanPropertySetter("faces-config/component/property/default-value",
-                                   "defaultValue");
+    addComponentPropertyDigesterRules(digester);
     digester.addSetNext("faces-config/component/property", "addProperty",
                         PropertyBean.class.getName());
 
@@ -205,6 +199,37 @@
     digester.addSetNext("faces-config/component/component-extension/event", "addEvent",
                         EventRefBean.class.getName());
 
+    // jsr-276 metadata rules
+    digester.setRuleNamespaceURI("http://java.sun.com/xml/ns/javaee/faces/design-time-metadata");
+    digester.addBeanPropertySetter("faces-config/component/property/property-extension/property-metadata/required");
+    digester.addBeanPropertySetter("faces-config/component/property/property-extension/property-metadata/value-expression", "valueExpression");
+
+    // XInclude rules
+    digester.setRuleNamespaceURI(XIncludeFilter.XINCLUDE_NAMESPACE);
+    digester.addFactoryCreate("faces-config/component/include",
+                              ComponentIncludeFactory.class);
+    digester.addFactoryCreate("faces-config/component/property/include",
+                              ComponentPropertyIncludeFactory.class);
+  }
+
+  // Add component property-related digster rules
+  protected static void addComponentPropertyDigesterRules(Digester digester)
+  {
+    String oldNamespace = digester.getRuleNamespaceURI();
+
+    digester.setRuleNamespaceURI("http://java.sun.com/xml/ns/javaee");
+
+    digester.addBeanPropertySetter("faces-config/component/property/property-name",
+                                   "propertyName");
+    digester.addBeanPropertySetter("faces-config/component/property/property-class",
+                                   "propertyClass");
+    digester.addBeanPropertySetter("faces-config/component/property/description");
+    digester.addBeanPropertySetter("faces-config/component/property/default-value",
+                                   "defaultValue");
+
+    // Maven Faces Plugin
+    digester.setRuleNamespaceURI("http://myfaces.apache.org/maven-faces-plugin");
+
     // faces-config/component/property/property-extension
     digester.addBeanPropertySetter("faces-config/component/property/property-extension/state-holder",
                                    "stateHolder");
@@ -252,15 +277,7 @@
     digester.addBeanPropertySetter("faces-config/component/property/property-extension/property-metadata/deprecated");
     digester.addCallMethod("faces-config/component/property/property-extension/property-metadata/no-op", "makeNoOp");
 
-    // jsr-276 metadata rules
-    digester.setRuleNamespaceURI("http://java.sun.com/xml/ns/javaee/faces/design-time-metadata");
-    digester.addBeanPropertySetter("faces-config/component/property/property-extension/property-metadata/required");
-    digester.addBeanPropertySetter("faces-config/component/property/property-extension/property-metadata/value-expression", "valueExpression");
-
-    // XInclude rules
-    digester.setRuleNamespaceURI(XIncludeFilter.XINCLUDE_NAMESPACE);
-    digester.addFactoryCreate("faces-config/component/include",
-                              ComponentIncludeFactory.class);
+    digester.setRuleNamespaceURI(oldNamespace);
   }
 
   protected static void addConverterDigesterRules(Digester digester)
@@ -456,7 +473,8 @@
     return digester;
   }
 
-  static public class ComponentIncludeFactory extends AbstractObjectCreationFactory
+  // Base class for include factories 
+  abstract static public class AbstractIncludeFactory extends AbstractObjectCreationFactory
   {
     public Object createObject(
       Attributes attributes) throws Exception
@@ -469,7 +487,7 @@
       URL included = new URL(master, href);
 
       Digester includedDigester = createEmptyDigester();
-      addComponentDigesterRules(includedDigester, false);
+      addDigesterRules(includedDigester);
       includedDigester.push(included);
       includedDigester.push(digester.peek());
 
@@ -481,5 +499,24 @@
       // We don't really want the included object - but return it anyway
       return included;
     }
+
+    abstract public void addDigesterRules(Digester includedDigester);
   }
+
+  // Factory for component includes
+  static public class ComponentIncludeFactory extends AbstractIncludeFactory
+  {
+    public void addDigesterRules(Digester digester) {
+      addComponentDigesterRules(digester, false);
+    }
+  }
+
+  // Factory for component property includes
+  static public class ComponentPropertyIncludeFactory extends AbstractIncludeFactory
+  {
+    public void addDigesterRules(Digester digester) {
+      addComponentPropertyDigesterRules(digester);
+    }
+  }
+
 }