package net.brutex.xservices.ws;

import javax.activation.DataHandler;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;

import net.brutex.xservices.types.ArchiveResource;
import net.brutex.xservices.types.AttachmentType;
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 = "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")
	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);

}