Package org.exist.xquery.modules.ftpclient

Source Code of org.exist.xquery.modules.ftpclient.SendFileFunction

package org.exist.xquery.modules.ftpclient;

import java.io.IOException;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.log4j.Logger;

import org.exist.dom.QName;
import org.exist.xquery.BasicFunction;
import org.exist.xquery.Cardinality;
import org.exist.xquery.FunctionSignature;
import org.exist.xquery.XPathException;
import org.exist.xquery.XQueryContext;
import org.exist.xquery.value.BinaryValue;
import org.exist.xquery.value.FunctionReturnSequenceType;
import org.exist.xquery.value.Sequence;
import org.exist.xquery.value.SequenceType;
import org.exist.xquery.value.Type;
import org.exist.xquery.value.BooleanValue;
import org.exist.xquery.value.FunctionParameterSequenceType;
import org.exist.xquery.value.IntegerValue;

/**
*
* @author WStarcev
* @author Adam Retter <adam@existsolutions.com>
*/
public class SendFileFunction extends BasicFunction {

    private static final FunctionParameterSequenceType CONNECTION_HANDLE_PARAM = new FunctionParameterSequenceType("connection-handle", Type.LONG, Cardinality.EXACTLY_ONE, "The connection handle");
    private static final FunctionParameterSequenceType REMOTE_DIRECTORY_PARAM = new FunctionParameterSequenceType("remote-directory", Type.STRING, Cardinality.EXACTLY_ONE, "The remote directory");
    private static final FunctionParameterSequenceType FILE_NAME_PARAM = new FunctionParameterSequenceType("file-name", Type.STRING, Cardinality.EXACTLY_ONE, "File name");
    private static final FunctionParameterSequenceType DATA_PARAM = new FunctionParameterSequenceType("data", Type.BASE64_BINARY, Cardinality.EXACTLY_ONE, "The binary file data to send" );
   
    private static final Logger log = Logger.getLogger(SendFileFunction.class);
   
    public final static FunctionSignature signature = new FunctionSignature(
        new QName("send-binary-file", FTPClientModule.NAMESPACE_URI, FTPClientModule.PREFIX),
        "Send binary files via FTP.",
        new SequenceType[] {
            CONNECTION_HANDLE_PARAM,
            REMOTE_DIRECTORY_PARAM,
            FILE_NAME_PARAM,
            DATA_PARAM
        },
        new FunctionReturnSequenceType(Type.BOOLEAN, Cardinality.EXACTLY_ONE, "true or false indicating the success of the file send")
    );

    public SendFileFunction(XQueryContext context) {
        super(context, signature);
    }

    @Override
    public Sequence eval(Sequence[] args, Sequence contextSequence) throws XPathException {
       
        Sequence result = Sequence.EMPTY_SEQUENCE;
       
        long connectionUID = ((IntegerValue)args[0].itemAt(0)).getLong();
        FTPClient ftp = FTPClientModule.retrieveConnection(context, connectionUID);
        if(ftp != null) {
            String remoteDirectory = args[1].getStringValue();
            String fileName = args[2].getStringValue();
            BinaryValue data = (BinaryValue)args[3].itemAt(0);
           
            result = sendBinaryFile(ftp, remoteDirectory, fileName, data);
       
        }
       
        return result;
    }

    private Sequence sendBinaryFile(FTPClient ftp, String remoteDirectory, String fileName, BinaryValue data) {
       
        boolean result = false;
        try {
            ftp.changeWorkingDirectory(remoteDirectory);
            ftp.setFileType(FTP.BINARY_FILE_TYPE);
           
            //BinaryValueFromInputStream bvis = BinaryValueFromInputStream.getInstance(context, new Base64BinaryValueType(), data.getInputStream());
            //OutputStream out = ftp.storeFileStream(fileName);
           
            result = ftp.storeFile(fileName, data.getInputStream());

        } catch(IOException ioe) {
            log.error(ioe.getMessage(), ioe);
            result = false;
        }
       
        return BooleanValue.valueOf(result);
    }
}
TOP

Related Classes of org.exist.xquery.modules.ftpclient.SendFileFunction

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.