1 package org.apache.maven.scm.provider.perforce.command.edit;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.util.ArrayList;
23 import java.util.List;
24
25 import org.apache.maven.scm.ScmFile;
26 import org.apache.maven.scm.ScmFileStatus;
27 import org.apache.maven.scm.provider.perforce.command.AbstractPerforceConsumer;
28 import org.apache.regexp.RE;
29 import org.apache.regexp.RESyntaxException;
30 import org.codehaus.plexus.util.cli.StreamConsumer;
31
32
33
34
35
36 public class PerforceEditConsumer
37 extends AbstractPerforceConsumer
38 implements StreamConsumer
39 {
40
41 private static final String PATTERN = "^([^#]+)#\\d+ - (.*)";
42
43 private static final String FILE_BEGIN_TOKEN = "//";
44
45 private List<ScmFile> edits = new ArrayList<ScmFile>();
46
47 private RE revisionRegexp;
48
49 private boolean errors = false;
50 private StringBuilder errorMessage = new StringBuilder();
51
52 public PerforceEditConsumer()
53 {
54 try
55 {
56 revisionRegexp = new RE( PATTERN );
57 }
58 catch ( RESyntaxException ignored )
59 {
60 ignored.printStackTrace();
61 }
62 }
63
64 public List<ScmFile> getEdits()
65 {
66 return edits;
67 }
68
69
70 public void consumeLine( String line )
71 {
72 if ( line.startsWith( "... " ) )
73 {
74
75
76 return;
77 }
78
79 if ( !line.startsWith( FILE_BEGIN_TOKEN ) )
80 {
81 error( line );
82 }
83
84 if ( !revisionRegexp.match( line ) )
85 {
86 error( line );
87 }
88
89 edits.add( new ScmFile( revisionRegexp.getParen( 1 ), ScmFileStatus.EDITED ) );
90 }
91
92 private void error( String line )
93 {
94 errors = true;
95 output.println( line );
96 if ( errorMessage.length() > 0 )
97 {
98 errorMessage.append( System.getProperty( "line.separator" ) );
99 }
100 errorMessage.append( line );
101 }
102
103 public boolean isSuccess()
104 {
105 return !errors;
106 }
107
108 public String getErrorMessage()
109 {
110 return errorMessage.toString();
111 }
112
113 }