1
2
3
4
5
6
7
8 package org.codehaus.plexus.security.user.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.user.jdo.v0_9_0.JdoUser;
25 import org.codehaus.plexus.security.user.jdo.v0_9_0.UserDatabase;
26 import org.codehaus.plexus.util.xml.Xpp3Dom;
27
28
29
30
31
32
33 public class UserManagementStaxWriter
34 {
35
36
37
38
39
40
41
42
43 private int curId;
44
45
46
47
48 private java.util.Map idMap;
49
50
51
52
53
54
55 public UserManagementStaxWriter()
56 {
57 idMap = new java.util.HashMap();
58 }
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73 public void write( Writer writer, UserDatabase userDatabase )
74 throws java.io.IOException, XMLStreamException
75 {
76 XMLOutputFactory factory = XMLOutputFactory.newInstance();
77 boolean supportWindowsLineEndings = false;
78 if ( factory.isPropertySupported( "com.ctc.wstx.outputEscapeCr" ) )
79 {
80 factory.setProperty( "com.ctc.wstx.outputEscapeCr", Boolean.FALSE );
81 supportWindowsLineEndings = true;
82 }
83 if ( factory.isPropertySupported( "org.codehaus.stax2.automaticEmptyElements" ) )
84 {
85 factory.setProperty( "org.codehaus.stax2.automaticEmptyElements", Boolean.FALSE );
86 }
87 IndentingXMLStreamWriter serializer = new IndentingXMLStreamWriter( factory.createXMLStreamWriter( writer ) );
88 if ( supportWindowsLineEndings )
89 {
90 serializer.setNewLine( serializer.getLineSeparator() );
91 }
92 serializer.writeStartDocument( userDatabase.getModelEncoding(), "1.0" );
93 writeUserDatabase( userDatabase, "userDatabase", serializer );
94 serializer.writeEndDocument();
95 }
96
97
98
99
100
101
102
103
104 private void writeDom( Xpp3Dom dom, XMLStreamWriter serializer )
105 throws XMLStreamException
106 {
107 serializer.writeStartElement( dom.getName() );
108 String[] attributeNames = dom.getAttributeNames();
109 for ( int i = 0; i < attributeNames.length; i++ )
110 {
111 String attributeName = attributeNames[i];
112 serializer.writeAttribute( attributeName, dom.getAttribute( attributeName ) );
113 }
114 Xpp3Dom[] children = dom.getChildren();
115 for ( int i = 0; i < children.length; i++ )
116 {
117 writeDom( children[i], serializer );
118 }
119 String value = dom.getValue();
120 if ( value != null )
121 {
122 serializer.writeCharacters( value );
123 }
124 serializer.writeEndElement();
125 }
126
127
128
129
130
131
132
133
134
135
136 private void writeJdoUser( JdoUser jdoUser, String tagName, XMLStreamWriter serializer )
137 throws java.io.IOException, XMLStreamException
138 {
139 if ( jdoUser != null )
140 {
141 serializer.writeStartElement( tagName );
142 if ( jdoUser.getUsername() != null )
143 {
144 serializer.writeStartElement( "username" );
145 serializer.writeCharacters( jdoUser.getUsername() );
146 serializer.writeEndElement();
147 }
148 if ( jdoUser.getPassword() != null )
149 {
150 serializer.writeStartElement( "password" );
151 serializer.writeCharacters( jdoUser.getPassword() );
152 serializer.writeEndElement();
153 }
154 if ( jdoUser.getEncodedPassword() != null )
155 {
156 serializer.writeStartElement( "encodedPassword" );
157 serializer.writeCharacters( jdoUser.getEncodedPassword() );
158 serializer.writeEndElement();
159 }
160 if ( jdoUser.getFullName() != null )
161 {
162 serializer.writeStartElement( "fullName" );
163 serializer.writeCharacters( jdoUser.getFullName() );
164 serializer.writeEndElement();
165 }
166 if ( jdoUser.getEmail() != null )
167 {
168 serializer.writeStartElement( "email" );
169 serializer.writeCharacters( jdoUser.getEmail() );
170 serializer.writeEndElement();
171 }
172 if ( jdoUser.getLastPasswordChange() != null )
173 {
174 serializer.writeStartElement( "lastPasswordChange" );
175 serializer.writeCharacters( new java.text.SimpleDateFormat( "yyyy-MM-dd'T'HH:mm:ss.SSS", Locale.US ).format( jdoUser.getLastPasswordChange() ) );
176 serializer.writeEndElement();
177 }
178 if ( jdoUser.getLastLoginDate() != null )
179 {
180 serializer.writeStartElement( "lastLoginDate" );
181 serializer.writeCharacters( new java.text.SimpleDateFormat( "yyyy-MM-dd'T'HH:mm:ss.SSS", Locale.US ).format( jdoUser.getLastLoginDate() ) );
182 serializer.writeEndElement();
183 }
184 if ( jdoUser.getCountFailedLoginAttempts() != 0 )
185 {
186 serializer.writeStartElement( "countFailedLoginAttempts" );
187 serializer.writeCharacters( String.valueOf( jdoUser.getCountFailedLoginAttempts() ) );
188 serializer.writeEndElement();
189 }
190 if ( jdoUser.isLocked() != false )
191 {
192 serializer.writeStartElement( "locked" );
193 serializer.writeCharacters( String.valueOf( jdoUser.isLocked() ) );
194 serializer.writeEndElement();
195 }
196 if ( jdoUser.isPermanent() != false )
197 {
198 serializer.writeStartElement( "permanent" );
199 serializer.writeCharacters( String.valueOf( jdoUser.isPermanent() ) );
200 serializer.writeEndElement();
201 }
202 if ( jdoUser.isValidated() != false )
203 {
204 serializer.writeStartElement( "validated" );
205 serializer.writeCharacters( String.valueOf( jdoUser.isValidated() ) );
206 serializer.writeEndElement();
207 }
208 if ( jdoUser.isPasswordChangeRequired() != false )
209 {
210 serializer.writeStartElement( "passwordChangeRequired" );
211 serializer.writeCharacters( String.valueOf( jdoUser.isPasswordChangeRequired() ) );
212 serializer.writeEndElement();
213 }
214 if ( ( jdoUser.getPreviousEncodedPasswords() != null ) && ( jdoUser.getPreviousEncodedPasswords().size() > 0 ) )
215 {
216 serializer.writeStartElement( "previousEncodedPasswords" );
217 for ( Iterator iter = jdoUser.getPreviousEncodedPasswords().iterator(); iter.hasNext(); )
218 {
219 String previousEncodedPassword = (String) iter.next();
220 serializer.writeStartElement( "previousEncodedPassword" );
221 serializer.writeCharacters( previousEncodedPassword );
222 serializer.writeEndElement();
223 }
224 serializer.writeEndElement();
225 }
226 if ( jdoUser.getAccountCreationDate() != null )
227 {
228 serializer.writeStartElement( "accountCreationDate" );
229 serializer.writeCharacters( new java.text.SimpleDateFormat( "yyyy-MM-dd'T'HH:mm:ss.SSS", Locale.US ).format( jdoUser.getAccountCreationDate() ) );
230 serializer.writeEndElement();
231 }
232 serializer.writeEndElement();
233 }
234 }
235
236
237
238
239
240
241
242
243
244
245 private void writeUserDatabase( UserDatabase userDatabase, String tagName, XMLStreamWriter serializer )
246 throws java.io.IOException, XMLStreamException
247 {
248 if ( userDatabase != null )
249 {
250 serializer.writeStartElement( tagName );
251 if ( ( userDatabase.getUsers() != null ) && ( userDatabase.getUsers().size() > 0 ) )
252 {
253 serializer.writeStartElement( "users" );
254 for ( Iterator iter = userDatabase.getUsers().iterator(); iter.hasNext(); )
255 {
256 JdoUser o = (JdoUser) iter.next();
257 writeJdoUser( o, "user", serializer );
258 }
259 serializer.writeEndElement();
260 }
261 serializer.writeEndElement();
262 }
263 }
264
265 }