View Javadoc

1   package org.apache.maven.scm.provider.perforce.command.edit;
2   
3   /*
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   *
12   * http://www.apache.org/licenses/LICENSE-2.0
13   *
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.
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   * @author Mike Perham
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      /** {@inheritDoc} */
70      public void consumeLine( String line )
71      {
72          if ( line.startsWith( "... " ) )
73          {
74              //Should we log this somehow?
75              //System.out.println("Perforce: " + line);
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 }