00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031 package org.objectweb.proactive.core.body.future;
00032
00033 import java.io.Serializable;
00034
00035 import org.objectweb.proactive.core.exceptions.manager.ExceptionHandler;
00036 import org.objectweb.proactive.core.exceptions.proxy.ProxyNonFunctionalException;
00037
00038 class ThisIsNotAnException extends Exception {
00039 public ThisIsNotAnException() {
00040 super("This is the call in the proxy");
00041 }
00042 }
00043
00048 public class FutureResult implements Serializable {
00049
00051 private Object result;
00052
00054 private Throwable exception;
00055
00057 private ProxyNonFunctionalException nfe;
00058
00059 public FutureResult(Object result, Throwable exception,
00060 ProxyNonFunctionalException nfe) {
00061 this.result = result;
00062 this.exception = exception;
00063 this.nfe = nfe;
00064 }
00065
00066 public Throwable getExceptionToRaise() {
00067 return exception;
00068 }
00069
00070 public ProxyNonFunctionalException getNFE() {
00071 return nfe;
00072 }
00073
00074 public Object getResult() {
00075 if (exception != null) {
00076 ExceptionHandler.throwException(exception);
00077 }
00078
00079 return result;
00080 }
00081
00082 public String toString() {
00083 String str = "[";
00084 if (nfe != null) {
00085 str += ("nfe:" + nfe.getClass().getName());
00086 } else if (exception != null) {
00087 str += ("ex:" + exception.getClass().getName());
00088 } else if (result != null) {
00089 str += result.getClass().getName();
00090 } else {
00091 str += "null";
00092 }
00093
00094 return str + "]";
00095 }
00096
00097 public void augmentException(StackTraceElement[] stackTrace) {
00098 Throwable cause = (exception == null) ? nfe : exception;
00099 if (cause != null && stackTrace != null) {
00100 while (cause.getCause() != null) {
00101 cause = cause.getCause();
00102 }
00103 Exception origCause = new ThisIsNotAnException();
00104 origCause.setStackTrace(stackTrace);
00105 cause.initCause(origCause);
00106 }
00107 }
00108 }