1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.eclipse.aether.impl.scope;
20
21 import java.util.Arrays;
22 import java.util.Collection;
23 import java.util.Collections;
24 import java.util.HashSet;
25
26 import static java.util.Objects.requireNonNull;
27
28
29
30
31
32
33 public final class BuildScopeQuery {
34 public enum Mode {
35 ALL,
36 BY_PROJECT_PATH,
37 BY_BUILD_PATH,
38 SELECT,
39 SINGLETON;
40
41 private void validate(ProjectPath projectPath, BuildPath buildPath) {
42 if ((this == ALL) && (projectPath != null || buildPath != null)) {
43 throw new IllegalArgumentException(this.name() + " requires no parameter");
44 } else if (this == BY_PROJECT_PATH && (projectPath == null || buildPath != null)) {
45 throw new IllegalArgumentException(this.name() + " requires project path parameter only");
46 } else if (this == BY_BUILD_PATH && (projectPath != null || buildPath == null)) {
47 throw new IllegalArgumentException(this.name() + " requires build path parameter only");
48 } else if ((this == SELECT || this == SINGLETON) && (projectPath == null || buildPath == null)) {
49 throw new IllegalArgumentException(this.name() + " requires both parameters");
50 }
51 }
52 }
53
54 private final Mode mode;
55 private final ProjectPath projectPath;
56 private final BuildPath buildPath;
57
58 private BuildScopeQuery(Mode mode, ProjectPath projectPath, BuildPath buildPath) {
59 this.mode = requireNonNull(mode, "mode");
60 mode.validate(projectPath, buildPath);
61 this.projectPath = projectPath;
62 this.buildPath = buildPath;
63 }
64
65 public Mode getMode() {
66 return mode;
67 }
68
69 public ProjectPath getProjectPath() {
70 return projectPath;
71 }
72
73 public BuildPath getBuildPath() {
74 return buildPath;
75 }
76
77 @Override
78 public String toString() {
79 if ((mode == Mode.ALL)) {
80 return mode.name();
81 } else if (mode == Mode.BY_PROJECT_PATH) {
82 return mode.name() + "(" + projectPath.getId() + ")";
83 } else if (mode == Mode.BY_BUILD_PATH) {
84 return mode.name() + "(" + buildPath.getId() + ")";
85 } else {
86 return mode.name() + "(" + projectPath.getId() + ", " + buildPath.getId() + ")";
87 }
88 }
89
90 public static Collection<BuildScopeQuery> all() {
91 return Collections.singleton(new BuildScopeQuery(Mode.ALL, null, null));
92 }
93
94 public static Collection<BuildScopeQuery> byProjectPath(ProjectPath projectPath) {
95 return Collections.singleton(new BuildScopeQuery(Mode.BY_PROJECT_PATH, projectPath, null));
96 }
97
98 public static Collection<BuildScopeQuery> byBuildPath(BuildPath buildPath) {
99 return Collections.singleton(new BuildScopeQuery(Mode.BY_BUILD_PATH, null, buildPath));
100 }
101
102 public static Collection<BuildScopeQuery> select(ProjectPath projectPath, BuildPath buildPath) {
103 return Collections.singleton(new BuildScopeQuery(Mode.SELECT, projectPath, buildPath));
104 }
105
106 public static Collection<BuildScopeQuery> singleton(ProjectPath projectPath, BuildPath buildPath) {
107 return Collections.singleton(new BuildScopeQuery(Mode.SINGLETON, projectPath, buildPath));
108 }
109
110 @SafeVarargs
111 public static Collection<BuildScopeQuery> union(Collection<BuildScopeQuery>... buildScopeQueries) {
112 HashSet<BuildScopeQuery> result = new HashSet<>();
113 Arrays.asList(buildScopeQueries).forEach(result::addAll);
114 return result;
115 }
116 }