pl.edu.agh.cast.data.model
Class AbstractDataSet<T extends IElement>

java.lang.Object
  extended by pl.edu.agh.cast.data.model.property.PropertyContainer
      extended by pl.edu.agh.cast.data.model.AbstractDataSet<T>
Type Parameters:
T - type of elements contained in the data set XXX: [kpietak] consider if AbstractDataSet (IDataSet) could implement PropertyChangeProvider
All Implemented Interfaces:
Serializable, Observer, IDisposable, IValidatable, IDataSet<T>, Identifiable, IPropertyContainer
Direct Known Subclasses:
DomainDataSet, PresentationDataSet, VisualDataSet

public abstract class AbstractDataSet<T extends IElement>
extends PropertyContainer
implements IDataSet<T>

Abstract implementation of IDataSet.

Author:
AGH CAST Team
See Also:
Serialized Form

Nested Class Summary
 
Nested classes/interfaces inherited from interface pl.edu.agh.cast.data.model.IDataSet
IDataSet.Properties
 
Field Summary
 
Fields inherited from interface pl.edu.agh.cast.data.model.IDataSet
ACCEPTED_TYPES, TYPE
 
Constructor Summary
protected AbstractDataSet(DataSetDescriptor descriptor)
          Initializes data set with its descriptor and a newly created MetaPropertyManager.
protected AbstractDataSet(DataSetDescriptor descriptor, MetaPropertyManager metaPropertyManager)
          Initializes data set with its descriptor and MetaPropertyManager.
protected AbstractDataSet(DataSetDescriptor descriptor, MetaPropertyManager metaPropertyManager, Map<Type,MetaPropertyManager> elementMPMs)
          Initializes data set with its descriptor and MetaPropertyManager.
 
Method Summary
protected  DataSetDescriptor acquireDescriptor()
          Returns the non-null descriptor of this data set.
 void addElement(T element)
          Adds an element to this data set.
 void addElements(Collection<? extends T> elements)
          Adds a collection of elements to this data set.
 void addElements(T... elements)
          Adds multiple elements to this data set.
 void addMetaPropertyManager(Type elementType)
          Adds a meta-property manager of elements of given type based on type class annotations.
 void addMetaPropertyManager(Type elementType, MetaPropertyManager metaPropertyManager)
          Adds a meta-property manager of elements of given type.
 void addMetaPropertyManagersForAcceptedTypes()
          Adds meta-property managers for all types accepted by the data set by default.
protected  void afterAddElement(T element)
          This method is called after successfully adding the given element to the data set.
protected  void afterRemoveElement(T element)
          This method is called after successfully removing the given element from the data set.
protected  void afterSetMetaPropertyManager()
          Adds all PermanentProperty'ies and TransientProperty'ies defined this container's meta-property manager.
protected  void beforeAddElement(T element)
          This method is called before adding the given element to the data set.
protected  void beforeRemoveElement(T element)
          This method is called before attempting to remove the given element from the data set.
protected  boolean checkIfValid()
          Checks if the data set is valid.
