Example usage for org.apache.commons.digester3 Digester addCallMethod

List of usage examples for org.apache.commons.digester3 Digester addCallMethod

Introduction

In this page you can find the example usage for org.apache.commons.digester3 Digester addCallMethod.

Prototype

public void addCallMethod(String pattern, String methodName, int paramCount) 

Source Link

Document

Add an "call method" rule for the specified parameters.

Usage

From source file:eu.scape_project.planning.xml.PlanParser.java

/**
 * Create a rule for parsing an element for the given location
 * <code>pattern</code>, write it the XML as binary data, and use the
 * <code>dataSetterMethod</code> to set the data in the parent.
 * //from  w w w.jav a  2s . co  m
 * @param digester
 *            the digester
 * @param pattern
 *            the location pattern
 * @param dataMethod
 *            a method name of the parent object that will be called to set
 *            the binary data or null to use XMLDataWrapper's default
 * @throws ParserConfigurationException
 *             if the digester could not be configured
 */
private static void addCreateXMLData(final Digester digester, final String pattern, String dataMethod,
        String changeLogMethod) throws ParserConfigurationException {

    // 1. Create a XMLDataWrapper
    digester.addObjectCreate(pattern, XMLDataWrapper.class);

    if (changeLogMethod != null) {
        // 6. Finally call setChangeLog on the XMLDataWrapper on top with
        // the object next to top as argument.
        digester.addSetTop(pattern, "setChangeLog");
        // 5. Set change log setter method on XMLDataWrapper
        digester.addCallMethod(pattern, "setChangeLogMethodName", 1);
        digester.addObjectParam(pattern, 0, changeLogMethod);
    }

    // 4. Finally call setData on the XMLDataWrapper on top with the
    // object next to top as argument.
    digester.addSetTop(pattern, "setData");
    // 3. Set data setter method on XMLDataWrapper
    if (dataMethod != null) {
        digester.addCallMethod(pattern, "setMethodName", 1);
        digester.addObjectParam(pattern, 0, dataMethod);
    }
    // 2. Create element from XML and set the element in the XMLDataWrapper
    NodeCreateRule nodeCreateRule = new NodeCreateRule();
    digester.addRule(pattern, nodeCreateRule);
    digester.addSetNext(pattern, "setEncoded");

}

From source file:eu.scape_project.planning.xml.TreeLoader.java

private MindMap loadFreeMindMap(InputStream in) {
    try {//from  w  ww .j av a 2  s .c  om
        MindMap map = new MindMap();
        SAXParserFactory f = SAXParserFactory.newInstance();
        SAXParser parser = f.newSAXParser();

        //            SAXParser parser = validatingParserFactory.getValidatingParser();
        //            parser.setProperty(ValidatingParserFactory.JAXP_SCHEMA_SOURCE,
        //                "http://freemind.sourceforge.net/freemind.xsd");
        // load content into temporary structure
        Digester digester = new Digester(parser);
        //            digester.setEntityResolver(new SchemaResolver().addSchemaLocation(
        //                "http://freemind.sourceforge.net/freemind.xsd", "data/schemas/freemind.xsd"));
        //            digester.setErrorHandler(new StrictErrorHandler());

        digester.push(map);

        digester.addObjectCreate("*/node", "eu.scape_project.planning.xml.freemind.Node");
        digester.addSetProperties("*/node");
        digester.addCallMethod("*/node/hook/text", "setDESCRIPTION", 0);
        digester.addSetNext("*/node", "addChild");

        digester.setUseContextClassLoader(true);
        digester.parse(in);
        return map;
    } catch (IOException e) {
        log.error("Error loading Freemind file.", e);
    } catch (SAXException e) {
        log.error("Document is not a valid Freemind file.", e);
    } catch (ParserConfigurationException e) {
        log.error("Parser not properly configured.", e);
    }
    return null;
}

From source file:br.univali.celine.scorm.model.cam.ContentPackageReader20043rd.java

protected void addConditionRule(Digester d, String tagCondition, String metodoAdd) {
    d.addObjectCreate(tagCondition, SequencingRule.class);
    d.addSetNext(tagCondition, metodoAdd);

    // <ruleConditions>
    d.addSetProperties(tagCondition + "/ruleConditions");

    d.addObjectCreate(tagCondition + "/ruleConditions/ruleCondition", RuleCondition.class);
    d.addSetNext(tagCondition + "/ruleConditions/ruleCondition", "addRuleCondition");
    d.addSetProperties(tagCondition + "/ruleConditions/ruleCondition");

    // <ruleAction>
    d.addCallMethod(tagCondition + "/ruleAction", "setRuleAction", 1);
    d.addCallParam(tagCondition + "/ruleAction", 0, "action");
}

From source file:com.w20e.socrates.factories.XMLQuestionnaireFactory.java

/**
 * Create a new Digester for the instance. This should ALWAYS happen for
 * each parse... Seriously!// w ww.  j av a 2 s  . co m
 * 
 * @return the digester
 */
