/*******************************************************************************
* Copyright (c) 2004 Composent, Inc. All rights reserved. This
* program and the accompanying materials are made available under the terms of
* the Eclipse Public License v1.0 which accompanies this distribution, and is
* available at http://www.eclipse.org/legal/epl-v10.html
*
* Contributors: Composent, Inc. - initial API and implementation
******************************************************************************/
package org.eclipse.ecf.filetransfer.events;
import java.io.File;
import java.io.OutputStream;
import org.eclipse.ecf.core.identity.ID;
import org.eclipse.ecf.filetransfer.IFileTransferInfo;
import org.eclipse.ecf.filetransfer.IFileTransferListener;
import org.eclipse.ecf.filetransfer.IIncomingFileTransfer;
import org.eclipse.ecf.filetransfer.IIncomingFileTransferRequestListener;
import org.eclipse.ecf.filetransfer.IncomingFileTransferException;
/**
* Event to represent remote file transfer requests. Events implementing this
* interface are delivered to {@link IIncomingFileTransferRequestListener}
*
* @see IIncomingFileTransferRequestListener#handleFileTransferRequest(IFileTransferRequestEvent)
*/
public interface IFileTransferRequestEvent extends IFileTransferEvent {
/**
* Get ID of remote requester
*
* @return ID of remote requester. Will not be <code>null</code>.
*/
public ID getRequesterID();
/**
* Get file transfer info associated with this file transfer request even
*
* @return IFileTransfer info. Will not be <code>null</code>.
*/
public IFileTransferInfo getFileTransferInfo();
/**
* Accept the file transfer request. This method should be called if the
* receiver of the IFileTransferRequestEvent would like to accept the file
* transfer request. Will not return <code>null</code>. Once called
* successfully, then {@link #requestAccepted()} will return true, and
* further calls to {@link #accept(File)} or
* {@link #accept(OutputStream, IFileTransferListener)} will throw
* IncomingFileTransferExceptions.
*
* @param localFileToSave
* the file on the local file system to receive the remote file.
* Must not be <code>null</code>.
* @return IIncomingFileTransfer to receive file. Will not be
* <code>null</code>.
* @throws IncomingFileTransferException
* if accept message cannot be delivered back to requester
*/
public IIncomingFileTransfer accept(File localFileToSave) throws IncomingFileTransferException;
/**
* Accept the file transfer request. This method should be called if the
* receiver of the IFileTransferRequestEvent would like to accept the file
* transfer request. Will not return <code>null</code>. Once called
* successfully, then {@link #requestAccepted()} will return true, and
* further calls to {@link #accept(File)} or
* {@link #accept(OutputStream, IFileTransferListener)} will throw
* IncomingFileTransferExceptions.
*
* @param outputStream
* the output stream to receive the accepted file contents. Must
* not be <code>null</code>.
* @param listener
* for file transfer events during file reception. May be
* <code>null</code>.
* @return IIncomingFileTransfer to receive file. Will not be
* <code>null</code>.
* @throws IncomingFileTransferException
* if accept message cannot be delivered back to requester
*/
public IIncomingFileTransfer accept(OutputStream outputStream, IFileTransferListener listener) throws IncomingFileTransferException;
/**
* Reject the file transfer request. This method should be called if the
* receiver of the IFileTransferRequestEvent would like to reject the file
* transfer request
*
*/
public void reject();
/**
* If request was accepted from remote target (via successful call to
* {@link #accept(File)}this method will return true, if rejected or failed
* returns false.
*
* @return true if request was accepted, false if rejected or failed
*/
public boolean requestAccepted();
}