View Javadoc

1   package org.apache.torque.mojo;
2   
3   /*
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   *
12   *   http://www.apache.org/licenses/LICENSE-2.0
13   *
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.
20   */
21  
22  import org.apache.commons.configuration.PropertiesConfiguration;
23  import org.apache.maven.plugin.MojoExecutionException;
24  import org.apache.torque.task.TorqueDataDumpTask;
25  
26  /**
27   * Reads the content of tables from thh database and stores the data
28   * in XML files.
29   *
30   * @author Raphael Pieroni (rafale_at_codehaus.org)
31   * @author <a href="fischer@seitenbau.de">Thomas Fischer</a>
32   *
33   * @goal datadump
34   * @phase generate-sources
35   */
36  public class DataDumpMojo extends DataModelTaskMojo
37  {
38      /** The context property for the name of the project. */
39      public static final String PROJECT_CONTEXT_PROPERTY
40          = "project";
41  
42      // The following dummies trick the Mojo Description Extractor
43      // into setting the correct default values for
44      // outputDir, reportFile, contextPropertiesPath, schemaExcludes
45      /**
46       * The directory in which the data files will be created.
47       *
48       * @parameter property="outputDir"
49       *            expression="${project.build.directory}/data/torque"
50       */
51      private String dummy;
52  
53      /**
54       * The location where the report file will be generated.
55       *
56       * @parameter property="reportFile"
57       *            expression="../../torque/report.${project.artifact.artifactId}.data.generation"
58       */
59      private String dummy2;
60  
61      /**
62       * The location where the context property file for velocity will be
63       * generated.
64       *
65       * @parameter property="contextPropertiesPath"
66       *            expression="${project.build.directory}/torque/context.data.properties"
67       */
68      private String dummy3;
69  
70      /**
71       * The schema files which should be excluded in generation
72       * (in ant-style notation).
73       *
74       * @parameter property="schemaExcludes" expression="id-table-schema.xml"
75       */
76      private String dummy4;
77  
78      /**
79       * The fully qualified class name of the database driver.
80       *
81       * @parameter
82       * @required
83       */
84      private String driver = null;
85  
86      /**
87       * The connect URL of the database.
88       *
89       * @parameter
90       * @required
91       */
92      private String url = null;
93  
94      /**
95       * The user name to connect to the database.
96       *
97       * @parameter
98       * @required
99       */
100     private String user = null;
101 
102     /**
103      * The password for the database user.
104      *
105      * @parameter
106      */
107     private String password = null;
108 
109     /**
110      * The name of the project, used as a prefix of the names
111      * of the generated files and the name of the datadtd.
112      *
113      * @parameter expression="torque"
114      */
115     private String projectName = null;
116 
117     /**
118      * The name of the xml file to process. Only one xml file can be processed
119      * at a time.
120      * Overrides the settings schemaIncludes and schemaExcludes
121      *
122      * @parameter
123      * @required
124      */
125     private String xmlFile = null;
126 
127     /**
128      * Creates a new SQLMojo object.
129      */
130     public DataDumpMojo()
131     {
132         super(new TorqueDataDumpTask());
133     }
134 
135     /**
136      * Returns the path to the control template.
137      *
138      * @return "data/Control.vm"
139      */
140     protected String getControlTemplate()
141     {
142         return "data/dump/Control.vm";
143     }
144 
145     /**
146      * Returns the context properties for the Texen task.
147      *
148      * @return The PropertiesConfiguration containing all context properties,
149      *         not null.
150      */
151     protected PropertiesConfiguration getMojoContextProperties()
152     {
153         PropertiesConfiguration configuration = new PropertiesConfiguration();
154         configuration.addProperty(PROJECT_CONTEXT_PROPERTY, projectName);
155         return configuration;
156     }
157 
158     /**
159      * Configures the Texen task which is wrapped by this mojo.
160      * In this implementation, the context properties, useClasspath,
161      * the output directory, the control template, the schema Fileset,
162      * the target package, the target database and the xml file are set.
163      *
164      * @throws MojoExecutionException if an error occurs when setting the Tasks
165      *         properties.
166      *
167      * @see TexenTaskMojo#configureTask()
168      */
169     protected void configureTask() throws MojoExecutionException
170     {
171         super.configureTask();
172 
173         TorqueDataDumpTask task
174                 = (TorqueDataDumpTask) super.getGeneratorTask();
175 
176         task.setDatabaseDriver(driver);
177         task.setDatabaseUrl(url);
178         task.setDatabaseUser(user);
179         task.setDatabasePassword(password);
180         task.setXmlFile(xmlFile);
181     }
182 
183     /**
184      * Returns the fully qualified class name of the database driver.
185      *
186      * @return the fully qualified class name of the database driver.
187      */
188     public String getDriver()
189     {
190         return driver;
191     }
192 
193     /**
194      * Sets the fully qualified class name of the database driver.
195      *
196      * @param driver the fully qualified class name of the database driver.
197      */
198     public void setDriver(String driver)
199     {
200         this.driver = driver;
201     }
202 
203     /**
204      * Returns the password of the database user.
205      *
206      * @return the password of the database user.
207      */
208     public String getPassword()
209     {
210         return password;
211     }
212 
213     /**
214      * Sets the password of the database user.
215      *
216      * @param password the password of the database user.
217      */
218     public void setPassword(String password)
219     {
220         this.password = password;
221     }
222 
223     /**
224      * Returns the connect URL to the database.
225      *
226      * @return the connect URL to the database.
227      */
228     public String getUrl()
229     {
230         return url;
231     }
232 
233     /**
234      * Sets the connect URL to the database.
235      *
236      * @param url the connect URL to the database.
237      */
238     public void setUrl(String url)
239     {
240         this.url = url;
241     }
242 
243     /**
244      * Returns the database user.
245      *
246      * @return the userId of the database user.
247      */
248     public String getUser()
249     {
250         return user;
251     }
252 
253     /**
254      * Sets the database user.
255      *
256      * @param user the userId of the database user.
257      */
258     public void setUser(String user)
259     {
260         this.user = user;
261     }
262 
263     /**
264      * Returns the name of the project, which is used as prefix for the
265      * generated table names and the name of the datadtd.
266      *
267      * @return the name of the project.
268      */
269     public String getProjectName()
270     {
271         return projectName;
272     }
273 
274     /**
275      * Sets the name of the project, which is used as prefix for the
276      * generated table names and the name of the datadtd.
277      *
278      * @param project the name of the project.
279      */
280     public void setProjectName(String projectName)
281     {
282         this.projectName = projectName;
283     }
284 
285     /**
286      * Returns the name of the xml file to process.
287      *
288      * @return the name of the xml file to process.
289      */
290     public String getXmlFile()
291     {
292         return xmlFile;
293     }
294 
295     /**
296      * Sets the name of the xml file to process.
297      *
298      * @param project the name of the xml file to process.
299      */
300     public void setXmlFile(String xmlFile)
301     {
302         this.xmlFile = xmlFile;
303     }
304 }