private Digester createInstanceDigester() {

    Digester dig = new Digester();

    NodeFactory nodeFactory = new NodeFactory();
    PropertiesFactory propsFactory = new PropertiesFactory();
    ExpressionFactory exprFactory = new ExpressionFactory();
    SurveyFactory surveyFactory = new SurveyFactory();

    dig.addFactoryCreate("survey", surveyFactory);
    dig.addSetProperties("survey");

    // dig.addRule("*/var", nodeCreateRule);
    // dig.addCallParam( "*/var", 0, "name");
    // dig.addCallParam( "*/var", 1);
    dig.addFactoryCreate("*/var", nodeFactory);
    dig.addCallMethod("*/var", "setValue", 1);
    dig.addCallParam("*/var", 0);
    dig.addSetNext("*/var", "addNode", "com.w20e.socrates.model.NodeImpl");

    // dig.addObjectCreate("*/vargroup", Node.class);
    // dig.addSetNext("*/var", "addNode");

    dig.addFactoryCreate("*/model/properties", propsFactory);
    dig.addSetNext("*/model/properties", "addProperties", "com.w20e.socrates.model.ItemPropertiesImpl");

    dig.addCallMethod("*/model/properties/bind", "addBind", 1);
    dig.addCallParam("*/model/properties/bind", 0);

    Rule exprRule = new ExpressionCreateRule(exprFactory);

    dig.addRule("*/properties/required", exprRule);
    dig.addCallMethod("*/properties/required", "setExpr", 1);
    dig.addCallParam("*/properties/required", 0);

    dig.addRule("*/properties/relevant", exprRule);
    dig.addCallMethod("*/properties/relevant", "setExpr", 1);
    dig.addCallParam("*/properties/relevant", 0);

    dig.addRule("*/properties/readonly", exprRule);
    dig.addCallMethod("*/properties/readonly", "setExpr", 1);
    dig.addCallParam("*/properties/readonly", 0);

    dig.addRule("*/properties/calculate", exprRule);
    dig.addCallMethod("*/properties/calculate", "setExpr", 1);
    dig.addCallParam("*/properties/calculate", 0);

    dig.addRule("*/properties/constraint", exprRule);
    dig.addCallMethod("*/properties/constraint", "setExpr", 1);
    dig.addCallParam("*/properties/constraint", 0);

    dig.addRule("*/properties/datatype", exprRule);
    dig.addCallMethod("*/properties/datatype", "setExpr", 1);
    dig.addCallParam("*/properties/datatype", 0);

    dig.addRule("*/properties/default", exprRule);
    dig.addCallMethod("*/properties/default", "setExpr", 1);
    dig.addCallParam("*/properties/default", 0);

    return dig;
}

From source file:com.w20e.socrates.factories.XMLQuestionnaireFactory.java

/**
 * Create a new Digester for the instance. This should ALWAYS happen for
 * each parse... Really!/*  w w  w. j a v  a2 s  . c  o m*/
 * 
 * @return the digester
 */
private Digester createRenderingDigester(Configuration cfg) {

    GroupFactory groupFactory = new GroupFactory();
    ControlFactory controlFactory = new ControlFactory(cfg);
    OptionsFactory optionsFactory = new OptionsFactory();
    TranslatableFactory labelFactory = new TranslatableFactory();

    Digester dig = new Digester();

    dig.addObjectCreate("survey/layout", RenderConfigImpl.class);

    dig.addObjectCreate("*/layout/optionset", "com.w20e.socrates.rendering.OptionList");
    dig.addSetProperties("*/layout/optionset");
    dig.addSetNext("*/layout/optionset", "addOptionList");

    dig.addFactoryCreate("*/group", groupFactory);
    dig.addSetNext("*/group", "addItem", "com.w20e.socrates.rendering.Group");

    dig.addObjectCreate("*/text", "com.w20e.socrates.rendering.TextBlock");
    dig.addSetProperties("*/text");
    dig.addSetNext("*/text", "addItem", "com.w20e.socrates.rendering.TextBlock");
    dig.addCallMethod("*/text", "setText", 1);
    dig.addCallParam("*/text", 0);

    dig.addObjectCreate("*/select",
            cfg.getString("layout.controlclasses.select", "com.w20e.socrates.rendering.Select"));
    dig.addSetProperties("*/select");
    dig.addSetNext("*/select", "addItem");

    dig.addObjectCreate("*/input",
            cfg.getString("layout.controlclasses.select", "com.w20e.socrates.rendering.Input"));
    dig.addSetProperties("*/input");
    dig.addSetNext("*/input", "addItem");

    dig.addObjectCreate("*/hidden",
            cfg.getString("layout.controlclasses.hidden", "com.w20e.socrates.rendering.Hidden"));
    dig.addSetProperties("*/hidden");
    dig.addSetNext("*/hidden", "addItem");

    dig.addObjectCreate("*/checkbox",
            cfg.getString("layout.controlclasses.checkbox", "com.w20e.socrates.rendering.Checkbox"));
    dig.addSetProperties("*/checkbox");
    dig.addSetNext("*/checkbox", "addItem");

    dig.addObjectCreate("*/textarea",
            cfg.getString("layout.controlclasses.textarea", "com.w20e.socrates.rendering.Input"));
    dig.addSetProperties("*/textarea");
    dig.addSetNext("*/textarea", "addItem");

    dig.addObjectCreate("*/date",
            cfg.getString("layout.controlclasses.date", "com.w20e.socrates.rendering.Date"));
    dig.addSetProperties("*/date");
    dig.addSetNext("*/date", "addItem");

    dig.addObjectCreate("*/range",
            cfg.getString("layout.controlclasses.range", "com.w20e.socrates.rendering.Range"));
    dig.addSetProperties("*/range");
    dig.addSetNext("*/range", "addItem");

    dig.addFactoryCreate("*/control", controlFactory);
    dig.addSetProperties("*/control");
    dig.addSetNext("*/control", "addItem");

    dig.addObjectCreate("*/option", "com.w20e.socrates.rendering.Option");
    dig.addSetProperties("*/option");
    dig.addSetNext("*/option", "addOption", "com.w20e.socrates.rendering.Option");

    dig.addFactoryCreate("*/select/optionset", optionsFactory);
    dig.addSetNext("*/select/optionset", "setOptions");

    dig.addFactoryCreate("*/label", labelFactory);
    dig.addSetNext("*/label", "setLabel");
    dig.addCallMethod("*/label", "setText", 1);
    dig.addCallParam("*/label", 0);

    dig.addFactoryCreate("*/hint", labelFactory);
    dig.addSetNext("*/hint", "setHint");
    dig.addCallMethod("*/hint", "setText", 1);
    dig.addCallParam("*/hint", 0);

    dig.addFactoryCreate("*/help", labelFactory);
    dig.addSetNext("*/help", "setHelp");
    dig.addCallMethod("*/help", "setText", 1);
    dig.addCallParam("*/help", 0);

    dig.addFactoryCreate("*/alert", labelFactory);
    dig.addSetNext("*/alert", "setAlert");
    dig.addCallMethod("*/alert", "setText", 1);
    dig.addCallParam("*/alert", 0);

    dig.addCallMethod("*/property", "setProperty", 2);
    dig.addCallParam("*/property", 0, "name");
    dig.addCallParam("*/property", 1);

    return dig;
}

