Example usage for org.apache.commons.digester SetPropertiesRule SetPropertiesRule

List of usage examples for org.apache.commons.digester SetPropertiesRule SetPropertiesRule

Introduction

In this page you can find the example usage for org.apache.commons.digester SetPropertiesRule SetPropertiesRule.

Prototype

public SetPropertiesRule(String[] attributeNames, String[] propertyNames) 

Source Link

Document

Constructor allows attribute->property mapping to be overriden.

Two arrays are passed in.

Usage

From source file:com.googlecode.osde.internal.gadgets.parser.GadgetXMLParser.java

protected void initialize(Digester digester) {
    digester.addRule("Module", new ObjectCreateRule(Module.class));

    digester.addFactoryCreate("Module/ModulePrefs", new ObjectFactory(Module.ModulePrefs.class));
    digester.addRule("Module/ModulePrefs", new SetNextRule("setModulePrefs"));

    digester.addRule("*/Param", new ObjectCreateRule(Param.class));
    digester.addRule("*/Param", new SetPropertiesRule("name", "name"));
    digester.addRule("*/Param", new CallMethodRule("setValue", 0));
    digester.addRule("*/Param", new SetNextRule("addParam"));

    digester.addFactoryCreate("Module/ModulePrefs/Require",
            new ObjectFactory(Module.ModulePrefs.Require.class));
    digester.addRule("Module/ModulePrefs/Require", new SetNextRule("addRequire"));

    digester.addFactoryCreate("Module/ModulePrefs/Optional",
            new ObjectFactory(Module.ModulePrefs.Optional.class));
    digester.addRule("Module/ModulePrefs/Optional", new SetNextRule("addOptional"));

    digester.addFactoryCreate("Module/ModulePrefs/Icon", new ObjectFactory(Module.ModulePrefs.Icon.class));
    digester.addRule("Module/ModulePrefs/Icon", new CallMethodRule("setValue", 0));
    digester.addRule("Module/ModulePrefs/Icon", new SetNextRule("addIcon"));

    digester.addFactoryCreate("Module/ModulePrefs/Link", new ObjectFactory(Module.ModulePrefs.Link.class));
    digester.addRule("Module/ModulePrefs/Link", new SetNextRule("addLink"));

    digester.addFactoryCreate("Module/ModulePrefs/Locale", new ObjectFactory(Module.ModulePrefs.Locale.class));
    digester.addRule("Module/ModulePrefs/Locale", new SetNextRule("addLocale"));

    digester.addFactoryCreate("Module/ModulePrefs/Locale/msg", new ObjectFactory(MessageBundle.Msg.class));
    digester.addRule("Module/ModulePrefs/Locale/msg", new CallMethodRule("setContent", 0));
    digester.addRule("Module/ModulePrefs/Locale/msg", new SetNextRule("addInlineMessage"));

    digester.addFactoryCreate("Module/ModulePrefs/OAuth", new ObjectFactory(Module.ModulePrefs.OAuth.class));
    digester.addRule("Module/ModulePrefs/OAuth", new SetNextRule("addOAuth"));

    digester.addFactoryCreate("Module/ModulePrefs/OAuth/Service",
            new ObjectFactory(Module.ModulePrefs.OAuth.Service.class));
    digester.addRule("Module/ModulePrefs/OAuth/Service", new SetNextRule("addService"));

    digester.addFactoryCreate("Module/ModulePrefs/OAuth/Service/Request",
            new ObjectFactory(Module.ModulePrefs.OAuth.Service.Request.class));
    digester.addRule("Module/ModulePrefs/OAuth/Service/Request", new SetNextRule("setRequest"));

    digester.addFactoryCreate("Module/ModulePrefs/OAuth/Service/Access",
            new ObjectFactory(Module.ModulePrefs.OAuth.Service.Access.class));
    digester.addRule("Module/ModulePrefs/OAuth/Service/Access", new SetNextRule("setAccess"));

    digester.addFactoryCreate("Module/ModulePrefs/OAuth/Service/Authorization",
            new ObjectFactory(Module.ModulePrefs.OAuth.Service.Authorization.class));
    digester.addRule("Module/ModulePrefs/OAuth/Service/Authorization", new SetNextRule("setAuthorization"));

    digester.addFactoryCreate("Module/ModulePrefs/Preload",
            new ObjectFactory(Module.ModulePrefs.Preload.class));
    digester.addRule("Module/ModulePrefs/Preload", new SetNextRule("addPreload"));

    digester.addFactoryCreate("Module/UserPref", new ObjectFactory(Module.UserPref.class));
    digester.addRule("Module/UserPref", new SetNextRule("addUserPref"));

    digester.addFactoryCreate("Module/UserPref/EnumValue", new ObjectFactory(Module.UserPref.EnumValue.class));
    digester.addRule("Module/UserPref/EnumValue", new SetNextRule("addEnumValue"));

    digester.addFactoryCreate("Module/Content", new ObjectFactory(Module.Content.class));
    digester.addRule("Module/Content", new CallMethodRule("setValue", 0));
    digester.addRule("Module/Content", new SetNextRule("addContent"));
}

