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

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

Introduction

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

Prototype

AbstractObjectCreationFactory

Source Link

Usage

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   ww  w  . j  a va2  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);
}

From source file:org.eclipse.wb.internal.core.model.description.helpers.ComponentDescriptionHelper.java

/**
 * Adds {@link Rule}'s for parsing {@link CreationDescription}'s.
 *///from w w  w .  j  a  v a2s .c  om
private static void addCreationRules(Digester digester, final ILoadingContext context, String basePattern,
        String setCreationMethod) {
    digester.addFactoryCreate(basePattern, new AbstractObjectCreationFactory() {
        @Override
        public Object createObject(Attributes attributes) throws Exception {
            ComponentDescription componentDescription = (ComponentDescription) getDigester().peek();
            // prepare creation
            String id = attributes.getValue("id");
            String name = attributes.getValue("name");
            CreationDescription creation = new CreationDescription(componentDescription, id, name);
            // set optional specific icon
            if (id != null) {
                Class<?> componentClass = componentDescription.getComponentClass();
                String suffix = "_" + id;
                creation.setIcon(DescriptionHelper.getIconImage(context, componentClass, suffix));
            }
            // OK, configured creation
            return creation;
        }
    });
    digester.addSetNext(basePattern, setCreationMethod);
    // description
    {
        String pattern = basePattern + "/description";
        digester.addCallMethod(pattern, "setDescription", 1);
        digester.addCallParam(pattern, 0);
    }
    // source
    {
        String pattern = basePattern + "/source";
        digester.addCallMethod(pattern, "setSource", 1);
        digester.addCallParam(pattern, 0);
    }
    // invocation
    {
        String pattern = basePattern + "/invocation";
        digester.addRule(pattern, new ObjectCreateRule(CreationInvocationDescription.class));
        digester.addRule(pattern, new SetListedPropertiesRule(new String[] { "signature" }));
        // arguments
        digester.addCallMethod(pattern, "setArguments", 1);
        digester.addCallParam(pattern, 0);
        // add
        digester.addSetNext(pattern, "addInvocation");
    }
    // untyped parameters
    {
        String pattern = basePattern + "/parameter";
        digester.addCallMethod(pattern, "addParameter", 2);
        digester.addCallParam(pattern, 0, "name");
        digester.addCallParam(pattern, 1);
    }
}

From source file:org.eclipse.wb.internal.core.xml.model.description.ComponentDescriptionHelper.java

/**
 * Adds {@link Rule}'s for parsing {@link CreationDescription}'s.
 */// www  . j  ava  2  s . com
private static void addCreationRules(Digester digester, final EditorContext context, String basePattern,
        String setCreationMethod) {
    digester.addFactoryCreate(basePattern, new AbstractObjectCreationFactory() {
        @Override
        public Object createObject(Attributes attributes) throws Exception {
            ComponentDescription componentDescription = (ComponentDescription) getDigester().peek();
            // prepare creation
            String id = attributes.getValue("id");
            String name = attributes.getValue("name");
            CreationDescription creation = new CreationDescription(componentDescription, id, name);
            // set optional specific icon
            if (id != null) {
                Class<?> componentClass = componentDescription.getComponentClass();
                String suffix = "_" + id;
                Image icon = getIcon(context, componentClass, suffix);
                creation.setIcon(icon);
            }
            // OK, configured creation
            return creation;
        }
    });
    digester.addSetNext(basePattern, setCreationMethod);
    // description
    {
        String pattern = basePattern + "/description";
        digester.addCallMethod(pattern, "setDescription", 1);
        digester.addCallParam(pattern, 0);
    }
    // attribute
    {
        String pattern = basePattern + "/x-attribute";
        digester.addFactoryCreate(pattern, new AbstractObjectCreationFactory() {
            @Override
            public Object createObject(Attributes attributes) throws Exception {
                String space = attributes.getValue("ns");
                String name = attributes.getValue("name");
                String value = attributes.getValue("value");
                return new CreationAttributeDescription(space, name, value);
            }
        });
        digester.addSetNext(pattern, "addAttribute");
    }
    // content
    {
        String pattern = basePattern + "/x-content";
        digester.addCallMethod(pattern, "setContent", 1);
        digester.addCallParam(pattern, 0);
    }
    // untyped parameters
    {
        String pattern = basePattern + "/parameter";
        digester.addCallMethod(pattern, "addParameter", 2);
        digester.addCallParam(pattern, 0, "name");
        digester.addCallParam(pattern, 1);
    }
}

From source file:org.kineticsystem.commons.data.model.parser.conversions.ConversionsParser.java

/** Default constructor. */
public ConversionsParser() {

    // Instantiate the parser to read the xml file.

    digester = new Digester();
    digester.setValidating(false);//from w w w . j  av  a 2 s.  c  o  m

    // Configure the parser.

    final AbstractObjectCreationFactory eventFactory = new AbstractObjectCreationFactory() {

        public Object createObject(Attributes attributes) throws Exception {

            String typeAttr = attributes.getValue("type");
            String x = attributes.getValue("x");
            String y = attributes.getValue("y");

            int type = ActiveListEvent.INTERVAL_ADDED;

            if (typeAttr.equals("add")) {
                type = ActiveListEvent.INTERVAL_ADDED;
            } else if (typeAttr.equals("del")) {
                type = ActiveListEvent.INTERVAL_REMOVED;
            } else if (typeAttr.equals("mod")) {
                type = ActiveListEvent.CONTENTS_CHANGED;
            }

            ActiveListEvent event = new ActiveListEvent(this);
            event.setType(type);
            event.setX(Integer.parseInt(x));
            event.setY(Integer.parseInt(y));

            return event;
        }
    };

    digester.addObjectCreate("document", ConversionsDocument.class);

    digester.addObjectCreate("document/conversions", Conversions.class);

    digester.addObjectCreate("document/conversions/conversion", Conversion.class);

    digester.addObjectCreate("document/conversions/conversion/input-sequence", EventSequence.class);

    digester.addObjectCreate("document/conversions/conversion/output-sequence", EventSequence.class);

    digester.addFactoryCreate("document/conversions/conversion/input-sequence/event", eventFactory);

    digester.addFactoryCreate("document/conversions/conversion/output-sequence/event", eventFactory);

    digester.addSetNext("document/conversions", "setConversions");

    digester.addSetNext("document/conversions/conversion/input-sequence/event", "add");

    digester.addSetNext("document/conversions/conversion/output-sequence/event", "add");

    digester.addSetNext("document/conversions/conversion/input-sequence", "setInputSequence");

    digester.addSetNext("document/conversions/conversion/output-sequence", "setOutputSequence");

    digester.addSetNext("document/conversions/conversion", "add");
}