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 }