protected  DataSetDescriptor createNewDescriptor()
          Returns new, uninitialized instance of descriptor.
 boolean equals(Object other)
          Compares two elements.
 Collection<Type> getAcceptedTypes()
          Returns collection of types of IElements this data set is able to accept.
 Collection<? extends T> getAssignableElements(Type elementType)
          Returns elements from this data set of given type (or it's sub-type).
 Date getCreationDate()
          Returns the data set creation date.
 DataSetDescriptor getDescriptor()
          Returns the descriptor of this data set.
protected  String getDescString()
          Returns a string with short description of element.
 T getElement(UUID elementId)
          Returns element from this data set with given ID.
 int getElementCount()
          Returns the number of elements in this data set.
 Collection<? extends T> getElements()
          Returns all elements from this data set.
 Collection<? extends T> getElements(Type elementType)
          Returns elements from this data set of the same type as given one.
 Collection<Type> getElementTypes()
          Returns collection of types of IElements this data set contains.
 UUID getId()
          Returns object's globally unique ID.
 MetaPropertyManager getMetaPropertyManager(Type elementType)
          Returns meta-property manager of elements of given type.
 Collection<MetaPropertyManager> getMetaPropertyManagers()
          Returns meta-property managers for all types of elements.
 String getName()
          Returns the name of the data set.
 Collection<Type> getRegisteredTypes()
          Returns collection of types of IElements this data set is ready to accept, i.e.
 Type getType()
          Returns object's type.
 int hashCode()
          
protected  boolean isDescriptorValid(DataSetDescriptor descriptor)
          Checks if the descriptor is valid for the data set.
protected  boolean isElementValid(T element)
          Checks if given element is valid for the data set.
 boolean isValid()
          Checks if the state of implementing object is valid.
<E extends T>
E
removeElement(E element)
          Removes the given element from this data set.
 T removeElement(UUID elementId)
          Removes IElement from this data set with given ID.
<E extends T>
Collection<E>
removeElements(Collection<E> elements)
          Removes multiple elements from this data set.
<E extends T>
Collection<E>
removeElements(E... elements)
          Removes multiple elements from this data set.
 void setCreationDate(Date creationDate)
          Sets the data set creation date.
 void setDescriptor(DataSetDescriptor descriptor)
          Sets the data set descriptor.
 void setElements(Collection<? extends T> elemnts)
          Sets elements from this data set.
 void setId(UUID id)
          Sets the id of a data set.
 void setName(String name)
          Sets the name of the data set.
 void setType(Type type)
          Sets the type of a data set.
 String toString()
          
 
Methods inherited from class pl.edu.agh.cast.data.model.property.PropertyContainer
addProperty, createProperty, dispose, getCustomProperties, getMetaPropertyManager, getPermanentProperties, getProperties, getProperty, getTransientProperties, initializeProperties, matches, removeProperty, setMetaPropertyManager, setProperty, update
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface pl.edu.agh.cast.data.model.property.IPropertyContainer
addProperty, getCustomProperties, getMetaPropertyManager, getPermanentProperties, getProperties, getProperty, getTransientProperties, matches, removeProperty, setProperty
 
Methods inherited from interface java.util.Observer
update
 
Methods inherited from interface pl.edu.agh.cast.common.IDisposable
dispose
 

Constructor Detail

AbstractDataSet

protected AbstractDataSet(DataSetDescriptor descriptor)
Initializes data set with its descriptor and a newly created MetaPropertyManager. If the descriptor does not specify the data set type, then the MPM has to be set manually - until then (and as long as the descriptor is invalid) the data set is invalid.

Parameters:
descriptor - the data set descriptor
Throws:
IllegalArgumentException - if type is null

AbstractDataSet

protected AbstractDataSet(DataSetDescriptor descriptor,
                          MetaPropertyManager metaPropertyManager)
Initializes data set with its descriptor and MetaPropertyManager. It also sets up default MetaPropertyManagers for all types accepted by the concrete data set.

This constructor uses addMetaPropertyManager(Type) method to add MetaPropertyManagers for all types returned by getAcceptedTypes(), thus may throw any of the exceptions that method may throw.

Parameters:
descriptor - the data set descriptor
metaPropertyManager - manager of data set's meta properties
Throws:
IllegalArgumentException - if any of the arguments is null
ModelException - if the given descriptor is not valid (see DataSetDescriptor.isValid())
See Also:
IDataSet.getAcceptedTypes()

AbstractDataSet

protected AbstractDataSet(DataSetDescriptor descriptor,
                          MetaPropertyManager metaPropertyManager,
                          Map<Type,MetaPropertyManager> elementMPMs)
Initializes data set with its descriptor and MetaPropertyManager. It also accepts a map of element MetaPropertyManagers.

This constructor uses addMetaPropertyManager(Type, MetaPropertyManager) method to add all MetaPropertyManagers from the elementMPMs map, thus may throw any of the exceptions that method may throw.

Parameters:
descriptor - the data set descriptor
metaPropertyManager - manager of data set's meta properties
elementMPMs - a map of element MetaPropertyManagers indexed with Types
Throws:
IllegalArgumentException - if any of the arguments (except elementMPMs) is null
Method Detail

isValid

public final boolean isValid()
Checks if the state of implementing object is valid.

Specified by:
isValid in interface IValidatable
Overrides:
isValid in class PropertyContainer
Returns:
true if object's state is valid, false otherwise
See Also:
PropertyContainer.isValid()

checkIfValid

protected boolean checkIfValid()
Checks if the data set is valid.

This method is called by the isValid() method. By default it always returns true, however it can be overridden in order to define new validation rules. In such case the implementation from base class should be called inside the overridden method in order to preserve data consistency.

Returns:
true if the data set is valid, false otherwise

isDescriptorValid

protected boolean isDescriptorValid(DataSetDescriptor descriptor)
Checks if the descriptor is valid for the data set.

This method is called by the setDescriptor(DataSetDescriptor) method. By default it always returns true, however it can be overridden in order to define new descriptor validation rules. In such case the implementation from base class should be called inside the overridden method in order to preserve data consistency.

Parameters:
descriptor - the descriptor to validate
Returns:
true if given descriptor is valid, false otherwise

isElementValid

protected boolean isElementValid(T element)
                          throws ModelException
Checks if given element is valid for the data set.

This method is called by the addElement(IElement) method. By default it always returns true , however it can be overridden in order to define new validation rules. In such case the implementation from base class should be called inside the overridden method in order to preserve data consistency.

Parameters:
element - the element to validate
Returns:
true if the element is valid, false otherwise
Throws:
ModelException - if there is a severe validity violation

getElementCount

public int getElementCount()
Returns the number of elements in this data set.

Specified by:
getElementCount in interface IDataSet<T extends IElement>
Returns:
the number of elements
See Also:
IDataSet.getElementCount()

getElement

public final T getElement(UUID elementId)
Returns element from this data set with given ID.

Specified by:
getElement in interface IDataSet<T extends IElement>
Parameters:
elementId - ID of element to find
Returns:
element with given ID if present in this data set, null otherwise
See Also:
IDataSet.getElement(java.util.UUID)

getElements

public final Collection<? extends T> getElements()
Returns all elements from this data set.

Specified by:
getElements in interface IDataSet<T extends IElement>
Returns:
all elements from this data set
See Also:
IDataSet.getElements()

getAssignableElements

public final Collection<? extends T> getAssignableElements(Type elementType)
Returns elements from this data set of given type (or it's sub-type).

Specified by:
getAssignableElements in interface IDataSet<T extends IElement>
Parameters:
elementType - type of elements to return
Returns:
elements of given type from this data set
See Also:
pl.edu.agh.cast.data.model.IDataSet#getAssignableElements(java.lang.String)

getElements

public final Collection<? extends T> getElements(Type elementType)
Returns elements from this data set of the same type as given one.

Specified by:
getElements in interface IDataSet<T extends IElement>
Parameters:
elementType - type of elements to return
Returns:
elements of given type from this data set
See Also:
pl.edu.agh.cast.data.model.IDataSet#getElements(java.lang.String)

getElementTypes

public final Collection<Type> getElementTypes()
Returns collection of types of IElements this data set contains.

Specified by:
getElementTypes in interface IDataSet<T extends IElement>
Returns:
collection of data set elements' types
See Also:
IDataSet.getElementTypes()

addElement

public final void addElement(T element)
Adds an element to this data set.

Specified by:
addElement in interface IDataSet<T extends IElement>
Parameters:
element - element to add
See Also:
IDataSet.addElement(pl.edu.agh.cast.data.model.IElement)

beforeAddElement

protected void beforeAddElement(T element)
This method is called before adding the given element to the data set. At this point the element is known to be valid for addition.

It should be overridden by subclasses to add custom activities which should be perform after removing the given element.

Parameters:
element - element which is to be removed
See Also:
isElementValid(IElement)

afterAddElement

protected void afterAddElement(T element)
This method is called after successfully adding the given element to the data set.

It should be overridden by subclasses to add custom activities which should be perform after removing the given element.

Parameters:
element - element which has been just removed

addElements

public final void addElements(Collection<? extends T> elements)
Adds a collection of elements to this data set.

Specified by:
addElements in interface IDataSet<T extends IElement>
Parameters:
elements - collection of elements to add
See Also:
IDataSet.addElements(java.util.Collection)

addElements

public final void addElements(T... elements)
Adds multiple elements to this data set.

Specified by:
addElements in interface IDataSet<T extends IElement>
Parameters:
elements - elements to add
See Also:
pl.edu.agh.cast.data.model.IDataSet#addElements(T[])

setElements

public final void setElements(Collection<? extends T> elemnts)
Sets elements from this data set.

Specified by:
setElements in interface IDataSet<T extends IElement>
Parameters:
elemnts - elements from this data set
See Also:
IDataSet.setElements(java.util.Collection)

removeElement

public final T removeElement(UUID elementId)
Removes IElement from this data set with given ID.

Specified by:
removeElement in interface IDataSet<T extends IElement>
Parameters:
elementId - ID of element to remove
Returns:
removed element with given ID if present in this data set, null otherwise
See Also:
IDataSet.removeElement(java.util.UUID)

removeElement

public final <E extends T> E removeElement(E element)
Removes the given element from this data set.

Specified by:
removeElement in interface IDataSet<T extends IElement>
Type Parameters:
E - type of element to remove
Parameters:
element - element to remove
Returns:
removed element with given ID if present in this data set, null otherwise
See Also:
IDataSet.removeElement(pl.edu.agh.cast.data.model.IElement)

removeElements

public final <E extends T> Collection<E> removeElements(Collection<E> elements)
Removes multiple elements from this data set.

Specified by:
removeElements in interface IDataSet<T extends IElement>
Type Parameters:
E - type of elements to remove
Parameters:
elements - list of elements to remove
Returns:
list of successfully removed elements
See Also:
IDataSet.removeElements(java.util.Collection)

removeElements

public final <E extends T> Collection<E> removeElements(E... elements)
Removes multiple elements from this data set.

Specified by:
removeElements in interface IDataSet<T extends IElement>
Type Parameters:
E - type of elements to remove
Parameters:
elements - array of elements to remove
Returns:
list of successfully removed elements
See Also:
pl.edu.agh.cast.data.model.IDataSet#removeElements(E[])

beforeRemoveElement

protected void beforeRemoveElement(T element)
This method is called before attempting to remove the given element from the data set.

It should be overridden by subclasses to add custom activities which should be perform after removing the given element.

Parameters:
element - element which is to be removed

afterRemoveElement

protected void afterRemoveElement(T element)
This method is called after successfully removing the given element from the data set.

It should be overridden by subclasses to add custom activities which should be perform after removing the given element.

Parameters:
element - element which has been just removed

getMetaPropertyManager

public final MetaPropertyManager getMetaPropertyManager(Type elementType)
Returns meta-property manager of elements of given type.

Specified by:
getMetaPropertyManager in interface IDataSet<T extends IElement>
Parameters:
elementType - type of elements
Returns:
MetaPropertyManager of elements of given type
See Also:
pl.edu.agh.cast.data.model.IDataSet#getMetaPropertyManager(java.lang.String)

getMetaPropertyManagers

public final Collection<MetaPropertyManager> getMetaPropertyManagers()
Returns meta-property managers for all types of elements.

Specified by:
getMetaPropertyManagers in interface IDataSet<T extends IElement>
Returns:
collection of element MetaPropertyManagers
See Also:
IDataSet.getMetaPropertyManagers()

addMetaPropertyManager

public final void addMetaPropertyManager(Type elementType)
Adds a meta-property manager of elements of given type based on type class annotations.

This method will not throw any exception if a MetaPropertyManager for given type is already defined.

Parameters:
elementType - type of elements
Throws:
IllegalArgumentException - if any of the arguments is null
See Also:
PropertyHelper.constructMetaPropertyManagerForClass(Class), Type.getTypeClass()

addMetaPropertyManager

public final void addMetaPropertyManager(Type elementType,
                                         MetaPropertyManager metaPropertyManager)
Adds a meta-property manager of elements of given type.

Specified by:
addMetaPropertyManager in interface IDataSet<T extends IElement>
Parameters:
elementType - type of elements
metaPropertyManager - MetaPropertyManager of elements of given type
See Also:
pl.edu.agh.cast.data.model.IDataSet#addMetaPropertyManager(java.lang.String, pl.edu.agh.cast.data.model.property.MetaPropertyManager)

getRegisteredTypes

public final Collection<Type> getRegisteredTypes()
Returns collection of types of IElements this data set is ready to accept, i.e. contains MetaPropertyManager's for those types.

Specified by:
getRegisteredTypes in interface IDataSet<T extends IElement>
Returns:
collection of data set registered element types
See Also:
IDataSet.getRegisteredTypes()

afterSetMetaPropertyManager

protected final void afterSetMetaPropertyManager()
Adds all PermanentProperty'ies and TransientProperty'ies defined this container's meta-property manager. Called right after setting the MPM. May be overridden.

Overrides:
afterSetMetaPropertyManager in class PropertyContainer
See Also:
PropertyContainer.afterSetMetaPropertyManager()

addMetaPropertyManagersForAcceptedTypes

public void addMetaPropertyManagersForAcceptedTypes()
Adds meta-property managers for all types accepted by the data set by default.

Specified by:
addMetaPropertyManagersForAcceptedTypes in interface IDataSet<T extends IElement>
See Also:
IDataSet.addMetaPropertyManagersForAcceptedTypes()

createNewDescriptor

protected DataSetDescriptor createNewDescriptor()
Returns new, uninitialized instance of descriptor.

This method may be overridden in order to provide

Returns:
new instance of data set descriptor

acquireDescriptor

protected DataSetDescriptor acquireDescriptor()
Returns the non-null descriptor of this data set. If the descriptor has not been defined yet, a new instance is created and assigned to this data set.

Returns:
the (non-null) descriptor of this data set
See Also:
createNewDescriptor(), setDescriptor(DataSetDescriptor)

getDescriptor

public DataSetDescriptor getDescriptor()
Returns the descriptor of this data set.

Specified by:
getDescriptor in interface IDataSet<T extends IElement>
Returns:
the descriptor of this data set
See Also:
IDataSet.getDescriptor()

setDescriptor

public final void setDescriptor(DataSetDescriptor descriptor)
Sets the data set descriptor. This method may be called only once, if the descriptor is not set yet.

Parameters:
descriptor - the data set descriptor
Throws:
ModelException - if the data set descriptor is already set or given descriptor is not valid (see DataSetDescriptor.isValid())
IllegalArgumentException - if the given descriptor is null

getAcceptedTypes

public Collection<Type> getAcceptedTypes()
Returns collection of types of IElements this data set is able to accept.

This method should be overridden by all concrete subclasses.

Returns collection of types of elements this data set is able to accept.

Specified by:
getAcceptedTypes in interface IDataSet<T extends IElement>
Returns:
collection of element types this data set is able to accept
See Also:
IDataSet.getAcceptedTypes()

getId

public final UUID getId()
Returns object's globally unique ID.

Specified by:
getId in interface Identifiable
Returns:
globally unique ID
See Also:
Identifiable.getId(), DataSetDescriptor.getId()

setId

public final void setId(UUID id)
Sets the id of a data set.

Parameters:
id - identifier to be set
See Also:
DataSetDescriptor.setId(java.util.UUID)

getType

public final Type getType()
Returns object's type.

Specified by:
getType in interface Identifiable
Returns:
type
See Also:
Identifiable.getType(), DataSetDescriptor.getType()

setType

public final void setType(Type type)
Sets the type of a data set.

Parameters:
type - type to be set
See Also:
DataSetDescriptor.setType(Type)

getName

public final String getName()
Returns the name of the data set.

Specified by:
getName in interface IDataSet<T extends IElement>
Returns:
the name of the data set
See Also:
IDataSet.getName(), DataSetDescriptor.getName()

setName

public final void setName(String name)
Sets the name of the data set.

Specified by:
setName in interface IDataSet<T extends IElement>
Parameters:
name - the name of the data set
See Also:
IDataSet.setName(java.lang.String), DataSetDescriptor.setName(java.lang.String)

getCreationDate

public final Date getCreationDate()
Returns the data set creation date.

Specified by:
getCreationDate in interface IDataSet<T extends IElement>
Returns:
the data set creation date
See Also:
IDataSet.getCreationDate(), DataSetDescriptor.getCreationDate()

setCreationDate

public final void setCreationDate(Date creationDate)
Sets the data set creation date.

Specified by:
setCreationDate in interface IDataSet<T extends IElement>
Parameters:
creationDate - the data set creation date
See Also:
IDataSet.setCreationDate(java.util.Date), DataSetDescriptor.setCreationDate(java.util.Date)

equals

public final boolean equals(Object other)
Compares two elements. Two elements are equal if they have equal IDs.

To compare domain semantic of two elements use IPropertyContainer#match(IPropertyContainer) method.

Overrides:
equals in class Object
See Also:
Object.equals(java.lang.Object), IPropertyContainer#match(IPropertyContainer)

hashCode

public final int hashCode()

Overrides:
hashCode in class Object
See Also:
Object.hashCode()

toString

public final String toString()

Overrides:
toString in class Object
See Also:
Object.toString()

getDescString

protected String getDescString()
Returns a string with short description of element. This method is used by toString() and may be overridden in order to customize its results.

Returns:
a description string


Copyright © 2007-2009 IISG AGH-UST Krakow, Poland. All Rights Reserved.