1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.rat.documentation.velocity;
20
21 import java.util.ArrayList;
22 import java.util.Arrays;
23 import java.util.Comparator;
24 import java.util.List;
25 import java.util.Map;
26 import java.util.Set;
27 import java.util.SortedSet;
28 import java.util.TreeMap;
29 import java.util.TreeSet;
30 import java.util.stream.Collectors;
31
32 import org.apache.commons.cli.Option;
33 import org.apache.commons.lang3.StringUtils;
34 import org.apache.rat.Defaults;
35 import org.apache.rat.OptionCollection;
36 import org.apache.rat.commandline.StyleSheets;
37 import org.apache.rat.config.exclusion.StandardCollection;
38 import org.apache.rat.config.parameters.ComponentType;
39 import org.apache.rat.config.parameters.Description;
40 import org.apache.rat.config.parameters.DescriptionBuilder;
41 import org.apache.rat.configuration.MatcherBuilderTracker;
42 import org.apache.rat.documentation.options.AntOption;
43 import org.apache.rat.documentation.options.CLIOption;
44 import org.apache.rat.documentation.options.MavenOption;
45 import org.apache.rat.help.AbstractHelp;
46 import org.apache.rat.license.ILicense;
47 import org.apache.rat.license.LicenseSetFactory;
48 import org.apache.velocity.tools.config.DefaultKey;
49 import org.apache.velocity.tools.config.ValidScope;
50
51
52
53
54
55
56
57 @SuppressWarnings("unused")
58 @DefaultKey("rat")
59 @ValidScope({"application"})
60 public class RatTool {
61
62 private static String[] charParser(final String charText) {
63 char[] chars = charText.toCharArray();
64 String[] result = new String[chars.length];
65 for (int i = 0; i < chars.length; i++) {
66 result[i] = String.valueOf(chars[i]);
67 }
68 return result;
69 }
70
71
72
73
74 private static final String[] MARKDOWN_CHARS = charParser("\\`*_{}[]<>()#+-.!|");
75
76
77
78 private static final String[] APT_CHARS = charParser("\\~=-+*[]<>{}");
79
80
81 private final LicenseSetFactory licenseSetFactory;
82
83
84
85
86 public RatTool() {
87 Defaults defaults = Defaults.builder().build();
88 licenseSetFactory = defaults.getLicenseSetFactory();
89 }
90
91
92
93
94
95 public List<Option> options() {
96 List<Option> lst = new ArrayList<>(OptionCollection.buildOptions().getOptions());
97 lst.sort(Comparator.comparing(CLIOption::createName));
98 return lst;
99 }
100
101
102
103
104
105 public Map<String, AntOption> antOptions() {
106 Map<String, AntOption> result = new TreeMap<>();
107 for (AntOption antOption : AntOption.getAntOptions()) {
108 result.put(CLIOption.createName(antOption.getOption()), antOption);
109 }
110 return result;
111 }
112
113
114
115
116
117 public Map<String, CLIOption> cliOptions() {
118 Map<String, CLIOption> result = new TreeMap<>();
119 for (Option option : OptionCollection.buildOptions().getOptions()) {
120 CLIOption cliOption = new CLIOption(option);
121 result.put(cliOption.getName(), cliOption);
122 }
123 return result;
124 }
125
126
127
128
129
130 public Map<String, MavenOption> mvnOptions() {
131 Map<String, MavenOption> result = new TreeMap<>();
132 for (MavenOption mavenOption : MavenOption.getMavenOptions()) {
133 result.put(CLIOption.createName(mavenOption.getOption()), mavenOption);
134 }
135 return result;
136 }
137
138
139
140
141
142
143
144 private String escape(final String text, final String[] chars) {
145 if (text == null) {
146 return "";
147 }
148 String result = text;
149 for (String c : chars) {
150 result = result.replace(c, "\\" + c);
151 }
152 return result;
153 }
154
155
156
157
158
159
160 public String markdownEscape(final String text) {
161 return escape(text, MARKDOWN_CHARS);
162 }
163
164
165
166
167
168
169 public String aptEscape(final String text) {
170 return escape(text, APT_CHARS);
171 }
172
173
174
175
176
177 public List<OptionCollection.ArgumentType> argumentTypes() {
178 return Arrays.stream(OptionCollection.ArgumentType.values()).filter(t -> t != OptionCollection.ArgumentType.NONE)
179 .sorted(Comparator.comparing(OptionCollection.ArgumentType::getDisplayName))
180 .collect(Collectors.toList());
181 }
182
183
184
185
186
187 public Set<Matcher> matchers() {
188 MatcherBuilderTracker tracker = MatcherBuilderTracker.instance();
189 Set<Matcher> documentationSet = new TreeSet<>(Comparator.comparing(Matcher::getName));
190 for (Class<?> clazz : tracker.getClasses()) {
191 Description desc = DescriptionBuilder.buildMap(clazz);
192 documentationSet.add(new Matcher(desc, null));
193 }
194 return documentationSet;
195 }
196
197
198
199
200
201 public List<StandardCollection> standardCollections() {
202 return Arrays.stream(org.apache.rat.config.exclusion.StandardCollection.values())
203 .sorted(Comparator.comparing(Enum::name))
204 .collect(Collectors.toList());
205 }
206
207
208
209
210
211 public List<StyleSheets> styleSheets() {
212 return Arrays.stream(StyleSheets.values())
213 .sorted(Comparator.comparing(StyleSheets::arg))
214 .collect(Collectors.toList());
215 }
216
217
218
219
220
221
222 public StringUtils stringUtils() {
223 return new StringUtils();
224 }
225
226
227
228
229
230 public String tab() {
231 return "\t";
232 }
233
234
235
236
237
238 public String doubleLine() {
239 return "\n\n";
240 }
241
242
243
244
245
246 public List<Description> licenseProperties() {
247 SortedSet<ILicense> licenses = licenseSetFactory.getLicenses(LicenseSetFactory.LicenseFilter.ALL);
248 Description licenseDescription = DescriptionBuilder.build(licenses.first());
249 List<Description> descriptions = new ArrayList<>(licenseDescription.filterChildren(d -> d.getType() == ComponentType.PARAMETER));
250 descriptions.sort(Comparator.comparing(Description::getCommonName));
251 return descriptions;
252 }
253
254
255
256
257
258 public List<License> licenses() {
259 Set<ILicense> licenses = licenseSetFactory.getLicenses(LicenseSetFactory.LicenseFilter.ALL);
260 return licenses.stream().map(License::new).collect(Collectors.toList());
261 }
262
263
264
265
266
267
268 public String pad(final int length) {
269 return AbstractHelp.createPadding(length);
270 }
271 }