mirror of https://github.com/sipwise/jitsi.git
parent
2a0c92a40a
commit
d95e70727d
@ -0,0 +1,105 @@
|
||||
package net.java.sip.communicator.impl.protocol.irc;
|
||||
|
||||
/**
|
||||
* Small container class that can contain a result and/or an exception.
|
||||
*
|
||||
* The container can be used for synchronizing between threads and
|
||||
* simultaneously provide a container for storing a result and/or an exception
|
||||
* that occurred within the separate thread that should be passed on to the
|
||||
* calling thread.
|
||||
*
|
||||
* @author Danny van Heumen
|
||||
*
|
||||
* @param <T> type of the value
|
||||
* @param <E> type of the exception
|
||||
*/
|
||||
public class Result<T, E extends Exception>
|
||||
{
|
||||
/**
|
||||
* Boolean flag done.
|
||||
*/
|
||||
private boolean done = false;
|
||||
|
||||
/**
|
||||
* The result.
|
||||
*/
|
||||
private T value = null;
|
||||
|
||||
/**
|
||||
* The (possible) exception
|
||||
*/
|
||||
private E exception = null;
|
||||
|
||||
/**
|
||||
* Check whether it is actually done.
|
||||
*
|
||||
* @return return true when done or false otherwise
|
||||
*/
|
||||
public boolean isDone()
|
||||
{
|
||||
return this.done;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set done without setting anything else.
|
||||
*/
|
||||
public void setDone()
|
||||
{
|
||||
this.done = true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set done and provide a result.
|
||||
*
|
||||
* @param value the result
|
||||
*/
|
||||
public void setDone(T value)
|
||||
{
|
||||
this.value = value;
|
||||
this.setDone();
|
||||
}
|
||||
|
||||
/**
|
||||
* Set done and provide an exception.
|
||||
*
|
||||
* @param exception the exception
|
||||
*/
|
||||
public void setDone(E exception)
|
||||
{
|
||||
this.exception = exception;
|
||||
this.setDone();
|
||||
}
|
||||
|
||||
/**
|
||||
* Set done and set both result and exception.
|
||||
*
|
||||
* @param value the value
|
||||
* @param exception the exception
|
||||
*/
|
||||
public void setDone(T value, E exception)
|
||||
{
|
||||
this.value = value;
|
||||
this.exception = exception;
|
||||
this.setDone();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the value.
|
||||
*
|
||||
* @return return the value
|
||||
*/
|
||||
public T getValue()
|
||||
{
|
||||
return this.value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the exception.
|
||||
*
|
||||
* @return return the exception
|
||||
*/
|
||||
public E getException()
|
||||
{
|
||||
return this.exception;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,56 @@
|
||||
package net.java.sip.communicator.impl.protocol.irc;
|
||||
|
||||
import junit.framework.*;
|
||||
|
||||
public class ResultTest
|
||||
extends TestCase
|
||||
{
|
||||
public void testConstruction()
|
||||
{
|
||||
Result<Object, Exception> result = new Result<Object, Exception>();
|
||||
Assert.assertNotNull(result);
|
||||
Assert.assertFalse(result.isDone());
|
||||
Assert.assertNull(result.getValue());
|
||||
Assert.assertNull(result.getException());
|
||||
}
|
||||
|
||||
public void testSetDone()
|
||||
{
|
||||
Result<Object, Exception> result = new Result<Object, Exception>();
|
||||
result.setDone();
|
||||
Assert.assertTrue(result.isDone());
|
||||
Assert.assertNull(result.getValue());
|
||||
Assert.assertNull(result.getException());
|
||||
}
|
||||
|
||||
public void testSetDoneWithValue()
|
||||
{
|
||||
Object v = new Object();
|
||||
Result<Object, Exception> result = new Result<Object, Exception>();
|
||||
result.setDone(v);
|
||||
Assert.assertTrue(result.isDone());
|
||||
Assert.assertSame(v, result.getValue());
|
||||
Assert.assertNull(result.getException());
|
||||
}
|
||||
|
||||
public void testSetDoneWithException()
|
||||
{
|
||||
Exception e = new IllegalStateException("the world is going to explode");
|
||||
Result<Object, Exception> result = new Result<Object, Exception>();
|
||||
result.setDone(e);
|
||||
Assert.assertTrue(result.isDone());
|
||||
Assert.assertNull(result.getValue());
|
||||
Assert.assertSame(e, result.getException());
|
||||
}
|
||||
|
||||
public void testSetDoneWithBoth()
|
||||
{
|
||||
Object v = new Object();
|
||||
Exception e = new IllegalStateException("the world is going to explode");
|
||||
Result<Object, Exception> result = new Result<Object, Exception>();
|
||||
result.setDone(v, e);
|
||||
Assert.assertTrue(result.isDone());
|
||||
Assert.assertSame(v, result.getValue());
|
||||
Assert.assertSame(e, result.getException());
|
||||
}
|
||||
}
|
||||
Loading…
Reference in new issue