1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.internal.impl;
20
21 import java.util.Collection;
22 import java.util.Collections;
23 import java.util.List;
24 import java.util.stream.Stream;
25
26 import org.apache.maven.api.Lifecycle;
27 import org.apache.maven.api.model.Plugin;
28 import org.apache.maven.api.model.PluginExecution;
29
30 import static java.util.Arrays.asList;
31
32 public class Lifecycles {
33
34 static Lifecycle.Phase phase(String name) {
35 return new DefaultPhase(name, Collections.emptyList(), Collections.emptyList(), Collections.emptyList());
36 }
37
38 static Lifecycle.Phase phase(String name, Lifecycle.Phase... phases) {
39 return new DefaultPhase(name, Collections.emptyList(), Collections.emptyList(), asList(phases));
40 }
41
42 static Lifecycle.Phase phase(String name, Lifecycle.Link link, Lifecycle.Phase... phases) {
43 return new DefaultPhase(name, Collections.emptyList(), Collections.singletonList(link), asList(phases));
44 }
45
46 static Lifecycle.Phase phase(String name, Plugin plugin) {
47 return new DefaultPhase(
48 name, Collections.singletonList(plugin), Collections.emptyList(), Collections.emptyList());
49 }
50
51 static Lifecycle.Phase phase(String name, Lifecycle.Link link, Plugin plugin) {
52 return new DefaultPhase(
53 name, Collections.singletonList(plugin), Collections.singletonList(link), Collections.emptyList());
54 }
55
56 static Lifecycle.Phase phase(String name, Lifecycle.Link link1, Lifecycle.Link link2, Lifecycle.Phase... phases) {
57 return new DefaultPhase(name, Collections.emptyList(), asList(link1, link2), asList(phases));
58 }
59
60 static Lifecycle.Phase phase(
61 String name, Lifecycle.Link link1, Lifecycle.Link link2, Lifecycle.Link link3, Lifecycle.Phase... phases) {
62 return new DefaultPhase(name, Collections.emptyList(), asList(link1, link2, link3), asList(phases));
63 }
64
65 static Lifecycle.Phase phase(String name, Collection<Lifecycle.Link> links, Lifecycle.Phase... phases) {
66 return new DefaultPhase(name, Collections.emptyList(), links, asList(phases));
67 }
68
69 static Plugin plugin(String coords, String phase) {
70 String[] c = coords.split(":");
71 return Plugin.newBuilder()
72 .groupId(c[0])
73 .artifactId(c[1])
74 .version(c[2])
75 .executions(Collections.singletonList(PluginExecution.newBuilder()
76 .id("default-" + c[3])
77 .phase(phase)
78 .goals(Collections.singletonList(c[3]))
79 .build()))
80 .build();
81 }
82
83
84 static Lifecycle.Link after(String b) {
85 return new Lifecycle.Link() {
86 @Override
87 public Kind kind() {
88 return Kind.AFTER;
89 }
90
91 @Override
92 public Lifecycle.Pointer pointer() {
93 return new Lifecycle.PhasePointer() {
94 @Override
95 public String phase() {
96 return b;
97 }
98 };
99 }
100 };
101 }
102
103
104 static Lifecycle.Link dependencies(String scope, String phase) {
105 return new Lifecycle.Link() {
106 @Override
107 public Kind kind() {
108 return Kind.AFTER;
109 }
110
111 @Override
112 public Lifecycle.Pointer pointer() {
113 return new Lifecycle.DependenciesPointer() {
114 @Override
115 public String phase() {
116 return phase;
117 }
118
119 @Override
120 public String scope() {
121 return scope;
122 }
123 };
124 }
125 };
126 }
127
128 static Lifecycle.Alias alias(String v3Phase, String v4Phase) {
129 return new DefaultAlias(v3Phase, v4Phase);
130 }
131
132 static class DefaultPhase implements Lifecycle.Phase {
133 private final String name;
134 private final List<Plugin> plugins;
135 private final Collection<Lifecycle.Link> links;
136 private final List<Lifecycle.Phase> phases;
137
138 DefaultPhase(
139 String name, List<Plugin> plugins, Collection<Lifecycle.Link> links, List<Lifecycle.Phase> phases) {
140 this.name = name;
141 this.plugins = plugins;
142 this.links = links;
143 this.phases = phases;
144 }
145
146 @Override
147 public String name() {
148 return name;
149 }
150
151 @Override
152 public List<Plugin> plugins() {
153 return plugins;
154 }
155
156 @Override
157 public Collection<Lifecycle.Link> links() {
158 return links;
159 }
160
161 @Override
162 public List<Lifecycle.Phase> phases() {
163 return phases;
164 }
165
166 @Override
167 public Stream<Lifecycle.Phase> allPhases() {
168 return Stream.concat(Stream.of(this), phases().stream().flatMap(Lifecycle.Phase::allPhases));
169 }
170 }
171
172 static class DefaultAlias implements Lifecycle.Alias {
173 private final String v3Phase;
174 private final String v4Phase;
175
176 DefaultAlias(String v3Phase, String v4Phase) {
177 this.v3Phase = v3Phase;
178 this.v4Phase = v4Phase;
179 }
180
181 @Override
182 public String v3Phase() {
183 return v3Phase;
184 }
185
186 @Override
187 public String v4Phase() {
188 return v4Phase;
189 }
190 }
191 }