/* (c) 2014 Open Source Geospatial Foundation - all rights reserved
* (c) 2001 - 2013 OpenPlans
* This code is licensed under the GPL 2.0 license, available at the root
* application directory.
*/
package org.geoserver.flow.controller;
import org.geoserver.flow.FlowController;
import org.geoserver.ows.Request;
public class FlowControllerTestingThread extends Thread {
enum ThreadState {STARTED, TIMED_OUT, PROCESSING, COMPLETE};
FlowController[] controllers;
boolean proceed;
Request request;
long timeout;
long processingDelay;
ThreadState state;
Throwable error;
public FlowControllerTestingThread(Request request, long timeout, long processingDelay, FlowController... controllers) {
this.controllers = controllers;
this.request = request;
this.timeout = timeout;
this.processingDelay = processingDelay;
}
@Override
public void run() {
state = ThreadState.STARTED;
try {
System.out.println(this + " calling requestIncoming");
for (FlowController controller : controllers) {
if(!controller.requestIncoming(request, timeout)) {
state = ThreadState.TIMED_OUT;
return;
}
}
} catch(Throwable t) {
this.error = t;
}
state = ThreadState.PROCESSING;
try {
System.out.println(this + " waiting");
if(processingDelay > 0)
sleep(processingDelay);
} catch(InterruptedException e) {
System.out.println(e.getLocalizedMessage());
Thread.currentThread().interrupt();
}
try {
System.out.println(this + " calling requestComplete");
for (FlowController controller : controllers) {
controller.requestComplete(request);
}
} catch(Throwable t) {
this.error = t;
}
state = ThreadState.COMPLETE;
System.out.println(this + " done");
}
}