/xservices/trunk/src/java/net/brutex/xservices/util/XServicesDocumentation.java |
---|
0,0 → 1,73 |
/* |
* Copyright 2011 Brian Rosenberger (Brutex Network) |
* |
* Licensed under the Apache License, Version 2.0 (the "License"); |
* you may not use this file except in compliance with the License. |
* You may obtain a copy of the License at |
* |
* http://www.apache.org/licenses/LICENSE-2.0 |
* |
* Unless required by applicable law or agreed to in writing, software |
* distributed under the License is distributed on an "AS IS" BASIS, |
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
* See the License for the specific language governing permissions and |
* limitations under the License. |
*/ |
package net.brutex.xservices.util; |
/** |
* Holds static documentation. |
* |
* |
* @author Brian Rosenberger, bru@brutex.de |
*/ |
public class XServicesDocumentation { |
public static final String BRUTEX_COPYRIGHT = "" + |
"/*\n" + |
"* Copyright 2010 Brian Rosenberger (Brutex Network)\n" + |
"*\n" + |
"* Licensed under the Apache License, Version 2.0 (the \"License\")\n" + |
"* you may not use this file except in compliance with the License.\n" + |
"* You may obtain a copy of the License at\n" + |
"*\n" + |
"* http://www.apache.org/licenses/LICENSE-2.0\n" + |
"*\n" + |
"* Unless required by applicable law or agreed to in writing, software\n" + |
"* distributed under the License is distributed on an \"AS IS\" BASIS,\n" + |
"* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n" + |
"* See the License for the specific language governing permissions and\n" + |
"* limitations under the License.\n" + |
"*/"; |
public static final String SERVICE_OPERATION_DOWNLOADFILE = "Download a file from the maschine where the service is running in order " + |
"to process it with the client. The file is either downloaded as a MTOM attachment or " + |
"as inline base64 encoded block. Keep in mind that unless you are using MTOM, a lot of " + |
"java heap memory is used."; |
public static final String SERVICE_OPERATION_ENCODEFILE = "Encodes a file."; |
public static final String SERVICE_OPERATION_UPLOADFILE = "Send a file from client to web service server using either " + |
"MTOM attachment or base64 inline attachment."; |
public static final String SERVICE_OPERATION_COPY = "Copies a fileset locally on the server."; |
public static final String SERVICE_OPERATION_COPYFILE = "Copies a single file locally on the server"; |
public static final String SERVICE_OPERATION_LOADRESOURCE = "Load the content of a resource"; |
public static final String SERVICE_OPERATION_LOADRESOURCEFROMARCHIVE = "Load the content of a resource"; |
public static final String SERVICE_OPERATION_ECHOTOFILE = "Write or append a string to a file"; |
public static final String SERVICE_OPERATION_REPLACEINFILE = "Replaces every <pattern> with a string in an ascii file"; |
public static final String SERVICE_OPERATION_REPLACEINFILE2 = "Replaces every <pattern> with a string in an ascii file"; |
public static final String SERVICE_OPERATION_REPLACEINFILEREGEX = "Replaces every <regex pattern> with a string in an ascii file"; |
private XServicesDocumentation() {}; |
} |
Property changes: |
Added: svn:mime-type |
+text/plain |
\ No newline at end of property |
/xservices/trunk/src/java/net/brutex/xservices/util/RunTask.java |
---|
0,0 → 1,101 |
/* |
* Copyright 2010 Brian Rosenberger (Brutex Network) |
* |
* Licensed under the Apache License, Version 2.0 (the "License"); |
* you may not use this file except in compliance with the License. |
* You may obtain a copy of the License at |
* |
* http://www.apache.org/licenses/LICENSE-2.0 |
* |
* Unless required by applicable law or agreed to in writing, software |
* distributed under the License is distributed on an "AS IS" BASIS, |
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
* See the License for the specific language governing permissions and |
* limitations under the License. |
*/ |
package net.brutex.xservices.util; |
import java.io.ByteArrayOutputStream; |
import java.io.PrintStream; |
import java.util.HashMap; |
import java.util.Map; |
import net.brutex.xservices.types.ReturnCode; |
import net.brutex.xservices.types.ant.AntProperty; |
import org.apache.tools.ant.BuildException; |
import org.apache.tools.ant.Project; |
import org.apache.tools.ant.Target; |
import org.apache.tools.ant.Task; |
import org.apache.tools.ant.listener.TimestampedLogger; |
import org.apache.tools.ant.taskdefs.Echo; |
/** |
* |
* @author Brian Rosenberger, bru@brutex.de |
*/ |
public class RunTask { |
Project antproject; |
Target anttarget; |
Task anttask; |
ByteArrayOutputStream myout = new ByteArrayOutputStream(); |
ByteArrayOutputStream myerr = new ByteArrayOutputStream(); |
PrintStream out = new PrintStream(myout); |
PrintStream err = new PrintStream(myerr); |
TimestampedLogger log = null; |
public RunTask(Task anttask) { |
antproject = new Project(); |
antproject.init(); |
antproject.setBasedir(System.getProperty("java.io.tmpdir")); |
log = new TimestampedLogger(); |
log.setOutputPrintStream(out); |
log.setErrorPrintStream(err); |
log.setMessageOutputLevel(Echo.EchoLevel.WARN.getLevel()); |
antproject.addBuildListener(log); |
anttarget = new Target(); |
anttarget.setName("XBridgeNGDynamicTarget"); |
anttarget.setProject(antproject); |
antproject.addTarget(anttarget); |
this.anttask = anttask; |
prepareTask(); |
} |
private void prepareTask() |
throws BuildException { |
anttask.init(); |
anttask.setProject(antproject); |
anttask.setOwningTarget(anttarget); |
anttarget.addTask(anttask); |
antproject.addOrReplaceTarget(anttarget); |
} |
/** |
* @return ReturnCode type {@link ReturnCode} |
* @throws BuildException |
*/ |
public ReturnCode postTask() throws BuildException { |
int returnCode = 0; |
Map<String, String> origMap = new HashMap<String, String>(); |
Map<String, String> newMap = null; |
origMap.putAll(antproject.getProperties()); |
antproject.executeTarget(anttarget.getName()); |
newMap = antproject.getProperties(); |
newMap.putAll(antproject.getUserProperties()); |
for (Map.Entry<String, String> e : origMap.entrySet()) { |
newMap.remove(e.getKey()); |
} |
//anttask.execute(); |
return new ReturnCode(returnCode, |
myout.toString(), |
myerr.toString(), |
AntProperty.createAntPropertyList(newMap)); |
} |
} |
/xservices/trunk/src/java/net/brutex/xservices/util/BrutexHSQLQuartzConnectionProvider.java |
---|
0,0 → 1,181 |
/* |
* Copyright 2011 Brian Rosenberger (Brutex Network) |
* |
* Licensed under the Apache License, Version 2.0 (the "License"); |
* you may not use this file except in compliance with the License. |
* You may obtain a copy of the License at |
* |
* http://www.apache.org/licenses/LICENSE-2.0 |
* |
* Unless required by applicable law or agreed to in writing, software |
* distributed under the License is distributed on an "AS IS" BASIS, |
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
* See the License for the specific language governing permissions and |
* limitations under the License. |
*/ |
package net.brutex.xservices.util; |
import java.io.BufferedReader; |
import java.io.File; |
import java.io.FileNotFoundException; |
import java.io.FileReader; |
import java.io.IOException; |
import java.sql.Connection; |
import java.sql.DatabaseMetaData; |
import java.sql.DriverManager; |
import java.sql.ResultSet; |
import java.sql.SQLException; |
import java.sql.Statement; |
import java.util.ArrayList; |
import java.util.List; |
import org.apache.log4j.Level; |
import org.apache.log4j.Logger; |
import org.quartz.utils.ConnectionProvider; |
/** |
* @author Brian Rosenberger |
* |
*/ |
public class BrutexHSQLQuartzConnectionProvider implements ConnectionProvider { |
private Connection conn = null; |
private final Logger logger = Logger.getLogger(this.getClass().getCanonicalName()); |
public Connection getConnection() throws SQLException { |
if( conn!= null && conn.isValid(5)) { |
logger.debug("Checking tables on pre-exisiting database connection."); |
checkTables(); |
return conn; |
} |
try { |
// Class.forName("org.hsqldb.jdbc.JDBCDriver" ); |
Class.forName("org.apache.derby.jdbc.EmbeddedDriver"); |
} catch (Exception e) { |
logger.fatal("Failed to load Derby JDBC driver."); |
e.printStackTrace(); |
return null; |
} |
if(isConnected(false)) { |
checkTables(); |
} else { |
return null; |
} |
return conn; |
} |
public void shutdown() throws SQLException { |
try { |
// Class.forName("org.hsqldb.jdbc.JDBCDriver" ); |
Class.forName("org.apache.derby.jdbc.EmbeddedDriver"); |
} catch (Exception e) { |
System.err.println("ERROR: failed to load Derby JDBC driver."); |
e.printStackTrace(); |
return; |
} |
String t = this.getClass().getClassLoader().getResource("/").toString() |
.substring(6); |
t += "../data/db"; |
System.out.println("Shut down embedded database now."); |
Connection c = DriverManager.getConnection("jdbc:derby:" + t |
+ ";shutdown=true;"); |
} |
private synchronized void recursiveDelete(File dbDir) { |
File[] files = dbDir.listFiles(); |
for (int i = 0; i < files.length; i++) { |
if (files[i].isFile()) { |
files[i].delete(); |
} else { |
recursiveDelete(files[i]); |
files[i].delete(); |
} |
} |
dbDir.delete(); |
} |
private synchronized void checkTables() throws SQLException { |
logger.debug("Checking QUARTZ database schema."); |
if(!isConnected(false)) { |
logger.error("Failed to validate QUARTZ database schema."); |
return; |
} |
List<String> ddl_list = new ArrayList<String>(11); |
ddl_list.add("QRTZ_JOB_DETAILS"); |
ddl_list.add("QRTZ_TRIGGERS"); |
ddl_list.add("QRTZ_SIMPLE_TRIGGERS"); |
ddl_list.add("QRTZ_CRON_TRIGGERS"); |
ddl_list.add("QRTZ_SIMPROP_TRIGGERS"); |
ddl_list.add("QRTZ_BLOB_TRIGGERS"); |
ddl_list.add("QRTZ_CALENDARS"); |
ddl_list.add("QRTZ_PAUSED_TRIGGER_GRPS"); |
ddl_list.add("QRTZ_FIRED_TRIGGERS"); |
ddl_list.add("QRTZ_SCHEDULER_STATE"); |
ddl_list.add("QRTZ_LOCKS"); |
String ddl = this.getClass().getClassLoader().getResource("/").toString() |
.substring(6)+ "../data/"; |
DatabaseMetaData dmd = conn.getMetaData(); |
for (String tbl : ddl_list) { |
ResultSet rs = dmd.getTables(null, "APP", tbl, null); |
if (!rs.next()) { |
logger.log(Level.INFO, "Adding DDL for table "+ tbl); |
Statement st = conn.createStatement(); |
File ddlFile = new File(ddl + tbl + ".ddl"); |
String create = ""; |
try { |
BufferedReader r = new BufferedReader(new FileReader(ddlFile)); |
while (r.ready()) { |
create += r.readLine() + "\n"; |
} |
create.trim(); |
if( st.execute(create)) { |
logger.log(Level.INFO, "Table " + tbl + " created."); |
} |
} catch (FileNotFoundException ex) { |
ex.printStackTrace(); |
} catch (IOException ex) { |
ex.printStackTrace(); |
} catch (SQLException ex) { |
logger.log(Level.ERROR, "Error executing statement "+ create ); |
System.out.println(ex.getMessage()); |
} |
} else { |
logger.trace("Table "+tbl+" exists."); |
} |
} |
} |
private synchronized boolean isConnected(boolean fail) throws SQLException { |
if(conn!=null && conn.isValid(5)) { |
return true; |
} else { |
String t = this.getClass().getClassLoader().getResource("/").toString().substring(6); // WEB-INF/classes |
t += "../data/db"; |
logger.debug("Database directory is set to '" + t + "'"); |
try { |
this.conn = DriverManager.getConnection("jdbc:derby:" + t + ";create=true;"); |
} catch (SQLException ex) { |
logger.error(ex.getMessage(), ex); |
if(!fail) { |
logger.warn("Deleting database directory."); |
recursiveDelete(new File(t)); |
logger.warn("Retrying to connect to database."); |
return isConnected(true); |
} else { |
return false; |
} |
} |
} |
return false; |
} |
} |
Property changes: |
Added: svn:mime-type |
+text/plain |
\ No newline at end of property |
/xservices/trunk/src/java/net/brutex/xservices/util/BrutexQuartzConnectionProvider.java |
---|
0,0 → 1,181 |
/* |
* Copyright 2011 Brian Rosenberger (Brutex Network) |
* |
* Licensed under the Apache License, Version 2.0 (the "License"); |
* you may not use this file except in compliance with the License. |
* You may obtain a copy of the License at |
* |
* http://www.apache.org/licenses/LICENSE-2.0 |
* |
* Unless required by applicable law or agreed to in writing, software |
* distributed under the License is distributed on an "AS IS" BASIS, |
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
* See the License for the specific language governing permissions and |
* limitations under the License. |
*/ |
package net.brutex.xservices.util; |
import java.io.BufferedReader; |
import java.io.File; |
import java.io.FileNotFoundException; |
import java.io.FileReader; |
import java.io.IOException; |
import java.sql.Connection; |
import java.sql.DatabaseMetaData; |
import java.sql.DriverManager; |
import java.sql.ResultSet; |
import java.sql.SQLException; |
import java.sql.Statement; |
import java.util.ArrayList; |
import java.util.List; |
import org.apache.log4j.Level; |
import org.apache.log4j.Logger; |
import org.quartz.utils.ConnectionProvider; |
/** |
* @author Brian Rosenberger |
* |
*/ |
public class BrutexQuartzConnectionProvider implements ConnectionProvider { |
private Connection conn = null; |
private final Logger logger = Logger.getLogger(this.getClass().getCanonicalName()); |
public Connection getConnection() throws SQLException { |
if( conn!= null && conn.isValid(5)) { |
logger.debug("Checking tables on pre-exisiting database connection."); |
checkTables(); |
return conn; |
} |
try { |
// Class.forName("org.hsqldb.jdbc.JDBCDriver" ); |
Class.forName("org.apache.derby.jdbc.EmbeddedDriver"); |
} catch (Exception e) { |
logger.fatal("Failed to load Derby JDBC driver."); |
e.printStackTrace(); |
return null; |
} |
if(isConnected(false)) { |
checkTables(); |
} else { |
return null; |
} |
return conn; |
} |
public void shutdown() throws SQLException { |
try { |
// Class.forName("org.hsqldb.jdbc.JDBCDriver" ); |
Class.forName("org.apache.derby.jdbc.EmbeddedDriver"); |
} catch (Exception e) { |
System.err.println("ERROR: failed to load Derby JDBC driver."); |
e.printStackTrace(); |
return; |
} |
String t = this.getClass().getClassLoader().getResource("/").toString() |
.substring(6); |
t += "../data/db"; |
System.out.println("Shut down embedded database now."); |
Connection c = DriverManager.getConnection("jdbc:derby:" + t |
+ ";shutdown=true;"); |
} |
private synchronized void recursiveDelete(File dbDir) { |
File[] files = dbDir.listFiles(); |
for (int i = 0; i < files.length; i++) { |
if (files[i].isFile()) { |
files[i].delete(); |
} else { |
recursiveDelete(files[i]); |
files[i].delete(); |
} |
} |
dbDir.delete(); |
} |
private synchronized void checkTables() throws SQLException { |
logger.debug("Checking QUARTZ database schema."); |
if(!isConnected(false)) { |
logger.error("Failed to validate QUARTZ database schema."); |
return; |
} |
List<String> ddl_list = new ArrayList<String>(11); |
ddl_list.add("QRTZ_JOB_DETAILS"); |
ddl_list.add("QRTZ_TRIGGERS"); |
ddl_list.add("QRTZ_SIMPLE_TRIGGERS"); |
ddl_list.add("QRTZ_CRON_TRIGGERS"); |
ddl_list.add("QRTZ_SIMPROP_TRIGGERS"); |
ddl_list.add("QRTZ_BLOB_TRIGGERS"); |
ddl_list.add("QRTZ_CALENDARS"); |
ddl_list.add("QRTZ_PAUSED_TRIGGER_GRPS"); |
ddl_list.add("QRTZ_FIRED_TRIGGERS"); |
ddl_list.add("QRTZ_SCHEDULER_STATE"); |
ddl_list.add("QRTZ_LOCKS"); |
String ddl = this.getClass().getClassLoader().getResource("/").toString() |
.substring(6)+ "../data/"; |
DatabaseMetaData dmd = conn.getMetaData(); |
for (String tbl : ddl_list) { |
ResultSet rs = dmd.getTables(null, "APP", tbl, null); |
if (!rs.next()) { |
logger.log(Level.INFO, "Adding DDL for table "+ tbl); |
Statement st = conn.createStatement(); |
File ddlFile = new File(ddl + tbl + ".ddl"); |
String create = ""; |
try { |
BufferedReader r = new BufferedReader(new FileReader(ddlFile)); |
while (r.ready()) { |
create += r.readLine() + "\n"; |
} |
create.trim(); |
if( st.execute(create)) { |
logger.log(Level.INFO, "Table " + tbl + " created."); |
} |
} catch (FileNotFoundException ex) { |
ex.printStackTrace(); |
} catch (IOException ex) { |
ex.printStackTrace(); |
} catch (SQLException ex) { |
logger.log(Level.ERROR, "Error executing statement "+ create ); |
System.out.println(ex.getMessage()); |
} |
} else { |
logger.trace("Table "+tbl+" exists."); |
} |
} |
} |
private synchronized boolean isConnected(boolean fail) throws SQLException { |
if(conn!=null && conn.isValid(5)) { |
return true; |
} else { |
String t = this.getClass().getClassLoader().getResource("/").toString().substring(6); // WEB-INF/classes |
t += "../data/db"; |
logger.debug("Database directory is set to '" + t + "'"); |
try { |
this.conn = DriverManager.getConnection("jdbc:derby:" + t + ";create=true;"); |
} catch (SQLException ex) { |
logger.error(ex.getMessage(), ex); |
if(!fail) { |
logger.warn("Deleting database directory."); |
recursiveDelete(new File(t)); |
logger.warn("Retrying to connect to database."); |
return isConnected(true); |
} else { |
return false; |
} |
} |
} |
return false; |
} |
} |
Property changes: |
Added: svn:mime-type |
+text/plain |
\ No newline at end of property |
/xservices/trunk/src/java/net/brutex/xservices/util/JobWrapper.java |
---|
0,0 → 1,96 |
/* |
* Copyright 2011 Brian Rosenberger (Brutex Network) |
* |
* Licensed under the Apache License, Version 2.0 (the "License"); |
* you may not use this file except in compliance with the License. |
* You may obtain a copy of the License at |
* |
* http://www.apache.org/licenses/LICENSE-2.0 |
* |
* Unless required by applicable law or agreed to in writing, software |
* distributed under the License is distributed on an "AS IS" BASIS, |
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
* See the License for the specific language governing permissions and |
* limitations under the License. |
*/ |
package net.brutex.xservices.util; |
import java.io.Serializable; |
import java.util.Date; |
import org.mozilla.javascript.Context; |
import org.mozilla.javascript.Scriptable; |
import org.quartz.Job; |
import org.quartz.JobDataMap; |
import org.quartz.JobExecutionContext; |
import org.quartz.JobExecutionException; |
/** |
* Wrapper for jobs that can be executed through quartz scheduler. |
* |
* @author Brian Rosenberger, bru@brutex.de |
* @since 0.5.0 |
* |
*/ |
public class JobWrapper implements Job, Serializable { |
public void execute(JobExecutionContext jcontext) |
throws JobExecutionException { |
try { |
System.out.println("Executing scheduled job '"+jcontext.getJobDetail().getKey().getName()+"' at " + new Date()); |
JobDataMap jdMap = jcontext.getJobDetail().getJobDataMap(); |
String script = jdMap.getString("script"); |
// Create and enter a Context. A Context stores information about |
// the execution environment of a script. |
Context cx = Context.enter(); |
cx.setOptimizationLevel(0); |
cx.setLanguageVersion(Context.VERSION_1_7); |
// cx is the Context instance you're using to run scripts |
/* |
* cx.setClassShutter(new ClassShutter() { public boolean |
* visibleToScripts(String className) { |
* if(className.startsWith("adapter")) return true; |
* if(className.startsWith("java.lang.System") || |
* className.startsWith |
* ("org.apache.tomcat.util.log.SystemLogHandler")) return true; |
* System.out.println(className + " is blocked."); return false; } |
* }); |
*/ |
// Initialise the standard objects (Object, Function, etc.). This |
// must be done before scripts can be |
// executed. The null parameter tells initStandardObjects |
// to create and return a scope object that we use |
// in later calls. |
Scriptable scope = cx.initStandardObjects(); |
//Object wrappedOut = Context.javaToJS(System.out, scope); |
//Object wrappedOut2 = Context.javaToJS(this, scope); |
//scope.put("out", scope, wrappedOut); |
//scope.put("exe", scope, wrappedOut2); |
// Execute the script |
// cx.evaluateString(scope, "importClass('java.lang.System');\n", |
// "head", 1, null); |
// cx.evaluateString(scope, "importPackage('java.util');\n", "head", |
// 2, null); |
Object obj = cx |
.evaluateString(scope, script, "TestScript", 1, null); |
} catch (Exception e) { |
System.out.println(e.getMessage()); |
} finally { |
// Exit the Context. This removes the association between the |
// Context and the current thread and is an |
// essential cleanup action. There should be a call to exit for |
// every call to enter. |
Context.exit(); |
} |
} |
} |
Property changes: |
Added: svn:mime-type |
+text/plain |
\ No newline at end of property |
/xservices/trunk/src/java/net/brutex/xservices/util/BrutexNamespaces.java |
---|
0,0 → 1,54 |
/* |
* Copyright 2010 Brian Rosenberger (Brutex Network) |
* |
* Licensed under the Apache License, Version 2.0 (the "License"); |
* you may not use this file except in compliance with the License. |
* You may obtain a copy of the License at |
* |
* http://www.apache.org/licenses/LICENSE-2.0 |
* |
* Unless required by applicable law or agreed to in writing, software |
* distributed under the License is distributed on an "AS IS" BASIS, |
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
* See the License for the specific language governing permissions and |
* limitations under the License. |
*/ |
package net.brutex.xservices.util; |
/** |
* Holds static namespace information. |
* |
* |
* @author Brian Rosenberger, bru@brutex.de |
*/ |
public class BrutexNamespaces { |
/** |
* Brutex Network XServices web service name space declaration |
*/ |
public static final String WS_XSERVICES = "http://ws.xservices.brutex.net"; |
/** |
* Copyright and license agreement statement. |
*/ |
public static final String BRUTEX_COPYRIGHT = "" + |
"/*\n" + |
"* Copyright 2010 Brian Rosenberger (Brutex Network)\n" + |
"*\n" + |
"* Licensed under the Apache License, Version 2.0 (the \"License\")\n" + |
"* you may not use this file except in compliance with the License.\n" + |
"* You may obtain a copy of the License at\n" + |
"*\n" + |
"* http://www.apache.org/licenses/LICENSE-2.0\n" + |
"*\n" + |
"* Unless required by applicable law or agreed to in writing, software\n" + |
"* distributed under the License is distributed on an \"AS IS\" BASIS,\n" + |
"* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n" + |
"* See the License for the specific language governing permissions and\n" + |
"* limitations under the License.\n" + |
"*/"; |
private BrutexNamespaces() {}; |
} |
/xservices/trunk/src/java/net/brutex/xservices/util/UnRarTask.java |
---|
0,0 → 1,74 |
/* |
* Copyright 2010 Brian Rosenberger (Brutex Network) |
* |
* Licensed under the Apache License, Version 2.0 (the "License"); |
* you may not use this file except in compliance with the License. |
* You may obtain a copy of the License at |
* |
* http://www.apache.org/licenses/LICENSE-2.0 |
* |
* Unless required by applicable law or agreed to in writing, software |
* distributed under the License is distributed on an "AS IS" BASIS, |
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
* See the License for the specific language governing permissions and |
* limitations under the License. |
*/ |
package net.brutex.xservices.util; |
import de.innosystec.unrar.Archive; |
import de.innosystec.unrar.exception.RarException; |
import de.innosystec.unrar.rarfile.FileHeader; |
import java.io.File; |
import java.io.FileOutputStream; |
import java.io.IOException; |
import java.util.List; |
import org.apache.tools.ant.BuildException; |
import org.apache.tools.ant.Task; |
/** |
* |
* @author Brian Rosenberger, bru@brutex.de |
*/ |
public class UnRarTask extends Task { |
private File dst = null; |
private File src = null; |
public File getDst() { |
return dst; |
} |
public void setDst(File dst) { |
this.dst = dst; |
} |
public File getSrc() { |
return src; |
} |
public void setSrc(File src) { |
this.src = src; |
} |
@Override |
public void execute() { |
if(src==null ) throw new BuildException("Please supply a source archive file."); |
if(!src.exists()) throw new BuildException("Archive '"+src.getName()+"' does not exist."); |
try { |
if(dst==null) dst = new File(src.getParent()); |
Archive ar = new Archive(src); |
List<FileHeader> list = ar.getFileHeaders(); |
for(FileHeader h : list) { |
ar.extractFile(h, new FileOutputStream(new File(dst.getAbsolutePath()+"/"+h.getFileNameString()))); |
} |
} catch (RarException ex) { |
throw new BuildException(ex.getMessage(), ex); |
} catch (IOException ex) { |
throw new BuildException(ex.getMessage(), ex); |
} |
} |
} |