|
|||||||||
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 ReadLockable
true
if the lockable object is read or write locked by
the current thread.public boolean isWriteLockedByCurrentThread()
WriteLockable
isWriteLockedByCurrentThread
in interface WriteLockable
true
if the lockable object is write locked by the
current thread.public EntityLock lockForReading()
ReadLockable
EntityLockAdapterFactory
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 ReadLockable
public EntityLock lockForWriting()
WriteLockable
EntityLockAdapterFactory
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 WriteLockable
public EntityLock getReadLock()
ReadLockable
This 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 ReadLockable
public EntityLock getWriteLock()
WriteLockable
This 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 WriteLockable
public WritableByteChannel openChannelForWrite()
WritableFile
WritableByteChannel
for writing on the file. The semantics
of this method is the same as for WritableFile.openForWrite()
.
openChannelForWrite
in interface WritableFile
WritableByteChannel
. 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()
WritableFile
WritableByteChannel
for appending to the file. The
semantics of this method is the same as for WritableFile.openForAppend()
.
openChannelForAppend
in interface WritableFile
WritableByteChannel
. The channel must be closed
by the caller. The returned channel may be a
GatheringByteChannel
, but that is not required.public OutputStream openForWrite()
WritableFile
WritableFile.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 WritableFile
OutputStream
to write to. The stream must be closed by
the caller.WritableFile.openForAppend()
,
WritableFile.openChannelForWrite()
public OutputStream openForAppend()
WritableFile
WritableFile.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 WritableFile
OutputStream
to write to. The stream must be closed by
the caller.WritableFile.openForWrite()
,
WritableFile.openChannelForAppend()
public ReadableByteChannel openChannelForRead()
ReadableFile
ReadableByteChannel
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 ReadableFile
ReadableByteChannel
. 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 ReadableFile
InputStream
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 RandomlyAccessibleFile
m
- The mode to open the file in.
RandomAccess
object. It must be closed by the
caller.public void delete()
Deletable
EntityView.isValid()
will return false
from now on).
delete
in interface Deletable
public boolean isDeleted()
Deletable
EntityView.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 Deletable
true
if the entity object has been deleted.public long getDataSize()
ReadableFile
ReadableFile.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 ReadableFile
ReadableFile.getSize()
public long getSize()
ReadableFile
Note: 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 ReadableFile
ReadableFile.getDataSize()
public long getSizeNoLocking()
ReadWritableFile
getSizeNoLocking
in interface ReadWritableFile
0
is returned.ReadableFile.getSize()
public void replaceContents(ReadWritableFile f)
ReadWritableFile
f
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 ReadWritableFile
f
- 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 ReadWritableFile
os
- 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)
ReadWritableFile
WritableByteChannel
.
copy
in interface ReadWritableFile
c
- 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 |