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