1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 package org.apache.maven.buildcache.xml.diff.io.xpp3;
25
26
27
28
29
30 import java.io.OutputStream;
31 import java.io.Writer;
32 import java.util.Iterator;
33 import org.apache.maven.buildcache.xml.diff.Diff;
34 import org.apache.maven.buildcache.xml.diff.Mismatch;
35 import org.apache.maven.buildcache.xml.diff.MismatchDetail;
36 import org.codehaus.plexus.util.xml.pull.MXSerializer;
37 import org.codehaus.plexus.util.xml.pull.XmlSerializer;
38
39
40
41
42
43
44 @SuppressWarnings( "all" )
45 public class BuildCacheDiffXpp3Writer
46 {
47
48
49
50
51
52
53
54
55 private static final String NAMESPACE = null;
56
57
58
59
60 private String fileComment = null;
61
62
63
64
65
66
67
68
69
70
71
72 public void setFileComment( String fileComment )
73 {
74 this.fileComment = fileComment;
75 }
76
77
78
79
80
81
82
83
84 public void write( Writer writer, Diff diff )
85 throws java.io.IOException
86 {
87 XmlSerializer serializer = new MXSerializer();
88 serializer.setProperty( "http://xmlpull.org/v1/doc/properties.html#serializer-indentation", " " );
89 serializer.setProperty( "http://xmlpull.org/v1/doc/properties.html#serializer-line-separator", "\n" );
90 serializer.setOutput( writer );
91 serializer.startDocument( diff.getModelEncoding(), null );
92 writeDiff( diff, "diff", serializer );
93 serializer.endDocument();
94 }
95
96
97
98
99
100
101
102
103 public void write( OutputStream stream, Diff diff )
104 throws java.io.IOException
105 {
106 XmlSerializer serializer = new MXSerializer();
107 serializer.setProperty( "http://xmlpull.org/v1/doc/properties.html#serializer-indentation", " " );
108 serializer.setProperty( "http://xmlpull.org/v1/doc/properties.html#serializer-line-separator", "\n" );
109 serializer.setOutput( stream, diff.getModelEncoding() );
110 serializer.startDocument( diff.getModelEncoding(), null );
111 writeDiff( diff, "diff", serializer );
112 serializer.endDocument();
113 }
114
115
116
117
118
119
120
121
122
123 private void writeDiff( Diff diff, String tagName, XmlSerializer serializer )
124 throws java.io.IOException
125 {
126 if ( this.fileComment != null )
127 {
128 serializer.comment(this.fileComment);
129 }
130 serializer.setPrefix( "", "http://maven.apache.org/BUILD-CACHE-DIFF/1.2.0" );
131 serializer.setPrefix( "xsi", "http://www.w3.org/2001/XMLSchema-instance" );
132 serializer.startTag( NAMESPACE, tagName );
133 serializer.attribute( "", "xsi:schemaLocation", "http://maven.apache.org/BUILD-CACHE-DIFF/1.2.0 https://maven.apache.org/xsd/build-cache-diff-1.2.0.xsd" );
134 if ( ( diff.getMismatches() != null ) && ( diff.getMismatches().size() > 0 ) )
135 {
136 serializer.startTag( NAMESPACE, "mismatches" );
137 for ( Iterator iter = diff.getMismatches().iterator(); iter.hasNext(); )
138 {
139 Mismatch o = (Mismatch) iter.next();
140 writeMismatch( o, "mismatch", serializer );
141 }
142 serializer.endTag( NAMESPACE, "mismatches" );
143 }
144 serializer.endTag( NAMESPACE, tagName );
145 }
146
147
148
149
150
151
152
153
154
155 private void writeMismatch( Mismatch mismatch, String tagName, XmlSerializer serializer )
156 throws java.io.IOException
157 {
158 serializer.startTag( NAMESPACE, tagName );
159 if ( mismatch.getItem() != null )
160 {
161 serializer.attribute( NAMESPACE, "item", mismatch.getItem() );
162 }
163 if ( mismatch.getCurrent() != null )
164 {
165 serializer.attribute( NAMESPACE, "current", mismatch.getCurrent() );
166 }
167 if ( mismatch.getBaseline() != null )
168 {
169 serializer.attribute( NAMESPACE, "baseline", mismatch.getBaseline() );
170 }
171 if ( mismatch.getReason() != null )
172 {
173 serializer.attribute( NAMESPACE, "reason", mismatch.getReason() );
174 }
175 if ( mismatch.getResolution() != null )
176 {
177 serializer.attribute( NAMESPACE, "resolution", mismatch.getResolution() );
178 }
179 if ( mismatch.getContext() != null )
180 {
181 serializer.attribute( NAMESPACE, "context", mismatch.getContext() );
182 }
183 if ( ( mismatch.getDetail() != null ) && ( mismatch.getDetail().size() > 0 ) )
184 {
185 serializer.startTag( NAMESPACE, "detail" );
186 for ( Iterator iter = mismatch.getDetail().iterator(); iter.hasNext(); )
187 {
188 MismatchDetail o = (MismatchDetail) iter.next();
189 writeMismatchDetail( o, "detail", serializer );
190 }
191 serializer.endTag( NAMESPACE, "detail" );
192 }
193 serializer.endTag( NAMESPACE, tagName );
194 }
195
196
197
198
199
200
201
202
203
204 private void writeMismatchDetail( MismatchDetail mismatchDetail, String tagName, XmlSerializer serializer )
205 throws java.io.IOException
206 {
207 serializer.startTag( NAMESPACE, tagName );
208 serializer.endTag( NAMESPACE, tagName );
209 }
210
211 }