KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > enhydra > ant > taskdefs > SQLSplitterTask


1 /*
2  * Title: DODS Ant task
3  * Description: DODS
4  */

5 package org.enhydra.ant.taskdefs;
6
7 import java.io.File JavaDoc;
8 import java.util.ArrayList JavaDoc;
9 import org.apache.tools.ant.BuildException;
10 import org.apache.tools.ant.types.EnumeratedAttribute;
11
12 /**
13  * @author Sinisa Milosevic
14  * Invoke DODS to generate a set of java classes from a doml file
15  * <p>The files will only be regenerated/compiled if the date on the doml file is
16  * newer than at least one of the generated files
17  * <p>This taskdef extends Ant's <javac> task; refer to that documentation for
18  * parameters that affect compilation.
19  * <p>Typically made visible to an Ant build file with the following declaration:<PRE>
20  * &lt;taskdef name="dods" classname="org.enhydra.ant.taskdefs.Dods"/&gt;</PRE>
21  *
22  * <B>Parameters</B><PRE>
23  *
24  * dir - The base SQLSplitter directory. Required = Yes
25  * resultsql - Absolute path and base name of created sql files. Required = Yes
26  * force - Force SQLSplitter to always be regenerated source files. Required = No</PRE>
27  * <p>
28  * Examples<PRE>
29  * &lt;sqlsplitter dir="${project.root}/sql"
30  * resultsql="${project.root}/Test.sql"/&gt;</PRE>
31  *
32  */

33 public class SQLSplitterTask extends org.apache.tools.ant.taskdefs.Javac {
34     protected File JavaDoc dir = null;
35     protected File JavaDoc resultsql = null;
36     protected boolean forceBuild = false;
37     protected boolean splitsqlprimary = true;
38     public static class BooleanAttribute extends EnumeratedAttribute {
39
40         /**
41          * Set value for Boolean parameters
42          */

43         public String JavaDoc[] getValues() {
44             return (new String JavaDoc[] {"yes", "no", "true", "false" });
45         }
46
47         public BooleanAttribute() {}
48     }
49     public SQLSplitterTask() {
50         dir = null;
51         resultsql = null;
52     }
53
54     /**
55      * Simply invoke DODS Generator, and then compile the generated files
56      * @exception org.apache.tools.ant.BuildException
57      */

58     public void execute() throws org.apache.tools.ant.BuildException {
59         if (dir == null) {
60             throw new BuildException("dir attribute must be set!");
61         }
62         if (resultsql == null) {
63             throw new BuildException("resultsql attribute must be set!");
64         } else {
65             int dirpos = -1;
66
67             if (System.getProperty("os.name").toLowerCase().startsWith("win")) {
68                 dirpos = resultsql.getAbsolutePath().lastIndexOf("\\");
69             } else {
70                 dirpos = resultsql.getAbsolutePath().lastIndexOf("/");
71             }
72             String JavaDoc resultsqldir = null;
73             String JavaDoc beginfilename = null;
74
75             if (dirpos != -1) {
76                 resultsqldir = resultsql.getAbsolutePath().substring(0, dirpos);
77                 String JavaDoc sqlfilename = resultsql.getAbsolutePath().substring(dirpos
78                         + 1);
79                 int pointpos = sqlfilename.indexOf(".sql");
80
81                 if (pointpos != -1) {
82                     beginfilename = sqlfilename.substring(0, pointpos);
83                 } else {
84                     beginfilename = sqlfilename;
85                 }
86             } else {
87                 resultsqldir = ".";
88                 int pointpos = resultsql.getAbsolutePath().indexOf(".sql");
89
90                 if (pointpos != -1) {
91                     beginfilename = resultsql.getAbsolutePath().substring(0,
92                             pointpos);
93                 } else {
94                     beginfilename = resultsql.getAbsolutePath();
95                 }
96             }
97             String JavaDoc[] files = (new File JavaDoc(resultsqldir)).list();
98
99             for (int i = 0; i < files.length; i++) {
100                 if ((files[i].startsWith(beginfilename))
101                         && (files[i].endsWith(".sql"))) {
102                     if (System.getProperty("os.name").toLowerCase().startsWith("win")) {
103                         (new File JavaDoc(resultsqldir + "\\" + files[i])).delete();
104                     } else {
105                         (new File JavaDoc(resultsqldir + "/" + files[i])).delete();
106                     }
107                             
108                 }
109             }
110                     
111         }
112                 
113         java.util.ArrayList JavaDoc argsList = new ArrayList JavaDoc();
114
115         argsList.add(dir.getAbsolutePath());
116         argsList.add(resultsql.getAbsolutePath());
117         if(!splitsqlprimary){
118             argsList.add("false");
119         }
120         try {
121             String JavaDoc splitterClassName = "org.webdocwf.util.sql.SQLSplitter";
122             java.lang.reflect.Method JavaDoc m = null;
123             java.lang.Class JavaDoc c = null;
124
125             try {
126                 c = java.lang.Class.forName(splitterClassName);
127                 m = c.getMethod("main", new java.lang.Class JavaDoc[] {
128                     String JavaDoc[].class
129                 });
130             } catch (java.lang.Exception JavaDoc e) {
131                 ((java.lang.Throwable JavaDoc) (e)).printStackTrace();
132                 throw new BuildException(((java.lang.Throwable JavaDoc) (e)));
133             }
134             String JavaDoc args[] = (String JavaDoc[]) argsList.toArray(((java.lang.Object JavaDoc[]) (
135                     new String JavaDoc[argsList.size()])));
136                     
137             if (m != null) {
138                 m.invoke(((java.lang.Object JavaDoc) (null)), new java.lang.Object JavaDoc[] {
139                     args
140                 });
141             }
142         } catch (java.lang.reflect.InvocationTargetException JavaDoc ite) {
143             ite.printStackTrace();
144             throw new BuildException(((java.lang.Throwable JavaDoc) (ite)));
145         } catch (java.lang.Exception JavaDoc e) {
146             ((java.lang.Throwable JavaDoc) (e)).printStackTrace();
147             throw new BuildException(((java.lang.Throwable JavaDoc) (e)));
148         }
149
150         /* org.apache.tools.ant.taskdefs.Touch touch = new Touch();
151          ((org.apache.tools.ant.ProjectComponent)(touch)).setProject((this).project);
152          touch.setFile(resultsql);
153          touch.execute();
154          */

155     }
156
157     /**
158      *
159      * @param sqlDir New sql dir.
160      */

161     public void setDir(File JavaDoc sqlDir) {
162         this.dir = sqlDir;
163     }
164
165     /**
166      * The destination directory into which the generated sources are written
167      * @param sqlBase - Target for generated classes, expressed as a directory
168      * path
169      */

170     public void setResultsql(File JavaDoc sqlBase) {
171         this.resultsql = sqlBase;
172     }
173     
174     /**
175      * Force DODS to split PRIMARY KEY statments from CREATE TABLE in separate file
176      * during of SQLSpliter task.
177      * @param splitPrimary - Set to "true" or "false"
178      */

179     public void setSplitsqlprimary(String JavaDoc splitPrimary) {
180         this.splitsqlprimary = (new Boolean JavaDoc(splitPrimary)).booleanValue();
181     }
182     
183     /**
184      * Force DODS to always be regenerated source files
185      * @param force - Set to "true" or "false"
186      */

187     public void setForce(String JavaDoc force) {
188         forceBuild = (new Boolean JavaDoc(force)).booleanValue();
189     }
190 }
191
Popular Tags