import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import java.io.File;
import java.io.IOException;
import java.net.URISyntaxException;
import java.net.URL;
+import java.util.IllformedLocaleException;
import java.util.Vector;
import org.eclipse.core.runtime.FileLocator;
request.addRequest(subRequest1);
request.addRequest(subRequest2);
- request.fail();
+ request.fail(new IllformedLocaleException("Hi"));
// Validate the coalescing request
assertTrue("isCompleted", request.isCompleted());
assertTrue("isFailed", request.isFailed());
+ final Throwable failCause = request.getFailureCause();
+ assertNotNull("Cause of failure", failCause);
+ assertEquals("Cause of failure message", "Hi", failCause.getMessage());
assertFalse("isCancelled", request.isCancelled());
assertTrue("handleCompleted", crFlags[0]);
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
public void testFail() {
final boolean[] flags = new boolean[4];
TmfEventRequest request = setupTestRequest(flags);
- request.fail();
+ request.fail(new IllegalArgumentException("Bad argument"));
+ final Throwable failCause = request.getFailureCause();
assertTrue("isCompleted", request.isCompleted());
assertTrue("isFailed", request.isFailed());
assertFalse("isCancelled", request.isCancelled());
+ assertNotNull("Cause of failure", failCause);
+ assertEquals("Cause of failure message", "Bad argument", failCause.getMessage());
assertTrue("handleCompleted", flags[0]);
assertFalse("handleSuccess", flags[1]);
} catch (Exception e) {
Activator.logError("Error in " + fProvider.getName() + " handling " + fRequest, e); //$NON-NLS-1$ //$NON-NLS-2$
isCompleted = true;
- fRequest.fail();
+ fRequest.fail(e);
}
// Cleanup
}
@Override
- public void fail() {
+ public void fail(Exception e) {
for (ITmfEventRequest request : fRequests) {
- request.fail();
+ request.fail(e);
}
- super.fail();
+ super.fail(e);
}
@Override
package org.eclipse.tracecompass.tmf.core.request;
import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.jdt.annotation.Nullable;
import org.eclipse.tracecompass.tmf.core.event.ITmfEvent;
import org.eclipse.tracecompass.tmf.core.filter.ITmfFilter;
import org.eclipse.tracecompass.tmf.core.timestamp.TmfTimeRange;
*/
boolean isCancelled();
+ /**
+ * @return get the cause of failure, or null if not applicable
+ * @since 2.0
+ */
+ @Nullable Throwable getFailureCause();
+
// ------------------------------------------------------------------------
// Data handling
// ------------------------------------------------------------------------
/**
* Put the request in the failed completed state
+ *
+ * @param e
+ * the exception causing the failure, can be null
+ * @since 2.0
*/
- void fail();
+ void fail(Exception e);
/**
* Put the request in the cancelled completed state
import java.util.concurrent.CountDownLatch;
+import org.eclipse.jdt.annotation.Nullable;
import org.eclipse.tracecompass.internal.tmf.core.TmfCoreTracer;
import org.eclipse.tracecompass.tmf.core.event.ITmfEvent;
import org.eclipse.tracecompass.tmf.core.filter.ITmfFilter;
* <p>
* Typical usage:
*
- * <pre><code>
+ * <pre>
+ * <code>
* TmfEventRequest request = new TmfEventRequest(DataType.class, range, startIndex, nbEvents, priority) {
*
* public void handleData(ITmfEvent event) {
* };
*
* eventProvider.sendRequest(request);
- * </code></pre>
+ * </code>
+ * </pre>
*
*
* TODO: Implement request failures (codes, etc...)
private int fDependencyLevel;
+ private @Nullable Throwable fFailureCause;
+
// ------------------------------------------------------------------------
// Constructors
// ------------------------------------------------------------------------
return fDependencyLevel;
}
+ /**
+ * @since 2.0
+ */
+ @Override
+ public @Nullable Throwable getFailureCause() {
+ return fFailureCause;
+ }
+
// ------------------------------------------------------------------------
// Setters
// ------------------------------------------------------------------------
}
}
+ /**
+ * @since 2.0
+ */
@Override
- public void fail() {
+ public void fail(Exception e) {
synchronized (this) {
fRequestFailed = true;
}
+ fFailureCause = e;
done();
}
if (request.isFailed()) {
Status status = new Status(IStatus.ERROR, Activator.PLUGIN_ID,
MessageFormat.format(Messages.ExportToTextJob_Unable_to_export_trace, destination),
- request.getIOException());
+ request.getFailureCause());
return status;
}
return Status.OK_STATUS;
private final Writer fWriter;
private final ITmfFilter fFilter;
private final List<TmfEventTableColumn> fColumns;
- private IOException fIOException;
/**
* Constructor
this.fColumns = columns;
}
- /**
- * Gets the IOException thrown by this export request, if any.
- * @return the fIoException
- */
- public IOException getIOException() {
- return fIOException;
- }
-
@Override
public void handleData(final ITmfEvent event) {
super.handleData(event);
fWriter.write('\n');
}
} catch (IOException ex) {
- fIOException = ex;
- fail();
+ fail(ex);
}
}