From source file:net.sf.jasperreports.engine.xml.JRPrintXmlLoader.java

/**
 *
 *//*  ww  w  . j av a  2  s.  com*/
protected JRXmlDigester prepareDigester() throws ParserConfigurationException, SAXException {
    JRXmlDigester digester = new JRXmlDigester(createParser());

    // use a classloader that resolves both JR classes and classes from the context classloader
    CompositeClassloader digesterClassLoader = new CompositeClassloader(JRPrintXmlLoader.class.getClassLoader(),
            Thread.currentThread().getContextClassLoader());
    digester.setClassLoader(digesterClassLoader);
    digester.setNamespaceAware(true);

    digester.setRuleNamespaceURI(JRXmlConstants.JASPERPRINT_NAMESPACE);

    digester.push(this);
    //digester.setDebug(3);
    digester.setErrorHandler(this);
    digester.setValidating(true);

    /*   */
    digester.addFactoryCreate("jasperPrint", JasperPrintFactory.class.getName());
    digester.addSetNext("jasperPrint", "setJasperPrint", JasperPrint.class.getName());

    /*   */
    digester.addFactoryCreate("*/property", JRPropertyFactory.class.getName());
    digester.addCallMethod("*/property", "setValue", 0);

    /*   */
    digester.addFactoryCreate("jasperPrint/origin", JROriginFactory.class.getName());
    digester.addSetNext("jasperPrint/origin", "addOrigin", JROrigin.class.getName());

    /*   */
    digester.addFactoryCreate("jasperPrint/reportFont", JRStyleFactory.class.getName());
    digester.addSetNext("jasperPrint/reportFont", "addStyle", JRStyle.class.getName());

    /*   */
    digester.addFactoryCreate("jasperPrint/style", JRPrintStyleFactory.class.getName());
    digester.addSetNext("jasperPrint/style", "addStyle", JRStyle.class.getName());

    /*   */
    digester.addFactoryCreate("*/style/pen", JRPenFactory.Style.class.getName());

    /*   */
    digester.addFactoryCreate("*/bookmark", PrintBookmarkFactory.class.getName());
    digester.addSetNext("*/bookmark", "addBookmark", PrintBookmark.class.getName());

    /*   */
    digester.addFactoryCreate("jasperPrint/part", PrintPartFactory.class.getName());

    /*   */
    digester.addFactoryCreate("jasperPrint/page", JRPrintPageFactory.class.getName());
    digester.addSetNext("jasperPrint/page", "addPage", JRPrintPage.class.getName());

    /*   */
    digester.addFactoryCreate("*/line", JRPrintLineFactory.class.getName());
    digester.addSetNext("*/line", "addElement", JRPrintElement.class.getName());

    /*   */
    digester.addFactoryCreate("*/reportElement", JRPrintElementFactory.class.getName());

    /*   */
    digester.addFactoryCreate("*/graphicElement", JRPrintGraphicElementFactory.class.getName());

    /*   */
    digester.addFactoryCreate("*/pen", JRPenFactory.class.getName());

    /*   */
    digester.addFactoryCreate("*/rectangle", JRPrintRectangleFactory.class.getName());
    digester.addSetNext("*/rectangle", "addElement", JRPrintElement.class.getName());

    /*   */
    digester.addFactoryCreate("*/ellipse", JRPrintEllipseFactory.class.getName());
    digester.addSetNext("*/ellipse", "addElement", JRPrintElement.class.getName());

    /*   */
    digester.addFactoryCreate("*/image", JRPrintImageFactory.class.getName());
    digester.addSetNext("*/image", "addElement", JRPrintElement.class.getName());

    /*   */
    digester.addFactoryCreate("*/box", JRBoxFactory.class.getName());

    /*   */
    digester.addFactoryCreate("*/box/pen", JRPenFactory.Box.class.getName());
    digester.addFactoryCreate("*/box/topPen", JRPenFactory.Top.class.getName());
    digester.addFactoryCreate("*/box/leftPen", JRPenFactory.Left.class.getName());
    digester.addFactoryCreate("*/box/bottomPen", JRPenFactory.Bottom.class.getName());
    digester.addFactoryCreate("*/box/rightPen", JRPenFactory.Right.class.getName());

    /*   */
    digester.addFactoryCreate("*/paragraph", JRParagraphFactory.class.getName());
    digester.addFactoryCreate("*/paragraph/tabStop", TabStopFactory.class.getName());
    digester.addSetNext("*/paragraph/tabStop", "addTabStop", TabStop.class.getName());

    /*   */
    digester.addFactoryCreate("*/image/imageSource", JRPrintImageSourceFactory.class.getName());
    digester.addCallMethod("*/image/imageSource", "setImageSource", 0);

    /*   */
    digester.addFactoryCreate("*/text", JRPrintTextFactory.class.getName());
    digester.addSetNext("*/text", "addElement", JRPrintElement.class.getName());
    SetNestedPropertiesRule textRule = new SetNestedPropertiesRule(new String[] { "textContent",
            "textTruncateSuffix", "reportElement", "box", "font", JRXmlConstants.ELEMENT_lineBreakOffsets },
            new String[] { "text", "textTruncateSuffix" });
    textRule.setTrimData(false);
    textRule.setAllowUnknownChildElements(true);
    digester.addRule("*/text", textRule);

    digester.addRule("*/text/textContent",
            new SetPropertiesRule(JRXmlConstants.ATTRIBUTE_truncateIndex, "textTruncateIndex"));

    /*   */
    digester.addFactoryCreate("*/text/font", JRPrintFontFactory.class.getName());
    digester.addSetNext("*/text/font", "setFont", JRFont.class.getName());

    digester.addRule("*/text/" + JRXmlConstants.ELEMENT_lineBreakOffsets, new TextLineBreakOffsetsRule());

    addFrameRules(digester);

    addHyperlinkParameterRules(digester);

    addGenericElementRules(digester);

    return digester;
}

