1
2
3
4
5
6
7
8 package org.codehaus.plexus.security.authorization.rbac.jdo.v0_9_0.io.stax;
9
10
11
12
13
14 import java.io.IOException;
15 import java.io.InputStream;
16 import java.io.StringWriter;
17 import java.io.Writer;
18 import java.text.DateFormat;
19 import java.util.Iterator;
20 import java.util.Locale;
21 import java.util.jar.Manifest;
22 import javanet.staxutils.IndentingXMLStreamWriter;
23 import javax.xml.stream.*;
24 import org.codehaus.plexus.security.authorization.rbac.jdo.v0_9_0.JdoOperation;
25 import org.codehaus.plexus.security.authorization.rbac.jdo.v0_9_0.JdoPermission;
26 import org.codehaus.plexus.security.authorization.rbac.jdo.v0_9_0.JdoResource;
27 import org.codehaus.plexus.security.authorization.rbac.jdo.v0_9_0.JdoRole;
28 import org.codehaus.plexus.security.authorization.rbac.jdo.v0_9_0.JdoUserAssignment;
29 import org.codehaus.plexus.security.authorization.rbac.jdo.v0_9_0.RbacDatabase;
30 import org.codehaus.plexus.util.xml.Xpp3Dom;
31
32
33
34
35
36
37 public class RbacJdoModelStaxWriter
38 {
39
40
41
42
43
44
45
46
47 private int curId;
48
49
50
51
52 private java.util.Map idMap;
53
54
55
56
57
58
59 public RbacJdoModelStaxWriter()
60 {
61 idMap = new java.util.HashMap();
62 }
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77 public void write( Writer writer, RbacDatabase rbacDatabase )
78 throws java.io.IOException, XMLStreamException
79 {
80 XMLOutputFactory factory = XMLOutputFactory.newInstance();
81 boolean supportWindowsLineEndings = false;
82 if ( factory.isPropertySupported( "com.ctc.wstx.outputEscapeCr" ) )
83 {
84 factory.setProperty( "com.ctc.wstx.outputEscapeCr", Boolean.FALSE );
85 supportWindowsLineEndings = true;
86 }
87 if ( factory.isPropertySupported( "org.codehaus.stax2.automaticEmptyElements" ) )
88 {
89 factory.setProperty( "org.codehaus.stax2.automaticEmptyElements", Boolean.FALSE );
90 }
91 IndentingXMLStreamWriter serializer = new IndentingXMLStreamWriter( factory.createXMLStreamWriter( writer ) );
92 if ( supportWindowsLineEndings )
93 {
94 serializer.setNewLine( serializer.getLineSeparator() );
95 }
96 serializer.writeStartDocument( rbacDatabase.getModelEncoding(), "1.0" );
97 writeRbacDatabase( rbacDatabase, "rbacDatabase", serializer );
98 serializer.writeEndDocument();
99 }
100
101
102
103
104
105
106
107
108 private void writeDom( Xpp3Dom dom, XMLStreamWriter serializer )
109 throws XMLStreamException
110 {
111 serializer.writeStartElement( dom.getName() );
112 String[] attributeNames = dom.getAttributeNames();
113 for ( int i = 0; i < attributeNames.length; i++ )
114 {
115 String attributeName = attributeNames[i];
116 serializer.writeAttribute( attributeName, dom.getAttribute( attributeName ) );
117 }
118 Xpp3Dom[] children = dom.getChildren();
119 for ( int i = 0; i < children.length; i++ )
120 {
121 writeDom( children[i], serializer );
122 }
123 String value = dom.getValue();
124 if ( value != null )
125 {
126 serializer.writeCharacters( value );
127 }
128 serializer.writeEndElement();
129 }
130
131
132
133
134
135
136
137
138
139
140 private void writeJdoOperation( JdoOperation jdoOperation, String tagName, XMLStreamWriter serializer )
141 throws java.io.IOException, XMLStreamException
142 {
143 if ( jdoOperation != null )
144 {
145 serializer.writeStartElement( tagName );
146 if ( jdoOperation.getName() != null )
147 {
148 serializer.writeStartElement( "name" );
149 serializer.writeCharacters( jdoOperation.getName() );
150 serializer.writeEndElement();
151 }
152 if ( jdoOperation.getDescription() != null )
153 {
154 serializer.writeStartElement( "description" );
155 serializer.writeCharacters( jdoOperation.getDescription() );
156 serializer.writeEndElement();
157 }
158 if ( jdoOperation.isPermanent() != false )
159 {
160 serializer.writeStartElement( "permanent" );
161 serializer.writeCharacters( String.valueOf( jdoOperation.isPermanent() ) );
162 serializer.writeEndElement();
163 }
164 if ( jdoOperation.isResourceRequired() != false )
165 {
166 serializer.writeStartElement( "resourceRequired" );
167 serializer.writeCharacters( String.valueOf( jdoOperation.isResourceRequired() ) );
168 serializer.writeEndElement();
169 }
170 serializer.writeEndElement();
171 }
172 }
173
174
175
176
177
178
179
180
181
182
183 private void writeJdoPermission( JdoPermission jdoPermission, String tagName, XMLStreamWriter serializer )
184 throws java.io.IOException, XMLStreamException
185 {
186 if ( jdoPermission != null )
187 {
188 serializer.writeStartElement( tagName );
189 if ( jdoPermission.getName() != null )
190 {
191 serializer.writeStartElement( "name" );
192 serializer.writeCharacters( jdoPermission.getName() );
193 serializer.writeEndElement();
194 }
195 if ( jdoPermission.getDescription() != null )
196 {
197 serializer.writeStartElement( "description" );
198 serializer.writeCharacters( jdoPermission.getDescription() );
199 serializer.writeEndElement();
200 }
201 if ( jdoPermission.isPermanent() != false )
202 {
203 serializer.writeStartElement( "permanent" );
204 serializer.writeCharacters( String.valueOf( jdoPermission.isPermanent() ) );
205 serializer.writeEndElement();
206 }
207 if ( jdoPermission.getOperation() != null )
208 {
209 serializer.writeStartElement( "operation" );
210 serializer.writeAttribute( "name", jdoPermission.getOperation().getName() );
211 serializer.writeEndElement();
212 }
213 if ( jdoPermission.getResource() != null )
214 {
215 serializer.writeStartElement( "resource" );
216 serializer.writeAttribute( "identifier", jdoPermission.getResource().getIdentifier() );
217 serializer.writeEndElement();
218 }
219 serializer.writeEndElement();
220 }
221 }
222
223
224
225
226
227
228
229
230
231
232 private void writeJdoResource( JdoResource jdoResource, String tagName, XMLStreamWriter serializer )
233 throws java.io.IOException, XMLStreamException
234 {
235 if ( jdoResource != null )
236 {
237 serializer.writeStartElement( tagName );
238 if ( jdoResource.getIdentifier() != null )
239 {
240 serializer.writeStartElement( "identifier" );
241 serializer.writeCharacters( jdoResource.getIdentifier() );
242 serializer.writeEndElement();
243 }
244 if ( jdoResource.isPattern() != false )
245 {
246 serializer.writeStartElement( "pattern" );
247 serializer.writeCharacters( String.valueOf( jdoResource.isPattern() ) );
248 serializer.writeEndElement();
249 }
250 if ( jdoResource.isPermanent() != false )
251 {
252 serializer.writeStartElement( "permanent" );
253 serializer.writeCharacters( String.valueOf( jdoResource.isPermanent() ) );
254 serializer.writeEndElement();
255 }
256 serializer.writeEndElement();
257 }
258 }
259
260
261
262
263
264
265
266
267
268
269 private void writeJdoRole( JdoRole jdoRole, String tagName, XMLStreamWriter serializer )
270 throws java.io.IOException, XMLStreamException
271 {
272 if ( jdoRole != null )
273 {
274 serializer.writeStartElement( tagName );
275 if ( jdoRole.getName() != null )
276 {
277 serializer.writeStartElement( "name" );
278 serializer.writeCharacters( jdoRole.getName() );
279 serializer.writeEndElement();
280 }
281 if ( jdoRole.getDescription() != null )
282 {
283 serializer.writeStartElement( "description" );
284 serializer.writeCharacters( jdoRole.getDescription() );
285 serializer.writeEndElement();
286 }
287 if ( jdoRole.isAssignable() != false )
288 {
289 serializer.writeStartElement( "assignable" );
290 serializer.writeCharacters( String.valueOf( jdoRole.isAssignable() ) );
291 serializer.writeEndElement();
292 }
293 if ( jdoRole.isPermanent() != false )
294 {
295 serializer.writeStartElement( "permanent" );
296 serializer.writeCharacters( String.valueOf( jdoRole.isPermanent() ) );
297 serializer.writeEndElement();
298 }
299 if ( ( jdoRole.getChildRoleNames() != null ) && ( jdoRole.getChildRoleNames().size() > 0 ) )
300 {
301 serializer.writeStartElement( "childRoleNames" );
302 for ( Iterator iter = jdoRole.getChildRoleNames().iterator(); iter.hasNext(); )
303 {
304 String childRoleName = (String) iter.next();
305 serializer.writeStartElement( "childRoleName" );
306 serializer.writeCharacters( childRoleName );
307 serializer.writeEndElement();
308 }
309 serializer.writeEndElement();
310 }
311 if ( ( jdoRole.getPermissions() != null ) && ( jdoRole.getPermissions().size() > 0 ) )
312 {
313 serializer.writeStartElement( "permissions" );
314 for ( Iterator iter = jdoRole.getPermissions().iterator(); iter.hasNext(); )
315 {
316 JdoPermission o = (JdoPermission) iter.next();
317 serializer.writeStartElement( "permission" );
318 serializer.writeAttribute( "name", o.getName() );
319 serializer.writeEndElement();
320 }
321 serializer.writeEndElement();
322 }
323 serializer.writeEndElement();
324 }
325 }
326
327
328
329
330
331
332
333
334
335
336 private void writeJdoUserAssignment( JdoUserAssignment jdoUserAssignment, String tagName, XMLStreamWriter serializer )
337 throws java.io.IOException, XMLStreamException
338 {
339 if ( jdoUserAssignment != null )
340 {
341 serializer.writeStartElement( tagName );
342 if ( jdoUserAssignment.getPrincipal() != null )
343 {
344 serializer.writeStartElement( "principal" );
345 serializer.writeCharacters( jdoUserAssignment.getPrincipal() );
346 serializer.writeEndElement();
347 }
348 if ( jdoUserAssignment.getTimestamp() != null )
349 {
350 serializer.writeStartElement( "timestamp" );
351 serializer.writeCharacters( new java.text.SimpleDateFormat( "yyyy-MM-dd'T'HH:mm:ss.SSS", Locale.US ).format( jdoUserAssignment.getTimestamp() ) );
352 serializer.writeEndElement();
353 }
354 if ( jdoUserAssignment.isPermanent() != false )
355 {
356 serializer.writeStartElement( "permanent" );
357 serializer.writeCharacters( String.valueOf( jdoUserAssignment.isPermanent() ) );
358 serializer.writeEndElement();
359 }
360 if ( ( jdoUserAssignment.getRoleNames() != null ) && ( jdoUserAssignment.getRoleNames().size() > 0 ) )
361 {
362 serializer.writeStartElement( "roleNames" );
363 for ( Iterator iter = jdoUserAssignment.getRoleNames().iterator(); iter.hasNext(); )
364 {
365 String roleName = (String) iter.next();
366 serializer.writeStartElement( "roleName" );
367 serializer.writeCharacters( roleName );
368 serializer.writeEndElement();
369 }
370 serializer.writeEndElement();
371 }
372 serializer.writeEndElement();
373 }
374 }
375
376
377
378
379
380
381
382
383
384
385 private void writeRbacDatabase( RbacDatabase rbacDatabase, String tagName, XMLStreamWriter serializer )
386 throws java.io.IOException, XMLStreamException
387 {
388 if ( rbacDatabase != null )
389 {
390 serializer.writeStartElement( tagName );
391 if ( ( rbacDatabase.getRoles() != null ) && ( rbacDatabase.getRoles().size() > 0 ) )
392 {
393 serializer.writeStartElement( "roles" );
394 for ( Iterator iter = rbacDatabase.getRoles().iterator(); iter.hasNext(); )
395 {
396 JdoRole o = (JdoRole) iter.next();
397 writeJdoRole( o, "role", serializer );
398 }
399 serializer.writeEndElement();
400 }
401 if ( ( rbacDatabase.getPermissions() != null ) && ( rbacDatabase.getPermissions().size() > 0 ) )
402 {
403 serializer.writeStartElement( "permissions" );
404 for ( Iterator iter = rbacDatabase.getPermissions().iterator(); iter.hasNext(); )
405 {
406 JdoPermission o = (JdoPermission) iter.next();
407 writeJdoPermission( o, "permission", serializer );
408 }
409 serializer.writeEndElement();
410 }
411 if ( ( rbacDatabase.getOperations() != null ) && ( rbacDatabase.getOperations().size() > 0 ) )
412 {
413 serializer.writeStartElement( "operations" );
414 for ( Iterator iter = rbacDatabase.getOperations().iterator(); iter.hasNext(); )
415 {
416 JdoOperation o = (JdoOperation) iter.next();
417 writeJdoOperation( o, "operation", serializer );
418 }
419 serializer.writeEndElement();
420 }
421 if ( ( rbacDatabase.getResources() != null ) && ( rbacDatabase.getResources().size() > 0 ) )
422 {
423 serializer.writeStartElement( "resources" );
424 for ( Iterator iter = rbacDatabase.getResources().iterator(); iter.hasNext(); )
425 {
426 JdoResource o = (JdoResource) iter.next();
427 writeJdoResource( o, "resource", serializer );
428 }
429 serializer.writeEndElement();
430 }
431 if ( ( rbacDatabase.getUserAssignments() != null ) && ( rbacDatabase.getUserAssignments().size() > 0 ) )
432 {
433 serializer.writeStartElement( "userAssignments" );
434 for ( Iterator iter = rbacDatabase.getUserAssignments().iterator(); iter.hasNext(); )
435 {
436 JdoUserAssignment o = (JdoUserAssignment) iter.next();
437 writeJdoUserAssignment( o, "userAssignment", serializer );
438 }
439 serializer.writeEndElement();
440 }
441 serializer.writeEndElement();
442 }
443 }
444
445 }