diff --git a/src/java/net/brutex/xservices/ws/ArchiveService.java b/src/java/net/brutex/xservices/ws/ArchiveService.java index bd69a24..9c99234 100644 --- a/src/java/net/brutex/xservices/ws/ArchiveService.java +++ b/src/java/net/brutex/xservices/ws/ArchiveService.java @@ -15,32 +15,23 @@ */ package net.brutex.xservices.ws; -import java.io.File; -import java.util.Map; import javax.jws.WebMethod; import javax.jws.WebParam; import javax.jws.WebService; import net.brutex.xservices.types.ArchiveResource; import net.brutex.xservices.types.CompressionType; import net.brutex.xservices.types.FileResource; -import net.brutex.xservices.types.ResourceInterface; + import net.brutex.xservices.types.ReturnCode; -import net.brutex.xservices.util.RunTask; -import net.brutex.xservices.util.UnRarTask; -import org.apache.tools.ant.taskdefs.BUnzip2; -import org.apache.tools.ant.taskdefs.BZip2; -import org.apache.tools.ant.taskdefs.Expand; -import org.apache.tools.ant.taskdefs.GUnzip; -import org.apache.tools.ant.taskdefs.GZip; -import org.apache.tools.ant.taskdefs.Untar; -import org.apache.tools.ant.taskdefs.Zip; +import net.brutex.xservices.util.BrutexNamespaces; + /** * * @author Brian Rosenberger, bru@brutex.de */ -@WebService(targetNamespace = "http://ws.xservices.brutex.net", name = "ArchiveService") -public class ArchiveService { +@WebService(targetNamespace = BrutexNamespaces.WS_XSERVICES) +public interface ArchiveService { public static final String WS_OPERATION_BZIP2 = "bzip2"; public static final String WS_OPERATION_BZIP2_ARCHIVE = "bzip2FromArchive"; @@ -60,225 +51,63 @@ public class ArchiveService { @WebMethod(operationName = WS_OPERATION_BZIP2, action = WS_OPERATION_BZIP2) public ReturnCode bzip2(@WebParam(name = WS_PARAM_SOURCEFILE) FileResource src, - @WebParam(name = WS_PARAM_DESTFILE) String file) { - return bzip(src, new File(file)); - } + @WebParam(name = WS_PARAM_DESTFILE) String file); @WebMethod(operationName = WS_OPERATION_BZIP2_ARCHIVE, action = WS_OPERATION_BZIP2_ARCHIVE) public ReturnCode bzip2FromArchive(@WebParam(name = WS_PARAM_SOURCEARCHIVE) ArchiveResource src, - @WebParam(name = WS_PARAM_DESTFILE) String file) { - return bzip(src, new File(file)); - } + @WebParam(name = WS_PARAM_DESTFILE) String file); @WebMethod(operationName = WS_OPERATION_GZIP, action = WS_OPERATION_GZIP) public ReturnCode gzip(@WebParam(name = WS_PARAM_SOURCEFILE) FileResource src, - @WebParam(name = WS_PARAM_DESTFILE) String file) { - return gzip(src, new File(file)); - } + @WebParam(name = WS_PARAM_DESTFILE) String file); @WebMethod(operationName = WS_OPERATION_GZIP_ARCHIVE, action = WS_OPERATION_GZIP_ARCHIVE) public ReturnCode gzipFromArchive(@WebParam(name = WS_PARAM_SOURCEARCHIVE) ArchiveResource src, - @WebParam(name = WS_PARAM_DESTFILE) String file) { - return gzip(src, new File(file)); - } + @WebParam(name = WS_PARAM_DESTFILE) String file); @WebMethod(operationName = WS_OPERATION_GUNZIP, action = WS_OPERATION_GUNZIP) public ReturnCode gunzip(@WebParam(name = WS_PARAM_SOURCEFILE_STRING) String src, - @WebParam(name = WS_PARAM_DESTDIR) String dest) { - File target = null; - if (!dest.equals("") && dest != null) { - target = new File(dest); - } - return GUnzip(new FileResource(FileResource.Type.FILE, src), target); - } + @WebParam(name = WS_PARAM_DESTDIR) String dest); @WebMethod(operationName = WS_OPERATION_BUNZIP2) public ReturnCode bunzip2(@WebParam(name = WS_PARAM_SOURCEFILE_STRING) String src, - @WebParam(name = WS_PARAM_DESTDIR) String dest) { - File target = null; - if (!dest.equals("") && dest != null) { - target = new File(dest); - } - return BUnzip2(new FileResource(FileResource.Type.FILE, src), target); - } + @WebParam(name = WS_PARAM_DESTDIR) String dest); @WebMethod(operationName = "gunzipFromURL") public ReturnCode gunzipFromURL(@WebParam(name = WS_PARAM_SOURCEURL) String src, - @WebParam(name = WS_PARAM_DESTDIR) String dest) { - File target = null; - if (!dest.equals("") && dest != null) { - target = new File(dest); - } - return GUnzip(new FileResource(FileResource.Type.URL, src), target); - } + @WebParam(name = WS_PARAM_DESTDIR) String dest); @WebMethod(operationName = "bunzip2FromURL") public ReturnCode bunzip2FromURL(@WebParam(name = WS_PARAM_SOURCEURL) String src, - @WebParam(name = WS_PARAM_DESTDIR) String dest) { - File target = null; - if (!dest.equals("") && dest != null) { - target = new File(dest); - } - return BUnzip2(new FileResource(FileResource.Type.URL, src), target); - } + @WebParam(name = WS_PARAM_DESTDIR) String dest); @WebMethod(operationName = "zip") public ReturnCode zip(@WebParam(name = WS_PARAM_SOURCEFILE) FileResource src, @WebParam(name = WS_PARAM_DESTFILE) String file, @WebParam(name = WS_PARAM_OVERWRITE) boolean overwrite, @WebParam(name = WS_PARAM_ENCODING) String encoding, - @WebParam(name = "compresslevel") int level) { - if (level > 9) { - level = 9; - } - if (level < 0) { - level = 0; - } - return zip(src, new File(file), encoding, !overwrite, level); - } + @WebParam(name = "compresslevel") int level); @WebMethod(operationName = "zipFromArchive") public ReturnCode zipFromArchive(@WebParam(name = WS_PARAM_SOURCEARCHIVE) ArchiveResource src, @WebParam(name = WS_PARAM_DESTFILE) String file, @WebParam(name = WS_PARAM_OVERWRITE) boolean update, @WebParam(name = WS_PARAM_ENCODING) String encoding, - @WebParam(name = "compresslevel") int level) { - return zip(src, new File(file), encoding, !update, level); - } + @WebParam(name = "compresslevel") int level); @WebMethod(operationName = "unzip") public ReturnCode unzip(@WebParam(name = WS_PARAM_SOURCEFILE_STRING) String src, @WebParam(name = WS_PARAM_DESTDIR) String dest, @WebParam(name = WS_PARAM_OVERWRITE) boolean overwrite, - @WebParam(name = WS_PARAM_ENCODING) String encoding) { - return unzip(new File(src), new File(dest), overwrite, encoding); - } + @WebParam(name = WS_PARAM_ENCODING) String encoding); @WebMethod(operationName = "unrar") public ReturnCode unrar(@WebParam(name = WS_PARAM_SOURCEFILE_STRING) String src, - @WebParam(name = WS_PARAM_DESTDIR) String dest) { - return unrar(new File(src), new File(dest)); - } + @WebParam(name = WS_PARAM_DESTDIR) String dest); @WebMethod(operationName = "untar") public ReturnCode untar(@WebParam(name = WS_PARAM_SOURCEFILE_STRING) String src, @WebParam(name = WS_PARAM_DESTDIR) String dest, @WebParam(name = WS_PARAM_OVERWRITE) boolean overwrite, - @WebParam(name = "compression") CompressionType compression) { - Untar.UntarCompressionMethod c = new Untar.UntarCompressionMethod(); - switch (compression) { - case GZIP: - c.setValue("gzip"); - break; - case BZIP2: - c.setValue("bzip2"); - break; - default: - c.setValue("none"); - break; - } - return untar(new File(src), new File(dest), overwrite, c); - } - - @WebMethod(exclude = true) - private ReturnCode bzip(ResourceInterface src, File dst) { - if (dst.exists() && dst.isFile()) { - dst.delete(); - } - BZip2 bzip = new BZip2(); - bzip.setTaskName("BZip2"); - RunTask runner = new RunTask(bzip); - bzip.setSrcResource(src.getAntResource(bzip.getProject())); - bzip.setDestfile(dst); - - return runner.postTask(); - } - - @WebMethod(exclude = true) - private ReturnCode gzip(ResourceInterface src, File dst) { - if (dst.exists() && dst.isFile()) { - dst.delete(); - } - GZip gzip = new GZip(); - gzip.setTaskName("GZip"); - RunTask runner = new RunTask(gzip); - gzip.addConfigured(src.getAntResource(gzip.getProject())); - gzip.setDestfile(dst); - return runner.postTask(); - } - - @WebMethod(exclude = true) - private ReturnCode zip(ResourceInterface src, File dst, String encoding, boolean update, int compresslevel) { - Zip zip = new Zip(); - zip.setTaskName("Zip"); - RunTask runner = new RunTask(zip); - zip.add(src.getAntResource(zip.getProject())); - zip.setDestFile(dst); - if (encoding != null && !encoding.equals("")) { - zip.setEncoding(encoding); - } - zip.setUpdate(update); - zip.setLevel(compresslevel); - return runner.postTask(); - } - - @WebMethod(exclude = true) - private ReturnCode GUnzip(ResourceInterface src, File dst) { - GUnzip uz = new GUnzip(); - uz.setTaskName("GUnzip"); - RunTask runner = new RunTask(uz); - uz.setSrcResource(src.getAntResource(uz.getProject())); - if (dst != null) { - uz.setDest(dst); - } - return runner.postTask(); - } - - @WebMethod(exclude = true) - private ReturnCode BUnzip2(ResourceInterface src, File dst) { - BUnzip2 uz = new BUnzip2(); - uz.setTaskName("BUnzip2"); - RunTask runner = new RunTask(uz); - uz.setSrcResource(src.getAntResource(uz.getProject())); - if (dst != null) { - uz.setDest(dst); - } - return runner.postTask(); - } - - @WebMethod(exclude = true) - private ReturnCode unzip(File src, File dest, boolean overwrite, String encoding) { - Expand unzip = new Expand(); - unzip.setTaskName("UnZip"); - RunTask runner = new RunTask(unzip); - unzip.setSrc(src); - unzip.setDest(dest); - unzip.setOverwrite(overwrite); - if (encoding != null && !encoding.equals("")) { - unzip.setEncoding(encoding); - } - return runner.postTask(); - } - - @WebMethod(exclude = true) - private ReturnCode untar(File src, File dest, boolean overwrite, Untar.UntarCompressionMethod compression) { - Untar unzip = new Untar(); - unzip.setTaskName("Untar"); - RunTask runner = new RunTask(unzip); - unzip.setSrc(src); - unzip.setDest(dest); - unzip.setOverwrite(overwrite); - unzip.setCompression(compression); - return runner.postTask(); - } - - @WebMethod(exclude = true) - private ReturnCode unrar(File src, File dst) { - UnRarTask unrar = new UnRarTask(); - unrar.setTaskName("UnRar"); - RunTask runner = new RunTask(unrar); - unrar.setSrc(src); - unrar.setDst(dst); - return runner.postTask(); - } + @WebParam(name = "compression") CompressionType compression); } diff --git a/src/java/net/brutex/xservices/ws/ExecuteService.java b/src/java/net/brutex/xservices/ws/ExecuteService.java index 1f4ed54..b882f56 100644 --- a/src/java/net/brutex/xservices/ws/ExecuteService.java +++ b/src/java/net/brutex/xservices/ws/ExecuteService.java @@ -1,265 +1,69 @@ -/* - * 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.ws; - -import java.io.File; -import javax.jws.WebMethod; -import javax.jws.WebParam; -import javax.jws.WebService; -import net.brutex.xservices.types.HostConnection; -import net.brutex.xservices.types.ReturnCode; -import net.brutex.xservices.util.RunTask; -import org.apache.tools.ant.taskdefs.ExecTask; -import org.apache.tools.ant.taskdefs.optional.net.RExecTask; -import org.apache.tools.ant.taskdefs.optional.net.TelnetTask; -import org.apache.tools.ant.taskdefs.optional.ssh.SSHExec; -import org.apache.tools.ant.types.Commandline; - -/** - * - * @author Brian Rosenberger, bru@brutex.de - */ -@WebService(targetNamespace="http://ws.xservices.brutex.net", name="ExecuteService") -public class ExecuteService { - - @WebMethod(operationName = "runCommand") - public ReturnCode runCommand(@WebParam(name = "executable") String cmd, - @WebParam(name = "argline") String args, - @WebParam(name = "timeout") long timeout) { - - return executeCommand(cmd, - Commandline.translateCommandline(args), - null, - false, - null, - false, - true, - false, - timeout); - } - - @WebMethod(operationName = "runCommandWithArgs") - public ReturnCode runCommandWithArgs(@WebParam(name = "executable") String cmd, - @WebParam(name = "arg") String[] args, - @WebParam(name = "timeout") long timeout) { - - return executeCommand(cmd, - args, - null, - false, - null, - false, - true, - false, - timeout); - } - - @WebMethod(operationName = "runCommandAsync") - public ReturnCode runCommandAsync(@WebParam(name = "executable") String cmd, - @WebParam(name = "argline") String args) { - - return executeCommand(cmd, - Commandline.translateCommandline(args), - null, - true, - null, - false, - true, - false, - 0); - } - - @WebMethod(operationName = "runCommandAsyncWithArgs") - public ReturnCode runCommandAsyncWithArgs(@WebParam(name = "executable") String cmd, - @WebParam(name = "arg") String[] args) { - - return executeCommand(cmd, - args, - null, - true, - null, - false, - true, - false, - 0); - } - - @WebMethod(operationName = "runCommandWithSSH") - public ReturnCode runCommandWithSSH(@WebParam(name = "host") String host, - @WebParam(name = "port") int port, - @WebParam(name = "username") String username, - @WebParam(name = "password") String password, - @WebParam(name = "command") String cmd, - @WebParam(name = "timeout") long timeout) { - - return sshExec(host, username, password, port, cmd, timeout); - } - - @WebMethod(operationName = "runCommandWithSSHKeyAuth") - public ReturnCode runCommandWithSSHKeyAuth(@WebParam(name = "host") String host, - @WebParam(name = "port") int port, - @WebParam(name = "username") String username, - @WebParam(name = "passphrase") String passphrase, - @WebParam(name = "keyfile") String keyfile, - @WebParam(name = "command") String cmd, - @WebParam(name = "timeout") long timeout) { - - return sshExecWithCert(host, username, passphrase, keyfile, port, cmd, timeout); - } - - @WebMethod(operationName = "rExec") - public ReturnCode rExec(@WebParam(name = "host") HostConnection host, - @WebParam(name = "command") String cmd, - @WebParam(name = "timeout") long timeout) { - return rexec(host.hostname, host.port, host.user, host.password, cmd, timeout); - } - - @WebMethod(operationName = "telnet") - public ReturnCode runTelnet(@WebParam(name = "host") HostConnection host, - @WebParam(name = "prompt") String prompt, - @WebParam(name = "command") String cmd, - @WebParam(name = "expect") String expect, - @WebParam(name = "timeout") long timeout) { - return telnet(host.hostname, host.port, host.user, host.password, cmd, timeout, prompt, expect); - } - - @WebMethod(exclude = true) - private ReturnCode executeCommand(String executable, - String[] args, - File dir, - boolean spawn, - String inputstring, - boolean newenvironment, - boolean vmlauncher, - boolean searchpath, - long timeout) { - ExecTask exe = new ExecTask(); - RunTask runner = new RunTask(exe); - - /* - Commandline cmdl = new Commandline(); - cmdl.setExecutable(executable); - cmdl.addArguments(args); - System.out.println(cmdl.describeCommand()); - */ - - exe.setExecutable(executable); - for (String s : args) { - exe.createArg().setValue(s); - } - - exe.setDir(dir); - if (spawn) { - exe.setSpawn(spawn); - } else { - exe.setTimeout(timeout); - exe.setInputString(inputstring); - exe.setOutputproperty("ExecuteService.stdout"); - exe.setErrorProperty("ExecuteService.stderr"); - exe.setResultProperty("ExecuteService.result"); - } - - exe.setNewenvironment(newenvironment); - exe.setVMLauncher(vmlauncher); - exe.setSearchPath(searchpath); - - return runner.postTask(); - } - - @WebMethod(exclude = true) - private ReturnCode sshExec(String host, - String username, - String password, - int port, - String command, - long timeout) { - SSHExec sshexec = new SSHExec(); - RunTask runner = new RunTask(sshexec); - sshexec.setHost(host); - sshexec.setUsername(username); - sshexec.setPassword(password); - sshexec.setPort(port); - sshexec.setCommand(command); - sshexec.setTrust(true); - sshexec.setTimeout(timeout); - sshexec.setOutputproperty("SSHExec.stdout"); - return runner.postTask(); - } - - @WebMethod(exclude = true) - private ReturnCode sshExecWithCert(String host, - String username, - String passphrase, - String keyfile, - int port, - String command, - long timeout) { - SSHExec sshexec = new SSHExec(); - RunTask runner = new RunTask(sshexec); - sshexec.setHost(host); - sshexec.setUsername(username); - sshexec.setKeyfile(keyfile); - sshexec.setPassphrase(passphrase); - sshexec.setPort(port); - sshexec.setCommand(command); - sshexec.setTrust(true); - sshexec.setTimeout(timeout); - sshexec.setOutputproperty("SSHExec.stdout"); - return runner.postTask(); - } - - @WebMethod(exclude = true) - private ReturnCode rexec(String host, - int port, - String username, - String password, - String command, - long timeout) { - RExecTask rexec = new RExecTask(); - RunTask runner = new RunTask(rexec); - rexec.setServer(host); - rexec.setPort(port); - rexec.setUserid(username); - rexec.setPassword(password); - rexec.setCommand(command); - rexec.setTimeout((int) Math.round(timeout)); - - return runner.postTask(); - } - - @WebMethod(exclude = true) - private ReturnCode telnet(String host, - int port, - String username, - String password, - String command, - long timeout, String prompt, String expect) { - TelnetTask rexec = new TelnetTask(); - RunTask runner = new RunTask(rexec); - rexec.setServer(host); - rexec.setPort(port); - rexec.setUserid(username); - rexec.setPassword(password); - rexec.setTimeout((int) Math.round(timeout)); - - rexec.createRead().addText(prompt); - rexec.createWrite().addText(command); - rexec.createRead().addText(expect); - - return runner.postTask(); - } -} +package net.brutex.xservices.ws; + +import javax.jws.WebMethod; +import javax.jws.WebParam; +import javax.jws.WebService; + +import net.brutex.xservices.types.HostConnection; +import net.brutex.xservices.types.ReturnCode; +import net.brutex.xservices.util.BrutexNamespaces; + +@WebService(targetNamespace = BrutexNamespaces.WS_XSERVICES) +public interface ExecuteService { + + @WebMethod(operationName = "runCommand") + public abstract ReturnCode runCommand( + @WebParam(name = "executable") String cmd, + @WebParam(name = "argline") String args, + @WebParam(name = "timeout") long timeout); + + @WebMethod(operationName = "runCommandWithArgs") + public abstract ReturnCode runCommandWithArgs( + @WebParam(name = "executable") String cmd, + @WebParam(name = "arg") String[] args, + @WebParam(name = "timeout") long timeout); + + @WebMethod(operationName = "runCommandAsync") + public abstract ReturnCode runCommandAsync( + @WebParam(name = "executable") String cmd, + @WebParam(name = "argline") String args); + + @WebMethod(operationName = "runCommandAsyncWithArgs") + public abstract ReturnCode runCommandAsyncWithArgs( + @WebParam(name = "executable") String cmd, + @WebParam(name = "arg") String[] args); + + @WebMethod(operationName = "runCommandWithSSH") + public abstract ReturnCode runCommandWithSSH( + @WebParam(name = "host") String host, + @WebParam(name = "port") int port, + @WebParam(name = "username") String username, + @WebParam(name = "password") String password, + @WebParam(name = "command") String cmd, + @WebParam(name = "timeout") long timeout); + + @WebMethod(operationName = "runCommandWithSSHKeyAuth") + public abstract ReturnCode runCommandWithSSHKeyAuth( + @WebParam(name = "host") String host, + @WebParam(name = "port") int port, + @WebParam(name = "username") String username, + @WebParam(name = "passphrase") String passphrase, + @WebParam(name = "keyfile") String keyfile, + @WebParam(name = "command") String cmd, + @WebParam(name = "timeout") long timeout); + + @WebMethod(operationName = "rExec") + public abstract ReturnCode rExec( + @WebParam(name = "host") HostConnection host, + @WebParam(name = "command") String cmd, + @WebParam(name = "timeout") long timeout); + + @WebMethod(operationName = "telnet") + public abstract ReturnCode runTelnet( + @WebParam(name = "host") HostConnection host, + @WebParam(name = "prompt") String prompt, + @WebParam(name = "command") String cmd, + @WebParam(name = "expect") String expect, + @WebParam(name = "timeout") long timeout); + +} \ No newline at end of file diff --git a/src/java/net/brutex/xservices/ws/FileService.java b/src/java/net/brutex/xservices/ws/FileService.java index e7237d5..0ddbcbb 100644 --- a/src/java/net/brutex/xservices/ws/FileService.java +++ b/src/java/net/brutex/xservices/ws/FileService.java @@ -1,203 +1,60 @@ -/* - * 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.ws; - -import java.io.File; -import javax.jws.WebMethod; -import javax.jws.WebParam; -import javax.jws.WebService; -import net.brutex.xservices.types.ArchiveResource; -import net.brutex.xservices.types.FileResource; -import net.brutex.xservices.types.FileSetResource; -import net.brutex.xservices.types.ResourceInterface; -import net.brutex.xservices.types.ReturnCode; -import net.brutex.xservices.util.RunTask; -import org.apache.tools.ant.taskdefs.Basename; -import org.apache.tools.ant.taskdefs.Chmod; -import org.apache.tools.ant.taskdefs.Copy; -import org.apache.tools.ant.taskdefs.Echo; -import org.apache.tools.ant.taskdefs.LoadResource; -import org.apache.tools.ant.taskdefs.optional.unix.Chgrp; -import org.apache.tools.ant.taskdefs.optional.unix.Chown; -import org.apache.tools.ant.types.FileSet; - -/** - * - * @author Brian Rosenberger, bru@brutex.de - */ -@WebService(targetNamespace = "http://ws.xservices.brutex.net", name = "FileService") -public class FileService { - - @WebMethod(operationName = "basename") - public ReturnCode basename(@WebParam(name = "file") String filename, - @WebParam(name = "suffix") String suffix) { - return basename(new File(filename), suffix); - } - - @WebMethod(operationName = "copy") - public ReturnCode copy(@WebParam(name = "fileset") FileSetResource src, - @WebParam(name = "todir") String todir, - @WebParam(name = "preservelastmodified") boolean plm, - @WebParam(name = "overwrite") boolean overwrite, - @WebParam(name = "encoding") String encoding) - throws XServicesFault { - return copy(src, new File(todir), plm, overwrite, encoding); - } - - @WebMethod(operationName = "loadResource") - public ReturnCode loadRes(@WebParam(name = "resource") FileResource res, - @WebParam(name = "encoding") String encoding) { - if (encoding == null || encoding.equals("")) { - encoding = System.getProperty("file.encoding"); - } - return loadResource(res, encoding); - } - - @WebMethod(operationName = "loadResourceFromArchive") - public ReturnCode loadResFromArchive(@WebParam(name = "archiveresource") ArchiveResource res, - @WebParam(name = "encoding") String encoding) { - if (encoding == null || encoding.equals("")) { - encoding = System.getProperty("file.encoding"); - } - return loadResource(res, encoding); - } - - @WebMethod(operationName = "echoToFile") - public ReturnCode echo2file(@WebParam(name = "message") String message, - @WebParam(name = "file") String file, @WebParam(name = "encoding") String encoding, - @WebParam(name = "append") boolean append) { - return echo(message, new File(file), encoding, append); - } - - @WebMethod(operationName = "changeOwner") - public ReturnCode changeOwner(@WebParam(name = "fileset") FileSetResource res, - @WebParam(name = "owner") String owner) { - return chown(res, owner); - } - - @WebMethod(operationName = "changeGroup") - public ReturnCode changeGroup(@WebParam(name = "fileset") FileSetResource res, - @WebParam(name = "group") String group) { - return chgrp(res, group); - } - - @WebMethod(operationName = "changeMode") - public ReturnCode changeMode(@WebParam(name="fileset") FileSetResource res, - @WebParam(name="permissions") String perm) { - return chmod(res, perm); - } - - @WebMethod(exclude = true) - private ReturnCode basename(File file, - String suffix) { - Basename basename = new Basename(); - RunTask runner = new RunTask(basename); - basename.setFile(file); - if (suffix != null && !suffix.equals("")) { - basename.setSuffix(suffix); - } - basename.setProperty("basename.value"); - return runner.postTask(); - } - - @WebMethod(exclude = true) - private ReturnCode loadResource(ResourceInterface src, String encoding) { - LoadResource lr = new LoadResource(); - lr.setTaskName("LoadResource"); - RunTask runner = new RunTask(lr); - lr.addConfigured(src.getAntResource(lr.getProject())); - lr.setEncoding(encoding); - System.out.println("Using encoding: " + encoding); - lr.setProperty("LoadResource.out"); - return runner.postTask(); - } - - @WebMethod(exclude = true) - private ReturnCode echo(String msg, File file, String encoding, boolean append) { - Echo echo = new Echo(); - echo.setTaskName("toFile"); - RunTask runTask = new RunTask(echo); - echo.addText(msg); - echo.setEncoding(encoding); - echo.setFile(file); - echo.setAppend(append); - return runTask.postTask(); - } - - @WebMethod(exclude = true) - private ReturnCode copy(FileSetResource src, File dst, boolean preservelastmodified, - boolean overwrite, String encoding) { - Copy copy = new Copy(); - copy.setTaskName("Copy"); - RunTask runner = new RunTask(copy); - FileSet set = src.getAntFileSet(copy.getProject()); - copy.add(set); - - if (dst.isDirectory()) { - copy.setTodir(dst); - } - if (dst.isFile()) { - copy.setTofile(dst); - } - copy.setOverwrite(overwrite); - copy.setPreserveLastModified(preservelastmodified); - if (encoding != null && !encoding.equals("")) { - copy.setOutputEncoding(encoding); - } else { - copy.setOutputEncoding(System.getProperty("file.encoding")); - } - - return runner.postTask(); - } - - @WebMethod(exclude = true) - private ReturnCode chown(FileSetResource src, String owner) { - Chown chown = new Chown(); - chown.setTaskName("Chown"); - RunTask runner = new RunTask(chown); - chown.setOwner(owner); - FileSet set = src.getAntFileSet(chown.getProject()); - chown.add(set); - chown.setMaxParallel(300); - return runner.postTask(); - } - - @WebMethod(exclude = true) - private ReturnCode chgrp(FileSetResource src, String group) { - Chgrp chgrp = new Chgrp(); - chgrp.setTaskName("Chgrp"); - RunTask runner = new RunTask(chgrp); - chgrp.setGroup(group); - FileSet set = src.getAntFileSet(chgrp.getProject()); - chgrp.add(set); - chgrp.setMaxParallel(300); - return runner.postTask(); - } - - @WebMethod(exclude = true) - private ReturnCode chmod(FileSetResource src, String perm) { - Chmod chmod = new Chmod(); - chmod.setTaskName("Chmod"); - RunTask runner = new RunTask(chmod); - FileSet set = src.getAntFileSet(chmod.getProject()); - chmod.add(set); - chmod.setMaxParallel(300); - chmod.setPerm(perm); - chmod.setVerbose(true); - return runner.postTask(); - } - -} +package net.brutex.xservices.ws; + +import javax.jws.WebMethod; +import javax.jws.WebParam; +import javax.jws.WebService; + +import net.brutex.xservices.types.ArchiveResource; +import net.brutex.xservices.types.FileResource; +import net.brutex.xservices.types.FileSetResource; +import net.brutex.xservices.types.ReturnCode; +import net.brutex.xservices.util.BrutexNamespaces; +@WebService(targetNamespace = BrutexNamespaces.WS_XSERVICES) +public interface FileService { + + @WebMethod(operationName = "basename") + public abstract ReturnCode basename( + @WebParam(name = "file") String filename, + @WebParam(name = "suffix") String suffix); + + @WebMethod(operationName = "copy") + public abstract ReturnCode copy( + @WebParam(name = "fileset") FileSetResource src, + @WebParam(name = "todir") String todir, + @WebParam(name = "preservelastmodified") boolean plm, + @WebParam(name = "overwrite") boolean overwrite, + @WebParam(name = "encoding") String encoding) throws XServicesFault; + + @WebMethod(operationName = "loadResource") + public abstract ReturnCode loadRes( + @WebParam(name = "resource") FileResource res, + @WebParam(name = "encoding") String encoding); + + @WebMethod(operationName = "loadResourceFromArchive") + public abstract ReturnCode loadResFromArchive( + @WebParam(name = "archiveresource") ArchiveResource res, + @WebParam(name = "encoding") String encoding); + + @WebMethod(operationName = "echoToFile") + public abstract ReturnCode echo2file( + @WebParam(name = "message") String message, + @WebParam(name = "file") String file, + @WebParam(name = "encoding") String encoding, + @WebParam(name = "append") boolean append); + + @WebMethod(operationName = "changeOwner") + public abstract ReturnCode changeOwner( + @WebParam(name = "fileset") FileSetResource res, + @WebParam(name = "owner") String owner); + + @WebMethod(operationName = "changeGroup") + public abstract ReturnCode changeGroup( + @WebParam(name = "fileset") FileSetResource res, + @WebParam(name = "group") String group); + + @WebMethod(operationName = "changeMode") + public abstract ReturnCode changeMode( + @WebParam(name = "fileset") FileSetResource res, + @WebParam(name = "permissions") String perm); + +} \ No newline at end of file diff --git a/src/java/net/brutex/xservices/ws/MiscServiceImpl.java b/src/java/net/brutex/xservices/ws/MiscServiceImpl.java deleted file mode 100644 index 0b0d6e2..0000000 --- a/src/java/net/brutex/xservices/ws/MiscServiceImpl.java +++ /dev/null @@ -1,185 +0,0 @@ -/* - * 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.ws; - -import javax.jws.WebService; -import net.brutex.xservices.types.FileSetResource; -import net.brutex.xservices.types.HostConnection; -import net.brutex.xservices.types.MailMimeType; -import net.brutex.xservices.types.ReturnCode; -import net.brutex.xservices.util.RunTask; -import org.apache.cxf.annotations.WSDLDocumentation; -import org.apache.cxf.annotations.WSDLDocumentationCollection; -import org.apache.tools.ant.taskdefs.HostInfo; -import org.apache.tools.ant.taskdefs.Sleep; -import org.apache.tools.ant.taskdefs.email.EmailTask; - -/** - * - * @author Brian Rosenberger, bru@brutex.de - */ -@WSDLDocumentationCollection( - { - @WSDLDocumentation("My portType documentation"), - @WSDLDocumentation(value = "My top level documentation", - placement = WSDLDocumentation.Placement.TOP), - @WSDLDocumentation(value = "My binding doc", - placement = WSDLDocumentation.Placement.BINDING) - } -) -@WebService(endpointInterface="net.brutex.xservices.ws.MiscService", -serviceName="MiscService") -public class MiscServiceImpl implements MiscService { - - @WSDLDocumentation(value="Get information about a host.") - public ReturnCode getHostinfo(String hostname) { - return antGetHostinfo(hostname, null); - } - - public ReturnCode sendMailSimple(HostConnection mailhost, String from, String tolist, String subject, String message) { - return sendMail(from, - from, - tolist, - "", - "", - subject, - message, - "text/plain", - null, - mailhost.hostname, - mailhost.port, - mailhost.user, - mailhost.password, - "utf-8", - false, - false); - } - - public ReturnCode sendMailSimpleWithAttachment(HostConnection mailhost, String from, - String tolist, String subject, String message, - FileSetResource res) { - return sendMail(from, - from, - tolist, - "", - "", - subject, - message, - "text/plain", - res, - mailhost.hostname, - mailhost.port, - mailhost.user, - mailhost.password, - "utf-8", - false, - false); - } - - public ReturnCode sendMail(HostConnection mailhost, String from, String tolist, - String cclist, String bcclist, String subject, - MailMimeType mimetype, String charset, String message, - FileSetResource res, boolean ssl, boolean tls) { - return sendMail(from, - from, - tolist, - cclist, - bcclist, - subject, - message, - mimetype.value(), - res, - mailhost.hostname, - mailhost.port, - mailhost.user, - mailhost.password, - charset, - tls, - ssl); - } - - - - - - public ReturnCode sleep(int minutes, int seconds) { - return sleep(0, minutes, seconds, 0); - } - - - - private ReturnCode antGetHostinfo(String hostname, String prefix) { - HostInfo info = new HostInfo(); - info.setTaskName("HostInfo"); - RunTask runner = new RunTask(info); - info.setHost(hostname); - //info.setPrefix(prefix); - return runner.postTask(); - } - - private ReturnCode sendMail(String from, - String replyto, - String tolist, - String cclist, - String bcclist, - String subject, - String message, - String messagemimetype, - FileSetResource attachments, - String mailhost, - int mailport, - String user, - String password, - String charset, - boolean tls, - boolean ssl) { - EmailTask mail = new EmailTask(); - mail.setTaskName("Mail"); - RunTask runner = new RunTask(mail); - mail.setFrom(from); - mail.setReplyTo(replyto); - mail.setToList(tolist); - mail.setCcList(cclist); - mail.setBccList(bcclist); - mail.setSubject(subject); - mail.setMessage(message); - mail.setMessageMimeType(messagemimetype); - if(attachments != null) { - mail.addFileset(attachments.getAntFileSet(mail.getProject())); - } - mail.setMailhost(mailhost); - mail.setMailport(mailport); - mail.setUser(user); - mail.setPassword(password); - mail.setCharset(charset); - mail.setSSL(ssl); - mail.setEnableStartTLS(tls); - return runner.postTask(); - } - - private ReturnCode sleep(int hours, int minutes, int seconds, int milliseconds) { - Sleep sleep = new Sleep(); - sleep.setTaskName("Sleep"); - RunTask runner = new RunTask(sleep); - sleep.setHours(hours); - sleep.setMinutes(minutes); - sleep.setSeconds(seconds); - sleep.setMilliseconds(milliseconds); - return runner.postTask(); - } - -} diff --git a/src/java/net/brutex/xservices/ws/XServicesFault.java b/src/java/net/brutex/xservices/ws/XServicesFault.java index c957b7b..eacd8d3 100644 --- a/src/java/net/brutex/xservices/ws/XServicesFault.java +++ b/src/java/net/brutex/xservices/ws/XServicesFault.java @@ -28,7 +28,12 @@ import javax.xml.datatype.XMLGregorianCalendar; */ public class XServicesFault extends Exception { - public XServicesFault(String message, Exception e) { + /** + * + */ + private static final long serialVersionUID = -6779279189376374820L; + + public XServicesFault(String message, Exception e) { this(message, e.getCause()); } diff --git a/src/java/net/brutex/xservices/ws/impl/ArchiveServiceImpl.java b/src/java/net/brutex/xservices/ws/impl/ArchiveServiceImpl.java new file mode 100644 index 0000000..363eb32 --- /dev/null +++ b/src/java/net/brutex/xservices/ws/impl/ArchiveServiceImpl.java @@ -0,0 +1,325 @@ +/* + * 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.ws.impl; + +import java.io.File; +import javax.jws.WebMethod; +import javax.jws.WebParam; +import javax.jws.WebService; +import net.brutex.xservices.types.ArchiveResource; +import net.brutex.xservices.types.CompressionType; +import net.brutex.xservices.types.FileResource; +import net.brutex.xservices.types.ResourceInterface; +import net.brutex.xservices.types.ReturnCode; +import net.brutex.xservices.util.BrutexNamespaces; +import net.brutex.xservices.util.RunTask; +import net.brutex.xservices.util.UnRarTask; +import net.brutex.xservices.ws.ArchiveService; + +import org.apache.tools.ant.taskdefs.BUnzip2; +import org.apache.tools.ant.taskdefs.BZip2; +import org.apache.tools.ant.taskdefs.Expand; +import org.apache.tools.ant.taskdefs.GUnzip; +import org.apache.tools.ant.taskdefs.GZip; +import org.apache.tools.ant.taskdefs.Untar; +import org.apache.tools.ant.taskdefs.Zip; + +/** + * + * @author Brian Rosenberger, bru@brutex.de + */ +@WebService(targetNamespace = BrutexNamespaces.WS_XSERVICES, + endpointInterface="net.brutex.xservices.ws.ArchiveService", + name = "ArchiveService") +public class ArchiveServiceImpl implements ArchiveService { + + + /* (non-Javadoc) + * @see net.brutex.xservices.ws.ArchiveService#bzip2(net.brutex.xservices.types.FileResource, java.lang.String) + */ + @Override + @WebMethod(operationName = WS_OPERATION_BZIP2, action = WS_OPERATION_BZIP2) + public ReturnCode bzip2(@WebParam(name = WS_PARAM_SOURCEFILE) FileResource src, + @WebParam(name = WS_PARAM_DESTFILE) String file) { + return bzip(src, new File(file)); + } + + /* (non-Javadoc) + * @see net.brutex.xservices.ws.ArchiveService#bzip2FromArchive(net.brutex.xservices.types.ArchiveResource, java.lang.String) + */ + @Override + @WebMethod(operationName = WS_OPERATION_BZIP2_ARCHIVE, action = WS_OPERATION_BZIP2_ARCHIVE) + public ReturnCode bzip2FromArchive(@WebParam(name = WS_PARAM_SOURCEARCHIVE) ArchiveResource src, + @WebParam(name = WS_PARAM_DESTFILE) String file) { + return bzip(src, new File(file)); + } + + /* (non-Javadoc) + * @see net.brutex.xservices.ws.ArchiveService#gzip(net.brutex.xservices.types.FileResource, java.lang.String) + */ + @Override + @WebMethod(operationName = WS_OPERATION_GZIP, action = WS_OPERATION_GZIP) + public ReturnCode gzip(@WebParam(name = WS_PARAM_SOURCEFILE) FileResource src, + @WebParam(name = WS_PARAM_DESTFILE) String file) { + return gzip(src, new File(file)); + } + + /* (non-Javadoc) + * @see net.brutex.xservices.ws.ArchiveService#gzipFromArchive(net.brutex.xservices.types.ArchiveResource, java.lang.String) + */ + @Override + @WebMethod(operationName = WS_OPERATION_GZIP_ARCHIVE, action = WS_OPERATION_GZIP_ARCHIVE) + public ReturnCode gzipFromArchive(@WebParam(name = WS_PARAM_SOURCEARCHIVE) ArchiveResource src, + @WebParam(name = WS_PARAM_DESTFILE) String file) { + return gzip(src, new File(file)); + } + + /* (non-Javadoc) + * @see net.brutex.xservices.ws.ArchiveService#gunzip(java.lang.String, java.lang.String) + */ + @Override + @WebMethod(operationName = WS_OPERATION_GUNZIP, action = WS_OPERATION_GUNZIP) + public ReturnCode gunzip(@WebParam(name = WS_PARAM_SOURCEFILE_STRING) String src, + @WebParam(name = WS_PARAM_DESTDIR) String dest) { + File target = null; + if (!dest.equals("") && dest != null) { + target = new File(dest); + } + return GUnzip(new FileResource(FileResource.Type.FILE, src), target); + } + + /* (non-Javadoc) + * @see net.brutex.xservices.ws.ArchiveService#bunzip2(java.lang.String, java.lang.String) + */ + @Override + @WebMethod(operationName = WS_OPERATION_BUNZIP2) + public ReturnCode bunzip2(@WebParam(name = WS_PARAM_SOURCEFILE_STRING) String src, + @WebParam(name = WS_PARAM_DESTDIR) String dest) { + File target = null; + if (!dest.equals("") && dest != null) { + target = new File(dest); + } + return BUnzip2(new FileResource(FileResource.Type.FILE, src), target); + } + + /* (non-Javadoc) + * @see net.brutex.xservices.ws.ArchiveService#gunzipFromURL(java.lang.String, java.lang.String) + */ + @Override + @WebMethod(operationName = "gunzipFromURL") + public ReturnCode gunzipFromURL(@WebParam(name = WS_PARAM_SOURCEURL) String src, + @WebParam(name = WS_PARAM_DESTDIR) String dest) { + File target = null; + if (!dest.equals("") && dest != null) { + target = new File(dest); + } + return GUnzip(new FileResource(FileResource.Type.URL, src), target); + } + + /* (non-Javadoc) + * @see net.brutex.xservices.ws.ArchiveService#bunzip2FromURL(java.lang.String, java.lang.String) + */ + @Override + @WebMethod(operationName = "bunzip2FromURL") + public ReturnCode bunzip2FromURL(@WebParam(name = WS_PARAM_SOURCEURL) String src, + @WebParam(name = WS_PARAM_DESTDIR) String dest) { + File target = null; + if (!dest.equals("") && dest != null) { + target = new File(dest); + } + return BUnzip2(new FileResource(FileResource.Type.URL, src), target); + } + + /* (non-Javadoc) + * @see net.brutex.xservices.ws.ArchiveService#zip(net.brutex.xservices.types.FileResource, java.lang.String, boolean, java.lang.String, int) + */ + @Override + @WebMethod(operationName = "zip") + public ReturnCode zip(@WebParam(name = WS_PARAM_SOURCEFILE) FileResource src, + @WebParam(name = WS_PARAM_DESTFILE) String file, + @WebParam(name = WS_PARAM_OVERWRITE) boolean overwrite, + @WebParam(name = WS_PARAM_ENCODING) String encoding, + @WebParam(name = "compresslevel") int level) { + if (level > 9) { + level = 9; + } + if (level < 0) { + level = 0; + } + return zip(src, new File(file), encoding, !overwrite, level); + } + + /* (non-Javadoc) + * @see net.brutex.xservices.ws.ArchiveService#zipFromArchive(net.brutex.xservices.types.ArchiveResource, java.lang.String, boolean, java.lang.String, int) + */ + @Override + @WebMethod(operationName = "zipFromArchive") + public ReturnCode zipFromArchive(@WebParam(name = WS_PARAM_SOURCEARCHIVE) ArchiveResource src, + @WebParam(name = WS_PARAM_DESTFILE) String file, + @WebParam(name = WS_PARAM_OVERWRITE) boolean update, + @WebParam(name = WS_PARAM_ENCODING) String encoding, + @WebParam(name = "compresslevel") int level) { + return zip(src, new File(file), encoding, !update, level); + } + + /* (non-Javadoc) + * @see net.brutex.xservices.ws.ArchiveService#unzip(java.lang.String, java.lang.String, boolean, java.lang.String) + */ + @Override + @WebMethod(operationName = "unzip") + public ReturnCode unzip(@WebParam(name = WS_PARAM_SOURCEFILE_STRING) String src, + @WebParam(name = WS_PARAM_DESTDIR) String dest, + @WebParam(name = WS_PARAM_OVERWRITE) boolean overwrite, + @WebParam(name = WS_PARAM_ENCODING) String encoding) { + return unzip(new File(src), new File(dest), overwrite, encoding); + } + + /* (non-Javadoc) + * @see net.brutex.xservices.ws.ArchiveService#unrar(java.lang.String, java.lang.String) + */ + @Override + @WebMethod(operationName = "unrar") + public ReturnCode unrar(@WebParam(name = WS_PARAM_SOURCEFILE_STRING) String src, + @WebParam(name = WS_PARAM_DESTDIR) String dest) { + return unrar(new File(src), new File(dest)); + } + + /* (non-Javadoc) + * @see net.brutex.xservices.ws.ArchiveService#untar(java.lang.String, java.lang.String, boolean, net.brutex.xservices.types.CompressionType) + */ + @Override + @WebMethod(operationName = "untar") + public ReturnCode untar(@WebParam(name = WS_PARAM_SOURCEFILE_STRING) String src, + @WebParam(name = WS_PARAM_DESTDIR) String dest, + @WebParam(name = WS_PARAM_OVERWRITE) boolean overwrite, + @WebParam(name = "compression") CompressionType compression) { + Untar.UntarCompressionMethod c = new Untar.UntarCompressionMethod(); + switch (compression) { + case GZIP: + c.setValue("gzip"); + break; + case BZIP2: + c.setValue("bzip2"); + break; + default: + c.setValue("none"); + break; + } + return untar(new File(src), new File(dest), overwrite, c); + } + + @WebMethod(exclude = true) + private ReturnCode bzip(ResourceInterface src, File dst) { + if (dst.exists() && dst.isFile()) { + dst.delete(); + } + BZip2 bzip = new BZip2(); + bzip.setTaskName("BZip2"); + RunTask runner = new RunTask(bzip); + bzip.setSrcResource(src.getAntResource(bzip.getProject())); + bzip.setDestfile(dst); + + return runner.postTask(); + } + + @WebMethod(exclude = true) + private ReturnCode gzip(ResourceInterface src, File dst) { + if (dst.exists() && dst.isFile()) { + dst.delete(); + } + GZip gzip = new GZip(); + gzip.setTaskName("GZip"); + RunTask runner = new RunTask(gzip); + gzip.addConfigured(src.getAntResource(gzip.getProject())); + gzip.setDestfile(dst); + return runner.postTask(); + } + + @WebMethod(exclude = true) + private ReturnCode zip(ResourceInterface src, File dst, String encoding, boolean update, int compresslevel) { + Zip zip = new Zip(); + zip.setTaskName("Zip"); + RunTask runner = new RunTask(zip); + zip.add(src.getAntResource(zip.getProject())); + zip.setDestFile(dst); + if (encoding != null && !encoding.equals("")) { + zip.setEncoding(encoding); + } + zip.setUpdate(update); + zip.setLevel(compresslevel); + return runner.postTask(); + } + + @WebMethod(exclude = true) + private ReturnCode GUnzip(ResourceInterface src, File dst) { + GUnzip uz = new GUnzip(); + uz.setTaskName("GUnzip"); + RunTask runner = new RunTask(uz); + uz.setSrcResource(src.getAntResource(uz.getProject())); + if (dst != null) { + uz.setDest(dst); + } + return runner.postTask(); + } + + @WebMethod(exclude = true) + private ReturnCode BUnzip2(ResourceInterface src, File dst) { + BUnzip2 uz = new BUnzip2(); + uz.setTaskName("BUnzip2"); + RunTask runner = new RunTask(uz); + uz.setSrcResource(src.getAntResource(uz.getProject())); + if (dst != null) { + uz.setDest(dst); + } + return runner.postTask(); + } + + @WebMethod(exclude = true) + private ReturnCode unzip(File src, File dest, boolean overwrite, String encoding) { + Expand unzip = new Expand(); + unzip.setTaskName("UnZip"); + RunTask runner = new RunTask(unzip); + unzip.setSrc(src); + unzip.setDest(dest); + unzip.setOverwrite(overwrite); + if (encoding != null && !encoding.equals("")) { + unzip.setEncoding(encoding); + } + return runner.postTask(); + } + + @WebMethod(exclude = true) + private ReturnCode untar(File src, File dest, boolean overwrite, Untar.UntarCompressionMethod compression) { + Untar unzip = new Untar(); + unzip.setTaskName("Untar"); + RunTask runner = new RunTask(unzip); + unzip.setSrc(src); + unzip.setDest(dest); + unzip.setOverwrite(overwrite); + unzip.setCompression(compression); + return runner.postTask(); + } + + @WebMethod(exclude = true) + private ReturnCode unrar(File src, File dst) { + UnRarTask unrar = new UnRarTask(); + unrar.setTaskName("UnRar"); + RunTask runner = new RunTask(unrar); + unrar.setSrc(src); + unrar.setDst(dst); + return runner.postTask(); + } +} diff --git a/src/java/net/brutex/xservices/ws/impl/ExecuteServiceImpl.java b/src/java/net/brutex/xservices/ws/impl/ExecuteServiceImpl.java new file mode 100644 index 0000000..01a6bf6 --- /dev/null +++ b/src/java/net/brutex/xservices/ws/impl/ExecuteServiceImpl.java @@ -0,0 +1,304 @@ +/* + * 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.ws.impl; + +import java.io.File; +import javax.jws.WebMethod; +import javax.jws.WebParam; +import javax.jws.WebService; +import net.brutex.xservices.types.HostConnection; +import net.brutex.xservices.types.ReturnCode; +import net.brutex.xservices.util.BrutexNamespaces; +import net.brutex.xservices.util.RunTask; +import net.brutex.xservices.ws.ExecuteService; + +import org.apache.tools.ant.taskdefs.ExecTask; +import org.apache.tools.ant.taskdefs.optional.net.RExecTask; +import org.apache.tools.ant.taskdefs.optional.net.TelnetTask; +import org.apache.tools.ant.taskdefs.optional.ssh.SSHExec; +import org.apache.tools.ant.types.Commandline; + +/** + * + * @author Brian Rosenberger, bru@brutex.de + */ +@WebService( + targetNamespace=BrutexNamespaces.WS_XSERVICES, + endpointInterface="net.brutex.xservices.ws.ExecuteService", + name="ExecuteService" + ) +public class ExecuteServiceImpl implements ExecuteService { + + /* (non-Javadoc) + * @see net.brutex.xservices.ws.impl.ExecuteService#runCommand(java.lang.String, java.lang.String, long) + */ + @Override + @WebMethod(operationName = "runCommand") + public ReturnCode runCommand(@WebParam(name = "executable") String cmd, + @WebParam(name = "argline") String args, + @WebParam(name = "timeout") long timeout) { + + return executeCommand(cmd, + Commandline.translateCommandline(args), + null, + false, + null, + false, + true, + false, + timeout); + } + + /* (non-Javadoc) + * @see net.brutex.xservices.ws.impl.ExecuteService#runCommandWithArgs(java.lang.String, java.lang.String[], long) + */ + @Override + @WebMethod(operationName = "runCommandWithArgs") + public ReturnCode runCommandWithArgs(@WebParam(name = "executable") String cmd, + @WebParam(name = "arg") String[] args, + @WebParam(name = "timeout") long timeout) { + + return executeCommand(cmd, + args, + null, + false, + null, + false, + true, + false, + timeout); + } + + /* (non-Javadoc) + * @see net.brutex.xservices.ws.impl.ExecuteService#runCommandAsync(java.lang.String, java.lang.String) + */ + @Override + @WebMethod(operationName = "runCommandAsync") + public ReturnCode runCommandAsync(@WebParam(name = "executable") String cmd, + @WebParam(name = "argline") String args) { + + return executeCommand(cmd, + Commandline.translateCommandline(args), + null, + true, + null, + false, + true, + false, + 0); + } + + /* (non-Javadoc) + * @see net.brutex.xservices.ws.impl.ExecuteService#runCommandAsyncWithArgs(java.lang.String, java.lang.String[]) + */ + @Override + @WebMethod(operationName = "runCommandAsyncWithArgs") + public ReturnCode runCommandAsyncWithArgs(@WebParam(name = "executable") String cmd, + @WebParam(name = "arg") String[] args) { + + return executeCommand(cmd, + args, + null, + true, + null, + false, + true, + false, + 0); + } + + /* (non-Javadoc) + * @see net.brutex.xservices.ws.impl.ExecuteService#runCommandWithSSH(java.lang.String, int, java.lang.String, java.lang.String, java.lang.String, long) + */ + @Override + @WebMethod(operationName = "runCommandWithSSH") + public ReturnCode runCommandWithSSH(@WebParam(name = "host") String host, + @WebParam(name = "port") int port, + @WebParam(name = "username") String username, + @WebParam(name = "password") String password, + @WebParam(name = "command") String cmd, + @WebParam(name = "timeout") long timeout) { + + return sshExec(host, username, password, port, cmd, timeout); + } + + /* (non-Javadoc) + * @see net.brutex.xservices.ws.impl.ExecuteService#runCommandWithSSHKeyAuth(java.lang.String, int, java.lang.String, java.lang.String, java.lang.String, java.lang.String, long) + */ + @Override + @WebMethod(operationName = "runCommandWithSSHKeyAuth") + public ReturnCode runCommandWithSSHKeyAuth(@WebParam(name = "host") String host, + @WebParam(name = "port") int port, + @WebParam(name = "username") String username, + @WebParam(name = "passphrase") String passphrase, + @WebParam(name = "keyfile") String keyfile, + @WebParam(name = "command") String cmd, + @WebParam(name = "timeout") long timeout) { + + return sshExecWithCert(host, username, passphrase, keyfile, port, cmd, timeout); + } + + /* (non-Javadoc) + * @see net.brutex.xservices.ws.impl.ExecuteService#rExec(net.brutex.xservices.types.HostConnection, java.lang.String, long) + */ + @Override + @WebMethod(operationName = "rExec") + public ReturnCode rExec(@WebParam(name = "host") HostConnection host, + @WebParam(name = "command") String cmd, + @WebParam(name = "timeout") long timeout) { + return rexec(host.hostname, host.port, host.user, host.password, cmd, timeout); + } + + /* (non-Javadoc) + * @see net.brutex.xservices.ws.impl.ExecuteService#runTelnet(net.brutex.xservices.types.HostConnection, java.lang.String, java.lang.String, java.lang.String, long) + */ + @Override + @WebMethod(operationName = "telnet") + public ReturnCode runTelnet(@WebParam(name = "host") HostConnection host, + @WebParam(name = "prompt") String prompt, + @WebParam(name = "command") String cmd, + @WebParam(name = "expect") String expect, + @WebParam(name = "timeout") long timeout) { + return telnet(host.hostname, host.port, host.user, host.password, cmd, timeout, prompt, expect); + } + + @WebMethod(exclude = true) + private ReturnCode executeCommand(String executable, + String[] args, + File dir, + boolean spawn, + String inputstring, + boolean newenvironment, + boolean vmlauncher, + boolean searchpath, + long timeout) { + ExecTask exe = new ExecTask(); + RunTask runner = new RunTask(exe); + + /* + Commandline cmdl = new Commandline(); + cmdl.setExecutable(executable); + cmdl.addArguments(args); + System.out.println(cmdl.describeCommand()); + */ + + exe.setExecutable(executable); + for (String s : args) { + exe.createArg().setValue(s); + } + + exe.setDir(dir); + if (spawn) { + exe.setSpawn(spawn); + } else { + exe.setTimeout(timeout); + exe.setInputString(inputstring); + exe.setOutputproperty("ExecuteService.stdout"); + exe.setErrorProperty("ExecuteService.stderr"); + exe.setResultProperty("ExecuteService.result"); + } + + exe.setNewenvironment(newenvironment); + exe.setVMLauncher(vmlauncher); + exe.setSearchPath(searchpath); + + return runner.postTask(); + } + + @WebMethod(exclude = true) + private ReturnCode sshExec(String host, + String username, + String password, + int port, + String command, + long timeout) { + SSHExec sshexec = new SSHExec(); + RunTask runner = new RunTask(sshexec); + sshexec.setHost(host); + sshexec.setUsername(username); + sshexec.setPassword(password); + sshexec.setPort(port); + sshexec.setCommand(command); + sshexec.setTrust(true); + sshexec.setTimeout(timeout); + sshexec.setOutputproperty("SSHExec.stdout"); + return runner.postTask(); + } + + @WebMethod(exclude = true) + private ReturnCode sshExecWithCert(String host, + String username, + String passphrase, + String keyfile, + int port, + String command, + long timeout) { + SSHExec sshexec = new SSHExec(); + RunTask runner = new RunTask(sshexec); + sshexec.setHost(host); + sshexec.setUsername(username); + sshexec.setKeyfile(keyfile); + sshexec.setPassphrase(passphrase); + sshexec.setPort(port); + sshexec.setCommand(command); + sshexec.setTrust(true); + sshexec.setTimeout(timeout); + sshexec.setOutputproperty("SSHExec.stdout"); + return runner.postTask(); + } + + @WebMethod(exclude = true) + private ReturnCode rexec(String host, + int port, + String username, + String password, + String command, + long timeout) { + RExecTask rexec = new RExecTask(); + RunTask runner = new RunTask(rexec); + rexec.setServer(host); + rexec.setPort(port); + rexec.setUserid(username); + rexec.setPassword(password); + rexec.setCommand(command); + rexec.setTimeout((int) Math.round(timeout)); + + return runner.postTask(); + } + + @WebMethod(exclude = true) + private ReturnCode telnet(String host, + int port, + String username, + String password, + String command, + long timeout, String prompt, String expect) { + TelnetTask rexec = new TelnetTask(); + RunTask runner = new RunTask(rexec); + rexec.setServer(host); + rexec.setPort(port); + rexec.setUserid(username); + rexec.setPassword(password); + rexec.setTimeout((int) Math.round(timeout)); + + rexec.createRead().addText(prompt); + rexec.createWrite().addText(command); + rexec.createRead().addText(expect); + + return runner.postTask(); + } +} diff --git a/src/java/net/brutex/xservices/ws/impl/FileServiceImpl.java b/src/java/net/brutex/xservices/ws/impl/FileServiceImpl.java new file mode 100644 index 0000000..43b3151 --- /dev/null +++ b/src/java/net/brutex/xservices/ws/impl/FileServiceImpl.java @@ -0,0 +1,243 @@ +/* + * 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.ws.impl; + +import java.io.File; +import javax.jws.WebMethod; +import javax.jws.WebParam; +import javax.jws.WebService; +import net.brutex.xservices.types.ArchiveResource; +import net.brutex.xservices.types.FileResource; +import net.brutex.xservices.types.FileSetResource; +import net.brutex.xservices.types.ResourceInterface; +import net.brutex.xservices.types.ReturnCode; +import net.brutex.xservices.util.BrutexNamespaces; +import net.brutex.xservices.util.RunTask; +import net.brutex.xservices.ws.FileService; +import net.brutex.xservices.ws.XServicesFault; + +import org.apache.tools.ant.taskdefs.Basename; +import org.apache.tools.ant.taskdefs.Chmod; +import org.apache.tools.ant.taskdefs.Copy; +import org.apache.tools.ant.taskdefs.Echo; +import org.apache.tools.ant.taskdefs.LoadResource; +import org.apache.tools.ant.taskdefs.optional.unix.Chgrp; +import org.apache.tools.ant.taskdefs.optional.unix.Chown; +import org.apache.tools.ant.types.FileSet; + +/** + * + * @author Brian Rosenberger, bru@brutex.de + */ +@WebService( + targetNamespace = BrutexNamespaces.WS_XSERVICES, + endpointInterface ="net.brutex.xservices.ws.FileService", + name = "FileService" + ) +public class FileServiceImpl implements FileService { + + /* (non-Javadoc) + * @see net.brutex.xservices.ws.impl.FileService#basename(java.lang.String, java.lang.String) + */ + @Override + @WebMethod(operationName = "basename") + public ReturnCode basename(@WebParam(name = "file") String filename, + @WebParam(name = "suffix") String suffix) { + return basename(new File(filename), suffix); + } + + /* (non-Javadoc) + * @see net.brutex.xservices.ws.impl.FileService#copy(net.brutex.xservices.types.FileSetResource, java.lang.String, boolean, boolean, java.lang.String) + */ + @Override + @WebMethod(operationName = "copy") + public ReturnCode copy(@WebParam(name = "fileset") FileSetResource src, + @WebParam(name = "todir") String todir, + @WebParam(name = "preservelastmodified") boolean plm, + @WebParam(name = "overwrite") boolean overwrite, + @WebParam(name = "encoding") String encoding) + throws XServicesFault { + return copy(src, new File(todir), plm, overwrite, encoding); + } + + /* (non-Javadoc) + * @see net.brutex.xservices.ws.impl.FileService#loadRes(net.brutex.xservices.types.FileResource, java.lang.String) + */ + @Override + @WebMethod(operationName = "loadResource") + public ReturnCode loadRes(@WebParam(name = "resource") FileResource res, + @WebParam(name = "encoding") String encoding) { + if (encoding == null || encoding.equals("")) { + encoding = System.getProperty("file.encoding"); + } + return loadResource(res, encoding); + } + + /* (non-Javadoc) + * @see net.brutex.xservices.ws.impl.FileService#loadResFromArchive(net.brutex.xservices.types.ArchiveResource, java.lang.String) + */ + @Override + @WebMethod(operationName = "loadResourceFromArchive") + public ReturnCode loadResFromArchive(@WebParam(name = "archiveresource") ArchiveResource res, + @WebParam(name = "encoding") String encoding) { + if (encoding == null || encoding.equals("")) { + encoding = System.getProperty("file.encoding"); + } + return loadResource(res, encoding); + } + + /* (non-Javadoc) + * @see net.brutex.xservices.ws.impl.FileService#echo2file(java.lang.String, java.lang.String, java.lang.String, boolean) + */ + @Override + @WebMethod(operationName = "echoToFile") + public ReturnCode echo2file(@WebParam(name = "message") String message, + @WebParam(name = "file") String file, @WebParam(name = "encoding") String encoding, + @WebParam(name = "append") boolean append) { + return echo(message, new File(file), encoding, append); + } + + /* (non-Javadoc) + * @see net.brutex.xservices.ws.impl.FileService#changeOwner(net.brutex.xservices.types.FileSetResource, java.lang.String) + */ + @Override + @WebMethod(operationName = "changeOwner") + public ReturnCode changeOwner(@WebParam(name = "fileset") FileSetResource res, + @WebParam(name = "owner") String owner) { + return chown(res, owner); + } + + /* (non-Javadoc) + * @see net.brutex.xservices.ws.impl.FileService#changeGroup(net.brutex.xservices.types.FileSetResource, java.lang.String) + */ + @Override + @WebMethod(operationName = "changeGroup") + public ReturnCode changeGroup(@WebParam(name = "fileset") FileSetResource res, + @WebParam(name = "group") String group) { + return chgrp(res, group); + } + + /* (non-Javadoc) + * @see net.brutex.xservices.ws.impl.FileService#changeMode(net.brutex.xservices.types.FileSetResource, java.lang.String) + */ + @Override + @WebMethod(operationName = "changeMode") + public ReturnCode changeMode(@WebParam(name="fileset") FileSetResource res, + @WebParam(name="permissions") String perm) { + return chmod(res, perm); + } + + @WebMethod(exclude = true) + private ReturnCode basename(File file, + String suffix) { + Basename basename = new Basename(); + RunTask runner = new RunTask(basename); + basename.setFile(file); + if (suffix != null && !suffix.equals("")) { + basename.setSuffix(suffix); + } + basename.setProperty("basename.value"); + return runner.postTask(); + } + + @WebMethod(exclude = true) + private ReturnCode loadResource(ResourceInterface src, String encoding) { + LoadResource lr = new LoadResource(); + lr.setTaskName("LoadResource"); + RunTask runner = new RunTask(lr); + lr.addConfigured(src.getAntResource(lr.getProject())); + lr.setEncoding(encoding); + System.out.println("Using encoding: " + encoding); + lr.setProperty("LoadResource.out"); + return runner.postTask(); + } + + @WebMethod(exclude = true) + private ReturnCode echo(String msg, File file, String encoding, boolean append) { + Echo echo = new Echo(); + echo.setTaskName("toFile"); + RunTask runTask = new RunTask(echo); + echo.addText(msg); + echo.setEncoding(encoding); + echo.setFile(file); + echo.setAppend(append); + return runTask.postTask(); + } + + @WebMethod(exclude = true) + private ReturnCode copy(FileSetResource src, File dst, boolean preservelastmodified, + boolean overwrite, String encoding) { + Copy copy = new Copy(); + copy.setTaskName("Copy"); + RunTask runner = new RunTask(copy); + FileSet set = src.getAntFileSet(copy.getProject()); + copy.add(set); + + if (dst.isDirectory()) { + copy.setTodir(dst); + } + if (dst.isFile()) { + copy.setTofile(dst); + } + copy.setOverwrite(overwrite); + copy.setPreserveLastModified(preservelastmodified); + if (encoding != null && !encoding.equals("")) { + copy.setOutputEncoding(encoding); + } else { + copy.setOutputEncoding(System.getProperty("file.encoding")); + } + + return runner.postTask(); + } + + @WebMethod(exclude = true) + private ReturnCode chown(FileSetResource src, String owner) { + Chown chown = new Chown(); + chown.setTaskName("Chown"); + RunTask runner = new RunTask(chown); + chown.setOwner(owner); + FileSet set = src.getAntFileSet(chown.getProject()); + chown.add(set); + chown.setMaxParallel(300); + return runner.postTask(); + } + + @WebMethod(exclude = true) + private ReturnCode chgrp(FileSetResource src, String group) { + Chgrp chgrp = new Chgrp(); + chgrp.setTaskName("Chgrp"); + RunTask runner = new RunTask(chgrp); + chgrp.setGroup(group); + FileSet set = src.getAntFileSet(chgrp.getProject()); + chgrp.add(set); + chgrp.setMaxParallel(300); + return runner.postTask(); + } + + @WebMethod(exclude = true) + private ReturnCode chmod(FileSetResource src, String perm) { + Chmod chmod = new Chmod(); + chmod.setTaskName("Chmod"); + RunTask runner = new RunTask(chmod); + FileSet set = src.getAntFileSet(chmod.getProject()); + chmod.add(set); + chmod.setMaxParallel(300); + chmod.setPerm(perm); + chmod.setVerbose(true); + return runner.postTask(); + } + +} diff --git a/src/java/net/brutex/xservices/ws/impl/MiscServiceImpl.java b/src/java/net/brutex/xservices/ws/impl/MiscServiceImpl.java new file mode 100644 index 0000000..8f546af --- /dev/null +++ b/src/java/net/brutex/xservices/ws/impl/MiscServiceImpl.java @@ -0,0 +1,132 @@ +/* + * 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.ws.impl; + +import javax.jws.WebService; +import net.brutex.xservices.types.FileSetResource; +import net.brutex.xservices.types.HostConnection; +import net.brutex.xservices.types.MailMimeType; +import net.brutex.xservices.types.ReturnCode; +import net.brutex.xservices.util.BrutexNamespaces; +import net.brutex.xservices.util.RunTask; +import net.brutex.xservices.ws.MiscService; + +import org.apache.cxf.annotations.WSDLDocumentation; +import org.apache.cxf.annotations.WSDLDocumentationCollection; +import org.apache.tools.ant.taskdefs.HostInfo; +import org.apache.tools.ant.taskdefs.Sleep; +import org.apache.tools.ant.taskdefs.email.EmailTask; + +/** + * + * @author Brian Rosenberger, bru@brutex.de + */ +@WSDLDocumentationCollection({ + @WSDLDocumentation("My portType documentation"), + @WSDLDocumentation(value = "My top level documentation", placement = WSDLDocumentation.Placement.TOP), + @WSDLDocumentation(value = "My binding doc", placement = WSDLDocumentation.Placement.BINDING) }) +@WebService( + targetNamespace = BrutexNamespaces.WS_XSERVICES, + endpointInterface = "net.brutex.xservices.ws.MiscService", + serviceName = "MiscService" + ) +public class MiscServiceImpl implements MiscService { + + @WSDLDocumentation(value = "Get information about a host.") + public ReturnCode getHostinfo(String hostname) { + return antGetHostinfo(hostname, null); + } + + public ReturnCode sendMailSimple(HostConnection mailhost, String from, + String tolist, String subject, String message) { + return sendMail(from, from, tolist, "", "", subject, message, + "text/plain", null, mailhost.hostname, mailhost.port, + mailhost.user, mailhost.password, "utf-8", false, false); + } + + public ReturnCode sendMailSimpleWithAttachment(HostConnection mailhost, + String from, String tolist, String subject, String message, + FileSetResource res) { + return sendMail(from, from, tolist, "", "", subject, message, + "text/plain", res, mailhost.hostname, mailhost.port, + mailhost.user, mailhost.password, "utf-8", false, false); + } + + public ReturnCode sendMail(HostConnection mailhost, String from, + String tolist, String cclist, String bcclist, String subject, + MailMimeType mimetype, String charset, String message, + FileSetResource res, boolean ssl, boolean tls) { + return sendMail(from, from, tolist, cclist, bcclist, subject, message, + mimetype.value(), res, mailhost.hostname, mailhost.port, + mailhost.user, mailhost.password, charset, tls, ssl); + } + + public ReturnCode sleep(int minutes, int seconds) { + return sleep(0, minutes, seconds, 0); + } + + private ReturnCode antGetHostinfo(String hostname, String prefix) { + HostInfo info = new HostInfo(); + info.setTaskName("HostInfo"); + RunTask runner = new RunTask(info); + info.setHost(hostname); + // info.setPrefix(prefix); + return runner.postTask(); + } + + private ReturnCode sendMail(String from, String replyto, String tolist, + String cclist, String bcclist, String subject, String message, + String messagemimetype, FileSetResource attachments, + String mailhost, int mailport, String user, String password, + String charset, boolean tls, boolean ssl) { + EmailTask mail = new EmailTask(); + mail.setTaskName("Mail"); + RunTask runner = new RunTask(mail); + mail.setFrom(from); + mail.setReplyTo(replyto); + mail.setToList(tolist); + mail.setCcList(cclist); + mail.setBccList(bcclist); + mail.setSubject(subject); + mail.setMessage(message); + mail.setMessageMimeType(messagemimetype); + if (attachments != null) { + mail.addFileset(attachments.getAntFileSet(mail.getProject())); + } + mail.setMailhost(mailhost); + mail.setMailport(mailport); + mail.setUser(user); + mail.setPassword(password); + mail.setCharset(charset); + mail.setSSL(ssl); + mail.setEnableStartTLS(tls); + return runner.postTask(); + } + + private ReturnCode sleep(int hours, int minutes, int seconds, + int milliseconds) { + Sleep sleep = new Sleep(); + sleep.setTaskName("Sleep"); + RunTask runner = new RunTask(sleep); + sleep.setHours(hours); + sleep.setMinutes(minutes); + sleep.setSeconds(seconds); + sleep.setMilliseconds(milliseconds); + return runner.postTask(); + } + +}