01: /*
02: * This file is part of PFIXCORE.
03: *
04: * PFIXCORE is free software; you can redistribute it and/or modify
05: * it under the terms of the GNU Lesser General Public License as published by
06: * the Free Software Foundation; either version 2 of the License, or
07: * (at your option) any later version.
08: *
09: * PFIXCORE is distributed in the hope that it will be useful,
10: * but WITHOUT ANY WARRANTY; without even the implied warranty of
11: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12: * GNU Lesser General Public License for more details.
13: *
14: * You should have received a copy of the GNU Lesser General Public License
15: * along with PFIXCORE; if not, write to the Free Software
16: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17: */
18:
19: package de.schlund.pfixxml.config.impl;
20:
21: import java.util.Map;
22:
23: import org.xml.sax.Attributes;
24: import org.xml.sax.SAXException;
25:
26: import de.schlund.pfixcore.workflow.FlowStepAction;
27: import de.schlund.pfixxml.config.ContextXMLServletConfig;
28:
29: public class PageflowStepActionRule extends CheckedRule {
30:
31: public PageflowStepActionRule(ContextXMLServletConfig config) {
32: }
33:
34: public void begin(String namespace, String name,
35: Attributes attributes) throws Exception {
36: // DO NOT call check because we want arbitrary attributes to be passed
37: // to the action config
38:
39: PageFlowStepActionConditionConfigImpl condConfig = (PageFlowStepActionConditionConfigImpl) this
40: .getDigester().peek();
41: String type = attributes.getValue("type");
42: if (type == null) {
43: throw new SAXException(
44: "Mandatory attribute \"type\" is missing!");
45: }
46: if (type.equals("jumpto")) {
47: type = "de.schlund.pfixcore.workflow.FlowStepJumpToAction";
48: }
49: Class<?> clazz;
50: try {
51: clazz = Class.forName(type);
52: } catch (ClassNotFoundException e) {
53: throw new SAXException("Could not load class \"" + type
54: + "\"!", e);
55: }
56: if (!FlowStepAction.class.isAssignableFrom(clazz)) {
57: throw new SAXException("Pageflow step action " + clazz
58: + " does not implmenent " + FlowStepAction.class
59: + " interface!");
60: }
61: PageFlowStepActionConfigImpl actionConfig = new PageFlowStepActionConfigImpl();
62: actionConfig.setActionType(clazz
63: .asSubclass(FlowStepAction.class));
64: for (int i = 0; i < attributes.getLength(); i++) {
65: actionConfig.setParam(attributes.getLocalName(i),
66: attributes.getValue(i));
67: }
68: condConfig.addAction(actionConfig);
69: }
70:
71: protected Map<String, Boolean> wantsAttributes() {
72: // This is not used here, so return null
73: return null;
74: }
75: }
|