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 }