|
|||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||
java.lang.Objectorg.entityfs.cap.metadata.impl.AbstractECMetadata
org.entityfs.cap.metadata.impl.ECMetadataImpl
public class ECMetadataImpl
| Field Summary |
|---|
| Fields inherited from interface org.entityfs.cap.metadata.entity.ECMetadata |
|---|
METADATA_FILE_NAME |
| Constructor Summary | |
|---|---|
ECMetadataImpl(EntityImplementation parent,
MetadataEnablingEntityDelegate delegate)
|
|
| Method Summary | |
|---|---|
long |
copy(OutputStream os)
Dump the file contents to the stream. |
long |
copy(WritableByteChannel c)
Copy the file's contents to the WritableByteChannel. |
void |
delete()
Delete the entity from the file system. |
long |
getDataSize()
Get the size of the data in the file. |
EntityLock |
getReadLock()
Get the read lock without locking it. |
long |
getSize()
Get the size of the file (in bytes). |
long |
getSizeNoLocking()
Get an approximate size of the file without having to lock it. |
EntityLock |
getWriteLock()
Get the write lock without locking it. |
boolean |
isDeleted()
Check if the entity has been deleted. |
boolean |
isReadLockedByCurrentThread()
Does the calling thread hold a read lock for this object? A write lock also qualifies as a read lock. |
boolean |
isWriteLockedByCurrentThread()
Does the calling thread hold a write lock for the lockable object (this)? |
EntityLock |
lockForReading()
Lock object for reading and return the lock. |
EntityLock |
lockForWriting()
Lock the object for writing and return the lock. |
WritableByteChannel |
openChannelForAppend()
Open a WritableByteChannel for appending to the file. |
ReadableByteChannel |
openChannelForRead()
Open a ReadableByteChannel for reading from the file. |
WritableByteChannel |
openChannelForWrite()
Open a WritableByteChannel for writing on the file. |
OutputStream |
openForAppend()
Open the file for appending. |
RandomAccess |
openForRandomAccess(RandomAccessMode m)
Open the file for random access in the specified mode. |
InputStream |
openForRead()
Opens the file for reading. |
OutputStream |
openForWrite()
Opens the file for writing. |
void |
replaceContents(ReadWritableFile f)
Replace the contents of this file with the contents of the supplied file and then delete the supplied file. |
| Methods inherited from class org.entityfs.cap.metadata.impl.AbstractECMetadata |
|---|
getEntity, getParentEntity, isValid, prepareForRead, prepareForWrite |
| Methods inherited from class java.lang.Object |
|---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| Methods inherited from interface org.entityfs.cap.EntityCapability |
|---|
getEntity, isValid |
| Constructor Detail |
|---|
public ECMetadataImpl(EntityImplementation parent,
MetadataEnablingEntityDelegate delegate)
| Method Detail |
|---|
public boolean isReadLockedByCurrentThread()
ReadLockable
isReadLockedByCurrentThread in interface ReadLockabletrue if the lockable object is read or write locked by
the current thread.public boolean isWriteLockedByCurrentThread()
WriteLockable
isWriteLockedByCurrentThread in interface WriteLockabletrue if the lockable object is write locked by the
current thread.public EntityLock lockForReading()
ReadLockableEntityLockAdapterFactory and
LockAcquiringStrategy used. If this is called on an object that
somehow is connected to an entity object, that entity's file system's
entity lock adapter factory and lock acquiring strategy is used.
A read lock cannot be upgraded to a write lock (just like how Java's
ReadWriteLock works).
For more discussions on locks and locking, see Entity and
FileSystem.
This method always returns a lock, even if the object's file system is not locking or if the object is read only.
lockForReading in interface ReadLockablepublic EntityLock lockForWriting()
WriteLockableEntityLockAdapterFactory and
LockAcquiringStrategy used. If this is called on an object that
is somehow connected to an Entity object, that entity's file
systems' lock adapter factory and lock acquiring strategy is used. A
write lock can be downgraded to a read lock (by calling
ReadLockable.lockForReading() and then releasing the write lock).
An entity in a locking read only file system may still be locked for writing.
For more discussions on locks and locking, see Entity and
FileSystem.
This method always returns a lock, even if the file system is not locking.
lockForWriting in interface WriteLockablepublic EntityLock getReadLock()
ReadLockableThis method always returns a lock, even if the object's file system is not locking or if the object is read only.
getReadLock in interface ReadLockablepublic EntityLock getWriteLock()
WriteLockableThis method always returns a lock, even if the object's file system is not locking or if the object is read only.
getWriteLock in interface WriteLockablepublic WritableByteChannel openChannelForWrite()
WritableFileWritableByteChannel for writing on the file. The semantics
of this method is the same as for WritableFile.openForWrite().
openChannelForWrite in interface WritableFileWritableByteChannel. The channel must be closed
by the caller. The returned channel may be a
GatheringByteChannel, but that is not required.WritableFile.openForWrite(),
WritableFile.openChannelForAppend()public WritableByteChannel openChannelForAppend()
WritableFileWritableByteChannel for appending to the file. The
semantics of this method is the same as for WritableFile.openForAppend().
openChannelForAppend in interface WritableFileWritableByteChannel. The channel must be closed
by the caller. The returned channel may be a
GatheringByteChannel, but that is not required.public OutputStream openForWrite()
WritableFileWritableFile.openForAppend() to append to the file.
The caller is responsible for closing the stream.
When two output streams, one writing and one appending are open on the same file, the stream opened for write will ignore the contents written by the other stream and the content written by the other stream will be overwritten. When two or more appending streams are opened on a file, a stream will not overwrite the content written by the other streams.
Although a write lock on the file is required for the execution thread
opening the stream, the stream itself is not protected from access by
other threads. It can be protected by wrapping it in a
LockAwareOutputStream.
openForWrite in interface WritableFileOutputStream to write to. The stream must be closed by
the caller.WritableFile.openForAppend(),
WritableFile.openChannelForWrite()public OutputStream openForAppend()
WritableFileWritableFile.openForWrite() to delete the previous contents before
writing. This requires that the file supports the
FCAppendable capability (and/or that the
file system supports the FSCAppendableFiles
capability.
The caller is responsible for closing the stream.
When two appending output streams are open on the same file, one stream will not overwrite contents written by the other stream. Compare this with the behavior of one writing and one appending stream.
Although a write lock on the file is required for the execution thread
opening the stream, the stream itself is not protected from access by
other threads. It can be protected by wrapping it in a
LockAwareWritableByteChannel.
openForAppend in interface WritableFileOutputStream to write to. The stream must be closed by
the caller.WritableFile.openForWrite(),
WritableFile.openChannelForAppend()public ReadableByteChannel openChannelForRead()
ReadableFileReadableByteChannel for reading from the file. The
semantics of this method is the same as for ReadableFile.openForRead().
Although a read lock on the file is required for the execution thread
opening the channel, the channel itself is not protected from access by
other threads. It can be protected by wrapping it in a
LockAwareReadableByteChannel.
openChannelForRead in interface ReadableFileReadableByteChannel. The channel must be closed
by the caller. The channel may be a
ScatteringByteChannel, but that is not
required.ReadableFile.openForRead()public InputStream openForRead()
ReadableFile
Although a read lock on the file is required for the execution thread
opening the stream, the stream itself is not protected from access by
other threads. It can be protected by wrapping it in a
LockAwareInputStream.
openForRead in interface ReadableFileInputStream on the file. The stream must be closed by
the caller.public RandomAccess openForRandomAccess(RandomAccessMode m)
RandomlyAccessibleFile
Although a read or write lock on the file is required for the execution
thread opening the RandomAccess, the RandomAccess object
itself is not protected from access by other threads. It can be protected
by wrapping it in a LockAwareRandomAccess
object.
openForRandomAccess in interface RandomlyAccessibleFilem - The mode to open the file in.
RandomAccess object. It must be closed by the
caller.public void delete()
DeletableEntityView.isValid() will return false from now on).
delete in interface Deletablepublic boolean isDeleted()
DeletableEntityView.isValid()
, this method does not do any backend validation, so if the entity has
been deleted in the backend storage without going through the EntityFS
API, use that method instead.
isDeleted in interface Deletabletrue if the entity object has been deleted.public long getDataSize()
ReadableFileReadableFile.getSize().
Warning: Calculating the data size of a file has the potential of being really slow, depending on the implementation used. The entire file may have to be read through in order to calculate the size of its data.
Implementation note: If the size of the backing file is not known,
the
StreamUtil.getSizeOfDataInStream(InputStream, int)
method can be used to calculate it.
getDataSize in interface ReadableFileReadableFile.getSize()public long getSize()
ReadableFileNote: Most, but not all, implementations know their sizes. If an implementation does not know its size beforehand, this method will be slow since it has to calculate the file size when it is called.
Implementation note: If the size of the backing file is not known,
the
StreamUtil.getSizeOfDataInStream(InputStream, int)
method can be used to calculate it.
getSize in interface ReadableFileReadableFile.getDataSize()public long getSizeNoLocking()
ReadWritableFile
getSizeNoLocking in interface ReadWritableFile0 is returned.ReadableFile.getSize()public void replaceContents(ReadWritableFile f)
ReadWritableFilef over to this file, which makes the entire operation quick and not
requiring any extra disk space.
If both files support metadata, this file's metadata is replaced with
that of f.
replaceContents in interface ReadWritableFilef - The file whose contents are to be moved to this file. f
is deleted by this method.public long copy(OutputStream os)
ReadWritableFile
copy in interface ReadWritableFileos - The stream the file contents are written to. The stream is not
closed after writing, that must be done by the caller.
public long copy(WritableByteChannel c)
ReadWritableFileWritableByteChannel.
copy in interface ReadWritableFilec - The WritableByteChannel. The channel is not closed by
this method.
|
|||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||