001    package org.apache.maven.scm.provider.accurev.command.checkin;
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 java.io.File;
023    import java.util.Iterator;
024    import java.util.List;
025    
026    import org.apache.maven.scm.CommandParameter;
027    import org.apache.maven.scm.CommandParameters;
028    import org.apache.maven.scm.ScmException;
029    import org.apache.maven.scm.ScmFileSet;
030    import org.apache.maven.scm.ScmFileStatus;
031    import org.apache.maven.scm.ScmResult;
032    import org.apache.maven.scm.command.checkin.CheckInScmResult;
033    import org.apache.maven.scm.log.ScmLogger;
034    import org.apache.maven.scm.provider.ScmProviderRepository;
035    import org.apache.maven.scm.provider.accurev.AccuRev;
036    import org.apache.maven.scm.provider.accurev.AccuRevException;
037    import org.apache.maven.scm.provider.accurev.AccuRevInfo;
038    import org.apache.maven.scm.provider.accurev.AccuRevScmProviderRepository;
039    import org.apache.maven.scm.provider.accurev.command.AbstractAccuRevCommand;
040    
041    public class AccuRevCheckInCommand
042        extends AbstractAccuRevCommand
043    {
044    
045        public AccuRevCheckInCommand( ScmLogger logger )
046        {
047            super( logger );
048        }
049    
050        @Override
051        protected ScmResult executeAccurevCommand( AccuRevScmProviderRepository repository, ScmFileSet fileSet,
052                                                   CommandParameters parameters )
053            throws ScmException, AccuRevException
054        {
055    
056            AccuRev accuRev = repository.getAccuRev();
057    
058            String message = parameters.getString( CommandParameter.MESSAGE );
059            List<File> promotedFiles = null;
060    
061            File basedir = fileSet.getBasedir();
062            List<File> fileList = fileSet.getFileList();
063    
064            if ( fileList.isEmpty() )
065            {
066                // TODO the above test will be matched by a fileset where excludes and includes produce a set with no files.
067                // This is
068                // NOT the same as a fileset created with only a base directory. Raise maven-scm JIRA for this.
069                AccuRevInfo info = accuRev.info( basedir );
070    
071                if ( repository.isWorkSpaceRoot( info ) )
072                {
073                    promotedFiles = accuRev.promoteAll( basedir, message );
074                }
075                else
076                {
077                    throw new ScmException( String.format( "Unsupported recursive checkin for %s. Not the workspace root",
078                                                           basedir.getAbsolutePath() ) );
079                }
080            }
081            else
082            {
083                promotedFiles = accuRev.promote( basedir, fileList, message );
084            }
085    
086    
087            if ( promotedFiles != null )
088            {
089                Iterator<File> iter = promotedFiles.iterator();
090                while ( iter.hasNext() )
091                {
092                    if ( new File( basedir, iter.next().getPath() ).isDirectory() )
093                    {
094                        iter.remove();
095                    }
096                }
097                // TODO capture the transaction id from the promote
098                return new CheckInScmResult( accuRev.getCommandLines(), getScmFiles( promotedFiles,
099                                                                                     ScmFileStatus.CHECKED_IN ) );
100            }
101            else
102            {
103                return new CheckInScmResult( accuRev.getCommandLines(), "AccuRev Error", accuRev.getErrorOutput(), false );
104            }
105        }
106    
107        public CheckInScmResult checkIn( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters parameters )
108            throws ScmException
109        {
110            return (CheckInScmResult) execute( repository, fileSet, parameters );
111        }
112    
113    }