001package org.apache.maven.scm.provider.vss; 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 022import org.apache.maven.scm.CommandParameters; 023import org.apache.maven.scm.ScmException; 024import org.apache.maven.scm.ScmFileSet; 025import org.apache.maven.scm.command.add.AddScmResult; 026import org.apache.maven.scm.command.changelog.ChangeLogScmResult; 027import org.apache.maven.scm.command.checkin.CheckInScmResult; 028import org.apache.maven.scm.command.checkout.CheckOutScmResult; 029import org.apache.maven.scm.command.edit.EditScmResult; 030import org.apache.maven.scm.command.status.StatusScmResult; 031import org.apache.maven.scm.command.tag.TagScmResult; 032import org.apache.maven.scm.command.update.UpdateScmResult; 033import org.apache.maven.scm.provider.AbstractScmProvider; 034import org.apache.maven.scm.provider.ScmProviderRepository; 035import org.apache.maven.scm.provider.vss.commands.add.VssAddCommand; 036import org.apache.maven.scm.provider.vss.commands.changelog.VssHistoryCommand; 037import org.apache.maven.scm.provider.vss.commands.checkin.VssCheckInCommand; 038import org.apache.maven.scm.provider.vss.commands.checkout.VssCheckOutCommand; 039import org.apache.maven.scm.provider.vss.commands.edit.VssEditCommand; 040import org.apache.maven.scm.provider.vss.commands.status.VssStatusCommand; 041import org.apache.maven.scm.provider.vss.commands.tag.VssTagCommand; 042import org.apache.maven.scm.provider.vss.commands.update.VssUpdateCommand; 043import org.apache.maven.scm.provider.vss.repository.VssScmProviderRepository; 044import org.apache.maven.scm.repository.ScmRepositoryException; 045import org.codehaus.plexus.util.StringUtils; 046 047/** 048 * @author <a href="mailto:george@neogrid.com.br">George Gastaldi</a> 049 * 050 * @plexus.component role="org.apache.maven.scm.provider.ScmProvider" role-hint="vss" 051 */ 052public class VssScmProvider 053 extends AbstractScmProvider 054{ 055 056 public static final String VSS_URL_FORMAT = "[username[|password]@]vssdir|projectPath"; 057 058 // ---------------------------------------------------------------------- 059 // ScmProvider Implementation 060 // ---------------------------------------------------------------------- 061 062 /** {@inheritDoc} */ 063 public String getScmSpecificFilename() 064 { 065 return "vssver.scc"; 066 } 067 068 /** {@inheritDoc} */ 069 public ScmProviderRepository makeProviderScmRepository( String scmSpecificUrl, char delimiter ) 070 throws ScmRepositoryException 071 { 072 String user = null; 073 String password = null; 074 String vssDir; 075 String project; 076 077 int index = scmSpecificUrl.indexOf( '@' ); 078 079 String rest = scmSpecificUrl; 080 081 if ( index != -1 ) 082 { 083 String userAndPassword = scmSpecificUrl.substring( 0, index ); 084 085 rest = scmSpecificUrl.substring( index + 1 ); 086 087 index = userAndPassword.indexOf( delimiter ); 088 089 if ( index != -1 ) 090 { 091 user = userAndPassword.substring( 0, index ); 092 093 password = userAndPassword.substring( index + 1 ); 094 } 095 else 096 { 097 user = userAndPassword; 098 } 099 } 100 String[] tokens = StringUtils.split( rest, String.valueOf( delimiter ) ); 101 102 if ( tokens.length < 2 ) 103 { 104 throw new ScmRepositoryException( "Invalid SCM URL: The url has to be on the form: " + VSS_URL_FORMAT ); 105 } 106 else 107 { 108 vssDir = tokens[0]; 109 110 project = tokens[1]; 111 } 112 113 return new VssScmProviderRepository( user, password, vssDir, project ); 114 } 115 116 /** {@inheritDoc} */ 117 public String getScmType() 118 { 119 return "vss"; 120 } 121 122 /** {@inheritDoc} */ 123 public AddScmResult add( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters parameters ) 124 throws ScmException 125 { 126 // TODO: Check whether the CREATE command must be called 127 VssAddCommand command = new VssAddCommand(); 128 command.setLogger( getLogger() ); 129 130 return (AddScmResult) command.execute( repository, fileSet, parameters ); 131 } 132 133 public CheckInScmResult checkin( ScmProviderRepository repository, ScmFileSet fileSet, 134 CommandParameters parameters ) 135 throws ScmException 136 { 137 VssCheckInCommand command = new VssCheckInCommand(); 138 139 command.setLogger( getLogger() ); 140 141 return (CheckInScmResult) command.execute( repository, fileSet, parameters ); 142 } 143 144 /** {@inheritDoc} */ 145 public CheckOutScmResult checkout( ScmProviderRepository repository, ScmFileSet fileSet, 146 CommandParameters parameters ) 147 throws ScmException 148 { 149 VssCheckOutCommand command = new VssCheckOutCommand(); 150 151 command.setLogger( getLogger() ); 152 153 return (CheckOutScmResult) command.execute( repository, fileSet, parameters ); 154 } 155 156 /** {@inheritDoc} */ 157 public ChangeLogScmResult changelog( ScmProviderRepository repository, ScmFileSet fileSet, 158 CommandParameters parameters ) 159 throws ScmException 160 { 161 VssHistoryCommand command = new VssHistoryCommand(); 162 163 command.setLogger( getLogger() ); 164 165 return (ChangeLogScmResult) command.execute( repository, fileSet, parameters ); 166 } 167 168 public TagScmResult tag( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters parameters ) 169 throws ScmException 170 { 171 VssTagCommand command = new VssTagCommand(); 172 173 command.setLogger( getLogger() ); 174 175 return (TagScmResult) command.execute( repository, fileSet, parameters ); 176 } 177 178 /** {@inheritDoc} */ 179 public UpdateScmResult update( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters parameters ) 180 throws ScmException 181 { 182 VssUpdateCommand command = new VssUpdateCommand(); 183 184 command.setLogger( getLogger() ); 185 186 return (UpdateScmResult) command.execute( repository, fileSet, parameters ); 187 } 188 189 /** {@inheritDoc} */ 190 public StatusScmResult status( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters parameters ) 191 throws ScmException 192 { 193 VssStatusCommand command = new VssStatusCommand(); 194 195 command.setLogger( getLogger() ); 196 197 return (StatusScmResult) command.execute( repository, fileSet, parameters ); 198 } 199 200 /** {@inheritDoc} */ 201 public EditScmResult edit( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters parameters ) 202 throws ScmException 203 { 204 VssEditCommand command = new VssEditCommand(); 205 206 command.setLogger( getLogger() ); 207 208 return (EditScmResult) command.execute( repository, fileSet, parameters ); 209 } 210 211 /* 212 * public UnEditScmResult unedit( ScmProviderRepository repository, ScmFileSet fileSet, 213 * CommandParameters parameters ) throws ScmException { VssUnEditCommand command = new 214 * VssUnEditCommand(); 215 * 216 * command.setLogger( getLogger() ); 217 * 218 * return (UnEditScmResult) command.execute( repository, fileSet, parameters ); } 219 */ 220 221 /* 222 * protected RemoveScmResult remove( ScmProviderRepository repository, ScmFileSet fileSet, 223 * CommandParameters parameters ) throws ScmException { VssRemoveCommand command = new 224 * VssRemoveCommand(); 225 * 226 * command.setLogger( getLogger() ); 227 * 228 * return (RemoveScmResult) command.execute( repository .getProviderRepository(), fileSet, 229 * parameters ); } 230 */ 231}