001    package org.apache.maven.scm.provider.accurev.command.login;
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.CommandParameters;
023    import org.apache.maven.scm.ScmException;
024    import org.apache.maven.scm.ScmFileSet;
025    import org.apache.maven.scm.ScmResult;
026    import org.apache.maven.scm.command.login.LoginScmResult;
027    import org.apache.maven.scm.log.ScmLogger;
028    import org.apache.maven.scm.provider.ScmProviderRepository;
029    import org.apache.maven.scm.provider.accurev.AccuRev;
030    import org.apache.maven.scm.provider.accurev.AccuRevException;
031    import org.apache.maven.scm.provider.accurev.AccuRevInfo;
032    import org.apache.maven.scm.provider.accurev.AccuRevScmProviderRepository;
033    import org.apache.maven.scm.provider.accurev.command.AbstractAccuRevCommand;
034    
035    public class AccuRevLoginCommand
036        extends AbstractAccuRevCommand
037    {
038    
039        public AccuRevLoginCommand( ScmLogger logger )
040        {
041            super( logger );
042    
043        }
044    
045        @Override
046        protected ScmResult executeAccurevCommand( AccuRevScmProviderRepository repository, ScmFileSet fileSet,
047                                                   CommandParameters parameters )
048            throws ScmException, AccuRevException
049        {
050            boolean result = false;
051            AccuRev accurev = repository.getAccuRev();
052            AccuRevInfo info = accurev.info( null );
053    
054            String providerMessage = "";
055            if ( info == null )
056            {
057                providerMessage = "Unable to retrieve accurev info";
058            }
059            else if ( repository.getUser() != null )
060            {
061                // Check if we've already logged in as this user
062                result = repository.getUser().equals( info.getUser() );
063                if ( result )
064                {
065                    providerMessage = "Skipping login - already logged in as " + repository.getUser();
066                }
067                else
068                {
069                    result = accurev.login( repository.getUser(), repository.getPassword() );
070                    providerMessage = ( result ? "Success" : "Failure" ) + " logging in as " + repository.getUser();
071                }
072            }
073            else
074            {
075                result = info.isLoggedIn();
076                providerMessage = result ? ( "Logged in externally as " + info.getUser() ) : "Not logged in";
077            }
078    
079            getLogger().debug( providerMessage );
080            return new LoginScmResult( accurev.getCommandLines(), providerMessage, accurev.getErrorOutput(), result );
081    
082        }
083    
084        public LoginScmResult login( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters parameters )
085            throws ScmException
086        {
087            return (LoginScmResult) execute( repository, fileSet, parameters );
088        }
089    
090    }