From source file:ca.sqlpower.architect.ProjectLoader.java

protected Digester setupDigester() throws ParserConfigurationException, SAXException {
    Digester d = new Digester(new UnescapingSaxParser());
    final ArchitectSession messageOwner = (siblingSession == null ? session : siblingSession);
    d.setValidating(false);//from w  ww  .j av a2  s. co  m
    d.push(session);

    d.addRule("architect-enterprise-project", new Rule() {
        @Override
        public void begin(String namespace, String name, Attributes attributes) throws Exception {
            UserPrompter loadingWarningPrompt = messageOwner.createUserPrompter(
                    "This file contains an Enterprise project and can only\n"
                            + "be opened in the Architect Enterprise Edition.",
                    UserPromptType.BOOLEAN, UserPromptOptions.OK_CANCEL, UserPromptResponse.CANCEL,
                    UserPromptResponse.CANCEL, "Get Enterprise", "Cancel");
            UserPromptResponse upr = loadingWarningPrompt.promptUser();
            if (upr == UserPromptResponse.OK) {
                try {
                    BrowserUtil.launch("http://www.sqlpower.ca/page/architect-e");
                } catch (IOException e) {
                    throw new DigesterCancelledException();
                }
            }
            throw new DigesterCancelledException();
        }
    });

    //app version number
    d.addRule("architect-project", new Rule() {
        @Override
        public void begin(String namespace, String name, Attributes attributes) throws Exception {
            fileVersion = attributes.getValue("appversion");
            String loadingMessage;
            try {
                if (fileVersion == null) {
                    loadingMessage = "The version of the file cannot be found.";
                    fileVersion = "0";
                } else if (ArchitectVersion.APP_FULL_VERSION.compareTo(new ArchitectVersion(fileVersion)) < 0) {
                    loadingMessage = "This file was last saved with a newer version.\n"
                            + "Loading with an older version may cause data loss.";
                } else {
                    return;
                }
            } catch (Exception e) {
                loadingMessage = "The version of the file cannot be understood.";
            }
            UserPrompter loadingWarningPrompt = messageOwner.createUserPrompter(
                    loadingMessage + "\nDo you wish to try and open the file?", UserPromptType.BOOLEAN,
                    UserPromptOptions.OK_NOTOK_CANCEL, UserPromptResponse.OK, UserPromptResponse.OK,
                    "Try loading", "Upgrade...", "Cancel");
            UserPromptResponse response = loadingWarningPrompt.promptUser();
            if (response == UserPromptResponse.OK) {
                //continue to try loading
            } else if (response == UserPromptResponse.NOT_OK) {
                BrowserUtil.launch(SPSUtils.SQLP_ARCHITECT_URL);
                throw new DigesterCancelledException();
            } else if (response == UserPromptResponse.CANCEL) {
                throw new DigesterCancelledException();
            }
        }
    });

    // project name
    d.addCallMethod("architect-project/project-name", "setName", 0); // argument is element body text

    // source DB connection specs (deprecated in favour of project-data-sources; this is only here for backward compatibility)
    DBCSFactory dbcsFactory = new DBCSFactory();
    d.addFactoryCreate("architect-project/project-connection-specs/dbcs", dbcsFactory);
    d.addSetProperties("architect-project/project-connection-specs/dbcs",
            new String[] { "connection-name", "driver-class", "jdbc-url", "user-name", "user-pass",
                    "sequence-number", "single-login" },
            new String[] { "displayName", "driverClass", "url", "user", "pass", "seqNo", "singleLogin" });
    d.addCallMethod("architect-project/project-connection-specs/dbcs", "setName", 0);
    // these instances get picked out of the dbcsIdMap by the SQLDatabase factory

    // project data sources (replaces project connection specs)
    d.addFactoryCreate("architect-project/project-data-sources/data-source", dbcsFactory);
    d.addCallMethod("architect-project/project-data-sources/data-source/property", "put", 2);
    d.addCallParam("architect-project/project-data-sources/data-source/property", 0, "key");
    d.addCallParam("architect-project/project-data-sources/data-source/property", 1, "value");
    // for the project-data-sources, these instances get picked out of the dbcsIdMap by the SQLDatabase factory

    // but for the create kettle job settings, we add them explicitly

    // source database hierarchy
    d.addObjectCreate("architect-project/source-databases", LinkedList.class);
    d.addSetNext("architect-project/source-databases", "setSourceDatabaseList");

    SQLDatabaseFactory dbFactory = new SQLDatabaseFactory();
    d.addFactoryCreate("architect-project/source-databases/database", dbFactory);
    d.addSetProperties("architect-project/source-databases/database");
    d.addSetNext("architect-project/source-databases/database", "add");

    d.addObjectCreate("architect-project/source-databases/database/catalog", SQLCatalog.class);
    d.addSetProperties("architect-project/source-databases/database/catalog");
    d.addSetNext("architect-project/source-databases/database/catalog", "addChild");

    SQLSchemaFactory schemaFactory = new SQLSchemaFactory();
    d.addFactoryCreate("*/schema", schemaFactory);
    d.addSetProperties("*/schema");
    d.addSetNext("*/schema", "addChild");

    SQLTableFactory tableFactory = new SQLTableFactory();
    d.addFactoryCreate("*/table", tableFactory);
    d.addSetProperties("*/table");
    d.addCallMethod("*/remarks", "setRemarks", 0);
    d.addSetNext("*/table", "addChild");

    d.addFactoryCreate("*/folder", new SQLFolderFactory());

    SQLColumnFactory columnFactory = new SQLColumnFactory();
    d.addFactoryCreate("*/column", columnFactory);
    d.addSetProperties("*/column");
    d.addCallMethod("*/remarks", "setRemarks", 0);
    // this needs to be manually set last to prevent generic types
    // from overwriting database specific types

    // Old name (it has been updated to sourceDataTypeName)
    d.addCallMethod("*/column", "setSourceDataTypeName", 1);
    d.addCallParam("*/column", 0, "sourceDBTypeName");

    // new name
    d.addCallMethod("*/column", "setSourceDataTypeName", 1);
    d.addCallParam("*/column", 0, "sourceDataTypeName");
    d.addSetNext("*/column", "addChild");

    SQLRelationshipFactory relationshipFactory = new SQLRelationshipFactory();
    d.addFactoryCreate("*/relationship", relationshipFactory);
    d.addSetProperties("*/relationship");
    // the factory adds the relationships to the correct PK and FK tables

    ColumnMappingFactory columnMappingFactory = new ColumnMappingFactory();
    d.addFactoryCreate("*/column-mapping", columnMappingFactory);
    d.addSetProperties("*/column-mapping");
    d.addSetNext("*/column-mapping", "addChild");

    SQLIndexFactory indexFactory = new SQLIndexFactory();
    d.addFactoryCreate("*/index", indexFactory);
    d.addSetProperties("*/index");
    d.addSetNext("*/index", "addChild");

    SQLIndexColumnFactory indexColumnFactory = new SQLIndexColumnFactory();
    d.addFactoryCreate("*/index-column", indexColumnFactory);
    d.addSetProperties("*/index-column");
    d.addSetNext("*/index-column", "addChild");

    SQLExceptionFactory exceptionFactory = new SQLExceptionFactory();
    d.addFactoryCreate("*/sql-exception", exceptionFactory);
    d.addSetProperties("*/sql-exception");
    d.addSetNext("*/sql-exception", "setChildrenInaccessibleReason");

    TargetDBFactory targetDBFactory = new TargetDBFactory();
    // target database hierarchy
    d.addFactoryCreate("architect-project/target-database", targetDBFactory);
    d.addSetProperties("architect-project/target-database");

    DDLGeneratorFactory ddlgFactory = new DDLGeneratorFactory();
    d.addFactoryCreate("architect-project/ddl-generator", ddlgFactory);
    d.addSetProperties("architect-project/ddl-generator");
    d.addSetNext("architect-project/ddl-generator", "setDDLGenerator");

    LiquibaseSettingsFactory lbFactory = new LiquibaseSettingsFactory();
    d.addFactoryCreate("architect-project/liquibase-settings", lbFactory);
    d.addSetProperties("architect-project/liquibase-settings");
    d.addSetNext("architect-project/liquibase-settings", "setLiquibaseSettings");

    ProfileManagerFactory profileManagerFactory = new ProfileManagerFactory();
    d.addFactoryCreate("*/profiles", profileManagerFactory);
    d.addSetProperties("*/profiles");

    /*
     * Backward compatibility: the table and column profiles used to be
     * stored as siblings to each other, with the parent of a column result
     * being the last table result that was read.
     */
    ProfileResultFactory profileResultFactory = new ProfileResultFactory();
    d.addFactoryCreate("*/profiles/profile-result", profileResultFactory);
    /*
     * backward compatibility: the exception property used to be a boolean, and now it's an actual exception.
     * this causes an IllegalArgumentException when parsing old files.
     * this workaround tells the digester not to auto-map the exception property.
     */
    d.addRule("*/profiles/profile-result",
            new SetPropertiesRule(new String[] { "exception" }, new String[] {}));
    d.addSetNext("*/profiles/profile-result", "loadResult");

    d.addFactoryCreate("*/profiles/table-profile-result", new TableProfileResultFactory());
    d.addRule("*/profiles/table-profile-result",
            new SetPropertiesRule(new String[] { "exception" }, new String[] {}));
    d.addSetNext("*/profiles/table-profile-result", "addTableProfileResult");

    d.addFactoryCreate("*/profiles/table-profile-result/column-profile-result",
            new ColumnProfileResultFactory());
    d.addRule("*/profiles/table-profile-result/column-profile-result",
            new SetPropertiesRule(new String[] { "exception" }, new String[] {}));
    d.addSetNext("*/profiles/table-profile-result/column-profile-result", "addColumnProfileResult");

    ProfileResultValueFactory profileResultValueFactory = new ProfileResultValueFactory();
    d.addFactoryCreate("*/profiles/table-profile-result/column-profile-result/avgValue",
            profileResultValueFactory);
    d.addSetNext("*/profiles/table-profile-result/column-profile-result/avgValue", "setAvgValue");
    d.addFactoryCreate("*/profiles/table-profile-result/column-profile-result/minValue",
            profileResultValueFactory);
    d.addSetNext("*/profiles/table-profile-result/column-profile-result/minValue", "setMinValue");
    d.addFactoryCreate("*/profiles/table-profile-result/column-profile-result/maxValue",
            profileResultValueFactory);
    d.addSetNext("*/profiles/table-profile-result/column-profile-result/maxValue", "setMaxValue");

    ProfileResultTopNValueFactory topNValueFactory = new ProfileResultTopNValueFactory();
    d.addFactoryCreate("*/profiles/table-profile-result/column-profile-result/topNvalue", topNValueFactory);
    d.addSetNext("*/profiles/table-profile-result/column-profile-result/topNvalue", "addValueCount");

    FileFactory fileFactory = new FileFactory();
    d.addFactoryCreate("*/file", fileFactory);
    d.addSetNext("*/file", "setFile");

    return d;
}

