/**
*
*/
package org.openrosa.client.jr.core.reference;
import java.io.IOException;
/**
* A Reference is essentially a pointer to interact in a limited
* fashion with an external resource of some kind (images, xforms,
* etc).
*
* References are retrieved from the ReferenceManager, which is
* responsible for turning different URI's (either normal http://,
* etc URI's or JavaRosa jr:// URI's) into a reference to an actual
* resource.
*
* @author ctsims
*
*/
public interface Reference {
/**
* @return True if the binary does (or might) exist at
* the remote location. False if the binary definitely
* does not exist.
* @throws IOException If there is a problem identifying
* the status of the resource
*/
public boolean doesBinaryExist() throws IOException;
/**
* @return A Stream of data which is the binary resource's
* definition.
*
* @throws IOException If there is a problem reading the
* stream.
*/
//public InputStream getStream() throws IOException;
/**
* @return A URI which will evaluate to this same reference
* in the future.
*/
public String getURI();
/**
* @return A URI which may or may not exist in the local context
* which will resolves to this reference. This method should be
* used with caution: There is no guarantee that a local URI
* can be constructed or used in a general way.
*/
public String getLocalURI();
/**
* @return True if the remote data is only available to
* be read from (using getStream), False if the remote
* data can also be modified or written to.
*/
public boolean isReadOnly();
//Should possibly throw another type of exception here
//for invalid reference operation (Read only)
/**
* @return A stream which can be written to at the
* reference location to define the binary content there.
*
* @throws IOException If there is a problem writing or the
* reference is read only
*/
//public OutputStream getOutputStream() throws IOException;
/**
* Removes the binary data located by this reference.
* @throws IOException If there is a problem deleting or the
* reference is read only
*/
public void remove() throws IOException;
}