001    package org.apache.maven.scm.provider.perforce.command.update;
002    
003    /*
004     * Licensed to the Apache Software Foundation (ASF) under one
005     * or more contributor license agreements.  See the NOTICE file
006     * distributed with this work for additional information
007     * regarding copyright ownership.  The ASF licenses this file
008     * to you under the Apache License, Version 2.0 (the
009     * "License"); you may not use this file except in compliance
010     * with the License.  You may obtain a copy of the License at
011     *
012     * http://www.apache.org/licenses/LICENSE-2.0
013     *
014     * Unless required by applicable law or agreed to in writing,
015     * software distributed under the License is distributed on an
016     * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
017     * KIND, either express or implied.  See the License for the
018     * specific language governing permissions and limitations
019     * under the License.
020     */
021    
022    import org.apache.maven.scm.ScmException;
023    import org.apache.maven.scm.log.ScmLogger;
024    import org.apache.maven.scm.util.AbstractConsumer;
025    import org.apache.regexp.RE;
026    import org.apache.regexp.RESyntaxException;
027    
028    /**
029     * @author <a href="mailto:evenisse@apache.org">Emmanuel Venisse</a>
030     * @version $Id: PerforceHaveConsumer.java 1057019 2011-01-09 20:13:07Z olamy $
031     */
032    public class PerforceHaveConsumer
033        extends AbstractConsumer
034    {
035        private String have;
036    
037        /**
038         * The regular expression used to match header lines
039         */
040        private RE revisionRegexp;
041    
042        private static final String PATTERN = "^Change (\\d+) " + // changelist number
043            "on (.*) " + // date
044            "by (.*)@"; // author
045    
046        public PerforceHaveConsumer( ScmLogger logger )
047        {
048            super( logger );
049    
050            try
051            {
052                revisionRegexp = new RE( PATTERN );
053            }
054            catch ( RESyntaxException ignored )
055            {
056                if ( getLogger().isErrorEnabled() )
057                {
058                    getLogger().error( "Could not create regexp to parse perforce log file", ignored );
059                }
060            }
061        }
062    
063        public String getHave() throws ScmException
064        {
065            return have;
066        }
067    
068        // ----------------------------------------------------------------------
069        // StreamConsumer Implementation
070        // ----------------------------------------------------------------------
071    
072        /** {@inheritDoc} */
073        public void consumeLine( String line )
074        {
075            if( revisionRegexp.match( line ) )
076            {
077                have = revisionRegexp.getParen( 1 );
078            }
079        }
080    }