use of org.jowidgets.cap.common.api.execution.UserQuestionResult in project jo-client-platform by jo-source.
the class ExecutionTask method userQuestion.
@Override
public UserQuestionResult userQuestion(final String question) {
Assert.paramNotNull(question, "question");
this.userQuestion = question;
userQuestionWaitThread = new Thread(new Runnable() {
@Override
public void run() {
while (true) {
try {
Thread.sleep(10000);
} catch (final InterruptedException e) {
Thread.currentThread().interrupt();
break;
}
}
}
});
userQuestionWaitThread.setDaemon(true);
userQuestionWaitThread.start();
fireUserQuestionAsked();
try {
userQuestionWaitThread.join();
} catch (final Exception e) {
}
final UserQuestionResult result = userQuestionResult;
userQuestionResult = null;
return result;
}
use of org.jowidgets.cap.common.api.execution.UserQuestionResult in project jo-client-platform by jo-source.
the class RemoteMethodInvocationHandler method invokeRemoteMethod.
private Object invokeRemoteMethod(final Object proxy, final Method method, final Object[] args) {
final Class<?>[] parameterTypes = method.getParameterTypes();
final IResultCallback<Object> resultCallback = getResultCallback(parameterTypes, args);
final IExecutionCallback executionCallback = getExecutionCallback(parameterTypes, args);
final ArrayList<InputStream> inputStreams = getInputStreams(parameterTypes, args);
final IInterimResponseCallback<Progress> interimResponseCallback;
final IInterimRequestCallback<UserQuestionRequest, UserQuestionResult> userQuestionRequestCallback;
if (executionCallback != null) {
interimResponseCallback = new ProgressResponseCallback(executionCallback);
userQuestionRequestCallback = new UserQuestionRequestCallback(executionCallback);
} else {
interimResponseCallback = new DummyProgressResponseCallback();
userQuestionRequestCallback = new DummyUserQuestionRequestCallback(resultCallback);
}
final InputStreamRequestCallback inputStreamRequestCallback;
if (!EmptyCheck.isEmpty(inputStreams)) {
inputStreamRequestCallback = new InputStreamRequestCallback(inputStreams);
} else {
inputStreamRequestCallback = null;
}
final GenericInterimRequestCallback interimRequestCallback = new GenericInterimRequestCallback(userQuestionRequestCallback, inputStreamRequestCallback);
final RemoteInvocationParameter parameter = new RemoteInvocationParameter(serviceId, method.getName(), parameterTypes, getFilteredArgs(args, parameterTypes));
if (resultCallback != null) {
invokeAsync(resultCallback, interimResponseCallback, interimRequestCallback, parameter, executionCallback, inputStreams);
return null;
} else {
return invokeSync(interimResponseCallback, interimRequestCallback, parameter, executionCallback, inputStreams);
}
}
use of org.jowidgets.cap.common.api.execution.UserQuestionResult in project jo-client-platform by jo-source.
the class ServerExecutionCallback method userQuestion.
@Override
public UserQuestionResult userQuestion(final String question) {
final ValueHolder<UserQuestionResult> result = new ValueHolder<UserQuestionResult>();
final Lock lock = new ReentrantLock();
final Condition condition = lock.newCondition();
interimRequestCallback.request(new IInterimResponseCallback<Object>() {
@Override
public void response(final Object response) {
final UserQuestionResult userQuestionResult = (UserQuestionResult) response;
result.set(userQuestionResult);
lock.lock();
condition.signal();
lock.unlock();
}
}, new UserQuestionRequest(question));
lock.lock();
condition.awaitUninterruptibly();
lock.unlock();
return result.get();
}
Aggregations