1 package org.kuali.common.jute.project.maven; 2 3 import static com.google.common.base.Optional.absent; 4 import static org.kuali.common.jute.base.Precondition.checkMin; 5 import static org.kuali.common.jute.base.Precondition.checkNotNull; 6 7 import javax.inject.Inject; 8 import javax.inject.Provider; 9 10 import org.kuali.common.jute.process.ProcessService; 11 import org.kuali.common.jute.project.BuildScm; 12 import org.kuali.common.jute.scm.GitScmProvider; 13 import org.kuali.common.jute.scm.ScmType; 14 import org.kuali.common.jute.scm.SvnScmProvider; 15 import org.kuali.common.jute.scm.annotation.Timeout; 16 17 import com.google.common.base.Optional; 18 19 public final class BuildScmProvider implements Provider<Optional<BuildScm>> { 20 21 @Inject 22 public BuildScmProvider(DirectoryContext dirs, Optional<ScmType> type, ProcessService service, @Timeout long timeoutMillis) { 23 this.dirs = checkNotNull(dirs, "dirs"); 24 this.service = checkNotNull(service, "service"); 25 this.type = checkNotNull(type, "type"); 26 this.timeoutMillis = checkMin(timeoutMillis, 0, "timeoutMillis"); 27 } 28 29 private final DirectoryContext dirs; 30 private final Optional<ScmType> type; 31 private final ProcessService service; 32 private final long timeoutMillis; 33 34 @Override 35 public Optional<BuildScm> get() { 36 if (!type.isPresent()) { 37 return absent(); 38 } 39 switch (type.get()) { 40 case GIT: 41 return Optional.of(new GitScmProvider(dirs.getBasedir(), service, timeoutMillis).get()); 42 case SVN: 43 return Optional.of(new SvnScmProvider(dirs.getBasedir(), service, timeoutMillis).get()); 44 default: 45 return absent(); 46 } 47 } 48 49 public DirectoryContext getDirs() { 50 return dirs; 51 } 52 53 public ProcessService getService() { 54 return service; 55 } 56 }