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