From source file:eu.scape_project.planning.xml.PlanParser.java

/**
 * Adds rules to the digester to parse the a plan XML.
 * /*from   w w  w.ja  v  a 2  s .co  m*/
 * @param digester
 *            the digester
 * @throws ParserConfigurationException
 *             if an error occurred
 */
private static void addRules(Digester digester) throws ParserConfigurationException {

    ConvertUtils.register(new EnumConverter<EvaluationScope>(EvaluationScope.class), EvaluationScope.class);
    // start with a new file
    digester.addObjectCreate("*/plan", Plan.class);
    digester.addSetProperties("*/plan");
    digester.addSetRoot("*/plan", "setProject");

    digester.addFactoryCreate("*/changelog", ChangeLogFactory.class);
    digester.addSetNext("*/changelog", "setChangeLog");

    digester.addObjectCreate("*/plan/properties", PlanProperties.class);
    digester.addSetProperties("*/plan/properties");
    digester.addSetNext("*/plan/properties", "setPlanProperties");
    digester.addCallMethod("*/plan/properties/description", "setDescription", 0);
    digester.addCallMethod("*/plan/properties/owner", "setOwner", 0);

    digester.addFactoryCreate("*/plan/properties/state", PlanStateFactory.class);
    digester.addSetNext("*/plan/properties/state", "setState");

    PlanParser.addCreateUpload(digester, "*/plan/properties/report", "setReportUpload", DigitalObject.class);

    digester.addObjectCreate("*/plan/basis", ProjectBasis.class);
    digester.addSetProperties("*/plan/basis");
    digester.addSetNext("*/plan/basis", "setProjectBasis");
    digester.addCallMethod("*/plan/basis/applyingPolicies", "setApplyingPolicies", 0);
    digester.addCallMethod("*/plan/basis/designatedCommunity", "setDesignatedCommunity", 0);
    digester.addCallMethod("*/plan/basis/mandate", "setMandate", 0);

    digester.addCallMethod("*/plan/basis/documentTypes", "setDocumentTypes", 0);
    digester.addCallMethod("*/plan/basis/identificationCode", "setIdentificationCode", 0);
    digester.addCallMethod("*/plan/basis/organisationalProcedures", "setOrganisationalProcedures", 0);
    digester.addCallMethod("*/plan/basis/planningPurpose", "setPlanningPurpose", 0);
    digester.addCallMethod("*/plan/basis/planRelations", "setPlanRelations", 0);
    digester.addCallMethod("*/plan/basis/preservationRights", "setPreservationRights", 0);
    digester.addCallMethod("*/plan/basis/referenceToAgreements", "setReferenceToAgreements", 0);

    // define common rule for triggers, for all */triggers/...!
    // also used for PlanDefinition
    digester.addObjectCreate("*/triggers", TriggerDefinition.class);
    digester.addSetNext("*/triggers", "setTriggers");
    // every time a */triggers/trigger is encountered:
    digester.addFactoryCreate("*/triggers/trigger", TriggerFactory.class);
    digester.addSetNext("*/triggers/trigger", "setTrigger");

    //
    // Policy Tree
    //
    digester.addObjectCreate("*/plan/basis/policyTree", PolicyTree.class);
    digester.addSetProperties("*/plan/basis/policyTree");
    digester.addSetNext("*/plan/basis/policyTree", "setPolicyTree");

    digester.addObjectCreate("*/plan/basis/policyTree/policyNode", PolicyNode.class);
    digester.addSetProperties("*/plan/basis/policyTree/policyNode");
    digester.addSetNext("*/plan/basis/policyTree/policyNode", "setRoot");

    digester.addObjectCreate("*/policyNode/policyNode", PolicyNode.class);
    digester.addSetProperties("*/policyNode/policyNode");
    digester.addSetNext("*/policyNode/policyNode", "addChild");

    digester.addObjectCreate("*/policyNode/policy", Policy.class);
    digester.addSetProperties("*/policyNode/policy");
    digester.addSetNext("*/policyNode/policy", "addChild");

    //
    // Sample Records
    //

    digester.addObjectCreate("*/plan/sampleRecords", SampleRecordsDefinition.class);
    digester.addSetProperties("*/plan/sampleRecords");
    digester.addSetNext("*/plan/sampleRecords", "setSampleRecordsDefinition");

    digester.addCallMethod("*/plan/sampleRecords/samplesDescription", "setSamplesDescription", 0);

    // - records
    digester.addObjectCreate("*/record", SampleObject.class);
    digester.addSetProperties("*/record");
    digester.addSetNext("*/record", "addRecord");

    digester.addCallMethod("*/record/description", "setDescription", 0);
    digester.addCallMethod("*/record/originalTechnicalEnvironment", "setOriginalTechnicalEnvironment", 0);

    digester.addObjectCreate("*/record/data", BinaryDataWrapper.class);
    digester.addSetTop("*/record/data", "setData");
    digester.addCallMethod("*/record/data", "setFromBase64Encoded", 0);

    // set up an general rule for all jhove strings!
    digester.addObjectCreate("*/jhoveXML", BinaryDataWrapper.class);
    digester.addSetTop("*/jhoveXML", "setString");
    digester.addCallMethod("*/jhoveXML", "setFromBase64Encoded", 0);
    digester.addCallMethod("*/jhoveXML", "setMethodName", 1, new String[] { "java.lang.String" });
    digester.addObjectParam("*/jhoveXML", 0, "setJhoveXMLString");

    // set up general rule for all fitsXMLs
    digester.addObjectCreate("*/fitsXML", BinaryDataWrapper.class);
    digester.addSetTop("*/fitsXML", "setString");
    digester.addCallMethod("*/fitsXML", "setFromBase64Encoded", 0);
    digester.addCallMethod("*/fitsXML", "setMethodName", 1, new String[] { "java.lang.String" });
    digester.addObjectParam("*/fitsXML", 0, "setFitsXMLString");

    digester.addObjectCreate("*/formatInfo", FormatInfo.class);
    digester.addSetProperties("*/formatInfo");
    digester.addSetNext("*/formatInfo", "setFormatInfo");

    PlanParser.addCreateUpload(digester, "*/record/xcdlDescription", "setXcdlDescription",
            XcdlDescription.class);

    // - collection profile
    digester.addObjectCreate("*/plan/sampleRecords/collectionProfile", CollectionProfile.class);
    digester.addSetProperties("*/plan/sampleRecords/collectionProfile");
    digester.addSetNext("*/plan/sampleRecords/collectionProfile", "setCollectionProfile");

    digester.addCallMethod("*/plan/sampleRecords/collectionProfile/collectionID", "setCollectionID", 0);
    digester.addCallMethod("*/plan/sampleRecords/collectionProfile/description", "setDescription", 0);
    digester.addCallMethod("*/plan/sampleRecords/collectionProfile/numberOfObjects", "setNumberOfObjects", 0);
    digester.addCallMethod("*/plan/sampleRecords/collectionProfile/typeOfObjects", "setTypeOfObjects", 0);
    digester.addCallMethod("*/plan/sampleRecords/collectionProfile/expectedGrowthRate", "setExpectedGrowthRate",
            0);
    digester.addCallMethod("*/plan/sampleRecords/collectionProfile/retentionPeriod", "setRetentionPeriod", 0);
    PlanParser.addCreateUpload(digester, "*/plan/sampleRecords/collectionProfile/profile", "setProfile",
            DigitalObject.class);

    // requirements definition
    digester.addObjectCreate("*/plan/requirementsDefinition", RequirementsDefinition.class);
    digester.addSetProperties("*/plan/requirementsDefinition");
    digester.addSetNext("*/plan/requirementsDefinition", "setRequirementsDefinition");

    digester.addCallMethod("*/plan/requirementsDefinition/description", "setDescription", 0);

    // - uploads
    digester.addObjectCreate("*/plan/requirementsDefinition/uploads", ArrayList.class);
    digester.addSetNext("*/plan/requirementsDefinition/uploads", "setUploads");
    PlanParser.addCreateUpload(digester, "*/plan/requirementsDefinition/uploads/upload", "add",
            DigitalObject.class);

    // alternatives
    digester.addObjectCreate("*/plan/alternatives", AlternativesDefinition.class);
    digester.addSetProperties("*/plan/alternatives");
    digester.addCallMethod("*/plan/alternatives/description", "setDescription", 0);
    digester.addSetNext("*/plan/alternatives", "setAlternativesDefinition");

    digester.addObjectCreate("*/plan/alternatives/alternative", Alternative.class);
    digester.addSetProperties("*/plan/alternatives/alternative");
    digester.addSetNext("*/plan/alternatives/alternative", "addAlternative");
    // - action
    digester.addObjectCreate("*/plan/alternatives/alternative/action", PreservationActionDefinition.class);
    digester.addSetProperties("*/plan/alternatives/alternative/action");
    digester.addBeanPropertySetter("*/plan/alternatives/alternative/action/descriptor");
    digester.addBeanPropertySetter("*/plan/alternatives/alternative/action/parameterInfo");

    digester.addSetNext("*/plan/alternatives/alternative/action", "setAction");

    digester.addCallMethod("*/plan/alternatives/alternative/description", "setDescription", 0);

    // - - params
    digester.addObjectCreate("*/plan/alternatives/alternative/action/params", LinkedList.class);
    digester.addSetNext("*/plan/alternatives/alternative/action/params", "setParams");

    digester.addObjectCreate("*/plan/alternatives/alternative/action/params/param", Parameter.class);
    digester.addSetProperties("*/plan/alternatives/alternative/action/params/param");
    digester.addSetNext("*/plan/alternatives/alternative/action/params/param", "add");
    // - resource description
    digester.addObjectCreate("*/resourceDescription", ResourceDescription.class);
    digester.addSetProperties("*/resourceDescription");
    digester.addSetNext("*/resourceDescription", "setResourceDescription");

    digester.addCallMethod("*/resourceDescription/configSettings", "setConfigSettings", 0);
    digester.addCallMethod("*/resourceDescription/necessaryResources", "setNecessaryResources", 0);
    digester.addCallMethod("*/resourceDescription/reasonForConsidering", "setReasonForConsidering", 0);

    // - experiment
    digester.addObjectCreate("*/experiment", ExperimentWrapper.class);
    digester.addSetProperties("*/experiment");
    digester.addSetNext("*/experiment", "setExperiment");
    digester.addCallMethod("*/experiment/description", "setDescription", 0);
    digester.addCallMethod("*/experiment/settings", "setSettings", 0);
    PlanParser.addCreateUpload(digester, "*/experiment/workflow", "setWorkflow", DigitalObject.class);

    PlanParser.addCreateUpload(digester, "*/experiment/results/result", null, DigitalObject.class);
    PlanParser.addCreateUpload(digester, "*/result/xcdlDescription", "setXcdlDescription",
            XcdlDescription.class);

    // call function addUpload of ExperimentWrapper
    CallMethodRule r = new CallMethodRule(1, "addResult", 2); // method
                                                              // with
                                                              // two
                                                              // params
                                                              // every time */experiment/uploads/upload is encountered
    digester.addRule("*/experiment/results/result", r);
    // use attribute "key" as first param
    digester.addCallParam("*/experiment/results/result", 0, "key");
    // and the object on stack (DigitalObject) as the second
    digester.addCallParam("*/experiment/results/result", 1, true);

    // addCreateUpload(digester,
    // "*/experiment/xcdlDescriptions/xcdlDescription", null,
    // XcdlDescription.class);
    // // call function addXcdlDescription of ExperimentWrapper
    // r = new CallMethodRule(1, "addXcdlDescription", 2); //method with
    // two
    // params
    // // every time */experiment/xcdlDescriptions/xcdlDescription is
    // encountered
    // digester.addRule("*/experiment/xcdlDescriptions/xcdlDescription",
    // r);
    // // use attribute "key" as first param
    // digester.addCallParam("*/experiment/xcdlDescriptions/xcdlDescription",
    // 0 , "key");http://fue.onb.ac.at/abo/data
    // // and the object on stack (DigitalObject) as the second
    // digester.addCallParam("*/experiment/xcdlDescriptions/xcdlDescription",1,true);

    digester.addObjectCreate("*/experiment/detailedInfos/detailedInfo", DetailedExperimentInfo.class);
    digester.addSetProperties("*/experiment/detailedInfos/detailedInfo");
    digester.addBeanPropertySetter("*/experiment/detailedInfos/detailedInfo/programOutput");
    digester.addBeanPropertySetter("*/experiment/detailedInfos/detailedInfo/cpr");

    // call function "addDetailedInfo" of ExperimentWrapper
    r = new CallMethodRule(1, "addDetailedInfo", 2); // method with two
                                                     // params
                                                     // every time */experiment/detailedInfos/detailedInfo is encountered
    digester.addRule("*/experiment/detailedInfos/detailedInfo", r);
    // use attribute "key" as first param
    digester.addCallParam("*/experiment/detailedInfos/detailedInfo", 0, "key");
    // and the object on stack as second parameter
    digester.addCallParam("*/experiment/detailedInfos/detailedInfo", 1, true);

    // read contained measurements:
    digester.addObjectCreate("*/detailedInfo/measurements/measurement", Measurement.class);
    digester.addSetProperties("*/detailedInfo/measurements/measurement");
    digester.addSetNext("*/detailedInfo/measurements/measurement", "put");
    // values are defined with wild-cards, and therefore set
    // automatically

    /*
     * for each value type a set of rules because of FreeStringValue we need
     * to store the value as XML-element instead of an attribute naming them
     * "ResultValues" wasn't nice too
     */
    PlanParser.addCreateValue(digester, BooleanValue.class, "setValue");
    PlanParser.addCreateValue(digester, FloatRangeValue.class, "setValue");
    PlanParser.addCreateValue(digester, IntegerValue.class, "setValue");
    PlanParser.addCreateValue(digester, IntRangeValue.class, "setValue");
    PlanParser.addCreateValue(digester, OrdinalValue.class, "setValue");
    PlanParser.addCreateValue(digester, PositiveFloatValue.class, "setValue");
    PlanParser.addCreateValue(digester, PositiveIntegerValue.class, "setValue");
    PlanParser.addCreateValue(digester, YanValue.class, "setValue");
    PlanParser.addCreateValue(digester, FreeStringValue.class, "setValue");

    // go no go decision
    digester.addObjectCreate("*/plan/decision", Decision.class);
    digester.addSetProperties("*/plan/decision");
    digester.addSetNext("*/plan/decision", "setDecision");

    digester.addCallMethod("*/plan/decision/actionNeeded", "setActionNeeded", 0);
    digester.addCallMethod("*/plan/decision/reason", "setReason", 0);

    digester.addFactoryCreate("*/plan/decision/goDecision", GoDecisionFactory.class);
    digester.addSetNext("*/plan/decision/goDecision", "setDecision");

    // evaluation
    digester.addObjectCreate("*/plan/evaluation", Evaluation.class);
    digester.addSetProperties("*/plan/evaluation");
    digester.addSetNext("*/plan/evaluation", "setEvaluation");

    digester.addCallMethod("*/plan/evaluation/comment", "setComment", 0);

    // importance weighting
    digester.addObjectCreate("*/plan/importanceWeighting", ImportanceWeighting.class);
    digester.addSetProperties("*/plan/importanceWeighting");
    digester.addSetNext("*/plan/importanceWeighting", "setImportanceWeighting");

    digester.addCallMethod("*/plan/importanceWeighting/comment", "setComment", 0);

    // recommendation
    digester.addObjectCreate("*/plan/recommendation", RecommendationWrapper.class);
    digester.addSetProperties("*/plan/recommendation");
    digester.addSetNext("*/plan/recommendation", "setRecommendation");

    digester.addCallMethod("*/plan/recommendation/reasoning", "setReasoning", 0);
    digester.addCallMethod("*/plan/recommendation/effects", "setEffects", 0);

    // transformation
    digester.addObjectCreate("*/plan/transformation", Transformation.class);
    digester.addSetProperties("*/plan/transformation");
    digester.addSetNext("*/plan/transformation", "setTransformation");

    digester.addCallMethod("*/plan/transformation/comment", "setComment", 0);

    // Tree
    /*
     * Some rules for tree parsing are necessary for importing templates
     * too, that's why they are added by this static method.
     */
    PlanParser.addTreeParsingRulesToDigester(digester);

    digester.addObjectCreate("*/leaf/evaluation", HashMap.class);
    digester.addSetNext("*/leaf/evaluation", "setValueMap");
    /*
     * The valueMap has an entry for each (considered) alternative ... and
     * for each alternative there is a list of values, one per SampleObject.
     * Note: The digester uses a stack, therefore the rule to put the list
     * of values to the valueMap must be added after the rule for adding the
     * values to the list.
     */

    /*
     * 2. and for each alternative there is a list of values, one per
     * SampleObject
     */
    digester.addObjectCreate("*/leaf/evaluation/alternative", Values.class);
    digester.addCallMethod("*/leaf/evaluation/alternative/comment", "setComment", 0);

    /*
     * for each result-type a set of rules they are added to the valueMap by
     * the rules above
     */
    PlanParser.addCreateResultValue(digester, BooleanValue.class);
    PlanParser.addCreateResultValue(digester, FloatValue.class);
    PlanParser.addCreateResultValue(digester, FloatRangeValue.class);
    PlanParser.addCreateResultValue(digester, IntegerValue.class);
    PlanParser.addCreateResultValue(digester, IntRangeValue.class);
    PlanParser.addCreateResultValue(digester, OrdinalValue.class);
    PlanParser.addCreateResultValue(digester, PositiveFloatValue.class);
    PlanParser.addCreateResultValue(digester, PositiveIntegerValue.class);
    PlanParser.addCreateResultValue(digester, YanValue.class);
    PlanParser.addCreateResultValue(digester, FreeStringValue.class);

    /*
     * 1. The valueMap has an entry for each (considered) alternative ...
     */
    // call put of the ValueMap (HashMap)
    r = new CallMethodRule(1, "put", 2);
    digester.addRule("*/leaf/evaluation/alternative", r);
    digester.addCallParam("*/leaf/evaluation/alternative", 0, "key");
    digester.addCallParam("*/leaf/evaluation/alternative", 1, true);

    // digester.addObjectCreate("*/plan/executablePlan/planWorkflow",
    // ExecutablePlanContentWrapper.class);
    // digester.addSetProperties("*/plan/executablePlan/planWorkflow");
    // digester.addSetNext("*/plan/executablePlan/planWorkflow",
    // "setRecommendation");

    // Executable plan definition
    digester.addObjectCreate("*/plan/executablePlan", ExecutablePlanDefinition.class);
    digester.addSetProperties("*/plan/executablePlan");
    digester.addCallMethod("*/plan/executablePlan/objectPath", "setObjectPath", 0);
    digester.addCallMethod("*/plan/executablePlan/toolParameters", "setToolParameters", 0);
    digester.addCallMethod("*/plan/executablePlan/triggersConditions", "setTriggersConditions", 0);
    digester.addCallMethod("*/plan/executablePlan/validateQA", "setValidateQA", 0);
    PlanParser.addCreateUpload(digester, "*/plan/executablePlan/workflow", "setT2flowExecutablePlan",
            DigitalObject.class);

    digester.addSetNext("*/plan/executablePlan", "setExecutablePlanDefinition");

    // Preservation action plan
    digester.addObjectCreate("*/plan/preservationActionPlan", DigitalObject.class);
    digester.addSetNext("*/plan/preservationActionPlan", "setPreservationActionPlan");

    digester.addCallMethod("*/plan/preservationActionPlan", "setContentType", 1);
    digester.addObjectParam("*/plan/preservationActionPlan", 0, "application/xml");
    digester.addCallMethod("*/plan/preservationActionPlan", "setFullname", 1);
    digester.addObjectParam("*/plan/preservationActionPlan", 0, PreservationActionPlanGenerator.FULL_NAME);
    digester.addSetNext("*/plan/preservationActionPlan", "setPreservationActionPlan");

    PlanParser.addCreateXMLData(digester, "*/plan/preservationActionPlan", "setData", "setChangeLog");

    //
    // Import Planets executable plan if present
    //
    // object-create rules are called at the beginning element-tags, in
    // the
    // same order as defined
    // first create the wrapper
    // digester.addObjectCreate("*/plan/executablePlan/planWorkflow",
    // NodeContentWrapper.class);
    // // then an element for workflowConf
    // digester.addRule("*/plan/executablePlan/planWorkflow/workflowConf",
    // new NodeCreateRule());
    //
    // // CallMethod and SetNext rules are called at closing element-tags,
    // // (last
    // // in - first out!)
    //
    // CallMethodRule rr = new CallMethodRule(1, "setNodeContent", 2);
    // digester.addRule("*/plan/executablePlan/planWorkflow/workflowConf",
    // rr);
    // // right below the wrapper is an instance of
    // // ExecutablePlanDefinition
    // digester.addCallParam("*/plan/executablePlan/planWorkflow/workflowConf",
    // 0, 1);
    // // provide the name of the setter method
    // digester.addObjectParam("*/plan/executablePlan/planWorkflow/workflowConf",
    // 1, "setExecutablePlan");
    //
    // // the generated node is not accessible as CallParam (why?!?), but
    // // available for addSetNext
    // digester.addSetNext("*/plan/executablePlan/planWorkflow/workflowConf",
    // "setNode");
    //
    // //
    // // Import EPrints executable plan if present
    // //
    // digester.addObjectCreate("*/plan/executablePlan/eprintsPlan",
    // NodeContentWrapper.class);
    // // then an element for workflowConf
    // digester.addRule("*/plan/executablePlan/eprintsPlan", new
    // NodeCreateRule());
    //
    // CallMethodRule rr2 = new CallMethodRule(1,
    // "setNodeContentEPrintsPlan", 2);
    // digester.addRule("*/plan/executablePlan/eprintsPlan", rr2);
    // // right below the wrapper is an instance of
    // // ExecutablePlanDefinition
    // digester.addCallParam("*/plan/executablePlan/eprintsPlan", 0, 1);
    // // provide the name of the setter method
    // digester.addObjectParam("*/plan/executablePlan/eprintsPlan", 1,
    // "setEprintsExecutablePlan");

    // digester.addSetNext("*/plan/executablePlan/eprintsPlan", "setNode");

    // Plan definition
    digester.addObjectCreate("*/plan/planDefinition", PlanDefinition.class);
    digester.addSetProperties("*/plan/planDefinition");
    digester.addSetNext("*/plan/planDefinition", "setPlanDefinition");

    digester.addCallMethod("*/plan/planDefinition/costsIG", "setCostsIG", 0);
    digester.addCallMethod("*/plan/planDefinition/costsPA", "setCostsPA", 0);
    digester.addCallMethod("*/plan/planDefinition/costsPE", "setCostsPE", 0);
    digester.addCallMethod("*/plan/planDefinition/costsQA", "setCostsQA", 0);
    digester.addCallMethod("*/plan/planDefinition/costsREI", "setCostsREI", 0);
    digester.addCallMethod("*/plan/planDefinition/costsRemarks", "setCostsRemarks", 0);
    digester.addCallMethod("*/plan/planDefinition/costsRM", "setCostsRM", 0);
    digester.addCallMethod("*/plan/planDefinition/costsTCO", "setCostsTCO", 0);
    digester.addCallMethod("*/plan/planDefinition/responsibleExecution", "setResponsibleExecution", 0);
    digester.addCallMethod("*/plan/planDefinition/responsibleMonitoring", "setResponsibleMonitoring", 0);

    digester.addObjectCreate("*/plan/planDefinition/triggers", TriggerDefinition.class);
    digester.addSetNext("*/plan/planDefinition/triggers", "setTriggers");
    // every time a */plan/basis/triggers/trigger is encountered:
    digester.addFactoryCreate("*/plan/planDefinition/triggers/trigger", TriggerFactory.class);
    digester.addSetNext("*/plan/planDefinition/triggers/trigger", "setTrigger");
}

