1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.apache.logging.log4j.audit.plugin;
17
18 import java.io.File;
19 import java.lang.reflect.Constructor;
20 import java.util.HashMap;
21 import java.util.Map;
22
23 import org.apache.logging.log4j.audit.generator.InterfacesGenerator;
24 import org.apache.logging.log4j.catalog.api.CatalogReader;
25 import org.apache.logging.log4j.catalog.api.dao.JsonCatalogReader;
26 import org.apache.logging.log4j.util.LoaderUtil;
27 import org.apache.maven.plugin.AbstractMojo;
28 import org.apache.maven.plugin.MojoExecutionException;
29 import org.apache.maven.plugins.annotations.LifecyclePhase;
30 import org.apache.maven.plugins.annotations.Mojo;
31 import org.apache.maven.plugins.annotations.Parameter;
32 import org.apache.maven.project.MavenProject;
33
34
35
36
37 @Mojo(name = "generate", defaultPhase = LifecyclePhase.GENERATE_SOURCES)
38 public class AuditMojo extends AbstractMojo {
39
40 private static final String BASEDIR = "baseDir";
41 private static final String BUILDDIR = "buildDir";
42 private static final int MAX_KEY_LENGTH = 32;
43 private static final int DEFAULT_ENTERPRISE_ID = 18060;
44
45 @Parameter(defaultValue = "${project}")
46 private MavenProject project;
47
48 @Parameter(property = "catalogReaderClassName", defaultValue = "org.apache.logging.log4j.catalog.api.dao.FileCatalogReader")
49 private String catalogReaderClassName;
50
51 @Parameter(property = "catalogReaderAttributes", required = false)
52 private Map<String, String> catalogReaderAttributes;
53
54 @Parameter(property = "packageName", required = true)
55 private String packageName;
56
57
58
59 @Parameter(defaultValue = "${project.build.directory}/generated-sources/log4j-audit", property = "outputDir")
60 private File outputDirectory;
61
62 @Parameter(required = false)
63 private int maxKeyLength;
64
65 @Parameter(required = false)
66 private int enterpriseId;
67
68 @SuppressWarnings("unchecked")
69 public void execute() throws MojoExecutionException {
70 if (maxKeyLength <= 0) {
71 maxKeyLength = MAX_KEY_LENGTH;
72 }
73 if (enterpriseId <= 0) {
74 enterpriseId = DEFAULT_ENTERPRISE_ID;
75 }
76 CatalogReader catalogReader = null;
77 try {
78 File basedir = project.getBasedir();
79 Class<?> clazz = LoaderUtil.loadClass(catalogReaderClassName);
80 Constructor<CatalogReader>[] constructors = (Constructor<CatalogReader>[]) clazz.getConstructors();
81
82 for (Constructor<CatalogReader> constructor : constructors) {
83 if (constructor.getParameterCount() == 1 && constructor.getParameterTypes()[0].isAssignableFrom(Map.class)) {
84 if (catalogReaderAttributes == null) {
85 catalogReaderAttributes = new HashMap<>();
86 }
87 if (!catalogReaderAttributes.containsKey(BASEDIR)) {
88 catalogReaderAttributes.put(BASEDIR, project.getBasedir().getAbsolutePath());
89 }
90 if (!catalogReaderAttributes.containsKey(BUILDDIR)) {
91 catalogReaderAttributes.put(BUILDDIR, project.getBuild().getDirectory());
92 }
93 catalogReader = constructor.newInstance(catalogReaderAttributes);
94 break;
95 }
96 }
97 if (catalogReader == null) {
98 catalogReader = LoaderUtil.newInstanceOf(catalogReaderClassName);
99 }
100
101 } catch (Exception ex) {
102 getLog().error("Unable to load catalog reader " + catalogReaderClassName, ex);
103 return;
104 }
105 InterfacesGenerator generator = new InterfacesGenerator();
106 JsonCatalogReader jsonCatalogReader = new JsonCatalogReader();
107 jsonCatalogReader.setCatalogReader(catalogReader);
108 jsonCatalogReader.init();
109 generator.setCatalogReader(jsonCatalogReader);
110 generator.setOutputDirectory(outputDirectory.getAbsolutePath());
111 generator.setPackageName(packageName);
112 generator.setMaxKeyLength(maxKeyLength);
113 generator.setEnterpriseId(enterpriseId);
114 try {
115 generator.generateSource();
116 project.addCompileSourceRoot(outputDirectory.getAbsolutePath());
117 } catch (Exception ex) {
118 throw new MojoExecutionException("Error generating Audit interfaces", ex);
119 }
120 }
121 }