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 =
72 Pattern.compile( "\\((\\d+)\\) \"(.*)\" <-> \\((\\d+)\\) \"(.*)\"" );
73
74
75 private static final Pattern COMPONENT_PATTERN1 = Pattern.compile( "\\((\\d+)\\) \"(.*)\"" );
76
77
78
79 private static final Pattern COMPONENT_PATTERN2 = Pattern.compile( "\\((\\d+)\\) \"(.*)\" <.*>" );
80
81
82 private static final Pattern BASELINE_PATTERN = Pattern.compile( "\\((\\d+)\\) (\\d+) \"(.*)\"" );
83
84
85
86
87
88
89 public static final String STATUS_CMD_WORKSPACE = "Workspace:";
90
91
92
93
94 public static final String STATUS_CMD_COMPONENT = "Component:";
95
96
97
98
99 public static final String STATUS_CMD_BASELINE = "Baseline:";
100
101
102
103
104
105
106 public static final String STATUS_CMD_ADD_FLAG = "a-";
107
108
109
110
111
112 public static final String STATUS_CMD_CHANGE_FLAG = "-c";
113
114
115
116
117 public static final String STATUS_CMD_DELETE_FLAG = "d-";
118
119
120
121
122 public static final String STATUS_CMD_MOVED_FLAG = "m-";
123
124
125
126
127 private List<ScmFile> fChangedFiles = new ArrayList<ScmFile>();
128
129
130
131
132
133
134
135 public JazzStatusConsumer( ScmProviderRepository repo, ScmLogger logger )
136 {
137 super( repo, logger );
138 }
139
140
141
142
143
144
145
146 public void consumeLine( String line )
147 {
148 super.consumeLine( line );
149 if ( containsWorkspace( line ) )
150 {
151 extractWorkspace( line );
152 }
153 if ( containsComponent( line ) )
154 {
155 extractComponent( line );
156 }
157 if ( containsBaseline( line ) )
158 {
159 extractBaseline( line );
160 }
161 if ( containsStatusFlag( line ) )
162 {
163 extractChangedFile( line );
164 }
165 }
166
167 private boolean containsWorkspace( String line )
168 {
169 return line.trim().startsWith( STATUS_CMD_WORKSPACE );
170 }
171
172 private void extractWorkspace( String line )
173 {
174
175
176
177
178
179 Matcher matcher = WORKSPACE_PATTERN.matcher( line );
180 if ( matcher.find() )
181 {
182 JazzScmProviderRepository jazzRepository = (JazzScmProviderRepository) getRepository();
183
184 int workspaceAlias = Integer.parseInt( matcher.group( 1 ) );
185 String workspace = matcher.group( 2 );
186 int streamAlias = Integer.parseInt( matcher.group( 3 ) );
187 String stream = matcher.group( 4 );
188 if ( getLogger().isDebugEnabled() )
189 {
190 getLogger().debug( "Successfully parsed \"Workspace:\" line:" );
191 getLogger().debug( " workspaceAlias = " + workspaceAlias );
192 getLogger().debug( " workspace = " + workspace );
193 getLogger().debug( " streamAlias = " + streamAlias );
194 getLogger().debug( " stream = " + stream );
195 }
196 jazzRepository.setWorkspaceAlias( workspaceAlias );
197 jazzRepository.setWorkspace( workspace );
198 jazzRepository.setFlowTargetAlias( streamAlias );
199 jazzRepository.setFlowTarget( stream );
200 }
201 }
202
203 private boolean containsComponent( String line )
204 {
205 return line.trim().startsWith( STATUS_CMD_COMPONENT );
206 }
207
208 private void extractComponent( String line )
209 {
210
211
212
213
214
215
216
217 Matcher matcher = COMPONENT_PATTERN1.matcher( line );
218 if ( matcher.find() )
219 {
220
221 JazzScmProviderRepository jazzRepository = (JazzScmProviderRepository) getRepository();
222 int componentAlias = Integer.parseInt( matcher.group( 1 ) );
223 String component = matcher.group( 2 );
224 if ( getLogger().isDebugEnabled() )
225 {
226 getLogger().debug( "Successfully parsed \"Component:\" line:" );
227 getLogger().debug( " componentAlias = " + componentAlias );
228 getLogger().debug( " component = " + component );
229 }
230 jazzRepository.setComponent( component );
231 }
232
233 matcher = COMPONENT_PATTERN2.matcher( line );
234 if ( matcher.find() )
235 {
236
237 JazzScmProviderRepository jazzRepository = (JazzScmProviderRepository) getRepository();
238 int componentAlias = Integer.parseInt( matcher.group( 1 ) );
239 String component = matcher.group( 2 );
240 if ( getLogger().isDebugEnabled() )
241 {
242 getLogger().debug( "Successfully parsed \"Component:\" line:" );
243 getLogger().debug( " componentAlias = " + componentAlias );
244 getLogger().debug( " component = " + component );
245 }
246 jazzRepository.setComponent( component );
247 }
248 }
249
250 private boolean containsBaseline( String line )
251 {
252 return line.trim().startsWith( STATUS_CMD_BASELINE );
253 }
254
255 private void extractBaseline( String line )
256 {
257
258
259 Matcher matcher = BASELINE_PATTERN.matcher( line );
260 if ( matcher.find() )
261 {
262 JazzScmProviderRepository jazzRepository = (JazzScmProviderRepository) getRepository();
263
264 int baselineAlias = Integer.parseInt( matcher.group( 1 ) );
265 int baselineId = Integer.parseInt( matcher.group( 2 ) );
266 String baseline = matcher.group( 3 );
267 if ( getLogger().isDebugEnabled() )
268 {
269 getLogger().debug( "Successfully parsed \"Baseline:\" line:" );
270 getLogger().debug( " baselineAlias = " + baselineAlias );
271 getLogger().debug( " baselineId = " + baselineId );
272 getLogger().debug( " baseline = " + baseline );
273 }
274 jazzRepository.setBaseline( baseline );
275 }
276 }
277
278 private boolean containsStatusFlag( String line )
279 {
280 boolean containsStatusFlag = false;
281
282 if ( line.trim().length() > 2 )
283 {
284 String flag = line.trim().substring( 0, 2 );
285 if ( STATUS_CMD_ADD_FLAG.equals( flag ) || 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 }