From source file:eu.scape_project.planning.xml.PlanParser.java

/**
 * Create a rule for reading an upload entry for the given location
 * <code>pattern</code>, and use the <code>method</code> to set the upload
 * object.// w  w w. j  a  va  2 s .c om
 * 
 * @param digester
 *            the digester
 * @param pattern
 *            the location pattern
 * @param method
 *            a method name of the parent object
 * @param objectType
 *            class of object to create
 */
private static void addCreateUpload(final Digester digester, final String pattern, final String method,
        final Class<?> objectType) {
    digester.addObjectCreate(pattern, objectType);
    digester.addSetProperties(pattern);
    if ((method != null) && (!"".equals(method))) {
        digester.addSetNext(pattern, method);
    }
    /*
     * Note: It is not possible to read element data, process it and pass it
     * to a function with a simple digester Rule, neither you can define a
     * factory to read the data of an element.
     * 
     * So we have to do it the other way round: (remember: the function
     * added last is executed first!)
     */
    // 1. Create a BinaryDataWrapper if a <data> element is encountered
    digester.addObjectCreate(pattern + "/data", BinaryDataWrapper.class);
    // 3. Finally call setData on the BinaryDataWrapper(!) on top with the
    // object next to top as argument
    // The BinaryDataWrapper will call setData on to object next to top with
    // the previously read and decoded data
    digester.addSetTop(pattern + "/data", "setData");
    // 2. Call setFromBase64Encoded on the BinaryDataWrapper to read the
    // elements content
    digester.addCallMethod(pattern + "/data", "setFromBase64Encoded", 0);

}

