Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/openjdk-multiarch-jdk8u
Path: blob/aarch64-shenandoah-jdk8u272-b10/jdk/src/share/classes/javax/xml/crypto/dom/DOMCryptoContext.java
38918 views
1
/*
2
* Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved.
3
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4
*
5
* This code is free software; you can redistribute it and/or modify it
6
* under the terms of the GNU General Public License version 2 only, as
7
* published by the Free Software Foundation. Oracle designates this
8
* particular file as subject to the "Classpath" exception as provided
9
* by Oracle in the LICENSE file that accompanied this code.
10
*
11
* This code is distributed in the hope that it will be useful, but WITHOUT
12
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14
* version 2 for more details (a copy is included in the LICENSE file that
15
* accompanied this code).
16
*
17
* You should have received a copy of the GNU General Public License version
18
* 2 along with this work; if not, write to the Free Software Foundation,
19
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20
*
21
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22
* or visit www.oracle.com if you need additional information or have any
23
* questions.
24
*/
25
/*
26
* $Id: DOMCryptoContext.java,v 1.3 2005/05/09 18:33:26 mullan Exp $
27
*/
28
package javax.xml.crypto.dom;
29
30
import javax.xml.crypto.KeySelector;
31
import javax.xml.crypto.URIDereferencer;
32
import javax.xml.crypto.XMLCryptoContext;
33
import java.util.Collections;
34
import java.util.HashMap;
35
import java.util.Iterator;
36
import org.w3c.dom.Element;
37
38
/**
39
* This class provides a DOM-specific implementation of the
40
* {@link XMLCryptoContext} interface. It also includes additional
41
* methods that are specific to a DOM-based implementation for registering
42
* and retrieving elements that contain attributes of type ID.
43
*
44
* @author Sean Mullan
45
* @author JSR 105 Expert Group
46
* @since 1.6
47
*/
48
public class DOMCryptoContext implements XMLCryptoContext {
49
50
private HashMap<String,String> nsMap = new HashMap<>();
51
private HashMap<String,Element> idMap = new HashMap<>();
52
private HashMap<Object,Object> objMap = new HashMap<>();
53
private String baseURI;
54
private KeySelector ks;
55
private URIDereferencer dereferencer;
56
private HashMap<String,Object> propMap = new HashMap<>();
57
private String defaultPrefix;
58
59
/**
60
* Default constructor. (For invocation by subclass constructors).
61
*/
62
protected DOMCryptoContext() {}
63
64
/**
65
* This implementation uses an internal {@link HashMap} to get the prefix
66
* that the specified URI maps to. It returns the <code>defaultPrefix</code>
67
* if it maps to <code>null</code>.
68
*
69
* @throws NullPointerException {@inheritDoc}
70
*/
71
public String getNamespacePrefix(String namespaceURI,
72
String defaultPrefix) {
73
if (namespaceURI == null) {
74
throw new NullPointerException("namespaceURI cannot be null");
75
}
76
String prefix = nsMap.get(namespaceURI);
77
return (prefix != null ? prefix : defaultPrefix);
78
}
79
80
/**
81
* This implementation uses an internal {@link HashMap} to map the URI
82
* to the specified prefix.
83
*
84
* @throws NullPointerException {@inheritDoc}
85
*/
86
public String putNamespacePrefix(String namespaceURI, String prefix) {
87
if (namespaceURI == null) {
88
throw new NullPointerException("namespaceURI is null");
89
}
90
return nsMap.put(namespaceURI, prefix);
91
}
92
93
public String getDefaultNamespacePrefix() {
94
return defaultPrefix;
95
}
96
97
public void setDefaultNamespacePrefix(String defaultPrefix) {
98
this.defaultPrefix = defaultPrefix;
99
}
100
101
public String getBaseURI() {
102
return baseURI;
103
}
104
105
/**
106
* @throws IllegalArgumentException {@inheritDoc}
107
*/
108
public void setBaseURI(String baseURI) {
109
if (baseURI != null) {
110
java.net.URI.create(baseURI);
111
}
112
this.baseURI = baseURI;
113
}
114
115
public URIDereferencer getURIDereferencer() {
116
return dereferencer;
117
}
118
119
public void setURIDereferencer(URIDereferencer dereferencer) {
120
this.dereferencer = dereferencer;
121
}
122
123
/**
124
* This implementation uses an internal {@link HashMap} to get the object
125
* that the specified name maps to.
126
*
127
* @throws NullPointerException {@inheritDoc}
128
*/
129
public Object getProperty(String name) {
130
if (name == null) {
131
throw new NullPointerException("name is null");
132
}
133
return propMap.get(name);
134
}
135
136
/**
137
* This implementation uses an internal {@link HashMap} to map the name
138
* to the specified object.
139
*
140
* @throws NullPointerException {@inheritDoc}
141
*/
142
public Object setProperty(String name, Object value) {
143
if (name == null) {
144
throw new NullPointerException("name is null");
145
}
146
return propMap.put(name, value);
147
}
148
149
public KeySelector getKeySelector() {
150
return ks;
151
}
152
153
public void setKeySelector(KeySelector ks) {
154
this.ks = ks;
155
}
156
157
/**
158
* Returns the <code>Element</code> with the specified ID attribute value.
159
*
160
* <p>This implementation uses an internal {@link HashMap} to get the
161
* element that the specified attribute value maps to.
162
*
163
* @param idValue the value of the ID
164
* @return the <code>Element</code> with the specified ID attribute value,
165
* or <code>null</code> if none.
166
* @throws NullPointerException if <code>idValue</code> is <code>null</code>
167
* @see #setIdAttributeNS
168
*/
169
public Element getElementById(String idValue) {
170
if (idValue == null) {
171
throw new NullPointerException("idValue is null");
172
}
173
return idMap.get(idValue);
174
}
175
176
/**
177
* Registers the element's attribute specified by the namespace URI and
178
* local name to be of type ID. The attribute must have a non-empty value.
179
*
180
* <p>This implementation uses an internal {@link HashMap} to map the
181
* attribute's value to the specified element.
182
*
183
* @param element the element
184
* @param namespaceURI the namespace URI of the attribute (specify
185
* <code>null</code> if not applicable)
186
* @param localName the local name of the attribute
187
* @throws IllegalArgumentException if <code>localName</code> is not an
188
* attribute of the specified element or it does not contain a specific
189
* value
190
* @throws NullPointerException if <code>element</code> or
191
* <code>localName</code> is <code>null</code>
192
* @see #getElementById
193
*/
194
public void setIdAttributeNS(Element element, String namespaceURI,
195
String localName) {
196
if (element == null) {
197
throw new NullPointerException("element is null");
198
}
199
if (localName == null) {
200
throw new NullPointerException("localName is null");
201
}
202
String idValue = element.getAttributeNS(namespaceURI, localName);
203
if (idValue == null || idValue.length() == 0) {
204
throw new IllegalArgumentException(localName + " is not an " +
205
"attribute");
206
}
207
idMap.put(idValue, element);
208
}
209
210
/**
211
* Returns a read-only iterator over the set of Id/Element mappings of
212
* this <code>DOMCryptoContext</code>. Attempts to modify the set via the
213
* {@link Iterator#remove} method throw an
214
* <code>UnsupportedOperationException</code>. The mappings are returned
215
* in no particular order. Each element in the iteration is represented as a
216
* {@link java.util.Map.Entry}. If the <code>DOMCryptoContext</code> is
217
* modified while an iteration is in progress, the results of the
218
* iteration are undefined.
219
*
220
* @return a read-only iterator over the set of mappings
221
*/
222
@SuppressWarnings("rawtypes")
223
public Iterator iterator() {
224
return Collections.unmodifiableMap(idMap).entrySet().iterator();
225
}
226
227
/**
228
* This implementation uses an internal {@link HashMap} to get the object
229
* that the specified key maps to.
230
*/
231
public Object get(Object key) {
232
return objMap.get(key);
233
}
234
235
/**
236
* This implementation uses an internal {@link HashMap} to map the key
237
* to the specified object.
238
*
239
* @throws IllegalArgumentException {@inheritDoc}
240
*/
241
public Object put(Object key, Object value) {
242
return objMap.put(key, value);
243
}
244
}
245
246