List of usage examples for org.apache.commons.digester Digester addSetTop
public void addSetTop(String pattern, String methodName)
From source file:eu.planets_project.pp.plato.xml.ProjectImporter.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 ww . j a v a2 s . c o m*/ * * @param digester * @param pattern * @param method */ private static void addCreateUpload(Digester digester, String pattern, String method, 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:eu.planets_project.pp.plato.xml.ProjectImporter.java
/** * Imports the XML representation of plans from the given inputstream. * //from ww w . j av a2s.c om * @return list of read plans */ public List<Plan> importProjects(InputStream in) throws IOException, SAXException { String tempPath = OS.getTmpPath() + "import_xml" + System.currentTimeMillis() + "/"; File tempDir = new File(tempPath); tempDir.mkdirs(); try { String currentVersionFile = getCurrentVersionData(in, tempPath); if (currentVersionFile == null) { log.error("Failed to migrate plans."); return this.plans; } Digester digester = new Digester(); // digester.setValidating(true); StrictErrorHandler errorHandler = new StrictErrorHandler(); digester.setErrorHandler(errorHandler); digester.setNamespaceAware(true); // digester.setSchemaLanguage("http://www.w3.org/2001/XMLSchema"); // digester.setSchema("http://localhost:8080/plato/schema/plato-2.1.xsd"); /* * It is NOT sufficient to use setValidating(true) and digester.setSchema("data/schemas/plato.xsd")! * the following parameters have to be set and a special error handler is necessary */ try { digester.setFeature("http://xml.org/sax/features/validation", true); digester.setFeature("http://apache.org/xml/features/validation/schema", true); // digester.setFeature("http://xml.org/sax/features/namespaces", true); // digester.setFeature("http://apache.org/xml/features/validation/schema-full-checking", true); /* * And provide the relative path to the xsd-schema: */ digester.setProperty("http://java.sun.com/xml/jaxp/properties/schemaLanguage", "http://www.w3.org/2001/XMLSchema"); URL platoSchema = Thread.currentThread().getContextClassLoader() .getResource("data/schemas/plato-3.0.xsd"); URL wdtSchema = Thread.currentThread().getContextClassLoader() .getResource("data/schemas/planets_wdt-1.0.xsd"); digester.setProperty("http://apache.org/xml/properties/schema/external-schemaLocation", "http://www.planets-project.eu/plato " + platoSchema + " http://www.planets-project.eu/wdt " + wdtSchema); //http://localhost:8080/plato/schema/planets_wdt-1.0.xsd } catch (ParserConfigurationException e) { log.debug("Cannot import XML file: Configuration of parser failed.", e); throw new SAXException("Cannot import XML file: Configuration of parser failed."); } digester.push(this); // 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/state", PlanState.class); digester.addSetProperties("*/plan/state"); digester.addSetNext("*/plan/state", "setState"); 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); 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("*/record/formatInfo", FormatInfo.class); digester.addSetProperties("*/record/formatInfo"); digester.addSetNext("*/record/formatInfo", "setFormatInfo"); 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); // 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"); 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); addCreateUpload(digester, "*/experiment/results/result", null, DigitalObject.class); 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"); // // 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.addSetNext("*/detailedInfo/measurements/measurement", "put"); // values are defined with wild-cards, and therefore set automatically digester.addObjectCreate("*/measurement/property", MeasurableProperty.class); digester.addSetProperties("*/measurement/property"); digester.addSetNext("*/measurement/property", "setProperty"); // scales 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 */ addCreateValue(digester, BooleanValue.class, "setValue"); addCreateValue(digester, FloatRangeValue.class, "setValue"); addCreateValue(digester, IntegerValue.class, "setValue"); addCreateValue(digester, IntRangeValue.class, "setValue"); addCreateValue(digester, OrdinalValue.class, "setValue"); addCreateValue(digester, PositiveFloatValue.class, "setValue"); addCreateValue(digester, PositiveIntegerValue.class, "setValue"); addCreateValue(digester, YanValue.class, "setValue"); 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. */ ProjectImporter.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 */ addCreateResultValue(digester, BooleanValue.class); addCreateResultValue(digester, FloatValue.class); addCreateResultValue(digester, FloatRangeValue.class); addCreateResultValue(digester, IntegerValue.class); addCreateResultValue(digester, IntRangeValue.class); addCreateResultValue(digester, OrdinalValue.class); addCreateResultValue(digester, PositiveFloatValue.class); addCreateResultValue(digester, PositiveIntegerValue.class); addCreateResultValue(digester, YanValue.class); 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.addSetNext("*/plan/executablePlan", "setExecutablePlanDefinition"); // // Import Planets executable plan if present // try { // 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"); } catch (ParserConfigurationException e) { PlatoLogger.getLogger(this.getClass()).error(e.getMessage(), e); } // // Import EPrints executable plan if present // try { 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"); } catch (ParserConfigurationException e) { PlatoLogger.getLogger(this.getClass()).error(e.getMessage(), e); } 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); // 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"); digester.setUseContextClassLoader(true); this.plans = new ArrayList<Plan>(); // finally parse the XML representation with all created rules digester.parse(new FileInputStream(currentVersionFile)); for (Plan plan : plans) { String projectName = plan.getPlanProperties().getName(); if ((projectName != null) && (!"".equals(projectName))) { /* * establish links from values to scales */ plan.getTree().initValues(plan.getAlternativesDefinition().getConsideredAlternatives(), plan.getSampleRecordsDefinition().getRecords().size(), true); /* * establish references of Experiment.uploads */ HashMap<String, SampleObject> records = new HashMap<String, SampleObject>(); for (SampleObject record : plan.getSampleRecordsDefinition().getRecords()) { records.put(record.getShortName(), record); } for (Alternative alt : plan.getAlternativesDefinition().getAlternatives()) { if ((alt.getExperiment() != null) && (alt.getExperiment() instanceof ExperimentWrapper)) { alt.setExperiment(((ExperimentWrapper) alt.getExperiment()).getExperiment(records)); } } // DESCRIBE all DigitalObjects with Jhove. for (SampleObject record : plan.getSampleRecordsDefinition().getRecords()) { if (record.isDataExistent()) { // characterise try { record.setJhoveXMLString(new JHoveAdaptor().describe(record)); } catch (Throwable e) { log.error("Error running Jhove for record " + record.getShortName() + ". " + e.getMessage(), e); } for (Alternative alt : plan.getAlternativesDefinition().getAlternatives()) { DigitalObject result = alt.getExperiment().getResults().get(record); if (result != null && result.isDataExistent()) { try { result.setJhoveXMLString(new JHoveAdaptor().describe(result)); } catch (Throwable e) { log.error( "Error running Jhove for record " + record.getShortName() + ", alternative " + alt.getName() + ". " + e.getMessage(), e); } } } } } // CHECK NUMERIC TRANSFORMER THRESHOLDS for (Leaf l : plan.getTree().getRoot().getAllLeaves()) { eu.planets_project.pp.plato.model.transform.Transformer t = l.getTransformer(); if (t != null && t instanceof NumericTransformer) { NumericTransformer nt = (NumericTransformer) t; if (!nt.checkOrder()) { StringBuffer sb = new StringBuffer("NUMERICTRANSFORMER THRESHOLD ERROR "); sb.append(l.getName()).append("::NUMERICTRANSFORMER:: "); sb.append(nt.getThreshold1()).append(" ").append(nt.getThreshold2()).append(" ") .append(nt.getThreshold3()).append(" ").append(nt.getThreshold4()) .append(" ").append(nt.getThreshold5()); log.error(sb.toString()); } } } /* * establish references to selected alternative */ HashMap<String, Alternative> alternatives = new HashMap<String, Alternative>(); for (Alternative alt : plan.getAlternativesDefinition().getAlternatives()) { alternatives.put(alt.getName(), alt); } if ((plan.getRecommendation() != null) && (plan.getRecommendation() instanceof RecommendationWrapper)) { plan.setRecommendation( ((RecommendationWrapper) plan.getRecommendation()).getRecommendation(alternatives)); } if ((plan.getState().getValue() == PlanState.ANALYSED) && ((plan.getRecommendation() == null) || (plan.getRecommendation().getAlternative() == null))) { /* * This project is NOT completely analysed */ plan.getState().setValue(PlanState.ANALYSED - 1); } } else { throw new SAXException("Could not find any project data."); } } } finally { OS.deleteDirectory(tempDir); /* * Importing big plans results in an increasing memory consumption * strange: The rise of memory consumption occurs when persisting the loaded project * NOT during parsing with the digester */ System.gc(); } return this.plans; }
From source file:nl.nn.adapterframework.monitoring.MonitorManager.java
public void setDigesterRules(Digester d) { Rule attributeChecker = new AttributeCheckingRule(); d.addFactoryCreate("*/monitoring", new CreationFactory()); d.addSetProperties("*/monitoring"); d.addSetTop("*/monitoring", "register"); d.addRule("*/monitoring", attributeChecker); d.addRule("*/monitoring/destinations", new DestinationCleanup()); d.addObjectCreate("*/destination", "className", IMonitorAdapter.class); d.addSetProperties("*/destination"); d.addSetTop("*/destination", "register"); d.addRule("*/destination", attributeChecker); d.addObjectCreate("*/destination/sender", "className", ISender.class); d.addSetProperties("*/destination/sender"); d.addSetNext("*/destination/sender", "setSender"); d.addRule("*/destination/sender", attributeChecker); d.addObjectCreate("*/monitor", Monitor.class); d.addSetProperties("*/monitor"); d.addSetTop("*/monitor", "register"); d.addRule("*/monitor", attributeChecker); d.addObjectCreate("*/alarm", Trigger.class); d.addSetProperties("*/alarm"); d.addSetNext("*/alarm", "registerAlarm"); d.addRule("*/alarm", attributeChecker); d.addCallMethod("*/alarm/events/event", "addEventCode", 0); d.addObjectCreate("*/clearing", Trigger.class); d.addSetProperties("*/clearing"); d.addSetNext("*/clearing", "registerClearing"); d.addRule("*/clearing", attributeChecker); d.addCallMethod("*/clearing/events/event", "addEventCode", 0); d.addObjectCreate("*/trigger", Trigger.class); d.addSetProperties("*/trigger"); d.addSetNext("*/trigger", "registerTrigger"); d.addRule("*/trigger", attributeChecker); d.addCallMethod("*/trigger/events/event", "addEventCode", 0); d.addObjectCreate("*/adapterfilter", AdapterFilter.class); d.addSetProperties("*/adapterfilter"); d.addSetNext("*/adapterfilter", "registerAdapterFilter"); d.addRule("*/adapterfilter", attributeChecker); d.addSetNext("*/adapterfilter/sources", "setFilteringToLowerLevelObjects"); d.addCallMethod("*/adapterfilter/sources/source", "registerSubOject", 0); }
From source file:org.infoscoop.request.proxy.ProxyConfig.java
public static void init(InputSource is) throws IOException, SAXException { ProxyConfig config2 = new ProxyConfig(); Digester digester = new Digester(); digester.setClassLoader(Thread.currentThread().getContextClassLoader()); digester.push(config2);// w ww . j a va2 s . c o m digester.addObjectCreate("proxy-config/case", ProxyConfigCase.class); digester.addSetNext("proxy-config/case", "addCase"); digester.addSetProperties("proxy-config/case"); digester.addSetTop("proxy-config/case/headers", "setAllowedHeaders"); digester.addCallMethod("proxy-config/case/headers/header", "addAllowedHeader", 0); digester.addSetTop("proxy-config/case/sendingcookies", "setSendingCookies"); digester.addCallMethod("proxy-config/case/sendingcookies/cookie", "addSendingCookie", 0); digester.addObjectCreate("proxy-config/default", ProxyConfigCase.class); digester.addSetNext("proxy-config/default", "setDefaultCase"); digester.addSetProperties("proxy-config/default"); digester.addSetTop("proxy-config/default/headers", "setAllowedHeaders"); digester.addCallMethod("proxy-config/default/headers/header", "addAllowedHeader", 0); digester.addSetTop("proxy-config/default/sendingcookies", "setSendingCookies"); digester.addCallMethod("proxy-config/default/sendingcookies/cookie", "addSendingCookie", 0); digester.parse(is); config = config2; isInitialized = true; lastCheckedTime = new Date().getTime(); }
From source file:org.photovault.imginfo.xml.XmlImporter.java
/** Import data from XML file according to current settings in this object. */// w ww . ja va 2 s .co m public void importData() { Digester digester = new Digester(); digester.push(this); // Push controller servlet onto the stack digester.setValidating(false); digester.addFactoryCreate("*/folders/folder", new FolderFactory(true)); digester.addFactoryCreate("*/folder/folder", new FolderFactory(true)); digester.addCallMethod("*/folder/name", "setName", 0); digester.addCallMethod("*/folder/description", "setDescription", 0); // PhotoInfo mappings digester.addFactoryCreate("*/photos/photo", new PhotoFactory()); // After the photo is ready, inform listeners if a new photo was created. digester.addRule("*/photos/photo", new Rule() { @Override public void end(String namespace, String name) { Boolean isCreatingNew = (Boolean) digester.pop(STACK_CREATING_NEW); if (isCreatingNew.booleanValue()) { photoCount++; fireObjectImportedEvent(digester.peek()); } } }); digester.addCallMethod("*/photos/photo/shooting-place", "setShootingPlace", 0); digester.addCallMethod("*/photos/photo/photographer", "setPhotographer", 0); digester.addCallMethod("*/photos/photo/camera", "setCamera", 0); digester.addCallMethod("*/photos/photo/lens", "setLens", 0); digester.addCallMethod("*/photos/photo/film", "setFilm", 0); digester.addCallMethod("*/photos/photo/orig-fname", "setOrigFname", 0); digester.addCallMethod("*/photos/photo/description", "setDesc", 0); digester.addCallMethod("*/photos/photo/tech-notes", "setTechNotes", 0); digester.addCallMethod("*/photos/photo/f-stop", "setFStop", 0, new Class[] { Double.class }); digester.addCallMethod("*/photos/photo/shutter-speed", "setShutterSpeed", 0, new Class[] { Double.class }); digester.addCallMethod("*/photos/photo/focal-length", "setFocalLength", 0, new Class[] { Double.class }); digester.addCallMethod("*/photos/photo/quality", "setQuality", 0, new Class[] { Integer.class }); digester.addCallMethod("*/photos/photo/film-speed", "setFilmSpeed", 0, new Class[] { Integer.class }); digester.addFactoryCreate("*/photos/photo/shoot-time", new FuzzyDateFactory()); digester.addSetNext("*/photos/photo/shoot-time", "setFuzzyShootTime"); // Crop settings digester.addCallMethod("*/photos/photo/crop", "setPrefRotation", 1, new Class[] { Double.class }); digester.addCallParam("*/photos/photo/crop", 0, "rot"); digester.addFactoryCreate("*/photos/photo/crop", new RectangleFactory()); digester.addSetNext("*/photos/photo/crop", "setCropBounds"); /* Raw conversion setting mappings. All of these expect that a RawSettingsFactory is the topmost object in Digester stack. Note that in practice there must be and explicit rule for each raw setting field since the rule that instantates the raw setting object & assign it to the parent object will override this. */ digester.addObjectCreate("*/raw-conversion", RawSettingsFactory.class); digester.addCallMethod("*/raw-conversion/whitepoint", "setWhite", 0, new Class[] { Integer.class }); digester.addCallMethod("*/raw-conversion/blackpoint", "setBlack", 0, new Class[] { Integer.class }); digester.addCallMethod("*/raw-conversion/ev-corr", "setEvCorr", 0, new Class[] { Double.class }); digester.addCallMethod("*/raw-conversion/hlight-corr", "setHlightComp", 0, new Class[] { Double.class }); digester.addRule("*/raw-conversion/color-balance", new Rule() { @Override public void begin(String namespace, String name, Attributes attrs) { String rgStr = attrs.getValue("red-green-ratio"); String bgStr = attrs.getValue("blue-green-ratio"); double bg = 1.0; double rg = 1.0; try { bg = Double.parseDouble(bgStr); rg = Double.parseDouble(rgStr); } catch (NumberFormatException ex) { digester.createSAXException(ex); } RawSettingsFactory f = (RawSettingsFactory) digester.peek(); f.setRedGreenRation(rg); f.setBlueGreenRatio(bg); } }); digester.addRule("*/raw-conversion/daylight-color-balance", new Rule() { @Override public void begin(String namespace, String name, Attributes attrs) { String rgStr = attrs.getValue("red-green-ratio"); String bgStr = attrs.getValue("blue-green-ratio"); double bg = 1.0; double rg = 1.0; try { bg = Double.parseDouble(bgStr); rg = Double.parseDouble(rgStr); } catch (NumberFormatException ex) { digester.createSAXException(ex); } RawSettingsFactory f = (RawSettingsFactory) digester.peek(); f.setDaylightMultipliers(new double[] { rg, 1.0, bg }); } }); digester.addRuleSet(new ChannelMapRuleSet("*/photo/")); digester.addRule("*/photo/color-mapping", new Rule() { @Override public void end(String namespace, String name) { PhotoInfo p = (PhotoInfo) digester.peek(1); ChannelMapOperationFactory f = (ChannelMapOperationFactory) digester.peek(); p.setColorChannelMapping(f.create()); } }); digester.addObjectCreate("*/photo/raw-conversion", RawSettingsFactory.class); digester.addRule("*/photo/raw-conversion", new Rule() { @Override public void end(String namespace, String name) { PhotoInfo p = (PhotoInfo) digester.peek(1); RawSettingsFactory f = (RawSettingsFactory) digester.peek(); try { p.setRawSettings(f.create()); } catch (PhotovaultException ex) { digester.createSAXException(ex); } } }); // Instance mappings digester.addFactoryCreate("*/photo/instances/instance", new InstanceFactory()); digester.addCallMethod("*/instance/file-size", "setFileSize", 0, new Class[] { Long.class }); digester.addCallMethod("*/instance/width", "setWidth", 0, new Class[] { Integer.class }); digester.addCallMethod("*/instance/height", "setHeight", 0, new Class[] { Integer.class }); digester.addCallMethod("*/instance/crop", "setRotated", 1, new Class[] { Double.class }); digester.addCallParam("*/instance/crop", 0, "rot"); digester.addFactoryCreate("*/instance/crop", new RectangleFactory()); digester.addSetNext("*/instance/crop", "setCropBounds"); digester.addRule("*/instance/hash", new Rule() { @Override public void body(String namespace, String name, String text) { /* byte[] hash = Base64.decode( text ); ImageInstance i = (ImageInstance) digester.peek(); i.setHash( hash ); */ } }); digester.addRuleSet(new ChannelMapRuleSet("*/instance/")); digester.addRule("*/instance/color-mapping", new Rule() { @Override public void end(String namespace, String name) { /* ImageInstance i = (ImageInstance) digester.peek(1); ChannelMapOperationFactory f = (ChannelMapOperationFactory) digester.peek(); i.setColorChannelMapping( f.create() ); */ } }); // Raw conversion parsing was already specified earlier. We just need a // method for binding the RawConversionSettings object to instance digester.addObjectCreate("*/instance/raw-conversion", RawSettingsFactory.class); digester.addRule("*/instance/raw-conversion", new Rule() { @Override public void end(String namespace, String name) { /* ImageInstance i = (ImageInstance)digester.peek(1); RawSettingsFactory f = (RawSettingsFactory) digester.peek(); try { i.setRawSettings( f.create() ); } catch (PhotovaultException ex) { digester.createSAXException( ex ); } */ } }); /* TODO: import information about image locations. In first phase, this can be done by indexing images as an external volume... */ digester.addSetNext("*/photo/instances/instance", "addInstance"); // folder handling digester.addFactoryCreate("*/photos/photo/folders/folder-ref", new FolderFactory(false)); digester.addSetTop("*/photos/photo/folders/folder-ref", "addPhoto"); fireStatusChangeEvent(IMPORTING_STARTED); try { digester.parse(reader); } catch (SAXException ex) { fireErrorEvent(ex.getMessage()); ex.printStackTrace(); } catch (IOException ex) { fireErrorEvent(ex.getMessage()); ex.printStackTrace(); } fireStatusChangeEvent(IMPORTING_COMPLETED); }
From source file:org.squale.squalecommon.enterpriselayer.facade.checkstyle.xml.CheckstyleImport.java
/** * Configuration du digester Le digester est utilis pour le chargement du fichier XML de rgles * //from w w w .j av a 2s. c om * @param pRuleSetFactory factory * @param pErrors erreurs de traitement * @return digester */ protected Digester setupDigester(CheckstyleRuleSetFactory pRuleSetFactory, StringBuffer pErrors) { Digester configDigester = preSetupDigester(DTD_PUBLIC_ID_1_1, DTD_RESOURCE_NAME_1_1, pErrors); // Traitement des RuleSet configDigester.addFactoryCreate("module/metadata", pRuleSetFactory); // Initialisation des caractristiques de la rgle, rcuprer dans la seconde balise "metadata" CheckstyleRulePractice checkstyleRulePractice = new CheckstyleRulePractice(); configDigester.addFactoryCreate("module/module/metadata", checkstyleRulePractice); // Traitement des Modules (rules) CheckstyleModuleFactory checkstyleModuleFactory = new CheckstyleModuleFactory(); configDigester.addFactoryCreate("module/module/module", checkstyleModuleFactory); // Traitement des proprits du Module configDigester.addCallMethod("module/module/module/property", "addProperty", 2, new Class[] { String.class, String.class }); configDigester.addCallParam("module/module/module/property", 0, "name"); configDigester.addCallParam("module/module/module/property", 1, "value"); // Traitement des Rules CheckstyleRuleFactory checkstyleRuleFactory = new CheckstyleRuleFactory(pRuleSetFactory, checkstyleRulePractice); configDigester.addFactoryCreate("module/module/module/metadata", checkstyleRuleFactory); configDigester.addSetTop("module/module/module/metadata", "addModule"); return configDigester; }