public abstract class StorageObject extends ExternalObject
// Upload example
StorageObject lenna =
directlyConnectedDevice.createStorageObject("lenna.jpg", "image/jpeg");
lenna.setInputPath("../images/lenna.jpg");
// onSync is called when the content referenced by the storageObject
// is in sync with the storage cloud, or the sync has failed.
lenna.setOnSync(event -> {
StorageObject storageObject = event.getSource();
if (storageObject.getSyncStatus() == SyncStatus.IN_SYNC) {
// image was uploaded and can be deleted
} else if (storageObject.getSyncStatus() == SyncStatus.SYNC_FAILED) {
// image was not uploaded, take action!
}
});
virtualDevice.set("image", lenna);
// Download example
// onChange is called when the attribute value changes.
virtualDevice.setOnChange("image", event -> {
VirtualDevice.NamedValue namedValue = event.getNamedValue();
StorageObject storageObject = (StorageObject)namedValue.getValue();
if (storageObject.getContentLength() < availableDiskSpace) {
// syncTo will kick off the async download of the content
storageObject.setOnSync(event -> {
StorageObject storageObject = event.getSource();
if (storageObject.getSyncStatus() == SyncStatus.IN_SYNC) {
// image was downloaded and can now be used
} else if (storageObject.getSyncStatus() == SyncStatus.SYNC_FAILED) {
// image was not downloaded, take action!
}
}
storageObject.setOutputPath("../downloads"+storageObject.getName());
storageObject.sync();
}
});
Modifier and Type | Class and Description |
---|---|
static interface |
StorageObject.SyncCallback<V extends AbstractVirtualDevice>
A syncCallback interface for receiving an event when content referred to by
an attribute value has been successfully synchronized, or has failed
to be synchronized.
|
static interface |
StorageObject.SyncEvent<V extends AbstractVirtualDevice>
An event passed to the
SyncCallback
when content referred to by an attribute value has been successfully
synchronized, or has failed to be synchronized. |
static class |
StorageObject.SyncStatus
The status of whether or not the content is in sync with the storage cloud.
|
Modifier and Type | Method and Description |
---|---|
java.util.Map<java.lang.String,java.lang.String> |
getCustomMetadata()
This method return unmodifiable copy of metadata.
|
java.lang.String |
getDate()
Get the date and time the content was created or last modified in cloud
storage.
|
java.lang.String |
getEncoding()
Get the compression scheme of the content.
|
java.lang.String |
getInputPath()
Get the input path.
|
long |
getLength()
Get the length of the content in bytes.
|
java.lang.String |
getName()
Get the the name of this object in the storage cloud.
|
java.lang.String |
getOutputPath()
Get the output path.
|
StorageObject.SyncStatus |
getSyncStatus()
Get the status of whether or not the content is in sync with the storage cloud.
|
java.lang.String |
getType()
Get the mime-type of the content.
|
void |
setCustomMetadata(java.lang.String key,
java.lang.String value)
Sets the metadata for the StorageObject.
|
void |
setInputPath(java.lang.String inputPath)
Set the input path for uploading content to the storage cloud.
|
<V extends AbstractVirtualDevice> |
setOnSync(StorageObject.SyncCallback<V> callback)
Set a
StorageObject.SyncCallback that is invoked when the content
referred to by this StorageObject is synchronized. |
void |
setOutputPath(java.lang.String outputPath)
Set the output path for downloading content from the storage cloud.
|
abstract void |
sync()
Notify the library to sync content with the storage cloud.
|
java.lang.String |
toString() |
getURI
public java.lang.String getName()
public java.lang.String getType()
public java.lang.String getEncoding()
null
if the content is not compressedpublic long getLength()
-1
if unknownpublic java.lang.String getDate()
null
if the content has not been uploaded.
The date and time stamp format is ISO 8601.null
if the
content has not been uploaded.public StorageObject.SyncStatus getSyncStatus()
public java.lang.String getInputPath()
null
if not setpublic void setInputPath(java.lang.String inputPath) throws java.io.FileNotFoundException
inputPath
parameter is not null, the output path will be set to null.
If the inputPath
parameter is not null and does not equal the current input path,
the sync status will be reset to StorageObject.SyncStatus.NOT_IN_SYNC
.
This method will throw an IllegalStateException
if
sync status
is StorageObject.SyncStatus.SYNC_PENDING
,inputPath
- the path from which to read the content for uploadjava.io.FileNotFoundException
- if the input path cannot be readjava.lang.IllegalStateException
- if called when sync status is SYNC_PENDING
public java.lang.String getOutputPath()
null
if not setpublic void setOutputPath(java.lang.String outputPath) throws java.io.FileNotFoundException
outputPath
parameter is not null, the input path will be set to null.
If the outputPath
parameter is not null and does not equal the current output path,
the sync status will be reset to StorageObject.SyncStatus.NOT_IN_SYNC
.
This method will throw an IllegalStateException
if the
sync status
is StorageObject.SyncStatus.SYNC_PENDING
,outputPath
- the path to which the content will be downloaded. If the path does not
already exist, it will be created.java.io.FileNotFoundException
- if the output path cannot be writtenjava.lang.IllegalStateException
- if called when sync status is SYNC_PENDING
public void setCustomMetadata(java.lang.String key, java.lang.String value)
key
- The metadata keyvalue
- The metadata valuejava.lang.IllegalArgumentException
- if either the key or value is empty or null
public java.util.Map<java.lang.String,java.lang.String> getCustomMetadata()
public abstract void sync()
input path
or the
output path
has been set.
This method does not start any uploads or downloads if sync status
is other than StorageObject.SyncStatus.NOT_IN_SYNC
.
This is a non-blocking call. The sync is performed on a separate thread.
The status of the sync can be monitored by setting a StorageObject.SyncCallback
on this StorageObject
.
If the input path cannot be read, or the output path cannot be
written, an IOException
is thrown. Any I/O exceptions
during the background sync are reported through the
error syncCallback
of the virtual device.
java.lang.IllegalStateException
- if both input path and output path are null
public <V extends AbstractVirtualDevice> void setOnSync(StorageObject.SyncCallback<V> callback)
StorageObject.SyncCallback
that is invoked when the content
referred to by this StorageObject
is synchronized.V
- type of AbstractVirtualDevice
value, if null
, the existing syncCallback will be removedcallback
- a callback to invoke when there is an error setting apublic java.lang.String toString()
toString
in class java.lang.Object