Added downloadFile and uploadFile operations (with MTOM support)

git-svn-id: https://brutex.net/svn/xservices/trunk@54 e7e49efb-446e-492e-b9ec-fcafc1997a86
tag-20130205r
Brian Rosenberger 2011-04-20 16:59:34 +00:00
parent 832731e812
commit fb4542b456
15 changed files with 441 additions and 181 deletions

View File

@ -0,0 +1,57 @@
/*
* 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.types;
import java.io.File;
import java.io.IOException;
import javax.activation.DataHandler;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlMimeType;
public class AttachmentType {
private DataHandler content;
private String filename = null;
public void setContent(DataHandler content) {
this.content = content;
}
@XmlMimeType("application/octet-stream")
@XmlElement(required=true)
public DataHandler getContent() {
return content;
}
public String getFilename() {
if(filename==null || filename.equals("")) {
try {
filename = File.createTempFile("XServices_", ".tmp").getPath();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return filename;
}
public void setFilename(String filename) {
this.filename = filename;
}
}

View File

@ -19,7 +19,8 @@ package net.brutex.xservices.types;
import java.io.File; import java.io.File;
import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlEnum; import javax.xml.bind.annotation.XmlEnum;
import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlType;
import net.brutex.xservices.util.BrutexNamespaces; import net.brutex.xservices.util.BrutexNamespaces;
import org.apache.tools.ant.Project; import org.apache.tools.ant.Project;
import org.apache.tools.ant.types.Resource; import org.apache.tools.ant.types.Resource;
@ -30,9 +31,10 @@ import org.apache.tools.ant.types.resources.URLResource;
/** /**
* File based resource declaration. * File based resource declaration.
* *
*
* @author Brian Rosenberger, bru@brutex.de * @author Brian Rosenberger, bru@brutex.de
*/ */
@XmlRootElement(namespace=BrutexNamespaces.WS_XSERVICES, name="FileResourceType") @XmlType(name="FileResourceType", namespace=BrutexNamespaces.WS_XSERVICES)
public class FileResource public class FileResource
implements ResourceInterface { implements ResourceInterface {

View File

@ -32,7 +32,7 @@ import org.apache.tools.ant.types.ZipFileSet;
*/ */
@XmlType(name = "FileSetType", namespace = "http://ws.xservices.brutex.net", @XmlType(name = "FileSetType", namespace = "http://ws.xservices.brutex.net",
propOrder = {"type", "source", "filter", "excludes", "casesensitive"}) propOrder = {"type", "source", "filter", "excludes", "casesensitive"})
public class FileSetResource { public class FileSetResource implements ResourceSetInterface {
/** /**
* Type of FileSet * Type of FileSet
@ -71,7 +71,7 @@ public class FileSetResource {
* @param p Ant project * @param p Ant project
* @return Ant FileSet for this file set. * @return Ant FileSet for this file set.
*/ */
public FileSet getAntFileSet(Project p) { public FileSet getAntResource(Project p) {
FileSet set = null; FileSet set = null;
switch (type) { switch (type) {
case ZIP: case ZIP:
@ -106,7 +106,8 @@ public class FileSetResource {
/** /**
* File set types. * File set types.
*/ */
@XmlEnum @XmlEnum()
@XmlType(name="resourcetype")
public enum FileSetType { public enum FileSetType {
/** /**

View File

@ -29,7 +29,7 @@ public class HostConnection {
public HostConnection() { public HostConnection() {
} }
@XmlElement(name="hostname", required=false, nillable=false) @XmlElement(name="hostname", required=true, nillable=false)
public String hostname; public String hostname;
@XmlElement(name="port", required=false, nillable=false) @XmlElement(name="port", required=false, nillable=false)

View File

@ -20,7 +20,7 @@ import org.apache.tools.ant.Project;
import org.apache.tools.ant.types.Resource; import org.apache.tools.ant.types.Resource;
/** /**
* Wrapper for Ant Resources. * Wrapper for a single file like Ant Resources.
* *
* @author Brian Rosenberger, bru@brutex.de * @author Brian Rosenberger, bru@brutex.de
*/ */

View File

@ -0,0 +1,35 @@
/*
* 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.
*/
/**
* Wrapper for Ant Resource Sets. A resource set
* is simply a collection of resources.
*
* @author Brian Rosenberger, bru@brutex.de
*/
package net.brutex.xservices.types;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.types.ResourceCollection;
/**
* Wrapper for Ant Resource Collection.
*
* @author Brian Rosenberger, bru@brutex.de
*/
public interface ResourceSetInterface {
public ResourceCollection getAntResource(Project p);
}

View File

@ -79,4 +79,11 @@ public class ReturnCode {
this.stdErr = stdErr; this.stdErr = stdErr;
this.property = props; this.property = props;
} }
public String getProperty(String key) {
for(AntProperty prop : this.property) {
if(prop.equals(key)) return prop.value;
}
return null;
}
} }

View File

@ -1,7 +1,18 @@
/* /*
* To change this template, choose Tools | Templates * Copyright 2011 Brian Rosenberger (Brutex Network)
* and open the template in the editor. *
*/ * 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.types; package net.brutex.xservices.types;
@ -9,7 +20,7 @@ import org.apache.tools.ant.types.selectors.FileSelector;
/** /**
* *
* @author brian * @author Brian Rosenberger
*/ */
public interface SelectorTypeInterface { public interface SelectorTypeInterface {
public FileSelector getSelector(); public FileSelector getSelector();

View File

@ -85,7 +85,8 @@ public class RunTask {
returnCode = 1; returnCode = 1;
} }
newMap = antproject.getProperties(); newMap = antproject.getProperties();
newMap.putAll(antproject.getUserProperties());
for (Map.Entry<String, String> e : origMap.entrySet()) { for (Map.Entry<String, String> e : origMap.entrySet()) {
newMap.remove(e.getKey()); newMap.remove(e.getKey());
} }

View File

@ -21,6 +21,7 @@ import javax.jws.WebService;
import net.brutex.xservices.types.ArchiveResource; import net.brutex.xservices.types.ArchiveResource;
import net.brutex.xservices.types.CompressionType; import net.brutex.xservices.types.CompressionType;
import net.brutex.xservices.types.FileResource; import net.brutex.xservices.types.FileResource;
import net.brutex.xservices.types.FileSetResource;
import net.brutex.xservices.types.ReturnCode; import net.brutex.xservices.types.ReturnCode;
import net.brutex.xservices.util.BrutexNamespaces; import net.brutex.xservices.util.BrutexNamespaces;

View File

@ -1,10 +1,12 @@
package net.brutex.xservices.ws; package net.brutex.xservices.ws;
import javax.activation.DataHandler;
import javax.jws.WebMethod; import javax.jws.WebMethod;
import javax.jws.WebParam; import javax.jws.WebParam;
import javax.jws.WebService; import javax.jws.WebService;
import net.brutex.xservices.types.ArchiveResource; import net.brutex.xservices.types.ArchiveResource;
import net.brutex.xservices.types.AttachmentType;
import net.brutex.xservices.types.FileResource; import net.brutex.xservices.types.FileResource;
import net.brutex.xservices.types.FileSetResource; import net.brutex.xservices.types.FileSetResource;
import net.brutex.xservices.types.ReturnCode; import net.brutex.xservices.types.ReturnCode;
@ -17,6 +19,14 @@ public interface FileService {
@WebParam(name = "file") String filename, @WebParam(name = "file") String filename,
@WebParam(name = "suffix") String suffix); @WebParam(name = "suffix") String suffix);
@WebMethod(operationName = "downloadFile")
public abstract AttachmentType downloadFile(
@WebParam(name = "file") FileResource res);
@WebMethod(operationName = "uploadFile")
public abstract String uploadFile(
@WebParam(name = "file") AttachmentType file);
@WebMethod(operationName = "copy") @WebMethod(operationName = "copy")
public abstract ReturnCode copy( public abstract ReturnCode copy(
@WebParam(name = "fileset") FileSetResource src, @WebParam(name = "fileset") FileSetResource src,

View File

@ -114,4 +114,9 @@ public interface MiscService {
@WebMethod(operationName = "sleep") @WebMethod(operationName = "sleep")
public ReturnCode sleep(@WebParam(name = "minutes") int minutes, public ReturnCode sleep(@WebParam(name = "minutes") int minutes,
@WebParam(name = "seconds") int seconds); @WebParam(name = "seconds") int seconds);
@WebMethod(operationName = "getInfo")
public ReturnCode getInfo();
} }

View File

@ -22,7 +22,9 @@ import javax.jws.WebService;
import net.brutex.xservices.types.ArchiveResource; import net.brutex.xservices.types.ArchiveResource;
import net.brutex.xservices.types.CompressionType; import net.brutex.xservices.types.CompressionType;
import net.brutex.xservices.types.FileResource; import net.brutex.xservices.types.FileResource;
import net.brutex.xservices.types.FileSetResource;
import net.brutex.xservices.types.ResourceInterface; import net.brutex.xservices.types.ResourceInterface;
import net.brutex.xservices.types.ResourceSetInterface;
import net.brutex.xservices.types.ReturnCode; import net.brutex.xservices.types.ReturnCode;
import net.brutex.xservices.util.BrutexNamespaces; import net.brutex.xservices.util.BrutexNamespaces;
import net.brutex.xservices.util.RunTask; import net.brutex.xservices.util.RunTask;
@ -62,9 +64,9 @@ public class ArchiveServiceImpl implements ArchiveService {
*/ */
@Override @Override
@WebMethod(operationName = WS_OPERATION_BZIP2_ARCHIVE, action = WS_OPERATION_BZIP2_ARCHIVE) @WebMethod(operationName = WS_OPERATION_BZIP2_ARCHIVE, action = WS_OPERATION_BZIP2_ARCHIVE)
public ReturnCode bzip2FromArchive(@WebParam(name = WS_PARAM_SOURCEARCHIVE) ArchiveResource src, public ReturnCode bzip2FromArchive(@WebParam(name = WS_PARAM_SOURCEARCHIVE) ArchiveResource src,
@WebParam(name = WS_PARAM_DESTFILE) String file) { @WebParam(name = WS_PARAM_DESTFILE) String file) {
return bzip(src, new File(file)); return null;// return bzip(src, new File(file));
} }
/* (non-Javadoc) /* (non-Javadoc)

View File

@ -16,10 +16,22 @@
package net.brutex.xservices.ws.impl; package net.brutex.xservices.ws.impl;
import java.io.File; import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.util.List;
import javax.activation.DataHandler;
import javax.jws.WebMethod; import javax.jws.WebMethod;
import javax.jws.WebParam; import javax.jws.WebParam;
import javax.jws.WebService; import javax.jws.WebService;
import net.brutex.xservices.types.AntProperty;
import net.brutex.xservices.types.ArchiveResource; import net.brutex.xservices.types.ArchiveResource;
import net.brutex.xservices.types.AttachmentType;
import net.brutex.xservices.types.FileResource; import net.brutex.xservices.types.FileResource;
import net.brutex.xservices.types.FileSetResource; import net.brutex.xservices.types.FileSetResource;
import net.brutex.xservices.types.ResourceInterface; import net.brutex.xservices.types.ResourceInterface;
@ -29,6 +41,10 @@ import net.brutex.xservices.util.RunTask;
import net.brutex.xservices.ws.FileService; import net.brutex.xservices.ws.FileService;
import net.brutex.xservices.ws.XServicesFault; import net.brutex.xservices.ws.XServicesFault;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.codec.binary.Base64InputStream;
import org.apache.cxf.aegis.type.mtom.StreamDataSource;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.taskdefs.Basename; import org.apache.tools.ant.taskdefs.Basename;
import org.apache.tools.ant.taskdefs.Chmod; import org.apache.tools.ant.taskdefs.Chmod;
import org.apache.tools.ant.taskdefs.Copy; import org.apache.tools.ant.taskdefs.Copy;
@ -39,205 +55,293 @@ import org.apache.tools.ant.taskdefs.optional.unix.Chown;
import org.apache.tools.ant.types.FileSet; import org.apache.tools.ant.types.FileSet;
/** /**
* *
* @author Brian Rosenberger, bru@brutex.de * @author Brian Rosenberger, bru@brutex.de
*/ */
@WebService( @WebService(targetNamespace = BrutexNamespaces.WS_XSERVICES, endpointInterface = "net.brutex.xservices.ws.FileService", serviceName = "FileService")
targetNamespace = BrutexNamespaces.WS_XSERVICES,
endpointInterface ="net.brutex.xservices.ws.FileService",
serviceName = "FileService"
)
public class FileServiceImpl implements FileService { public class FileServiceImpl implements FileService {
/* (non-Javadoc) /*
* @see net.brutex.xservices.ws.impl.FileService#basename(java.lang.String, java.lang.String) * (non-Javadoc)
*
* @see net.brutex.xservices.ws.impl.FileService#basename(java.lang.String,
* java.lang.String)
*/ */
@Override @Override
@WebMethod(operationName = "basename") @WebMethod(operationName = "basename")
public ReturnCode basename(@WebParam(name = "file") String filename, public ReturnCode basename(@WebParam(name = "file") String filename,
@WebParam(name = "suffix") String suffix) { @WebParam(name = "suffix") String suffix) {
return basename(new File(filename), 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) * (non-Javadoc)
*
* @see
* net.brutex.xservices.ws.impl.FileService#base64Encode(net.brutex.xservices
* .types.FileSetResource)
*/ */
@Override @Override
@WebMethod(operationName = "downloadFile")
public AttachmentType downloadFile(@WebParam(name = "file") FileResource res) {
InputStream is = null;
try {
is = res.getAntResource(null).getInputStream();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
DataHandler h = new DataHandler(new StreamDataSource(
"application/binary", is));
AttachmentType t = new AttachmentType();
t.setContent(h);
return t;
}
/*
* (non-Javadoc)
*
* @see
* net.brutex.xservices.ws.impl.FileService#base64Decode(net.brutex.xservices
* .types.AttachmentType)
*/
@Override
@WebMethod(operationName = "uploadFile")
public String uploadFile(@WebParam(name = "file") AttachmentType file) {
DataHandler h = file.getContent();
File f = new File(file.getFilename());
FileOutputStream fout;
try {
fout = new FileOutputStream(f);
/*
* InputStream in = h.getInputStream();
int b;
while( (b=in.read())!= -1 ) {
fout.write(b);
}
*/
h.writeTo(fout);
fout.flush();
fout.close();
//in.close();
} catch (FileNotFoundException e) {
throw new BuildException(e);
} catch (IOException e) {
throw new BuildException(e);
}
return file.getFilename();
}
/*
* (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") @WebMethod(operationName = "copy")
public ReturnCode copy(@WebParam(name = "fileset") FileSetResource src, public ReturnCode copy(@WebParam(name = "fileset") FileSetResource src,
@WebParam(name = "todir") String todir, @WebParam(name = "todir") String todir,
@WebParam(name = "preservelastmodified") boolean plm, @WebParam(name = "preservelastmodified") boolean plm,
@WebParam(name = "overwrite") boolean overwrite, @WebParam(name = "overwrite") boolean overwrite,
@WebParam(name = "encoding") String encoding) @WebParam(name = "encoding") String encoding) throws XServicesFault {
throws XServicesFault { return copy(src, new File(todir), plm, overwrite, encoding);
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) * (non-Javadoc)
*
* @see
* net.brutex.xservices.ws.impl.FileService#loadRes(net.brutex.xservices
* .types.FileResource, java.lang.String)
*/ */
@Override @Override
@WebMethod(operationName = "loadResource") @WebMethod(operationName = "loadResource")
public ReturnCode loadRes(@WebParam(name = "resource") FileResource res, public ReturnCode loadRes(@WebParam(name = "resource") FileResource res,
@WebParam(name = "encoding") String encoding) { @WebParam(name = "encoding") String encoding) {
if (encoding == null || encoding.equals("")) { if (encoding == null || encoding.equals("")) {
encoding = System.getProperty("file.encoding"); encoding = System.getProperty("file.encoding");
} }
return loadResource(res, encoding); return loadResource(res, encoding);
} }
/* (non-Javadoc) /*
* @see net.brutex.xservices.ws.impl.FileService#loadResFromArchive(net.brutex.xservices.types.ArchiveResource, java.lang.String) * (non-Javadoc)
*
* @see
* net.brutex.xservices.ws.impl.FileService#loadResFromArchive(net.brutex
* .xservices.types.ArchiveResource, java.lang.String)
*/ */
@Override @Override
@WebMethod(operationName = "loadResourceFromArchive") @WebMethod(operationName = "loadResourceFromArchive")
public ReturnCode loadResFromArchive(@WebParam(name = "archiveresource") ArchiveResource res, public ReturnCode loadResFromArchive(
@WebParam(name = "encoding") String encoding) { @WebParam(name = "archiveresource") ArchiveResource res,
if (encoding == null || encoding.equals("")) { @WebParam(name = "encoding") String encoding) {
encoding = System.getProperty("file.encoding"); if (encoding == null || encoding.equals("")) {
} encoding = System.getProperty("file.encoding");
return loadResource(res, 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) * (non-Javadoc)
*
* @see net.brutex.xservices.ws.impl.FileService#echo2file(java.lang.String,
* java.lang.String, java.lang.String, boolean)
*/ */
@Override @Override
@WebMethod(operationName = "echoToFile") @WebMethod(operationName = "echoToFile")
public ReturnCode echo2file(@WebParam(name = "message") String message, public ReturnCode echo2file(@WebParam(name = "message") String message,
@WebParam(name = "file") String file, @WebParam(name = "encoding") String encoding, @WebParam(name = "file") String file,
@WebParam(name = "append") boolean append) { @WebParam(name = "encoding") String encoding,
return echo(message, new File(file), encoding, append); @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) * (non-Javadoc)
*
* @see
* net.brutex.xservices.ws.impl.FileService#changeOwner(net.brutex.xservices
* .types.FileSetResource, java.lang.String)
*/ */
@Override @Override
@WebMethod(operationName = "changeOwner") @WebMethod(operationName = "changeOwner")
public ReturnCode changeOwner(@WebParam(name = "fileset") FileSetResource res, public ReturnCode changeOwner(
@WebParam(name = "owner") String owner) { @WebParam(name = "fileset") FileSetResource res,
return chown(res, owner); @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) * (non-Javadoc)
*
* @see
* net.brutex.xservices.ws.impl.FileService#changeGroup(net.brutex.xservices
* .types.FileSetResource, java.lang.String)
*/ */
@Override @Override
@WebMethod(operationName = "changeGroup") @WebMethod(operationName = "changeGroup")
public ReturnCode changeGroup(@WebParam(name = "fileset") FileSetResource res, public ReturnCode changeGroup(
@WebParam(name = "group") String group) { @WebParam(name = "fileset") FileSetResource res,
return chgrp(res, group); @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) * (non-Javadoc)
*
* @see
* net.brutex.xservices.ws.impl.FileService#changeMode(net.brutex.xservices
* .types.FileSetResource, java.lang.String)
*/ */
@Override @Override
@WebMethod(operationName = "changeMode") @WebMethod(operationName = "changeMode")
public ReturnCode changeMode(@WebParam(name="fileset") FileSetResource res, public ReturnCode changeMode(
@WebParam(name="permissions") String perm) { @WebParam(name = "fileset") FileSetResource res,
return chmod(res, perm); @WebParam(name = "permissions") String perm) {
} return chmod(res, perm);
}
@WebMethod(exclude = true) @WebMethod(exclude = true)
private ReturnCode basename(File file, private ReturnCode basename(File file, String suffix) {
String suffix) { Basename basename = new Basename();
Basename basename = new Basename(); RunTask runner = new RunTask(basename);
RunTask runner = new RunTask(basename); basename.setFile(file);
basename.setFile(file); if (suffix != null && !suffix.equals("")) {
if (suffix != null && !suffix.equals("")) { basename.setSuffix(suffix);
basename.setSuffix(suffix); }
} basename.setProperty("basename.value");
basename.setProperty("basename.value"); return runner.postTask();
return runner.postTask(); }
}
@WebMethod(exclude = true) @WebMethod(exclude = true)
private ReturnCode loadResource(ResourceInterface src, String encoding) { private ReturnCode loadResource(ResourceInterface src, String encoding) {
LoadResource lr = new LoadResource(); LoadResource lr = new LoadResource();
lr.setTaskName("LoadResource"); lr.setTaskName("LoadResource");
RunTask runner = new RunTask(lr); RunTask runner = new RunTask(lr);
lr.addConfigured(src.getAntResource(lr.getProject())); lr.addConfigured(src.getAntResource(lr.getProject()));
lr.setEncoding(encoding); lr.setEncoding(encoding);
System.out.println("Using encoding: " + encoding); System.out.println("Using encoding: " + encoding);
lr.setProperty("LoadResource.out"); lr.setProperty("LoadResource.out");
return runner.postTask(); return runner.postTask();
} }
@WebMethod(exclude = true) @WebMethod(exclude = true)
private ReturnCode echo(String msg, File file, String encoding, boolean append) { private ReturnCode echo(String msg, File file, String encoding,
Echo echo = new Echo(); boolean append) {
echo.setTaskName("toFile"); Echo echo = new Echo();
RunTask runTask = new RunTask(echo); echo.setTaskName("toFile");
echo.addText(msg); RunTask runTask = new RunTask(echo);
echo.setEncoding(encoding); echo.addText(msg);
echo.setFile(file); echo.setEncoding(encoding);
echo.setAppend(append); echo.setFile(file);
return runTask.postTask(); echo.setAppend(append);
} return runTask.postTask();
}
@WebMethod(exclude = true) @WebMethod(exclude = true)
private ReturnCode copy(FileSetResource src, File dst, boolean preservelastmodified, private ReturnCode copy(FileSetResource src, File dst,
boolean overwrite, String encoding) { boolean preservelastmodified, boolean overwrite, String encoding) {
Copy copy = new Copy(); Copy copy = new Copy();
copy.setTaskName("Copy"); copy.setTaskName("Copy");
RunTask runner = new RunTask(copy); RunTask runner = new RunTask(copy);
FileSet set = src.getAntFileSet(copy.getProject()); FileSet set = src.getAntResource(copy.getProject());
copy.add(set); copy.add(set);
if (dst.isDirectory()) { if (dst.isDirectory()) {
copy.setTodir(dst); copy.setTodir(dst);
} }
if (dst.isFile()) { if (dst.isFile()) {
copy.setTofile(dst); copy.setTofile(dst);
} }
copy.setOverwrite(overwrite); copy.setOverwrite(overwrite);
copy.setPreserveLastModified(preservelastmodified); copy.setPreserveLastModified(preservelastmodified);
if (encoding != null && !encoding.equals("")) { if (encoding != null && !encoding.equals("")) {
copy.setOutputEncoding(encoding); copy.setOutputEncoding(encoding);
} else { } else {
copy.setOutputEncoding(System.getProperty("file.encoding")); copy.setOutputEncoding(System.getProperty("file.encoding"));
} }
return runner.postTask(); return runner.postTask();
} }
@WebMethod(exclude = true) @WebMethod(exclude = true)
private ReturnCode chown(FileSetResource src, String owner) { private ReturnCode chown(FileSetResource src, String owner) {
Chown chown = new Chown(); Chown chown = new Chown();
chown.setTaskName("Chown"); chown.setTaskName("Chown");
RunTask runner = new RunTask(chown); RunTask runner = new RunTask(chown);
chown.setOwner(owner); chown.setOwner(owner);
FileSet set = src.getAntFileSet(chown.getProject()); FileSet set = src.getAntResource(chown.getProject());
chown.add(set); chown.add(set);
chown.setMaxParallel(300); chown.setMaxParallel(300);
return runner.postTask(); return runner.postTask();
} }
@WebMethod(exclude = true) @WebMethod(exclude = true)
private ReturnCode chgrp(FileSetResource src, String group) { private ReturnCode chgrp(FileSetResource src, String group) {
Chgrp chgrp = new Chgrp(); Chgrp chgrp = new Chgrp();
chgrp.setTaskName("Chgrp"); chgrp.setTaskName("Chgrp");
RunTask runner = new RunTask(chgrp); RunTask runner = new RunTask(chgrp);
chgrp.setGroup(group); chgrp.setGroup(group);
FileSet set = src.getAntFileSet(chgrp.getProject()); FileSet set = src.getAntResource(chgrp.getProject());
chgrp.add(set); chgrp.add(set);
chgrp.setMaxParallel(300); chgrp.setMaxParallel(300);
return runner.postTask(); return runner.postTask();
} }
@WebMethod(exclude = true) @WebMethod(exclude = true)
private ReturnCode chmod(FileSetResource src, String perm) { private ReturnCode chmod(FileSetResource src, String perm) {
Chmod chmod = new Chmod(); Chmod chmod = new Chmod();
chmod.setTaskName("Chmod"); chmod.setTaskName("Chmod");
RunTask runner = new RunTask(chmod); RunTask runner = new RunTask(chmod);
FileSet set = src.getAntFileSet(chmod.getProject()); FileSet set = src.getAntResource(chmod.getProject());
chmod.add(set); chmod.add(set);
chmod.setMaxParallel(300); chmod.setMaxParallel(300);
chmod.setPerm(perm); chmod.setPerm(perm);
chmod.setVerbose(true); chmod.setVerbose(true);
return runner.postTask(); return runner.postTask();
} }
} }

View File

@ -16,6 +16,9 @@
package net.brutex.xservices.ws.impl; package net.brutex.xservices.ws.impl;
import java.util.Enumeration;
import java.util.Properties;
import javax.jws.WebService; import javax.jws.WebService;
import net.brutex.xservices.types.FileSetResource; import net.brutex.xservices.types.FileSetResource;
import net.brutex.xservices.types.HostConnection; import net.brutex.xservices.types.HostConnection;
@ -50,6 +53,28 @@ public class MiscServiceImpl implements MiscService {
public ReturnCode getHostinfo(String hostname) { public ReturnCode getHostinfo(String hostname) {
return antGetHostinfo(hostname, null); return antGetHostinfo(hostname, null);
} }
@WSDLDocumentation(value = "Get XService information.")
public ReturnCode getInfo() {
ReturnCode r = new ReturnCode();
r.returnCode = 0;
// Get all system properties
Properties props = System.getProperties();
// Enumerate all system properties
Enumeration<String> e = (Enumeration<String>) props.propertyNames();
for (; e.hasMoreElements(); ) {
// Get property name
String propName = (String)e.nextElement();
// Get property value
String propValue = (String)props.get(propName);
r.stdOut = r.stdOut + propName + ": " + propValue + "\n";
}
return r;
}
public ReturnCode sendMailSimple(HostConnection mailhost, String from, public ReturnCode sendMailSimple(HostConnection mailhost, String from,
String tolist, String subject, String message) { String tolist, String subject, String message) {
@ -105,7 +130,7 @@ public class MiscServiceImpl implements MiscService {
mail.setMessage(message); mail.setMessage(message);
mail.setMessageMimeType(messagemimetype); mail.setMessageMimeType(messagemimetype);
if (attachments != null) { if (attachments != null) {
mail.addFileset(attachments.getAntFileSet(mail.getProject())); mail.addFileset(attachments.getAntResource(mail.getProject()));
} }
mail.setMailhost(mailhost); mail.setMailhost(mailhost);
mail.setMailport(mailport); mail.setMailport(mailport);
@ -128,5 +153,4 @@ public class MiscServiceImpl implements MiscService {
sleep.setMilliseconds(milliseconds); sleep.setMilliseconds(milliseconds);
return runner.postTask(); return runner.postTask();
} }
} }