Search in sources :

Example 1 with FileTransferJob

use of org.eclipse.ecf.filetransfer.FileTransferJob in project ecf by eclipse.

the class HttpClientRetrieveFileTransfer method fireConnectStartEvent.

protected void fireConnectStartEvent() {
    // $NON-NLS-1$
    Trace.entering(Activator.PLUGIN_ID, DebugOptions.METHODS_ENTERING, this.getClass(), "fireConnectStartEvent");
    // TODO: should the following be in super.fireReceiveStartEvent();
    listener.handleTransferEvent(new IFileTransferConnectStartEvent() {

        public IFileID getFileID() {
            return remoteFileID;
        }

        public void cancel() {
            HttpClientRetrieveFileTransfer.this.cancel();
        }

        public FileTransferJob prepareConnectJob(FileTransferJob j) {
            return HttpClientRetrieveFileTransfer.this.prepareConnectJob(j);
        }

        public void connectUsingJob(FileTransferJob j) {
            HttpClientRetrieveFileTransfer.this.connectUsingJob(j);
        }

        public String toString() {
            // $NON-NLS-1$
            final StringBuffer sb = new StringBuffer("IFileTransferConnectStartEvent[");
            sb.append(getFileID());
            // $NON-NLS-1$
            sb.append("]");
            return sb.toString();
        }

        public Object getAdapter(Class adapter) {
            return HttpClientRetrieveFileTransfer.this.getAdapter(adapter);
        }
    });
}
Also used : IFileID(org.eclipse.ecf.filetransfer.identity.IFileID) FileTransferJob(org.eclipse.ecf.filetransfer.FileTransferJob) IFileTransferConnectStartEvent(org.eclipse.ecf.filetransfer.events.IFileTransferConnectStartEvent)

Example 2 with FileTransferJob

use of org.eclipse.ecf.filetransfer.FileTransferJob in project ecf by eclipse.

the class HttpClientRetrieveFileTransfer method prepareConnectJob.

protected FileTransferJob prepareConnectJob(FileTransferJob cjob) {
    if (cjob == null) {
        // Create our own
        cjob = new FileTransferJob(createJobName());
    }
    cjob.setFileTransfer(this);
    cjob.setFileTransferRunnable(fileConnectRunnable);
    return cjob;
}
Also used : FileTransferJob(org.eclipse.ecf.filetransfer.FileTransferJob)

Example 3 with FileTransferJob

use of org.eclipse.ecf.filetransfer.FileTransferJob in project ecf by eclipse.

the class AbstractRetrieveFileTransfer method setupAndScheduleJob.

protected void setupAndScheduleJob(FileTransferJob fileTransferJob) {
    if (fileTransferJob == null) {
        // Create our own
        fileTransferJob = new FileTransferJob(createJobName());
    }
    // Now set to our runnable
    fileTransferJob.setFileTransferRunnable(fileTransferRunnable);
    fileTransferJob.setFileTransfer(this);
    if (isDone()) {
        return;
    }
    synchronized (jobLock) {
        job = fileTransferJob;
        job.schedule();
    }
}
Also used : FileTransferJob(org.eclipse.ecf.filetransfer.FileTransferJob)

Example 4 with FileTransferJob

use of org.eclipse.ecf.filetransfer.FileTransferJob in project ecf by eclipse.

the class URLRetrieveTestCancelConnectJob method testReceiveFile_cancelTransferJobInMiddle.

public void testReceiveFile_cancelTransferJobInMiddle(final long len, final boolean expectedSocketInRead) throws Exception {
    if (!CANCEL_SUPPORTED_ON_CONNECT) {
        trace("WARNING:  Cancel not supported by this provider.  testReceiveFile_cancelTransferJobInMiddle cannot be used");
        return;
    }
    final Object[] doCancel = new Object[1];
    final IFileTransferListener listener = createFileTransferListener();
    final FileTransferListenerWrapper lw = new FileTransferListenerWrapper(listener) {

        protected void handleStartConnectEvent(final IFileTransferConnectStartEvent event) {
            assertNotNull(event.getFileID());
            assertNotNull(event.getFileID().getFilename());
            FileTransferJob connectJob = event.prepareConnectJob(null);
            connectJob.addJobChangeListener(new JobChangeTraceListener(startTime));
            event.connectUsingJob(connectJob);
        }

        protected void handleStartEvent(final IIncomingFileTransferReceiveStartEvent event) {
            spawnCancelThread(doCancel, new ICancelable() {

                public void cancel() {
                    if (expectedSocketInRead) {
                        waitForSocketInRead();
                    }
                    event.cancel();
                }
            });
            try {
                createTempFile();
                event.receive(tmpFile);
            } catch (IOException e) {
                e.printStackTrace();
                fail(e.toString());
            }
        }
    };
    final SimpleServer server = new SimpleServer(getName());
    SimpleHttpServer simple = server.getSimpleHttpServer();
    simple.setRequestHandler(new HttpRequestHandler() {

        public boolean processRequest(SimpleHttpServerConnection conn, SimpleRequest request) throws IOException {
            trace("Responding to request but never provide only 50% of body" + request.getRequestLine());
            ResponseWriter w = conn.getWriter();
            writeLines(w, new String[] { "HTTP/1.0 200 OK", "Content-Length: " + len, "Content-Type: text/plain; charset=UTF-8", "" });
            w.flush();
            for (int i = 0; i < len / 2; i++) {
                w.write("x");
            }
            w.flush();
            conn.setKeepAlive(true);
            try {
                // give it a bit of time to receive the data
                Thread.sleep(200);
            } catch (InterruptedException e) {
            }
            return stalledInRequestHandler(doCancel);
        }
    });
    try {
        // path does not matter as server does not respond.
        testReceive(server.getServerURL() + "/foo", lw);
        assertHasEvent(startConnectEvents, IFileTransferConnectStartEvent.class);
        assertHasEvent(startEvents, IIncomingFileTransferReceiveStartEvent.class);
        assertHasMoreThanEventCount(dataEvents, IIncomingFileTransferReceiveDataEvent.class, 0);
        assertDoneCancelled();
        assertNotNull(tmpFile);
        assertTrue(tmpFile.exists());
        assertEquals(len / 2, tmpFile.length());
        assertFalse(socketInReadWrapper.inRead);
        socketEvents.validateOneSocketCreatedAndClosed();
    } finally {
        server.shutdown();
    }
}
Also used : SimpleServer(org.eclipse.ecf.internal.tests.filetransfer.httpserver.SimpleServer) HttpRequestHandler(org.apache.commons.httpclient.server.HttpRequestHandler) IIncomingFileTransferReceiveStartEvent(org.eclipse.ecf.filetransfer.events.IIncomingFileTransferReceiveStartEvent) SimpleHttpServerConnection(org.apache.commons.httpclient.server.SimpleHttpServerConnection) IFileTransferListener(org.eclipse.ecf.filetransfer.IFileTransferListener) IOException(java.io.IOException) SimpleRequest(org.apache.commons.httpclient.server.SimpleRequest) IFileTransferConnectStartEvent(org.eclipse.ecf.filetransfer.events.IFileTransferConnectStartEvent) ResponseWriter(org.apache.commons.httpclient.server.ResponseWriter) FileTransferJob(org.eclipse.ecf.filetransfer.FileTransferJob) SimpleHttpServer(org.apache.commons.httpclient.server.SimpleHttpServer)