From source file:br.univali.celine.scorm.model.cam.ContentPackageReader20043rd.java

protected void addRollupRules(Digester d, String tagParent) {
    d.addObjectCreate(tagParent + "/sequencing/rollupRules", RollupRules.class);
    d.addSetNext(tagParent + "/sequencing/rollupRules", "setRollupRules");
    d.addSetProperties(tagParent + "/sequencing/rollupRules");

    // <rollupRule>
    d.addObjectCreate(tagParent + "/sequencing/rollupRules/rollupRule", RollupRule.class);
    d.addSetNext(tagParent + "/sequencing/rollupRules/rollupRule", "addRollupRule");
    d.addSetProperties(tagParent + "/sequencing/rollupRules/rollupRule");

    // <rollupCondition>
    d.addObjectCreate(tagParent + "/sequencing/rollupRules/rollupRule/rollupConditions/rollupCondition",
            RollupCondition.class);
    d.addSetProperties(tagParent + "/sequencing/rollupRules/rollupRule/rollupConditions/rollupCondition");
    d.addSetNext(tagParent + "/sequencing/rollupRules/rollupRule/rollupConditions/rollupCondition",
            "addRollupCondition");

    // <rollupAction>
    d.addCallMethod(tagParent + "/sequencing/rollupRules/rollupRule/rollupAction", "setRollupAction", 1);
    d.addCallParam(tagParent + "/sequencing/rollupRules/rollupRule/rollupAction", 0, "action");

    /*//from ww  w.  ja  v a 2 s  . c o  m
    d.addCallMethod(tagParent+"/sequencing/rollupRules/rollupRule/rollupAction", "set");
    d.addSetNext(tagParent+"/sequencing/rollupRules/rollupRule", "addRollupRule");
    d.addSetProperties(tagParent+"/sequencing/rollupRules/rollupRule");
    */

}

