001package org.apache.maven.scm.manager; 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.ScmBranch; 023import org.apache.maven.scm.ScmException; 024import org.apache.maven.scm.ScmFileSet; 025import org.apache.maven.scm.ScmVersion; 026import org.apache.maven.scm.command.add.AddScmResult; 027import org.apache.maven.scm.command.blame.BlameScmRequest; 028import org.apache.maven.scm.command.blame.BlameScmResult; 029import org.apache.maven.scm.command.branch.BranchScmResult; 030import org.apache.maven.scm.command.changelog.ChangeLogScmRequest; 031import org.apache.maven.scm.command.changelog.ChangeLogScmResult; 032import org.apache.maven.scm.command.checkin.CheckInScmResult; 033import org.apache.maven.scm.command.checkout.CheckOutScmResult; 034import org.apache.maven.scm.command.diff.DiffScmResult; 035import org.apache.maven.scm.command.edit.EditScmResult; 036import org.apache.maven.scm.command.export.ExportScmResult; 037import org.apache.maven.scm.command.list.ListScmResult; 038import org.apache.maven.scm.command.mkdir.MkdirScmResult; 039import org.apache.maven.scm.command.remove.RemoveScmResult; 040import org.apache.maven.scm.command.status.StatusScmResult; 041import org.apache.maven.scm.command.tag.TagScmResult; 042import org.apache.maven.scm.command.unedit.UnEditScmResult; 043import org.apache.maven.scm.command.update.UpdateScmResult; 044import org.apache.maven.scm.provider.ScmProvider; 045import org.apache.maven.scm.provider.ScmProviderStub; 046import org.apache.maven.scm.repository.ScmRepository; 047import org.apache.maven.scm.repository.ScmRepositoryException; 048import org.apache.maven.scm.repository.ScmRepositoryStub; 049import org.apache.maven.scm.repository.UnknownRepositoryStructure; 050 051import java.io.File; 052import java.util.ArrayList; 053import java.util.Date; 054import java.util.List; 055 056/** 057 * Stub implementation of ScmManager for unit testing purposes. 058 * It allows setting the expected results that the different methods will return. 059 * More information about Stubs on <a href="http://martinfowler.com/bliki/TestDouble.html">Martin Fowler's TestDouble</a> 060 * 061 * @author <a href="mailto:carlos@apache.org">Carlos Sanchez</a> 062 * 063 */ 064public class ScmManagerStub 065 implements ScmManager 066{ 067 068 private ScmRepository scmRepository; 069 070 private ScmProvider scmProvider; 071 072 private List<String> messages; 073 074 /** 075 * Creates a new stub with stub repository and provider, and empty list of messages 076 */ 077 public ScmManagerStub() 078 { 079 setScmRepository( new ScmRepositoryStub() ); 080 setScmProvider( new ScmProviderStub() ); 081 setMessages( new ArrayList<String>( 0 ) ); 082 } 083 084 public void setScmProvider( ScmProvider scmProvider ) 085 { 086 this.scmProvider = scmProvider; 087 } 088 089 public ScmProvider getScmProvider() 090 { 091 return scmProvider; 092 } 093 094 /** 095 * {@inheritDoc} 096 */ 097 public void setScmProvider( String providerType, ScmProvider provider ) 098 { 099 setScmProvider( provider ); 100 } 101 102 /** 103 * {@inheritDoc} 104 */ 105 public void setScmProviderImplementation( String providerType, String providerImplementation ) 106 { 107 //Do nothing there 108 } 109 110 public void setScmRepository( ScmRepository scmRepository ) 111 { 112 this.scmRepository = scmRepository; 113 } 114 115 public ScmRepository getScmRepository() 116 { 117 return scmRepository; 118 } 119 120 /** 121 * Set the messages to return in validateScmRepository 122 * 123 * @param messages <code>List</code> of <code>String</code> objects 124 */ 125 public void setMessages( List<String> messages ) 126 { 127 this.messages = messages; 128 } 129 130 /** 131 * Get the messages to return in validateScmRepository 132 * 133 * @return <code>List</code> of <code>String</code> objects 134 */ 135 public List<String> getMessages() 136 { 137 return messages; 138 } 139 140 /** 141 * {@inheritDoc} 142 */ 143 public ScmRepository makeScmRepository( String scmUrl ) 144 throws ScmRepositoryException, NoSuchScmProviderException 145 { 146 return getScmRepository(); 147 } 148 149 /** 150 * {@inheritDoc} 151 */ 152 public ScmRepository makeProviderScmRepository( String providerType, File path ) 153 throws ScmRepositoryException, UnknownRepositoryStructure, NoSuchScmProviderException 154 { 155 return getScmRepository(); 156 } 157 158 /** 159 * Returns the same list as getMessages() 160 * 161 * @param scmUrl ignored 162 * @return <code>List</code> of <code>String</code> objects, the same list returned by getMessages() 163 */ 164 public List<String> validateScmRepository( String scmUrl ) 165 { 166 return getMessages(); 167 } 168 169 /** 170 * {@inheritDoc} 171 */ 172 public ScmProvider getProviderByUrl( String scmUrl ) 173 throws ScmRepositoryException, NoSuchScmProviderException 174 { 175 return getScmProvider(); 176 } 177 178 /** 179 * {@inheritDoc} 180 */ 181 public ScmProvider getProviderByType( String providerType ) 182 throws NoSuchScmProviderException 183 { 184 return getScmProvider(); 185 } 186 187 /** 188 * {@inheritDoc} 189 */ 190 public ScmProvider getProviderByRepository( ScmRepository repository ) 191 throws NoSuchScmProviderException 192 { 193 return getScmProvider(); 194 } 195 196 /** 197 * {@inheritDoc} 198 */ 199 public AddScmResult add( ScmRepository repository, ScmFileSet fileSet ) 200 throws ScmException 201 { 202 return this.getProviderByRepository( repository ).add( repository, fileSet ); 203 } 204 205 /** 206 * {@inheritDoc} 207 */ 208 public AddScmResult add( ScmRepository repository, ScmFileSet fileSet, String message ) 209 throws ScmException 210 { 211 return this.getProviderByRepository( repository ).add( repository, fileSet, message ); 212 } 213 214 /** 215 * {@inheritDoc} 216 */ 217 @SuppressWarnings( "deprecation" ) 218 public BranchScmResult branch( ScmRepository repository, ScmFileSet fileSet, String branchName ) 219 throws ScmException 220 { 221 return this.getProviderByRepository( repository ).branch( repository, fileSet, branchName ); 222 } 223 224 /** 225 * {@inheritDoc} 226 */ 227 @SuppressWarnings( "deprecation" ) 228 public BranchScmResult branch( ScmRepository repository, ScmFileSet fileSet, String branchName, String message ) 229 throws ScmException 230 { 231 return this.getProviderByRepository( repository ).branch( repository, fileSet, branchName, message ); 232 } 233 234 /** 235 * {@inheritDoc} 236 */ 237 public ChangeLogScmResult changeLog( ScmRepository repository, ScmFileSet fileSet, Date startDate, Date endDate, 238 int numDays, ScmBranch branch ) 239 throws ScmException 240 { 241 return this.getProviderByRepository( repository ).changeLog( repository, fileSet, startDate, endDate, numDays, 242 branch ); 243 } 244 245 /** 246 * {@inheritDoc} 247 */ 248 public ChangeLogScmResult changeLog( ScmRepository repository, ScmFileSet fileSet, Date startDate, Date endDate, 249 int numDays, ScmBranch branch, String datePattern ) 250 throws ScmException 251 { 252 return this.getProviderByRepository( repository ).changeLog( repository, fileSet, startDate, endDate, numDays, 253 branch, datePattern ); 254 } 255 256 /** 257 * {@inheritDoc} 258 */ 259 public ChangeLogScmResult changeLog( ChangeLogScmRequest request ) 260 throws ScmException 261 { 262 final ScmRepository repository = request.getScmRepository(); 263 return this.getProviderByRepository( repository ).changeLog( request ); 264 } 265 266 /** 267 * {@inheritDoc} 268 */ 269 public ChangeLogScmResult changeLog( ScmRepository repository, ScmFileSet fileSet, ScmVersion startVersion, 270 ScmVersion endVersion ) 271 throws ScmException 272 { 273 return this.getProviderByRepository( repository ).changeLog( repository, fileSet, startVersion, endVersion ); 274 } 275 276 /** 277 * {@inheritDoc} 278 */ 279 public ChangeLogScmResult changeLog( ScmRepository repository, ScmFileSet fileSet, ScmVersion startRevision, 280 ScmVersion endRevision, String datePattern ) 281 throws ScmException 282 { 283 return this.getProviderByRepository( repository ).changeLog( repository, fileSet, startRevision, endRevision, 284 datePattern ); 285 } 286 287 /** 288 * {@inheritDoc} 289 */ 290 public CheckInScmResult checkIn( ScmRepository repository, ScmFileSet fileSet, String message ) 291 throws ScmException 292 { 293 return this.getProviderByRepository( repository ).checkIn( repository, fileSet, message ); 294 } 295 296 /** 297 * {@inheritDoc} 298 */ 299 public CheckInScmResult checkIn( ScmRepository repository, ScmFileSet fileSet, ScmVersion revision, String message ) 300 throws ScmException 301 { 302 return this.getProviderByRepository( repository ).checkIn( repository, fileSet, revision, message ); 303 } 304 305 /** 306 * {@inheritDoc} 307 */ 308 public CheckOutScmResult checkOut( ScmRepository repository, ScmFileSet fileSet ) 309 throws ScmException 310 { 311 return this.getProviderByRepository( repository ).checkOut( repository, fileSet ); 312 } 313 314 /** 315 * {@inheritDoc} 316 */ 317 public CheckOutScmResult checkOut( ScmRepository repository, ScmFileSet fileSet, ScmVersion version ) 318 throws ScmException 319 { 320 return this.getProviderByRepository( repository ).checkOut( repository, fileSet, version ); 321 } 322 323 /** 324 * {@inheritDoc} 325 */ 326 public CheckOutScmResult checkOut( ScmRepository repository, ScmFileSet fileSet, boolean recursive ) 327 throws ScmException 328 { 329 return this.getProviderByRepository( repository ).checkOut( repository, fileSet, recursive ); 330 } 331 332 /** 333 * {@inheritDoc} 334 */ 335 public CheckOutScmResult checkOut( ScmRepository repository, ScmFileSet fileSet, ScmVersion version, 336 boolean recursive ) 337 throws ScmException 338 { 339 return this.getProviderByRepository( repository ).checkOut( repository, fileSet, version, recursive ); 340 } 341 342 /** 343 * {@inheritDoc} 344 */ 345 public DiffScmResult diff( ScmRepository repository, ScmFileSet fileSet, ScmVersion startVersion, 346 ScmVersion endVersion ) 347 throws ScmException 348 { 349 return this.getProviderByRepository( repository ).diff( repository, fileSet, startVersion, endVersion ); 350 } 351 352 /** 353 * {@inheritDoc} 354 */ 355 public EditScmResult edit( ScmRepository repository, ScmFileSet fileSet ) 356 throws ScmException 357 { 358 return this.getProviderByRepository( repository ).edit( repository, fileSet ); 359 } 360 361 /** 362 * {@inheritDoc} 363 */ 364 public ExportScmResult export( ScmRepository repository, ScmFileSet fileSet ) 365 throws ScmException 366 { 367 return this.getProviderByRepository( repository ).export( repository, fileSet ); 368 } 369 370 /** 371 * {@inheritDoc} 372 */ 373 public ExportScmResult export( ScmRepository repository, ScmFileSet fileSet, ScmVersion version ) 374 throws ScmException 375 { 376 return this.getProviderByRepository( repository ).export( repository, fileSet, version ); 377 } 378 379 /** 380 * {@inheritDoc} 381 */ 382 public ExportScmResult export( ScmRepository repository, ScmFileSet fileSet, String outputDirectory ) 383 throws ScmException 384 { 385 return this.export( repository, fileSet, outputDirectory ); 386 } 387 388 /** 389 * {@inheritDoc} 390 */ 391 public ExportScmResult export( ScmRepository repository, ScmFileSet fileSet, ScmVersion version, 392 String outputDirectory ) 393 throws ScmException 394 { 395 return this.getProviderByRepository( repository ).export( repository, fileSet, version, outputDirectory ); 396 } 397 398 /** 399 * {@inheritDoc} 400 */ 401 public ListScmResult list( ScmRepository repository, ScmFileSet fileSet, boolean recursive, ScmVersion version ) 402 throws ScmException 403 { 404 return this.getProviderByRepository( repository ).list( repository, fileSet, recursive, version ); 405 } 406 407 /** 408 * {@inheritDoc} 409 */ 410 public RemoveScmResult remove( ScmRepository repository, ScmFileSet fileSet, String message ) 411 throws ScmException 412 { 413 return this.getProviderByRepository( repository ).remove( repository, fileSet, message ); 414 } 415 416 /** 417 * {@inheritDoc} 418 */ 419 public StatusScmResult status( ScmRepository repository, ScmFileSet fileSet ) 420 throws ScmException 421 { 422 return this.getProviderByRepository( repository ).status( repository, fileSet ); 423 } 424 425 /** 426 * {@inheritDoc} 427 */ 428 @SuppressWarnings( "deprecation" ) 429 public TagScmResult tag( ScmRepository repository, ScmFileSet fileSet, String tagName ) 430 throws ScmException 431 { 432 return this.getProviderByRepository( repository ).tag( repository, fileSet, tagName ); 433 } 434 435 /** 436 * {@inheritDoc} 437 */ 438 @SuppressWarnings( "deprecation" ) 439 public TagScmResult tag( ScmRepository repository, ScmFileSet fileSet, String tagName, String message ) 440 throws ScmException 441 { 442 return this.getProviderByRepository( repository ).tag( repository, fileSet, tagName, message ); 443 } 444 445 /** 446 * {@inheritDoc} 447 */ 448 public UnEditScmResult unedit( ScmRepository repository, ScmFileSet fileSet ) 449 throws ScmException 450 { 451 return this.getProviderByRepository( repository ).unedit( repository, fileSet ); 452 } 453 454 /** 455 * {@inheritDoc} 456 */ 457 public UpdateScmResult update( ScmRepository repository, ScmFileSet fileSet ) 458 throws ScmException 459 { 460 return this.getProviderByRepository( repository ).update( repository, fileSet ); 461 } 462 463 /** 464 * {@inheritDoc} 465 */ 466 public UpdateScmResult update( ScmRepository repository, ScmFileSet fileSet, ScmVersion version ) 467 throws ScmException 468 { 469 return this.getProviderByRepository( repository ).update( repository, fileSet, version ); 470 } 471 472 /** 473 * {@inheritDoc} 474 */ 475 public UpdateScmResult update( ScmRepository repository, ScmFileSet fileSet, boolean runChangelog ) 476 throws ScmException 477 { 478 return this.getProviderByRepository( repository ).update( repository, fileSet, runChangelog ); 479 } 480 481 /** 482 * {@inheritDoc} 483 */ 484 public UpdateScmResult update( ScmRepository repository, ScmFileSet fileSet, ScmVersion version, 485 boolean runChangelog ) 486 throws ScmException 487 { 488 return this.getProviderByRepository( repository ).update( repository, fileSet, version, runChangelog ); 489 } 490 491 /** 492 * {@inheritDoc} 493 */ 494 public UpdateScmResult update( ScmRepository repository, ScmFileSet fileSet, String datePattern ) 495 throws ScmException 496 { 497 return this.getProviderByRepository( repository ).update( repository, fileSet, (ScmVersion) null, datePattern ); 498 } 499 500 /** 501 * {@inheritDoc} 502 */ 503 public UpdateScmResult update( ScmRepository repository, ScmFileSet fileSet, ScmVersion version, 504 String datePattern ) 505 throws ScmException 506 { 507 return this.getProviderByRepository( repository ).update( repository, fileSet, version, datePattern ); 508 } 509 510 /** 511 * {@inheritDoc} 512 */ 513 public UpdateScmResult update( ScmRepository repository, ScmFileSet fileSet, Date lastUpdate ) 514 throws ScmException 515 { 516 return this.getProviderByRepository( repository ).update( repository, fileSet, (ScmVersion) null, lastUpdate ); 517 } 518 519 /** 520 * {@inheritDoc} 521 */ 522 public UpdateScmResult update( ScmRepository repository, ScmFileSet fileSet, ScmVersion version, Date lastUpdate ) 523 throws ScmException 524 { 525 return this.getProviderByRepository( repository ).update( repository, fileSet, version, lastUpdate ); 526 } 527 528 /** 529 * {@inheritDoc} 530 */ 531 public UpdateScmResult update( ScmRepository repository, ScmFileSet fileSet, Date lastUpdate, String datePattern ) 532 throws ScmException 533 { 534 return this.getProviderByRepository( repository ).update( repository, fileSet, (ScmVersion) null, lastUpdate, 535 datePattern ); 536 } 537 538 /** 539 * {@inheritDoc} 540 */ 541 public UpdateScmResult update( ScmRepository repository, ScmFileSet fileSet, ScmVersion version, Date lastUpdate, 542 String datePattern ) 543 throws ScmException 544 { 545 return this.getProviderByRepository( repository ).update( repository, fileSet, version, lastUpdate, 546 datePattern ); 547 } 548 549 /** 550 * {@inheritDoc} 551 */ 552 public BlameScmResult blame( ScmRepository repository, ScmFileSet fileSet, String filename ) 553 throws ScmException 554 { 555 return this.getProviderByRepository( repository ).blame( repository, fileSet, filename ); 556 } 557 558 public BlameScmResult blame( BlameScmRequest blameScmRequest ) 559 throws ScmException 560 { 561 return this.getProviderByRepository( blameScmRequest.getScmRepository() ).blame( blameScmRequest ); 562 } 563 564 /** 565 * {@inheritDoc} 566 */ 567 public MkdirScmResult mkdir( ScmRepository repository, ScmFileSet fileSet, String message, boolean createInLocal ) 568 throws ScmException 569 { 570 return this.getProviderByRepository( repository ).mkdir( repository, fileSet, message, createInLocal ); 571 } 572}