Example 5 with FileTransferJob

use of org.eclipse.ecf.filetransfer.FileTransferJob in project ecf by eclipse.

the class URLRetrieveTestUnknownHost method testReceiveFile_unknownHostWithConnectJob.

public void testReceiveFile_unknownHostWithConnectJob() throws Exception {
    final IFileTransferListener listener = createFileTransferListener();
    final FileTransferListenerWrapper lw = new FileTransferListenerWrapper(listener) {

        protected void handleStartConnectEvent(final IFileTransferConnectStartEvent event) {
            assertNotNull(event.getFileID());
            assertNotNull(event.getFileID().getFilename());
            FileTransferJob connectJob = event.prepareConnectJob(null);
            connectJob.addJobChangeListener(new JobChangeTraceListener(startTime));
            event.connectUsingJob(connectJob);
        }
    };
    try {
        // path does not matter as server does not respond.
        testReceive(HTTP_UNKNOWN_HOST_URL, lw);
        if (CANCEL_SUPPORTED_ON_CONNECT) {
            assertHasEvent(startConnectEvents, IFileTransferConnectStartEvent.class);
        }
        assertHasNoEvent(startEvents, IIncomingFileTransferReceiveStartEvent.class);
        assertHasNoEvent(dataEvents, IIncomingFileTransferReceiveDataEvent.class);
        assertDoneExceptionBeforeServerResponse(UnknownHostException.class);
    } catch (Exception e) {
        e.printStackTrace();
        fail(e.toString());
    }
}
Also used : FileTransferJob(org.eclipse.ecf.filetransfer.FileTransferJob) IFileTransferListener(org.eclipse.ecf.filetransfer.IFileTransferListener) UnknownHostException(java.net.UnknownHostException) IFileTransferConnectStartEvent(org.eclipse.ecf.filetransfer.events.IFileTransferConnectStartEvent)

Aggregations

FileTransferJob (org.eclipse.ecf.filetransfer.FileTransferJob)10 IFileTransferListener (org.eclipse.ecf.filetransfer.IFileTransferListener)5 IFileTransferConnectStartEvent (org.eclipse.ecf.filetransfer.events.IFileTransferConnectStartEvent)5 IOException (java.io.IOException)4 HttpRequestHandler (org.apache.commons.httpclient.server.HttpRequestHandler)3 SimpleHttpServer (org.apache.commons.httpclient.server.SimpleHttpServer)3 SimpleHttpServerConnection (org.apache.commons.httpclient.server.SimpleHttpServerConnection)3 SimpleRequest (org.apache.commons.httpclient.server.SimpleRequest)3 IIncomingFileTransferReceiveStartEvent (org.eclipse.ecf.filetransfer.events.IIncomingFileTransferReceiveStartEvent)3 IFileID (org.eclipse.ecf.filetransfer.identity.IFileID)3 SimpleServer (org.eclipse.ecf.internal.tests.filetransfer.httpserver.SimpleServer)3 ResponseWriter (org.apache.commons.httpclient.server.ResponseWriter)2 UserCancelledException (org.eclipse.ecf.filetransfer.UserCancelledException)2 File (java.io.File)1 OutputStream (java.io.OutputStream)1 URL (java.net.URL)1 UnknownHostException (java.net.UnknownHostException)1 Map (java.util.Map)1 IStatus (org.eclipse.core.runtime.IStatus)1 IJobChangeEvent (org.eclipse.core.runtime.jobs.IJobChangeEvent)1