net.sourceforge.domian.repository
Class HashSetRepository<T extends Entity>

java.lang.Object
  extended by net.sourceforge.domian.repository.AbstractRepository<T>
      extended by net.sourceforge.domian.repository.AbstractDomianCoreRepository<T>
          extended by net.sourceforge.domian.repository.HashSetRepository<T>
All Implemented Interfaces:
Repository<T>, VolatileRepository<T>

public class HashSetRepository<T extends Entity>
extends AbstractDomianCoreRepository<T>
implements VolatileRepository<T>

Volatile repository for non-concurrent environments.

This repository is suitable for standalone single-threaded applications with no need for persistent objects, e.g. testing.

Another usage example is local selection/projection of a set of objects using a specification. To be able to use the specification, just create a HashSetRepository, populate it with the objects to select from using the putAll(Collection) method, and then invoke the findAllEntitiesSpecifiedBy(Specification) method. Indeed, there is a convenience constructor made for this particular use case.

This repository is backed by an unsynchronized HashSet. (Another way of putting it is that this class is just a Repository-wrapped Collection, or a Specification-activated Collection...)

Resource usage 
StoringO(1)
CountingO(N)
FindingO(N)
RemovingO(N)

Since:
0.4
Author:
Eirik Torske

Nested Class Summary
protected static class HashSetRepository.HashSetRepositoryIterator<V extends Entity,T extends Entity>
          Inner iterator class for HashSetRepository.
 
Field Summary
protected  java.util.Set<T> db
           
 
Fields inherited from class net.sourceforge.domian.repository.AbstractDomianCoreRepository
DEFAULT_DOMIAN_ROOT_DIR_NAME, DEFAULT_DOMIAN_ROOT_PATH, log, synchronizer
 
Fields inherited from class net.sourceforge.domian.repository.AbstractRepository
supportsRecursiveIndexing, usesNativePartitioningSupport
 
Constructor Summary
HashSetRepository()
           
HashSetRepository(java.util.Collection<T> initialEntities)
          Convenient constructor for the specifications-based-compact-sorting use case.
 
Method Summary
 java.lang.Long countAllEntities()
          Extra method

Counts all entities in repository rather fast.

<V extends T>
java.util.Collection<V>
findAllEntitiesSpecifiedBy(Specification<V> specification)
          Finds and returns all entities approved by the given specification.
<V extends T>
java.util.Iterator<V>
iterateAllEntitiesSpecifiedBy(Specification<V> specification)
          Finds and returns all entities approved by the given specification.
<V extends T>
void
put(V entity)
          Puts the given entity into this repository.
 void putAll(java.util.Collection<? extends T> collectionOfEntities)
          Puts the given entities into this repository.
<V extends T>
java.lang.Boolean
remove(V entity)
          Removes the given entity from this repository.
 void removeAllEntities()
          Extra method

Purges all entities in repository without no further ado.

<V extends T>
java.lang.Long
removeAllEntitiesSpecifiedBy(Specification<V> specification)
          Removes all entities approved by the given specification.
<V extends T>
void
update(V entity)
          Updates an entity.
 
Methods inherited from class net.sourceforge.domian.repository.AbstractDomianCoreRepository
createUniqueSpecificationFor, getSynchronizer, makePartition, onMakePartition, setSynchronizer
 
Methods inherited from class net.sourceforge.domian.repository.AbstractRepository
contains, count, countAll, countAllEntitiesSpecifiedBy, find, findAll, findSingle, findSingleEntitySpecifiedBy, isIndexingEntitiesRecursively, isPartitioningNatively, iterate, iterateAll, remove, removeAll, update
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface net.sourceforge.domian.repository.Repository
count, countAll, countAllEntitiesSpecifiedBy, find, findAll, findSingle, findSingleEntitySpecifiedBy, isIndexingEntitiesRecursively, isPartitioningNatively, iterate, iterateAll, makePartition, remove, removeAll, update
 

Field Detail

db

protected java.util.Set<T extends Entity> db
Constructor Detail

HashSetRepository

public HashSetRepository()

HashSetRepository

public HashSetRepository(java.util.Collection<T> initialEntities)
Convenient constructor for the specifications-based-compact-sorting use case.

Method Detail

countAllEntities

public java.lang.Long countAllEntities()
Extra method

Counts all entities in repository rather fast.


iterateAllEntitiesSpecifiedBy

public <V extends T> java.util.Iterator<V> iterateAllEntitiesSpecifiedBy(Specification<V> specification)
Description copied from interface: Repository
Finds and returns all entities approved by the given specification. An iterator is returned for lazy retrieval of the entities.

Specified by:
iterateAllEntitiesSpecifiedBy in interface Repository<T extends Entity>
Parameters:
specification - the entity specification
Returns:
an iterator with all entities approved by the specification argument

findAllEntitiesSpecifiedBy

public <V extends T> java.util.Collection<V> findAllEntitiesSpecifiedBy(Specification<V> specification)
Description copied from interface: Repository
Finds and returns all entities approved by the given specification.

Specified by:
findAllEntitiesSpecifiedBy in interface Repository<T extends Entity>
Parameters:
specification - the entity specification
Returns:
a collection of all entities approved by the specification argument, or an empty set if no entities are found and approved

put

public <V extends T> void put(V entity)
Description copied from interface: Repository
Puts the given entity into this repository.

Specified by:
put in interface Repository<T extends Entity>
Parameters:
entity - the entity to be stored

putAll

public void putAll(java.util.Collection<? extends T> collectionOfEntities)
Description copied from interface: Repository
Puts the given entities into this repository.

Specified by:
putAll in interface Repository<T extends Entity>
Overrides:
putAll in class AbstractRepository<T extends Entity>
Parameters:
collectionOfEntities - the entities to be stored

update

public <V extends T> void update(V entity)
Description copied from interface: Repository
Updates an entity. When an entity is (re)-retrieved, all state changes will be visible, no matter what kinds of repository implementations being involved. Do notice that for all memory-based repositories (and possibly some delegated ones), entity updates are of course immediately visible.

(Only applicable for persistent repositories doing explicit data writes, like PersistenceDefinition.FILE, and possibly PersistenceDefinition.DELEGATED... For all other persistence definitions, this method is redundant/not applicable. Anyway, by applying this method in a consistent manner, an eventual repository migration will not need any code changes.

Specified by:
update in interface Repository<T extends Entity>

removeAllEntitiesSpecifiedBy

public <V extends T> java.lang.Long removeAllEntitiesSpecifiedBy(Specification<V> specification)
Description copied from interface: Repository
Removes all entities approved by the given specification.

Specified by:
removeAllEntitiesSpecifiedBy in interface Repository<T extends Entity>
Parameters:
specification - the entity specification
Returns:
the number of removed entities

removeAllEntities

public void removeAllEntities()
Extra method

Purges all entities in repository without no further ado.


remove

public <V extends T> java.lang.Boolean remove(V entity)
Description copied from interface: Repository
Removes the given entity from this repository.

Specified by:
remove in interface Repository<T extends Entity>
Parameters:
entity - the entity to be removed
Returns:
true if the entity is found and removed, otherwise false


Copyright © 2006-2010. All Rights Reserved.