Coverage Report - org.apache.maven.scm.provider.clearcase.command.changelog.ClearCaseChangeLogConsumer
 
Classes in this File Line Coverage Branch Coverage Complexity
ClearCaseChangeLogConsumer
0 %
0/53
0 %
0/17
1,769
 
 1  
 package org.apache.maven.scm.provider.clearcase.command.changelog;
 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 org.apache.maven.scm.ChangeFile;
 23  
 import org.apache.maven.scm.ChangeSet;
 24  
 import org.apache.maven.scm.log.ScmLogger;
 25  
 import org.apache.maven.scm.util.AbstractConsumer;
 26  
 
 27  
 import java.util.ArrayList;
 28  
 import java.util.List;
 29  
 
 30  
 /**
 31  
  * @author <a href="mailto:evenisse@apache.org">Emmanuel Venisse</a>
 32  
  * @author <a href="mailto:trygvis@inamo.no">Trygve Laugst&oslash;l</a>
 33  
  * @author Olivier Lamy
 34  
  * @version $Id: ClearCaseChangeLogConsumer.java 1094193 2011-04-17 20:28:59Z olamy $
 35  
  */
 36  
 public class ClearCaseChangeLogConsumer
 37  
     extends AbstractConsumer
 38  
 {
 39  
     /**
 40  
      * Formatter used to parse Clearcase date/timestamp.
 41  
      */
 42  
     private static final String CLEARCASE_TIMESTAMP_PATTERN = "yyyyMMdd.HHmmss";
 43  
 
 44  
     private static final String NAME_TAG = "NAME:";
 45  
 
 46  
     private static final String USER_TAG = "USER:";
 47  
 
 48  
     private static final String DATE_TAG = "DATE:";
 49  
 
 50  
     private static final String COMMENT_TAG = "COMM:";
 51  
 
 52  
     private static final String REVISION_TAG = "REVI:";
 53  
     
 54  0
     private List<ChangeSet> entries = new ArrayList<ChangeSet>();
 55  
 
 56  
     // state machine constants for reading clearcase lshistory command output
 57  
 
 58  
     /**
 59  
      * expecting file information
 60  
      */
 61  
     private static final int GET_FILE = 1;
 62  
 
 63  
     /**
 64  
      * expecting date
 65  
      */
 66  
     private static final int GET_DATE = 2;
 67  
 
 68  
     /**
 69  
      * expecting comments
 70  
      */
 71  
     private static final int GET_COMMENT = 3;
 72  
 
 73  
     /**
 74  
      * expecting revision
 75  
      */
 76  
     private static final int GET_REVISION = 4;
 77  
 
 78  
     /**
 79  
      * current status of the parser
 80  
      */
 81  0
     private int status = GET_FILE;
 82  
 
 83  
     /**
 84  
      * the current log entry being processed by the parser
 85  
      */
 86  0
     private ChangeSet currentChange = null;
 87  
 
 88  
     /**
 89  
      * the current file being processed by the parser
 90  
      */
 91  0
     private ChangeFile currentFile = null;
 92  
 
 93  
     private String userDatePattern;
 94  
 
 95  
     // ----------------------------------------------------------------------
 96  
     //
 97  
     // ----------------------------------------------------------------------
 98  
 
 99  
     public ClearCaseChangeLogConsumer( ScmLogger logger, String userDatePattern )
 100  
     {
 101  0
         super( logger );
 102  
 
 103  0
         this.userDatePattern = userDatePattern;
 104  0
     }
 105  
 
 106  
     // ----------------------------------------------------------------------
 107  
     //
 108  
     // ----------------------------------------------------------------------
 109  
 
 110  
     public List<ChangeSet> getModifications()
 111  
     {
 112  0
         return entries;
 113  
     }
 114  
 
 115  
     // ----------------------------------------------------------------------
 116  
     // StreamConsumer Implementation
 117  
     // ----------------------------------------------------------------------
 118  
 
 119  
     /** {@inheritDoc} */
 120  
     public void consumeLine( String line )
 121  
     {
 122  0
         switch ( getStatus() )
 123  
         {
 124  
             case GET_FILE:
 125  0
                 processGetFile( line );
 126  0
                 break;
 127  
             case GET_DATE:
 128  0
                 processGetDate( line );
 129  0
                 break;
 130  
             case GET_COMMENT:
 131  0
                 processGetCommentAndUser( line );
 132  0
                 break;
 133  
             case GET_REVISION:
 134  0
                 processGetRevision( line );
 135  0
                 break;
 136  
             default:
 137  0
                 if ( getLogger().isWarnEnabled() )
 138  
                 {
 139  0
                     getLogger().warn( "Unknown state: " + status );
 140  
                 }
 141  
         }
 142  0
     }
 143  
 
 144  
     // ----------------------------------------------------------------------
 145  
     //
 146  
     // ----------------------------------------------------------------------
 147  
 
 148  
     /**
 149  
      * Process the current input line in the Get File state.
 150  
      *
 151  
      * @param line a line of text from the clearcase log output
 152  
      */
 153  
     private void processGetFile( String line )
 154  
     {
 155  0
         if ( line.startsWith( NAME_TAG ) )
 156  
         {
 157  0
             setCurrentChange( new ChangeSet() );
 158  0
             setCurrentFile( new ChangeFile( line.substring( NAME_TAG.length(), line.length() ) ) );
 159  0
             setStatus( GET_DATE );
 160  
         }
 161  0
     }
 162  
 
 163  
     /**
 164  
      * Process the current input line in the Get Date state.
 165  
      *
 166  
      * @param line a line of text from the clearcase log output
 167  
      */
 168  
     private void processGetDate( String line )
 169  
     {
 170  0
         if ( line.startsWith( DATE_TAG ) )
 171  
         {
 172  0
             getCurrentChange().setDate(
 173  
                 parseDate( line.substring( DATE_TAG.length() ), userDatePattern, CLEARCASE_TIMESTAMP_PATTERN ) );
 174  
 
 175  0
             setStatus( GET_COMMENT );
 176  
         }
 177  0
     }
 178  
 
 179  
     /**
 180  
      * Process the current input line in the Get Comment state.
 181  
      *
 182  
      * @param line a line of text from the clearcase log output
 183  
      */
 184  
     private void processGetCommentAndUser( String line )
 185  
     {
 186  0
         if ( line.startsWith( COMMENT_TAG ) )
 187  
         {
 188  0
             String comm = line.substring( COMMENT_TAG.length() );
 189  
 
 190  0
             getCurrentChange().setComment( getCurrentChange().getComment() + comm + "\n" );
 191  0
         }
 192  0
         else if ( line.startsWith( USER_TAG ) )
 193  
         {
 194  0
             getCurrentChange().setAuthor( line.substring( USER_TAG.length() ) );
 195  
 
 196  
             // add entry, and set state to get file
 197  0
             getCurrentChange().addFile( getCurrentFile() );
 198  
 
 199  0
             entries.add( getCurrentChange() );
 200  
 
 201  0
             setStatus( GET_REVISION );
 202  
         }
 203  
         else
 204  
         {
 205  
             // keep gathering comments
 206  0
             getCurrentChange().setComment( getCurrentChange().getComment() + line + "\n" );
 207  
         }
 208  0
     }
 209  
     
 210  
     /**
 211  
      * Process the current input line in the Get Revision.
 212  
      *
 213  
      * @param line a line of text from the clearcase log output
 214  
      */
 215  
     private void processGetRevision( String line )
 216  
     {
 217  0
         if ( line.startsWith( REVISION_TAG ) )
 218  
         {
 219  0
             getCurrentChange().setRevision( line.substring( REVISION_TAG.length() ) );
 220  
 
 221  0
             setStatus( GET_FILE );
 222  
         }
 223  0
     }
 224  
 
 225  
     /**
 226  
      * Getter for property currentFile.
 227  
      *
 228  
      * @return Value of property currentFile.
 229  
      */
 230  
     private ChangeFile getCurrentFile()
 231  
     {
 232  0
         return currentFile;
 233  
     }
 234  
 
 235  
     /**
 236  
      * Setter for property currentFile.
 237  
      *
 238  
      * @param currentFile New value of property currentFile.
 239  
      */
 240  
     private void setCurrentFile( ChangeFile currentFile )
 241  
     {
 242  0
         this.currentFile = currentFile;
 243  0
     }
 244  
 
 245  
     /**
 246  
      * Getter for property currentChange.
 247  
      *
 248  
      * @return Value of property currentChange.
 249  
      */
 250  
     private ChangeSet getCurrentChange()
 251  
     {
 252  0
         return currentChange;
 253  
     }
 254  
 
 255  
     /**
 256  
      * Setter for property currentLogEntry.
 257  
      *
 258  
      * @param currentChange New value of property currentLogEntry.
 259  
      */
 260  
     private void setCurrentChange( ChangeSet currentChange )
 261  
     {
 262  0
         this.currentChange = currentChange;
 263  0
     }
 264  
 
 265  
     /**
 266  
      * Getter for property status.
 267  
      *
 268  
      * @return Value of property status.
 269  
      */
 270  
     private int getStatus()
 271  
     {
 272  0
         return status;
 273  
     }
 274  
 
 275  
     /**
 276  
      * Setter for property status.
 277  
      *
 278  
      * @param status New value of property status.
 279  
      */
 280  
     private void setStatus( int status )
 281  
     {
 282  0
         this.status = status;
 283  0
     }
 284  
 }