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.filtering;
19
20 import org.opensaml.common.IdentifierGenerator;
21 import org.opensaml.common.impl.RandomIdentifierGenerator;
22 import org.opensaml.xml.util.DatatypeHelper;
23 import org.springframework.beans.factory.support.AbstractBeanDefinition;
24 import org.springframework.beans.factory.xml.AbstractSingleBeanDefinitionParser;
25 import org.springframework.beans.factory.xml.ParserContext;
26 import org.w3c.dom.Element;
27
28
29
30
31
32 public abstract class BaseFilterBeanDefinitionParser extends AbstractSingleBeanDefinitionParser {
33
34
35 private static IdentifierGenerator idGen = new RandomIdentifierGenerator();
36
37
38 protected String resolveId(Element configElement, AbstractBeanDefinition beanDefinition, ParserContext parserContext) {
39 return getQualifiedId(configElement, configElement.getLocalName(), configElement.getAttributeNS(null, "id"));
40 }
41
42
43
44
45
46
47
48
49
50
51 protected String getQualifiedId(Element configElement, String componentNamespace, String localId) {
52 Element afpgElement = configElement.getOwnerDocument().getDocumentElement();
53 String policyGroupId = DatatypeHelper.safeTrimOrNullString(afpgElement.getAttributeNS(null, "id"));
54
55 StringBuilder qualifiedId = new StringBuilder();
56 qualifiedId.append("/");
57 qualifiedId.append(AttributeFilterPolicyGroupBeanDefinitionParser.ELEMENT_NAME.getLocalPart());
58 qualifiedId.append(":");
59 qualifiedId.append(policyGroupId);
60 if (!DatatypeHelper.isEmpty(componentNamespace)) {
61 qualifiedId.append("/");
62 qualifiedId.append(componentNamespace);
63 qualifiedId.append(":");
64
65 if (DatatypeHelper.isEmpty(localId)) {
66 qualifiedId.append(idGen.generateIdentifier());
67 } else {
68 qualifiedId.append(localId);
69 }
70 }
71
72 return qualifiedId.toString();
73 }
74
75
76
77
78
79
80
81
82
83
84 protected String getAbsoluteReference(Element configElement, String componentNamespace, String reference) {
85 if (reference.startsWith("/")) {
86 return reference;
87 } else {
88 return getQualifiedId(configElement, componentNamespace, reference);
89 }
90 }
91 }