001 /*
002 @license.text@
003 */
004 package biz.hammurapi.ant;
005
006 import java.io.File;
007 import java.io.FileReader;
008 import java.io.IOException;
009 import java.io.StringReader;
010 import java.sql.SQLException;
011
012 import org.apache.tools.ant.BuildException;
013 import org.apache.tools.ant.Task;
014
015 import biz.hammurapi.sql.SQLProcessor;
016
017 /**
018 * Executes SQL script
019 * @author Pavel Vlasov
020 *
021 * @version $Revision: 1.1 $
022 */
023 public class Script extends Task {
024 private String script="";
025 private String delimiter=";";
026 private ConnectionEntry connectionEntry;
027
028 /**
029 * Connection
030 * @ant.non-required
031 * @param connectionEntry
032 */
033 public void addConfiguredConnection(ConnectionEntry connectionEntry) {
034 this.connectionEntry=connectionEntry;
035 }
036
037 /**
038 * Statements delimiter (single character). Defaults to ';'
039 * @ant.non-required.
040 * @param delimiter
041 */
042 public void setDelimiter(String delimiter) {
043 this.delimiter=delimiter;
044 }
045
046 /**
047 * Script text. Required if file is not set.
048 * @ant.non-required
049 * @param text
050 */
051 public void addText(String text) {
052 script+=text;
053 }
054
055 private File file;
056
057 /**
058 * Script file. Required if there is no nested text.
059 * File content is executed after text.
060 * @ant.non-required
061 * @param text
062 */
063 public void setFile(File file) {
064 this.file = file;
065 }
066
067 public void execute(SQLProcessor processor) throws IOException, SQLException {
068 if (script.trim().length()>0) {
069 processor.executeScript(new StringReader(script), delimiter.charAt(0));
070 }
071
072 if (file!=null) {
073 processor.executeScript(new FileReader(file), delimiter.charAt(0));
074 }
075 }
076
077 public void execute() throws BuildException {
078 try {
079 execute(new SQLProcessor(connectionEntry.getDataSource(),null));
080 } catch (IOException e) {
081 throw new BuildException(e);
082 } catch (SQLException e) {
083 throw new BuildException(e);
084 }
085 }
086 }