From source file:net.sf.mcf2pdf.mcfelements.impl.DigesterConfiguratorImpl.java

@Override
public void configureDigester(Digester digester, File mcfFile) throws IOException {
    digester.setSubstitutor(createSubstitutor());

    // fotobook element
    digester.addObjectCreate("fotobook", getFotobookClass());
    DigesterUtil.addSetProperties(digester, "fotobook", getSpecialFotobookAttributes());

    // page element
    digester.addObjectCreate("fotobook/page", getPageClass());
    digester.addSetTop("fotobook/page", "setFotobook");
    DigesterUtil.addSetProperties(digester, "fotobook/page", getSpecialPageAttributes());
    digester.addSetNext("fotobook/page", "addPage", McfPage.class.getName());

    // background element
    digester.addObjectCreate("fotobook/page/background", getBackgroundClass());
    digester.addSetTop("fotobook/page/background", "setPage");
    DigesterUtil.addSetProperties(digester, "fotobook/page/background", getSpecialBackgroundAttributes());
    digester.addSetNext("fotobook/page/background", "addBackground", McfBackground.class.getName());

    // area element
    digester.addObjectCreate("fotobook/page/area", getAreaClass());
    digester.addSetTop("fotobook/page/area", "setPage");
    DigesterUtil.addSetProperties(digester, "fotobook/page/area", getSpecialAreaAttributes());
    digester.addSetNext("fotobook/page/area", "addArea", McfArea.class.getName());

    // border element
    digester.addObjectCreate("fotobook/page/area/border", getBorderClass());
    DigesterUtil.addSetProperties(digester, "fotobook/page/area/border", getSpecialBorderAttributes());
    digester.addSetNext("fotobook/page/area/border", "setBorder");

    // text element, including textFormat element
    digester.addObjectCreate("fotobook/page/area/text", getTextClass());
    digester.addSetProperties("fotobook/page/area/text");
    digester.addCallMethod("fotobook/page/area/text", "setHtmlContent", 0);
    DigesterUtil.addSetProperties(digester, "fotobook/page/area/text/textFormat",
            getSpecialTextFormatAttributes());
    digester.addSetNext("fotobook/page/area/text", "setContent");
    digester.addSetTop("fotobook/page/area/text", "setArea");

    // clipart element
    digester.addObjectCreate("fotobook/page/area/clipart", getClipartClass());
    digester.addSetProperties("fotobook/page/area/clipart");
    digester.addSetNext("fotobook/page/area/clipart", "setContent");
    digester.addSetTop("fotobook/page/area/clipart", "setArea");

    // image element
    digester.addObjectCreate("fotobook/page/area/image", getImageClass());
    DigesterUtil.addSetProperties(digester, "fotobook/page/area/image", getSpecialImageAttributes());
    digester.addSetNext("fotobook/page/area/image", "setContent");
    digester.addSetTop("fotobook/page/area/image", "setArea");

    // imagebackground element
    digester.addObjectCreate("fotobook/page/area/imagebackground", getImageBackgroundClass());
    DigesterUtil.addSetProperties(digester, "fotobook/page/area/imagebackground", getSpecialImageAttributes());
    digester.addSetNext("fotobook/page/area/imagebackground", "setContent");
    digester.addSetTop("fotobook/page/area/imagebackground", "setArea");
}

