Classes in this File | Line Coverage | Branch Coverage | Complexity | ||||
DataSqlMojo |
|
| 1.2352941176470589;1.235 |
1 | package org.apache.torque.mojo; | |
2 | ||
3 | import java.io.File; | |
4 | import java.util.List; | |
5 | ||
6 | import org.apache.commons.configuration.PropertiesConfiguration; | |
7 | import org.apache.maven.plugin.MojoExecutionException; | |
8 | import org.apache.torque.util.ChangeDetector; | |
9 | import org.apache.torque.util.SimpleScanner; | |
10 | import org.kuali.core.db.torque.KualiTorqueDataSQLTask; | |
11 | ||
12 | /** | |
13 | * Generates platform specific SQL from database agnostic XML files. Each SQL file created by this goal contains data | |
14 | * for a single table. The database platform to generate SQL for is determined by ${targetDatabase}. See also | |
15 | * <code>impex:schemasql</code> | |
16 | * | |
17 | * @goal datasql | |
18 | * @phase generate-sources | |
19 | */ | |
20 | 0 | public class DataSqlMojo extends DataModelTaskMojo { |
21 | /** | |
22 | * The directory in which the SQL will be generated. | |
23 | * | |
24 | * @parameter property="outputDir" expression="${outputDir}" default-value="${project.build.directory}/classes/sql" | |
25 | * @required | |
26 | */ | |
27 | @SuppressWarnings("unused") | |
28 | private String dummy; | |
29 | ||
30 | /** | |
31 | * The location where the SQL file will be generated. | |
32 | * | |
33 | * @parameter property="reportFile" expression="${reportFile}" | |
34 | * default-value="../../../reports/report.${project.artifactId}-data.sql" | |
35 | */ | |
36 | @SuppressWarnings("unused") | |
37 | private String dummy2; | |
38 | ||
39 | /** | |
40 | * The location where the context property file for velocity will be generated. | |
41 | * | |
42 | * @parameter property="contextPropertiesPath" expression="${contextPropertiesPath}" | |
43 | * default-value="${project.build.directory}/reports/context.datasql.properties" | |
44 | */ | |
45 | @SuppressWarnings("unused") | |
46 | private String dummy3; | |
47 | ||
48 | /** | |
49 | * Only run this mojo if the data or schema has changed since the last run | |
50 | * | |
51 | * @parameter expression="${runOnlyOnChange}" default-value="true" | |
52 | * @required | |
53 | */ | |
54 | private boolean runOnlyOnChange; | |
55 | ||
56 | /** | |
57 | * The XML file describing the database schema | |
58 | * | |
59 | * @parameter expression="${schemaXMLFile}" default-value="${basedir}/src/main/impex/${project.artifactId}.xml" | |
60 | * @required | |
61 | */ | |
62 | private File schemaXMLFile; | |
63 | ||
64 | /** | |
65 | * The directory containing data XML files | |
66 | * | |
67 | * @parameter expression="${dataXMLDir}" default-value="${basedir}/src/main/impex" | |
68 | * @required | |
69 | */ | |
70 | private File dataXMLDir; | |
71 | ||
72 | /** | |
73 | * The default set of files in that directory to include (ant style notation) | |
74 | * | |
75 | * @parameter expression="${dataXMLIncludes}" default-value="*.xml" | |
76 | * @required | |
77 | */ | |
78 | private String dataXMLIncludes; | |
79 | ||
80 | /** | |
81 | * The default set of files in that directory to exclude (ant style notation) | |
82 | * | |
83 | * @parameter expression="${dataXMLExcludes}" default-value="${project.artifactId}.xml" | |
84 | */ | |
85 | private String dataXMLExcludes; | |
86 | ||
87 | /** | |
88 | * The DTD for the data XML files | |
89 | * | |
90 | * @parameter expression="${dataDTD}" | |
91 | * default-value="${project.build.directory}/generated-impex/${project.artifactId}.dtd" | |
92 | * @required | |
93 | */ | |
94 | private File dataDTD; | |
95 | ||
96 | @Override | |
97 | public void executeMojo() throws MojoExecutionException { | |
98 | // loadPropertiesToMojo(); | |
99 | 0 | updateConfiguration(); |
100 | 0 | validateConfiguration(); |
101 | 0 | generateContextProperties(); |
102 | 0 | configureTask(); |
103 | 0 | addTargetDatabaseToOutputDir(); |
104 | 0 | addTargetDatabaseToReportFile(); |
105 | 0 | ChangeDetector schema = new ChangeDetector(getCanonicalReportFile(), getSchemaFiles()); |
106 | 0 | ChangeDetector data = new ChangeDetector(getCanonicalReportFile(), getDataFiles()); |
107 | 0 | if (!schema.isChanged() && !data.isChanged() && isRunOnlyOnChange()) { |
108 | 0 | getLog().info("------------------------------------------------------------------------"); |
109 | 0 | getLog().info("Data and schema are unchanged. Skipping generation."); |
110 | 0 | getLog().info("------------------------------------------------------------------------"); |
111 | 0 | return; |
112 | } | |
113 | 0 | getLog().info("------------------------------------------------------------------------"); |
114 | 0 | getLog().info("Generating SQL for " + getTargetDatabase() + " from data XML files"); |
115 | 0 | getLog().info("------------------------------------------------------------------------"); |
116 | 0 | getAntTask().execute(); |
117 | 0 | } |
118 | ||
119 | protected List<File> getDataFiles() { | |
120 | 0 | return new SimpleScanner(getDataXMLDir(), getDataXMLIncludes(), getDataXMLExcludes()).getFiles(); |
121 | } | |
122 | ||
123 | /** | |
124 | * Returns the context properties for the Texen task. | |
125 | * | |
126 | * @return The PropertiesConfiguration containing all context properties, not null. | |
127 | */ | |
128 | protected PropertiesConfiguration getMojoContextProperties() { | |
129 | 0 | PropertiesConfiguration configuration = new PropertiesConfiguration(); |
130 | 0 | configuration.addProperty(TARGET_DATABASE_CONTEXT_PROPERTY, super.getTargetDatabase()); |
131 | 0 | return configuration; |
132 | } | |
133 | ||
134 | /** | |
135 | * Configures the Texen task wrapped by this mojo | |
136 | */ | |
137 | protected void configureTask() throws MojoExecutionException { | |
138 | 0 | KualiTorqueDataSQLTask task = new KualiTorqueDataSQLTask(); |
139 | 0 | setAntTask(task); |
140 | 0 | super.configureTask(); |
141 | 0 | task.setDataDTD(getDataDTD()); |
142 | 0 | task.addFileset(getAntFileSet(getDataXMLDir(), getDataXMLIncludes(), getDataXMLExcludes())); |
143 | 0 | task.setXmlFile(getSchemaXMLFile().getAbsolutePath()); |
144 | 0 | task.setTargetDatabase(getTargetDatabase()); |
145 | 0 | } |
146 | ||
147 | /** | |
148 | * Returns the path to the control template. | |
149 | * | |
150 | * @return "sql/load/Control.vm" | |
151 | */ | |
152 | protected String getControlTemplate() { | |
153 | 0 | return "sql/load/Control.vm"; |
154 | } | |
155 | ||
156 | public String getDataXMLIncludes() { | |
157 | 0 | return dataXMLIncludes; |
158 | } | |
159 | ||
160 | public void setDataXMLIncludes(String dataXMLIncludes) { | |
161 | 0 | this.dataXMLIncludes = dataXMLIncludes; |
162 | 0 | } |
163 | ||
164 | public String getDataXMLExcludes() { | |
165 | 0 | return dataXMLExcludes; |
166 | } | |
167 | ||
168 | public void setDataXMLExcludes(String dataXMLExcludes) { | |
169 | 0 | this.dataXMLExcludes = dataXMLExcludes; |
170 | 0 | } |
171 | ||
172 | public File getDataXMLDir() { | |
173 | 0 | return dataXMLDir; |
174 | } | |
175 | ||
176 | public void setDataXMLDir(File dataXMLDir) { | |
177 | 0 | this.dataXMLDir = dataXMLDir; |
178 | 0 | } |
179 | ||
180 | public File getSchemaXMLFile() { | |
181 | 0 | return schemaXMLFile; |
182 | } | |
183 | ||
184 | public void setSchemaXMLFile(File schemaXMLFile) { | |
185 | 0 | this.schemaXMLFile = schemaXMLFile; |
186 | 0 | } |
187 | ||
188 | public boolean isRunOnlyOnChange() { | |
189 | 0 | return runOnlyOnChange; |
190 | } | |
191 | ||
192 | public void setRunOnlyOnChange(boolean runOnlyOnDataChange) { | |
193 | 0 | this.runOnlyOnChange = runOnlyOnDataChange; |
194 | 0 | } |
195 | ||
196 | public File getDataDTD() { | |
197 | 0 | return dataDTD; |
198 | } | |
199 | ||
200 | public void setDataDTD(File dataDTD) { | |
201 | 0 | this.dataDTD = dataDTD; |
202 | 0 | } |
203 | ||
204 | } |