org.entityfs
Interface Entity

All Superinterfaces:
Comparable<EntityView>, Deletable, EntityView, Lockable, Named, Observable, ReadLockable, ReadWriteLockable, WriteLockable
All Known Subinterfaces:
Directory, DirectoryImplementation, EFile, EFileImplementation, EntityAcceptingEntity<T>, EntityAcceptingEntityImplementation<T>, EntityImplementation, SymbolicLink, SymbolicLinkImplementation
All Known Implementing Classes:
AbstractEntityAcceptingEntityImpl, AbstractEntityImpl, DirectoryImpl, FileImpl, SymbolicLinkImpl

public interface Entity
extends EntityView

This is the interface for a FileSystem entity, for instance an EFile or a Directory.

Entities are true entities. A file entity is the representation of the file itself, not just the file's location (like a java.io.File object is). For example, if the file f is deleted or moved away and another file f is created in the same place, perhaps with the same contents, the two files are not the same entities and will be represented by two different EFile instances. Each one of the files will also always(*) be represented by the same EFile instance. Compare this behavior with how java.io.File works; java.io.File will not care if there is a new file entity in the location it references, and you can have any number of java.io.File objects referencing the same location.

Because entity objects are true entities, entity equality is the same as identity. Hence entity equality can be checked with the == operator.

The location of an entity within the file system, and its location relative to other entities are represented with EntityLocation:s.

Some entity types, Directory:s notably, support EntityView:s. An entity class extends its corresponding view class, if it has one. ( Directory extends DirectoryView, for instance.) Many EntityFS methods work on the view classes rather than the entity classes.

If the FileSystem is locking, many entity methods require that the caller holds either the entity's read or write lock when calling them. Entity implementations don't enforce any specific locking strategy (see discussion in FileSystem).

A lock that is not properly released can render the entity unusable. Locks should be used in try, finally blocks:
EntityLock rl = myFile.lockForReading();
try
{
  do stuff...
}
finally
{
  rl.unlock()
}

Entity objects are designed to only have the bare minimum of methods to be usable, and the methods are rather low-level. To every entity type there is usually a corresponding utility object with a richer set of methods. Entity methods are complemented by those in Entities.

For an excellent discussion on entities versus value objects, see the book Domain Driven Design by Eric Evans.

* Actually an entity may be represented by more than one entity object, but never simultaneously. Just like any Java object, an entity object may be garbage collected if it is not referenced. Then a new entity object will be created the next time that the entity is requested.

Since:
1.0
Author:
Karl Gustafsson
See Also:
Entities
In_jar:
entityfs-core

Method Summary
 boolean hasExecuteAccess()
          Check if the caller has execute access to this entity.
 boolean hasReadAccess()
          Check if the caller has read access to this entity.
 boolean hasWriteAccess()
          Check if the caller has write access to this entity.
 
Methods inherited from interface org.entityfs.EntityView
canRead, canWrite, copy, copy, copyAttributes, createLock, disconnect, getCapability, getFileSystem, getLastModified, getParent, getType, getViewed, getViewedEntity, isConnected, isRootDirectory, isValid, lock, rename, setLastModified, supportsCapability, touch
 
Methods inherited from interface java.lang.Comparable
compareTo
 
Methods inherited from interface org.entityfs.event.Observable
addObserver, countObservers, deleteObserver, deleteObservers
 
Methods inherited from interface org.entityfs.Named
getName
 
Methods inherited from interface org.entityfs.lock.ReadLockable
getReadLock, isReadLockedByCurrentThread, lockForReading
 
Methods inherited from interface org.entityfs.Deletable
delete, isDeleted
 
Methods inherited from interface org.entityfs.lock.WriteLockable
getWriteLock, isWriteLockedByCurrentThread, lockForWriting
 

Method Detail

hasReadAccess

boolean hasReadAccess()
Check if the caller has read access to this entity.

Returns:
true if the caller has read access, false if not.
See Also:
AccessController

hasWriteAccess

boolean hasWriteAccess()
Check if the caller has write access to this entity.

Returns:
true if the caller has write access, false if not.
See Also:
AccessController

hasExecuteAccess

boolean hasExecuteAccess()
Check if the caller has execute access to this entity.

Returns:
true if the caller has execute access, false if not.
See Also:
AccessController