1 package org.apache.maven.scm.provider.jazz.command.status;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import org.apache.maven.scm.ScmFile;
23 import org.apache.maven.scm.ScmFileStatus;
24 import org.apache.maven.scm.log.ScmLogger;
25 import org.apache.maven.scm.provider.ScmProviderRepository;
26 import org.apache.maven.scm.provider.jazz.command.consumer.AbstractRepositoryConsumer;
27 import org.apache.maven.scm.provider.jazz.repository.JazzScmProviderRepository;
28
29 import java.util.ArrayList;
30 import java.util.List;
31 import java.util.regex.Matcher;
32 import java.util.regex.Pattern;
33
34
35
36
37
38
39
40
41
42
43
44
45
46 public class JazzStatusConsumer
47 extends AbstractRepositoryConsumer
48 {
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71 private static final Pattern WORKSPACE_PATTERN = Pattern.compile( "\\((\\d+)\\) \"(.*)\" <-> \\((\\d+)\\) \"(.*)\"" );
72
73
74 private static final Pattern COMPONENT_PATTERN1 = Pattern.compile( "\\((\\d+)\\) \"(.*)\"" );
75
76
77
78 private static final Pattern COMPONENT_PATTERN2 = Pattern.compile( "\\((\\d+)\\) \"(.*)\" <.*>" );
79
80
81 private static final Pattern BASELINE_PATTERN = Pattern.compile( "\\((\\d+)\\) (\\d+) \"(.*)\"" );
82
83
84
85
86
87
88 public static final String STATUS_CMD_WORKSPACE = "Workspace:";
89
90
91
92
93 public static final String STATUS_CMD_COMPONENT = "Component:";
94
95
96
97
98 public static final String STATUS_CMD_BASELINE = "Baseline:";
99
100
101
102
103
104
105 public static final String STATUS_CMD_ADD_FLAG = "a-";
106
107
108
109
110
111 public static final String STATUS_CMD_CHANGE_FLAG = "-c";
112
113
114
115
116 public static final String STATUS_CMD_DELETE_FLAG = "d-";
117
118
119
120
121 public static final String STATUS_CMD_MOVED_FLAG = "m-";
122
123
124
125
126 private List<ScmFile> fChangedFiles = new ArrayList<ScmFile>();
127
128
129
130
131
132
133
134 public JazzStatusConsumer( ScmProviderRepository repo, ScmLogger logger )
135 {
136 super( repo, logger );
137 }
138
139
140
141
142
143
144
145 public void consumeLine( String line )
146 {
147 super.consumeLine( line );
148 if ( containsWorkspace( line ) )
149 {
150 extractWorkspace( line );
151 }
152 if ( containsComponent( line ) )
153 {
154 extractComponent( line );
155 }
156 if ( containsBaseline( line ) )
157 {
158 extractBaseline( line );
159 }
160 if ( containsStatusFlag( line ) )
161 {
162 extractChangedFile( line );
163 }
164 }
165
166 private boolean containsWorkspace( String line )
167 {
168 return line.trim().startsWith( STATUS_CMD_WORKSPACE );
169 }
170
171 private void extractWorkspace( String line )
172 {
173
174
175
176
177
178 Matcher matcher = WORKSPACE_PATTERN.matcher( line );
179 if ( matcher.find() )
180 {
181 JazzScmProviderRepository jazzRepository = (JazzScmProviderRepository) getRepository();
182
183 int workspaceAlias = Integer.parseInt( matcher.group( 1 ) );
184 String workspace = matcher.group( 2 );
185 int streamAlias = Integer.parseInt( matcher.group( 3 ) );
186 String stream = matcher.group( 4 );
187 if ( getLogger().isDebugEnabled() )
188 {
189 getLogger().debug( "Successfully parsed \"Workspace:\" line:" );
190 getLogger().debug( " workspaceAlias = " + workspaceAlias );
191 getLogger().debug( " workspace = " + workspace );
192 getLogger().debug( " streamAlias = " + streamAlias );
193 getLogger().debug( " stream = " + stream );
194 }
195 jazzRepository.setWorkspaceAlias( workspaceAlias );
196 jazzRepository.setWorkspace( workspace );
197 jazzRepository.setFlowTargetAlias( streamAlias );
198 jazzRepository.setFlowTarget( stream );
199 }
200 }
201
202 private boolean containsComponent( String line )
203 {
204 return line.trim().startsWith( STATUS_CMD_COMPONENT );
205 }
206
207 private void extractComponent( String line )
208 {
209
210
211
212
213
214
215
216 Matcher matcher = COMPONENT_PATTERN1.matcher( line );
217 if ( matcher.find() )
218 {
219
220 JazzScmProviderRepository jazzRepository = (JazzScmProviderRepository) getRepository();
221 int componentAlias = Integer.parseInt( matcher.group( 1 ) );
222 String component = matcher.group( 2 );
223 if ( getLogger().isDebugEnabled() )
224 {
225 getLogger().debug( "Successfully parsed \"Component:\" line:" );
226 getLogger().debug( " componentAlias = " + componentAlias );
227 getLogger().debug( " component = " + component );
228 }
229 jazzRepository.setComponent( component );
230 }
231
232 matcher = COMPONENT_PATTERN2.matcher( line );
233 if ( matcher.find() )
234 {
235
236 JazzScmProviderRepository jazzRepository = (JazzScmProviderRepository) getRepository();
237 int componentAlias = Integer.parseInt( matcher.group( 1 ) );
238 String component = matcher.group( 2 );
239 if ( getLogger().isDebugEnabled() )
240 {
241 getLogger().debug( "Successfully parsed \"Component:\" line:" );
242 getLogger().debug( " componentAlias = " + componentAlias );
243 getLogger().debug( " component = " + component );
244 }
245 jazzRepository.setComponent( component );
246 }
247 }
248
249 private boolean containsBaseline( String line )
250 {
251 return line.trim().startsWith( STATUS_CMD_BASELINE );
252 }
253
254 private void extractBaseline( String line )
255 {
256
257
258 Matcher matcher = BASELINE_PATTERN.matcher( line );
259 if ( matcher.find() )
260 {
261 JazzScmProviderRepository jazzRepository = (JazzScmProviderRepository) getRepository();
262
263 int baselineAlias = Integer.parseInt( matcher.group( 1 ) );
264 int baselineId = Integer.parseInt( matcher.group( 2 ) );
265 String baseline = matcher.group( 3 );
266 if ( getLogger().isDebugEnabled() )
267 {
268 getLogger().debug( "Successfully parsed \"Baseline:\" line:" );
269 getLogger().debug( " baselineAlias = " + baselineAlias );
270 getLogger().debug( " baselineId = " + baselineId );
271 getLogger().debug( " baseline = " + baseline );
272 }
273 jazzRepository.setBaseline( baseline );
274 }
275 }
276
277 private boolean containsStatusFlag( String line )
278 {
279 boolean containsStatusFlag = false;
280
281 if ( line.trim().length() > 2 )
282 {
283 String flag = line.trim().substring( 0, 2 );
284 if ( STATUS_CMD_ADD_FLAG.equals( flag ) ||
285 STATUS_CMD_CHANGE_FLAG.equals( flag ) ||
286 STATUS_CMD_DELETE_FLAG.equals( flag ) )
287 {
288 containsStatusFlag = true;
289 }
290 }
291 return containsStatusFlag;
292 }
293
294 private void extractChangedFile( String line )
295 {
296 String flag = line.trim().substring( 0, 2 );
297 String filePath = line.trim().substring( 3 ).trim();
298 ScmFileStatus status = ScmFileStatus.UNKNOWN;
299
300 if ( STATUS_CMD_ADD_FLAG.equals( flag ) )
301 {
302 status = ScmFileStatus.ADDED;
303 }
304
305 if ( STATUS_CMD_CHANGE_FLAG.equals( flag ) )
306 {
307 status = ScmFileStatus.MODIFIED;
308 }
309
310 if ( STATUS_CMD_DELETE_FLAG.equals( flag ) )
311 {
312 status = ScmFileStatus.DELETED;
313 }
314
315 if ( getLogger().isDebugEnabled() )
316 {
317 getLogger().debug( " Line : '" + line + "'" );
318 getLogger().debug( " Extracted filePath : '" + filePath + "'" );
319 getLogger().debug( " Extracted flag : '" + flag + "'" );
320 getLogger().debug( " Extracted status : '" + status + "'" );
321 }
322
323 fChangedFiles.add( new ScmFile( filePath, status ) );
324 }
325
326 public List<ScmFile> getChangedFiles()
327 {
328 return fChangedFiles;
329 }
330 }