From source file:org.apache.commons.digester3.examples.api.addressbook.Main.java

private static void addRules(Digester d) {

    // --------------------------------------------------
    // when we encounter a "person" tag, do the following:

    // create a new instance of class Person, and push that
    // object onto the digester stack of objects
    d.addObjectCreate("address-book/person", Person.class);

    // map *any* attributes on the tag to appropriate
    // setter-methods on the top object on the stack (the Person
    // instance created by the preceeding rule).
    ///*from w w  w  . j a va2 s .c  o  m*/
    // For example:
    // if attribute "id" exists on the xml tag, and method setId
    // with one parameter exists on the object that is on top of
    // the digester object stack, then a call will be made to that
    // method. The value will be type-converted from string to
    // whatever type the target method declares (where possible),
    // using the commons ConvertUtils functionality.
    //
    // Attributes on the xml tag for which no setter methods exist
    // on the top object on the stack are just ignored.
    d.addSetProperties("address-book/person");

    // call the addPerson method on the second-to-top object on
    // the stack (the AddressBook object), passing the top object
    // on the stack (the recently created Person object).
    d.addSetNext("address-book/person", "addPerson");

    // --------------------------------------------------
    // when we encounter a "name" tag, call setName on the top
    // object on the stack, passing the text contained within the
    // body of that name element [specifying a zero parameter count
    // implies one actual parameter, being the body text].
    // The top object on the stack will be a person object, because
    // the pattern address-book/person always triggers the
    // ObjectCreateRule we added previously.
    d.addCallMethod("address-book/person/name", "setName", 0);

    // --------------------------------------------------
    // when we encounter an "email" tag, call addEmail on the top
    // object on the stack, passing two parameters: the "type"
    // attribute, and the text within the tag body.
    d.addCallMethod("address-book/person/email", "addEmail", 2);
    d.addCallParam("address-book/person/email", 0, "type");
    d.addCallParam("address-book/person/email", 1);

    // --------------------------------------------------
    // When we encounter an "address" tag, create an instance of class
    // Address and push it on the digester stack of objects. After
    // doing that, call addAddress on the second-to-top object on the
    // digester stack (a "Person" object), passing the top object on
    // the digester stack (the "Address" object). And also set things
    // up so that for each child xml element encountered between the start
    // of the address tag and the end of the address tag, the text
    // contained in that element is passed to a setXXX method on the
    // Address object where XXX is the name of the xml element found.
    d.addObjectCreate("address-book/person/address", Address.class);
    d.addSetNext("address-book/person/address", "addAddress");
    d.addSetNestedProperties("address-book/person/address");
}