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    }