blob: 9ba189b0c77302f5f4868c8d10c92440e92d0a8f [file] [log] [blame]
package org.apache.maven.scm.provider.integrity;
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import org.apache.maven.scm.CommandParameter;
import org.apache.maven.scm.CommandParameters;
import org.apache.maven.scm.ScmException;
import org.apache.maven.scm.ScmFileSet;
import org.apache.maven.scm.ScmResult;
import org.apache.maven.scm.command.add.AddScmResult;
import org.apache.maven.scm.command.blame.BlameScmResult;
import org.apache.maven.scm.command.branch.BranchScmResult;
import org.apache.maven.scm.command.changelog.ChangeLogScmResult;
import org.apache.maven.scm.command.checkin.CheckInScmResult;
import org.apache.maven.scm.command.checkout.CheckOutScmResult;
import org.apache.maven.scm.command.diff.DiffScmResult;
import org.apache.maven.scm.command.edit.EditScmResult;
import org.apache.maven.scm.command.export.ExportScmResult;
import org.apache.maven.scm.command.list.ListScmResult;
import org.apache.maven.scm.command.login.LoginScmResult;
import org.apache.maven.scm.command.mkdir.MkdirScmResult;
import org.apache.maven.scm.command.remove.RemoveScmResult;
import org.apache.maven.scm.command.status.StatusScmResult;
import org.apache.maven.scm.command.tag.TagScmResult;
import org.apache.maven.scm.command.unedit.UnEditScmResult;
import org.apache.maven.scm.command.update.UpdateScmResult;
import org.apache.maven.scm.provider.AbstractScmProvider;
import org.apache.maven.scm.provider.ScmProviderRepository;
import org.apache.maven.scm.provider.integrity.command.add.IntegrityAddCommand;
import org.apache.maven.scm.provider.integrity.command.blame.IntegrityBlameCommand;
import org.apache.maven.scm.provider.integrity.command.branch.IntegrityBranchCommand;
import org.apache.maven.scm.provider.integrity.command.changelog.IntegrityChangeLogCommand;
import org.apache.maven.scm.provider.integrity.command.checkin.IntegrityCheckInCommand;
import org.apache.maven.scm.provider.integrity.command.checkout.IntegrityCheckOutCommand;
import org.apache.maven.scm.provider.integrity.command.diff.IntegrityDiffCommand;
import org.apache.maven.scm.provider.integrity.command.edit.IntegrityEditCommand;
import org.apache.maven.scm.provider.integrity.command.export.IntegrityExportCommand;
import org.apache.maven.scm.provider.integrity.command.fileinfo.IntegrityFileInfoCommand;
import org.apache.maven.scm.provider.integrity.command.list.IntegrityListCommand;
import org.apache.maven.scm.provider.integrity.command.lock.IntegrityLockCommand;
import org.apache.maven.scm.provider.integrity.command.login.IntegrityLoginCommand;
import org.apache.maven.scm.provider.integrity.command.mkdir.IntegrityMkdirCommand;
import org.apache.maven.scm.provider.integrity.command.remove.IntegrityRemoveCommand;
import org.apache.maven.scm.provider.integrity.command.status.IntegrityStatusCommand;
import org.apache.maven.scm.provider.integrity.command.tag.IntegrityTagCommand;
import org.apache.maven.scm.provider.integrity.command.unedit.IntegrityUnEditCommand;
import org.apache.maven.scm.provider.integrity.command.unlock.IntegrityUnlockCommand;
import org.apache.maven.scm.provider.integrity.command.update.IntegrityUpdateCommand;
import org.apache.maven.scm.provider.integrity.repository.IntegrityScmProviderRepository;
import org.apache.maven.scm.repository.ScmRepositoryException;
import org.codehaus.plexus.util.StringUtils;
/**
* MKS Integrity SCM Provider for Maven
*
* @author <a href="mailto:cletus@mks.com">Cletus D'Souza</a>
* @plexus.component role="org.apache.maven.scm.provider.ScmProvider" role-hint="integrity"
* @since 1.6
*/
public class IntegrityScmProvider
extends AbstractScmProvider
{
public static final String INTEGRITY_CM_URL = "[[user][/pass]@host[:port]]|configPath";
/**
* Returns the name of our SCM Provider
*/
public String getScmType()
{
return "integrity";
}
/**
* This class is the central point of the SCM provider. The Maven-SCM framework will know only this class in the
* provider, so this class will validate the scm url, populate the IntegrityScmProviderRepository and provide all
* commands that we support.
*
* @param scmSpecificUrl The SCM URL specific to our implementation for this plugin
* @param delimiter The character that separates the information above
* @throws ScmRepositoryException
*/
public ScmProviderRepository makeProviderScmRepository( String scmSpecificUrl, char delimiter )
throws ScmRepositoryException
{
// Initialize our variables need to create the IntegrityScmProvderRepository
String hostName = "";
int port = 0;
String userName = "";
String password = "";
String configPath = "";
// Looking for a string in the following format:
// [[user][/pass]@host[:port]]|configPath
// Where '|' is the delimiter...
String[] tokens = StringUtils.split( scmSpecificUrl, String.valueOf( delimiter ) );
// Expecting a minimum of one token to a maximum of two tokens
if ( tokens.length < 1 || tokens.length > 2 )
{
throw new ScmRepositoryException(
"Invalid SCM URL '" + scmSpecificUrl + "'. Expecting a url using format: " + INTEGRITY_CM_URL );
}
else
{
// Inspect the first token to see if it contains connection information
if ( tokens[0].indexOf( '@' ) >= 0 )
{
// First split up the username and password string from the host:port information
String userPassStr = tokens[0].substring( 0, tokens[0].indexOf( '@' ) );
getLogger().debug( "User/Password information supplied: " + userPassStr );
String hostPortStr = tokens[0].substring( tokens[0].indexOf( '@' ) + 1, tokens[0].length() );
getLogger().debug( "Host/Port information supplied: " + hostPortStr );
if ( userPassStr.length() > 0 )
{
// Next, make sure the username and password are separated using a forward slash '/'
int userPassDelimIndx = userPassStr.indexOf( '/' );
if ( userPassDelimIndx > 0 )
{
userName = userPassStr.substring( 0, userPassStr.indexOf( '/' ) );
if ( userPassStr.length() > ( userPassDelimIndx + 1 ) )
{
password = userPassStr.substring( userPassStr.indexOf( '/' ) + 1, userPassStr.length() );
}
}
else
{
userName = userPassStr;
}
}
// Now, check to see what we've got for the host:port information
if ( hostPortStr.length() > 0 )
{
int hostPortDelimIndx = hostPortStr.indexOf( ':' );
if ( hostPortDelimIndx > 0 )
{
hostName = hostPortStr.substring( 0, hostPortStr.indexOf( ':' ) );
if ( hostPortStr.length() > ( hostPortDelimIndx + 1 ) )
{
port = Integer.parseInt(
hostPortStr.substring( hostPortStr.indexOf( ':' ) + 1, hostPortStr.length() ) );
}
}
else
{
hostName = hostPortStr;
}
}
}
// Grab the last token (or first token depends how you look at it)
configPath = tokens[tokens.length - 1];
}
return new IntegrityScmProviderRepository( hostName, port, userName, password, configPath, getLogger() );
}
/**
* Maps to si connect and initialization of the project with si projectinfo
*/
@Override
protected LoginScmResult login( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters params )
throws ScmException
{
IntegrityLoginCommand command = new IntegrityLoginCommand();
command.setLogger( getLogger() );
return (LoginScmResult) command.execute( repository, fileSet, params );
}
/**
* Maps to si rlog --rfilter=daterange:date1-date2
*/
@Override
protected ChangeLogScmResult changelog( ScmProviderRepository repository, ScmFileSet fileSet,
CommandParameters parameters )
throws ScmException
{
IntegrityChangeLogCommand command = new IntegrityChangeLogCommand();
command.setLogger( getLogger() );
return (ChangeLogScmResult) command.execute( repository, fileSet, parameters );
}
/**
* Maps to si viewnonmembers and then si add for every non-member
*/
@Override
public AddScmResult add( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters params )
throws ScmException
{
IntegrityAddCommand command = new IntegrityAddCommand();
command.setLogger( getLogger() );
return (AddScmResult) command.execute( repository, fileSet, params );
}
/**
* Maps to si dropsandbox
*/
@Override
protected RemoveScmResult remove( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters params )
throws ScmException
{
IntegrityRemoveCommand command = new IntegrityRemoveCommand();
command.setLogger( getLogger() );
return (RemoveScmResult) command.execute( repository, fileSet, params );
}
/**
* Maps to a si ci
*/
@Override
protected CheckInScmResult checkin( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters params )
throws ScmException
{
IntegrityCheckInCommand command = new IntegrityCheckInCommand();
command.setLogger( getLogger() );
return (CheckInScmResult) command.execute( repository, fileSet, params );
}
/**
* Maps to si createsandbox and/or si resync
*/
@Override
protected CheckOutScmResult checkout( ScmProviderRepository repository, ScmFileSet fileSet,
CommandParameters params )
throws ScmException
{
IntegrityCheckOutCommand command = new IntegrityCheckOutCommand();
command.setLogger( getLogger() );
return (CheckOutScmResult) command.execute( repository, fileSet, params );
}
/**
* Maps to si diff
*/
@Override
protected DiffScmResult diff( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters params )
throws ScmException
{
IntegrityDiffCommand command = new IntegrityDiffCommand();
command.setLogger( getLogger() );
return (DiffScmResult) command.execute( repository, fileSet, params );
}
/**
* Maps to si makewritable
*/
@Override
protected EditScmResult edit( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters params )
throws ScmException
{
IntegrityEditCommand command = new IntegrityEditCommand();
command.setLogger( getLogger() );
return (EditScmResult) command.execute( repository, fileSet, params );
}
/**
* Maps to si viewsandbox with a filter of locally changed files
*/
@Override
protected StatusScmResult status( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters params )
throws ScmException
{
IntegrityStatusCommand command = new IntegrityStatusCommand();
command.setLogger( getLogger() );
return (StatusScmResult) command.execute( repository, fileSet, params );
}
/**
* Maps to si checkpoint
*/
@Override
protected TagScmResult tag( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters params )
throws ScmException
{
IntegrityTagCommand command = new IntegrityTagCommand();
command.setLogger( getLogger() );
return (TagScmResult) command.execute( repository, fileSet, params );
}
/**
* Maps to si revert
*/
@Override
protected UnEditScmResult unedit( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters params )
throws ScmException
{
IntegrityUnEditCommand command = new IntegrityUnEditCommand();
command.setLogger( getLogger() );
return (UnEditScmResult) command.execute( repository, fileSet, params );
}
/**
* Maps to si resync
*/
@Override
protected UpdateScmResult update( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters params )
throws ScmException
{
IntegrityUpdateCommand command = new IntegrityUpdateCommand();
command.setLogger( getLogger() );
return (UpdateScmResult) command.execute( repository, fileSet, params );
}
/**
* Maps to si annotate
*/
@Override
protected BlameScmResult blame( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters params )
throws ScmException
{
IntegrityBlameCommand command = new IntegrityBlameCommand();
command.setLogger( getLogger() );
return (BlameScmResult) command.execute( repository, fileSet, params );
}
/**
* Maps to si viewproject
*/
@Override
protected ListScmResult list( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters params )
throws ScmException
{
IntegrityListCommand command = new IntegrityListCommand();
command.setLogger( getLogger() );
return (ListScmResult) command.execute( repository, fileSet, params );
}
/**
* Maps to si projectco (no sandbox is used)
*/
@Override
protected ExportScmResult export( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters params )
throws ScmException
{
IntegrityExportCommand command = new IntegrityExportCommand();
command.setLogger( getLogger() );
return (ExportScmResult) command.execute( repository, fileSet, params );
}
/**
* Maps to si createdevpath
*/
@Override
protected BranchScmResult branch( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters params )
throws ScmException
{
IntegrityBranchCommand command = new IntegrityBranchCommand();
command.setLogger( getLogger() );
return (BranchScmResult) command.execute( repository, fileSet, params );
}
/**
* Maps to si createsubproject
*/
@Override
protected MkdirScmResult mkdir( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters params )
throws ScmException
{
IntegrityMkdirCommand command = new IntegrityMkdirCommand();
command.setLogger( getLogger() );
return (MkdirScmResult) command.execute( repository, fileSet, params );
}
/**
* Maps to si memberinfo
*/
protected ScmResult fileinfo( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters params )
throws ScmException
{
IntegrityFileInfoCommand command = new IntegrityFileInfoCommand();
command.setLogger( getLogger() );
return command.execute( repository, fileSet, params );
}
/**
* Maps to si lock
*/
protected ScmResult lock( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters params )
throws ScmException
{
IntegrityLockCommand command = new IntegrityLockCommand();
command.setLogger( getLogger() );
return command.execute( repository, fileSet, params );
}
/**
* Maps to si unlock
*/
protected ScmResult unlock( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters params )
throws ScmException
{
IntegrityUnlockCommand command = new IntegrityUnlockCommand( params.getString( CommandParameter.FILE ) );
command.setLogger( getLogger() );
return command.execute( repository, fileSet, params );
}
}