1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package edu.internet2.middleware.shibboleth.common.config.attribute.resolver;
19
20 import java.util.ArrayList;
21 import java.util.List;
22 import java.util.Map;
23
24 import javax.xml.namespace.QName;
25
26 import org.opensaml.xml.util.DatatypeHelper;
27 import org.opensaml.xml.util.XMLHelper;
28 import org.slf4j.Logger;
29 import org.slf4j.LoggerFactory;
30 import org.springframework.beans.factory.support.AbstractBeanDefinition;
31 import org.springframework.beans.factory.support.BeanDefinitionBuilder;
32 import org.springframework.beans.factory.xml.AbstractSingleBeanDefinitionParser;
33 import org.springframework.beans.factory.xml.ParserContext;
34 import org.w3c.dom.Element;
35
36
37
38
39 public abstract class AbstractResolutionPlugInBeanDefinitionParser extends AbstractSingleBeanDefinitionParser {
40
41
42 public static final QName DEPENDENCY_ELEMENT_NAME = new QName(AttributeResolverNamespaceHandler.NAMESPACE,
43 "Dependency");
44
45
46 private final Logger log = LoggerFactory.getLogger(AbstractResolutionPlugInBeanDefinitionParser.class);
47
48
49
50
51
52
53 protected final void doParse(Element config, ParserContext parserContext, BeanDefinitionBuilder builder) {
54 String pluginId = DatatypeHelper.safeTrimOrNullString(config.getAttributeNS(null, "id"));
55 log.info("Parsing configuration for {} plugin with ID: {}", config.getLocalName(), pluginId);
56 builder.addPropertyValue("pluginId", pluginId);
57
58 Map<QName, List<Element>> children = XMLHelper.getChildElements(config);
59
60 List<String> dependencyIds = parseDependencies(children.get(DEPENDENCY_ELEMENT_NAME));
61 if(dependencyIds != null && !dependencyIds.isEmpty()){
62 log.debug("Dependencies for plugin {}: {}", pluginId, dependencyIds);
63 builder.addPropertyValue("dependencyIds", dependencyIds);
64 }else{
65 log.debug("Dependencies for plugin {}: none", pluginId);
66 }
67
68 doParse(pluginId, config, children, builder, parserContext);
69 }
70
71
72
73
74
75
76
77
78
79
80
81 protected abstract void doParse(String pluginId, Element pluginConfig,
82 Map<QName, List<Element>> pluginConfigChildren, BeanDefinitionBuilder pluginBuilder,
83 ParserContext parserContext);
84
85
86 protected String resolveId(Element element, AbstractBeanDefinition definition, ParserContext parserContext) {
87 return element.getAttributeNS(null, "id");
88 }
89
90
91
92
93
94
95
96
97 protected List<String> parseDependencies(List<Element> elements) {
98 if (elements == null || elements.size() == 0) {
99 return null;
100 }
101
102 List<String> dependencyIds = new ArrayList<String>();
103 for (Element dependency : elements) {
104 dependencyIds.add(DatatypeHelper.safeTrimOrNullString(dependency.getAttributeNS(null, "ref")));
105 }
106
107 return dependencyIds;
108 }
109 }