From source file:org.ajax4jsf.renderkit.compiler.HtmlCompiler.java

/**
 * Build custom rules for parse special tags and attributes.
 * For most tags, value can be in next forms ( for resource, preffixed with f: ):
 * <ul>/*from w w w.  jav  a 2 s.  co  m*/
 * <li><b>value</b> as string or EL-expression</li>
 * <li><b>property</b> name for property of current component</li>
 * <li><b>baseSkin</b> name for property of base skin</li>
 * <li><b>skin</b> name for property of current skin</li>
 * <li><b>context</b> name for property of {@link TemplateContext} for trmplate encoding</li>
 * <li><b>default</b> use as value if main property <code>null</code></li>
 * </ul>
 * Supported :
 * <ul>
 * <li>Call renderer or utils method &lt;f:call name='xxx'  /&gt;</li>
 * <li>Call  method parameter &lt;f:parameter name='xxx'  (value='....' | property='style' | baseSkin='paramName' | skin='paramName' | context='propertyName ) /&gt;</li>
 * <li>Encode plain text &lt;f:verbatim [value='....' | property='style' | baseSkin='paramName' | skin='paramName' | context='propertyName ] &gt;Some Text&lt;/f:text&gt;</li>
 * <li>Encode as text in HTML CSS parameter format &lt;u:style name='background' (value='....' | property='style' | baseSkin='paramName' | skin='paramName' | context='propertyName )/&gt;</li>
 * <li>Get and encode resource &lt;f:resource f:key='images/spacer.gif' [ ... any attributes ... ] /&gt;</li>
 * <li>Encode custom attribute &lt;f:attribute name='style' (value='....' | property='style' | baseSkin='paramName' | skin='paramName' | context='propertyName )  [endorsed='true'] /&gt;</li>
 * <li>Template breakpoint &lt;f:break name='xxxxx'  /&gt;</li>
 * <li>Encode named facet &lt;u:facet ( name='head  | property='style' | baseSkin='paramName' | skin='paramName' | context='propertyName )' /&gt;</li>
 * <li>Encode children components for current &lt;u:children /&gt;</li>
 * <li>Encode one child component for enclosed u:facet or u:children  &lt;u:child /'&gt;</li>
 * </ul>
 * @param digestr
 */
protected void setCustomRules(Digester digestr) {
    // Root element. not instantiate - already set by compile method.
    String pattern = NS_PREFIX + ROOT_TAG;
    digestr.addSetProperties(pattern);
    // call renderer method <f:call methodName='xxx' [methodParam='yyy'] />
    pattern = ANY_PARENT + NS_PREFIX + CALL_TAG;
    digestr.addObjectCreate(pattern, MethodCallElement.class);
    digestr.addSetNext(pattern, CHILD_METHOD);
    digestr.addSetProperties(pattern);
    // for value of parent call renderer method <f:valueCall methodName='xxx' [methodParam='yyy'] />
    pattern = ANY_PARENT + NS_PREFIX + VALUE_CALL_TAG;
    digestr.addObjectCreate(pattern, ValueMethodCallElement.class);
    digestr.addSetNext(pattern, CHILD_METHOD);
    digestr.addSetProperties(pattern);
    // call parameter <f:parapeter methodName='xxx' [methodParam='yyy'] />      
    //      pattern = ANY_PARENT+NS_PREFIX+CALL_TAG+"/"+NS_PREFIX+CALL_PARAM_TAG;
    pattern = ANY_PARENT + NS_PREFIX + CALL_PARAM_TAG;
    digestr.addObjectCreate(pattern, MethodParameterElement.class);
    digestr.addSetNext(pattern, CHILD_PARAM_METHOD);
    digestr.addSetProperties(pattern);
    // Encode plain text <f:text>Some Text</f:text>
    pattern = ANY_PARENT + NS_PREFIX + VERBATUM_TAG;
    digestr.addObjectCreate(pattern, TextElement.class);
    digestr.addSetNext(pattern, CHILD_METHOD);
    digestr.addSetProperties(pattern);
    digestr.addBeanPropertySetter(pattern, "text");
    // resource <f:resource f:key='images/spacer.gif' [f:data='...'] [ ... any attributes ... ] />
    pattern = ANY_PARENT + NS_PREFIX + RESOURCE_TAG;
    digestr.addObjectCreate(pattern, ResourceElement.class);
    digestr.addSetNext(pattern, CHILD_METHOD);
    {
        Rule rule = new PutAttributesRule(digestr, new String[] { NS_PREFIX + "key", NS_PREFIX + "property",
                NS_PREFIX + "baseSkin", NS_PREFIX + "skin", NS_PREFIX + "context" });
        digestr.addRule(pattern, rule);
    }
    {
        SetPropertiesRule rule = new SetPropertiesRule(
                new String[] { NS_PREFIX + "key", NS_PREFIX + "property", NS_PREFIX + "baseSkin",
                        NS_PREFIX + "skin", NS_PREFIX + "context" },
                new String[] { "value", "property", "baseSkin", "skin", "context" });
        digestr.addRule(pattern, rule);
    }
    // custom attribute <f:attribute name='style' (value='....' | property='style' | skin='paramName' | call='methodName' | utilCall='methodName') [notNull='true'] />
    pattern = ANY_PARENT + NS_PREFIX + ATTRIBUTE_TAG;
    digestr.addObjectCreate(pattern, AttributeElement.class);
    digestr.addSetNext(pattern, CHILD_METHOD);
    digestr.addSetProperties(pattern);
    // component clientId <f:id [f:required='true'] />
    // breakpoint <f:break name="name">
    pattern = ANY_PARENT + NS_PREFIX + BREAK_TAG;
    digestr.addObjectCreate(pattern, BreakPoint.class);
    digestr.addSetProperties(pattern);
    digestr.addSetNext(pattern, CHILD_METHOD);
    // conditional rendering  <f:if then="true">
    pattern = ANY_PARENT + NS_PREFIX + IF_TAG;
    digestr.addObjectCreate(pattern, IfElement.class);
    digestr.addSetProperties(pattern);
    digestr.addSetNext(pattern, CHILD_METHOD);
    // resources import <f:importResource src="...">
    pattern = ANY_PARENT + NS_PREFIX + IMPORT_RESOURCE_TAG;
    digestr.addFactoryCreate(pattern, new AbstractObjectCreationFactory() {

        public Object createObject(Attributes attributes) throws Exception {

            if (attributes == null) {
                throw new IllegalArgumentException("Attributes set is null for " + IMPORT_RESOURCE_TAG
                        + " element. Can not obtain required 'src' attribute!");
            }

            String value = attributes.getValue("src");
            if (value == null || value.length() == 0) {
                throw new IllegalArgumentException(
                        "Missing required 'src' attribute for " + IMPORT_RESOURCE_TAG + " element!");
            }

            return new ImportResourceElement(value);
        }

    });
    digestr.addSetNext(pattern, CHILD_METHOD);
    // facet <u:insertFacet name="name">
    pattern = ANY_PARENT + NS_UTIL_PREFIX + FACET_TAG;
    digestr.addObjectCreate(pattern, FacetElement.class);
    digestr.addSetProperties(pattern);
    digestr.addSetNext(pattern, CHILD_METHOD);

    // childrens <u:insertChildren>
    pattern = ANY_PARENT + NS_UTIL_PREFIX + CHILDREN_TAG;
    digestr.addObjectCreate(pattern, ChildrensElement.class);
    digestr.addSetNext(pattern, CHILD_METHOD);
    //      {
    //         Rule rule = new PutAttributesRule(digestr,new String[]{NS_PREFIX+"key",NS_PREFIX+"property",NS_PREFIX+"skin",NS_PREFIX+"context"});
    //         digestr.addRule(pattern,rule);
    //         }
    {
        SetPropertiesRule rule = new SetPropertiesRule(new String[] { NS_PREFIX + "key", NS_PREFIX + "property",
                NS_PREFIX + "skin", NS_PREFIX + "context" },
                new String[] { "value", "property", "skin", "context" });
        digestr.addRule(pattern, rule);
    }

    // style(sheet) property <u:style>
    pattern = ANY_PARENT + NS_UTIL_PREFIX + STYLE_TAG;
    digestr.addObjectCreate(pattern, ClassElement.class);
    digestr.addSetProperties(pattern);
    digestr.addSetNext(pattern, CHILD_METHOD);
    // breakpoint <f:break name="name">
    pattern = ANY_PARENT + NS_UTIL_PREFIX + CHILD_TAG;
    digestr.addObjectCreate(pattern, ChildElement.class);
    digestr.addSetProperties(pattern);
    digestr.addSetNext(pattern, CHILD_METHOD);

    //Selector element <u:selector></u:selector>
    pattern = ANY_PARENT + NS_UTIL_PREFIX + SELECTOR_TAG;
    digestr.addObjectCreate(pattern, SelectorElement.class);
    digestr.addSetProperties(pattern);
    digestr.addSetNext(pattern, CHILD_METHOD);
}