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 import java.util.regex.Matcher;
25 import java.util.regex.Pattern;
26
27 import org.apache.maven.scm.ScmFile;
28 import org.apache.maven.scm.ScmFileStatus;
29 import org.apache.maven.scm.provider.perforce.command.AbstractPerforceConsumer;
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 Pattern PATTERN = Pattern.compile( "^([^#]+)#\\d+ - (.*)" );
42
43 private static final String FILE_BEGIN_TOKEN = "//";
44
45 private List<ScmFile> edits = new ArrayList<ScmFile>();
46
47 private boolean errors = false;
48 private StringBuilder errorMessage = new StringBuilder();
49
50 public List<ScmFile> getEdits()
51 {
52 return edits;
53 }
54
55
56 public void consumeLine( String line )
57 {
58 if ( line.startsWith( "... " ) )
59 {
60
61
62 return;
63 }
64
65 if ( !line.startsWith( FILE_BEGIN_TOKEN ) )
66 {
67 error( line );
68 }
69
70 Matcher matcher = PATTERN.matcher( line );
71 if ( !matcher.matches() )
72 {
73 error( line );
74 }
75
76 edits.add( new ScmFile( matcher.group( 1 ), ScmFileStatus.EDITED ) );
77 }
78
79 private void error( String line )
80 {
81 errors = true;
82 output.println( line );
83 if ( errorMessage.length() > 0 )
84 {
85 errorMessage.append( System.getProperty( "line.separator" ) );
86 }
87 errorMessage.append( line );
88 }
89
90 public boolean isSuccess()
91 {
92 return !errors;
93 }
94
95 public String getErrorMessage()
96 {
97 return errorMessage.toString();
98 }
99
100 }