1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package io.wcm.devops.conga.plugins.aem.maven;
21
22 import static io.wcm.devops.conga.generator.util.FileUtil.getCanonicalPath;
23
24 import java.io.File;
25 import java.util.Arrays;
26 import java.util.Collections;
27 import java.util.List;
28 import java.util.Set;
29
30 import org.apache.maven.plugin.AbstractMojo;
31 import org.apache.maven.plugin.MojoExecutionException;
32 import org.apache.maven.plugins.annotations.Parameter;
33
34
35
36
37 abstract class AbstractCloudManagerMojo extends AbstractMojo {
38
39
40
41
42 @Parameter(property = "conga.environments")
43 private String[] environments;
44
45
46
47
48 @Parameter(property = "conga.nodes")
49 private String[] nodes;
50
51
52
53
54 @Parameter(defaultValue = "${project.build.directory}/configuration")
55 private File configurationDir;
56
57
58
59
60 @Parameter(defaultValue = "${project.build.directory}")
61 private File target;
62
63
64
65
66 protected File getTargetDir() {
67
68 if (!target.exists() && !target.mkdirs()) {
69 throw new IllegalStateException("Unable to create target dir: " + getCanonicalPath(target));
70 }
71 return target;
72 }
73
74
75
76
77
78
79 protected List<File> getEnvironmentDir() throws MojoExecutionException {
80 List<File> directories = null;
81 Set<String> selectedEnvironments = toSet(this.environments);
82 if (configurationDir.exists() && configurationDir.isDirectory()) {
83 File[] files = configurationDir.listFiles();
84 if (files != null) {
85 directories = Arrays.stream(files)
86 .filter(File::isDirectory)
87 .filter(dir -> (selectedEnvironments.isEmpty() || selectedEnvironments.contains(dir.getName())))
88 .toList();
89 }
90 }
91 if (directories == null || directories.isEmpty()) {
92 throw new MojoExecutionException("No matching environment directory found in " + getCanonicalPath(configurationDir));
93 }
94 return directories;
95 }
96
97
98
99
100
101
102 protected boolean isEnvironmentConfiguredExplicitely(String environment) {
103 Set<String> selectedEnvironments = toSet(this.environments);
104 return selectedEnvironments.contains(environment);
105 }
106
107
108
109
110
111
112 protected List<File> getNodeDirs(File environmentDir) {
113 Set<String> selectedNodes = toSet(this.nodes);
114 File[] files = environmentDir.listFiles();
115 if (files != null) {
116 return Arrays.stream(files)
117 .filter(File::isDirectory)
118 .filter(dir -> selectedNodes.isEmpty() || selectedNodes.contains(dir.getName()))
119 .toList();
120 }
121 else {
122 return Collections.emptyList();
123 }
124 }
125
126 private static Set<String> toSet(String[] values) {
127 if (values != null) {
128 return Set.of(values);
129 }
130 else {
131 return Set.of();
132 }
133 }
134
135 }