sos.dated.util
Class AbstractDatedMap

java.lang.Object
  |
  +--sos.dated.util.AbstractDatedObject
        |
        +--sos.dated.util.AbstractDatedMap
All Implemented Interfaces:
DatedMap, DatedObject
Direct Known Subclasses:
AbstractMapByDate, sos.dated.util.AbstractMapByKey

public abstract class AbstractDatedMap
extends AbstractDatedObject
implements DatedMap

A partial implementation of a dated map. This class is designed to make it easier to implement the DatedMap interface. To create an unmodifiable dated map, the client should subclass this class and implement entrySet. The set returned by this method should be unmodifiable as well. To create a modifiable dated map, the client should subclass this class, implement the put method, and return an entry set that supports clear and has an iterator that supports remove.

Since:
1.0
See Also:
DatedMap

Nested Class Summary
 
Nested classes inherited from class sos.dated.util.DatedMap
DatedMap.Entry
 
Field Summary
 
Fields inherited from interface sos.dated.util.DatedObject
MAX_DATE, MIN_DATE
 
Constructor Summary
protected AbstractDatedMap()
          No-argument constructor available only to subclasses.
 
Method Summary
 void clear(java.util.Date from, java.util.Date to)
          Removes all mappings from this dated map for the specified date range.
protected  java.lang.Object clone()
          Creates and returns a copy of this object.
 boolean containsKey(java.lang.Object key, java.util.Date date)
          Returns true if this dated map contains the specified key at the specified date.
 boolean containsKeyThroughout(java.lang.Object key, java.util.Date from, java.util.Date to)
          Returns true if this dated map contains the specified key throughout the specified date range.
 boolean containsValue(java.lang.Object value, java.util.Date date)
          Returns true if any key maps to the specified value at the specified date.
 boolean containsValueThroughout(java.lang.Object value, java.util.Date from, java.util.Date to)
          Returns true if a key maps to the specified value throughout the specified date range.
abstract  DatedSet entrySet()
          Returns a modifiable view of the mappings of this dated map.
 boolean equals(java.util.Date date, DatedObject obj, java.util.Date objDate)
          Indicates if this dated map at date is equal to obj at objDate.
 boolean excludesKeyThroughout(java.lang.Object key, java.util.Date from, java.util.Date to)
          Returns true if this dated map does not contain the specified key at any date within the specified date range.
 boolean excludesValueThroughout(java.lang.Object value, java.util.Date from, java.util.Date to)
          Returns true if no key maps to the specified value at any date within the specified date range.
 DatedValue get(java.lang.Object key)
          Returns the values associated with the specified key for all dates.
 java.lang.Object get(java.lang.Object key, java.util.Date date)
          Retrieves the value associated with the specified key on the specified date.
 int hashCode(java.util.Date date)
          Returns a hash code value of this dated map at the specified date.
 boolean hasSizeThroughout(int size, java.util.Date from, java.util.Date to)
          Returns true if the size of this dated map is greater than or equal to the specified size throughout the specified date range.
 boolean isEmpty(java.util.Date date)
          Returns true if this map contains no mappings on the specified date.
 boolean isEmptyThroughout(java.util.Date from, java.util.Date to)
          Returns true if this map contains no mappings throughout the specified date range.
 DatedSet keySet()
          Returns a modifiable view of the keys of this dated map.
 DatedValue put(java.lang.Object key, java.lang.Object value, java.util.Date from, java.util.Date to)
          Associates key with value in this dated map during the specified date range.
 void putAll(DatedMap datedMap)
          Places all mappings in datedMap into this dated map.
 DatedValue remove(java.lang.Object key, java.util.Date from, java.util.Date to)
          Removes any values associated with the specified key in the specified date range.
 int size(java.util.Date date)
          Returns the number of mappings in this dated map at the specified date.
 java.lang.String toString(java.util.Date date)
          Returns a string representation of this dated map at the specified date.
 DatedCollection values()
          Returns a view of the values mapped to keys in this dated map.
 
Methods inherited from class sos.dated.util.AbstractDatedObject
dateIterator, dateIterator, equals, hashCode, toString
 
Methods inherited from class java.lang.Object
finalize, getClass, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface sos.dated.util.DatedObject
dateIterator, dateIterator, equals, hashCode
 

Constructor Detail

AbstractDatedMap

protected AbstractDatedMap()
No-argument constructor available only to subclasses.

Method Detail

clear

public void clear(java.util.Date from,
                  java.util.Date to)
Removes all mappings from this dated map for the specified date range. This implementation invokes clear on the dated entry set.

Specified by:
clear in interface DatedMap
Parameters:
from - starting date (inclusive) at which this map should be cleared
to - ending date (exclusive) at which this map should be cleared
Throws:
java.lang.NullPointerException - if any argument is null
java.lang.IllegalArgumentException - if from does not precede to

clone

protected java.lang.Object clone()
                          throws java.lang.CloneNotSupportedException
Creates and returns a copy of this object. Subclasses that wish to be cloneable should override this method but first call their parent's clone method.

Overrides:
clone in class java.lang.Object
Returns:
a copy of this dated map
Throws:
java.lang.CloneNotSupportedException - if this object's class does not support the Cloneable interface.

containsKey

public boolean containsKey(java.lang.Object key,
                           java.util.Date date)
Returns true if this dated map contains the specified key at the specified date. This implementation iterates through the entries at the specified date, returning true if the specified key is found.

Specified by:
containsKey in interface DatedMap
Parameters:
key - key whose presence is to be tested
date - date at which this map is to be queried
Returns:
true if this dated map contains the specified key at the specified date
Throws:
java.lang.NullPointerException - if date is null

containsKeyThroughout

public boolean containsKeyThroughout(java.lang.Object key,
                                     java.util.Date from,
                                     java.util.Date to)
Returns true if this dated map contains the specified key throughout the specified date range. This implementation uses the date iterator to iterate through this map's changed states, calling containsKey at each date range.

Specified by:
containsKeyThroughout in interface DatedMap
Parameters:
key - key whose presence is to be tested
from - starting date at which containment should be tested
to - ending date at which containment should be tested
Returns:
true if this dated map contains the specified key throughout the specified date range
Throws:
java.lang.NullPointerException - if from or to is null
java.lang.IllegalArgumentException - if from does not precede to

containsValue

public boolean containsValue(java.lang.Object value,
                             java.util.Date date)
Returns true if any key maps to the specified value at the specified date. This implementation iterates through the entries at the specified date and returns true if it encounters the specified value.

Specified by:
containsValue in interface DatedMap
Parameters:
value - value whose presence is to be tested
date - date at which this map is to be queried
Returns:
true if any key maps to the specified value at the specified date
Throws:
java.lang.NullPointerException - if date is null

containsValueThroughout

public boolean containsValueThroughout(java.lang.Object value,
                                       java.util.Date from,
                                       java.util.Date to)
Returns true if a key maps to the specified value throughout the specified date range. This implementation invokes containsValue at the start of each date range within from and to.

Specified by:
containsValueThroughout in interface DatedMap
Parameters:
value - value whose presence is to be tested
from - starting date (inclusive) at which containment should be tested
to - ending date (exclusive) at which containment should be tested
Returns:
true if a key maps to the specified value throughout the specified date range
Throws:
java.lang.NullPointerException - if from or to is null
java.lang.IllegalArgumentException - if from does not precede to

entrySet

public abstract DatedSet entrySet()
Description copied from interface: DatedMap
Returns a modifiable view of the mappings of this dated map. Each element of the returned view implement java.util.Map.

Specified by:
entrySet in interface DatedMap
Returns:
a dated set of the entries of this dated map

equals

public boolean equals(java.util.Date date,
                      DatedObject obj,
                      java.util.Date objDate)
Indicates if this dated map at date is equal to obj at objDate. Two maps are equivalent if they contain the same mappings. This implementation returns true if this dated map and obj are the same references and if date equals objDate. Then it returns false if obj does not implement DatedMap. Finally, it returns true if this map's entry set and obj's entry set are equivalent at these dates.

Specified by:
equals in interface DatedMap
Overrides:
equals in class AbstractDatedObject
Parameters:
date - date at which this object should be tested
obj - the other dated object to be compared to
objDate - the date of the other dated object
Returns:
true if this dated map at date equals another dated object at objDate
Throws:
java.lang.NullPointerException - if any argument is null

excludesKeyThroughout

public boolean excludesKeyThroughout(java.lang.Object key,
                                     java.util.Date from,
                                     java.util.Date to)
Returns true if this dated map does not contain the specified key at any date within the specified date range. This implementation uses the date iterator to iterate through this map's changed states, calling containsKey at each date range.

Specified by:
excludesKeyThroughout in interface DatedMap
Parameters:
key - key whose presence is to be tested
from - starting date (inclusive) at which exclusion should be tested
to - ending date (exclusive) at which exclusion should be tested
Returns:
true if this dated map does not contain key key between from and to
Throws:
java.lang.NullPointerException - if from or to is null
java.lang.IllegalArgumentException - if from does not precede to

excludesValueThroughout

public boolean excludesValueThroughout(java.lang.Object value,
                                       java.util.Date from,
                                       java.util.Date to)
Returns true if no key maps to the specified value at any date within the specified date range. This implementation invokes containsValue at the start of each date range within from and to.

Specified by:
excludesValueThroughout in interface DatedMap
Parameters:
value - value whose presence is to be tested
from - starting date (inclusive) at which exclusion should be tested
to - ending date (exclusive) at which exclusion should be tested
Returns:
true if no key maps to the value at any date between from and to
Throws:
java.lang.NullPointerException - if from or to is null
java.lang.IllegalArgumentException - if from does not precede to

get

public DatedValue get(java.lang.Object key)
Returns the values associated with the specified key for all dates. The returned dated value is backed by this dated map. Thus, changes to the dated value are reflected in this map and vice versa. Setting a value in the dated value is equivalent to invoking put on this map. Setting a value to null is not equivalent to removing the key from this map. A null value may mean either that the key is associated with null or that the key is not present in this map. (This behavior is consistent with the specification of get in java.util.Map).

If this map does not support put, then set of the dated value will throw an UnsupportedOperationException.

Iteration through the dates of the dated value may result in a ConcurrentModificationException if this map's dates are altered during the iteration.

This implementation returns a freshly constructed DatedValue that invokes AbstractDatedMap.this.get(Object,Date) in response to get(Date) and AbstractDatedMap.this.put(Object,Object,Date,Date) in response to set(Object,Date,Date). The date iterator that it returns is this map's date iterator adapted to ignore dates that do not reflect a change in the key's mapping.

Specified by:
get in interface DatedMap
Parameters:
key - key whose values are to be returned
Returns:
a dated value of the values associated with key

get

public java.lang.Object get(java.lang.Object key,
                            java.util.Date date)
Retrieves the value associated with the specified key on the specified date. This implementation iterates through the entry set at this date, returning the associated value if the key is found.

Specified by:
get in interface DatedMap
Parameters:
key - key whose mapping is to be retrieved
date - date at which this map is to be queried
Returns:
the value associated with the specified key on the specified date
Throws:
java.lang.NullPointerException - if date is null

hashCode

public int hashCode(java.util.Date date)
Returns a hash code value of this dated map at the specified date. The hash code of a DatedMap at a date is calculated the same way as in hashCode of java.util.Map. This implementation invokes hashCode(date) on the entry set.

Specified by:
hashCode in interface DatedMap
Overrides:
hashCode in class AbstractDatedObject
Parameters:
date - date to which the value should correspond
Returns:
the hash code value of this dated object at the specified date
Throws:
java.lang.NullPointerException - if date is null

hasSizeThroughout

public boolean hasSizeThroughout(int size,
                                 java.util.Date from,
                                 java.util.Date to)
Returns true if the size of this dated map is greater than or equal to the specified size throughout the specified date range. This implementation invokes hasSizeThroughout(size,from,to) on the entry set.

Specified by:
hasSizeThroughout in interface DatedMap
Parameters:
size - number of mappings in question
from - starting date (inclusive) at which the size is to be compared
to - ending date (exclusive) at which the size is to be compared
Returns:
true if this dated map has at least the specified size throughout the specified date range
Throws:
java.lang.NullPointerException - if from or to is null
java.lang.IllegalArgumentException - if size < 0 or if from does not precede to

isEmpty

public boolean isEmpty(java.util.Date date)
Returns true if this map contains no mappings on the specified date. This implementation invokes isEmpty(date) on the entry set.

Specified by:
isEmpty in interface DatedMap
Parameters:
date - date at which this map is to be queried
Returns:
true if this map contains no mappings on the specified date
Throws:
java.lang.NullPointerException - if date is null

isEmptyThroughout

public boolean isEmptyThroughout(java.util.Date from,
                                 java.util.Date to)
Returns true if this map contains no mappings throughout the specified date range. This implementation invokes isEmptyThroughout(from,to) on the entry set.

Specified by:
isEmptyThroughout in interface DatedMap
Parameters:
from - starting date of range (inclusive) to test for inclusion
to - ending date of range (exclusive) to test for inclusion
Returns:
true if this map contains no mappings in the specified date range
Throws:
java.lang.NullPointerException - if any of the parameters equal null
java.lang.IllegalArgumentException - if from does not precede to

keySet

public DatedSet keySet()
Returns a modifiable view of the keys of this dated map. This implementation returns a DatedSet that implements clear and has an iterator that implements remove. All underlying actions operate on this map's entry set.

Specified by:
keySet in interface DatedMap
Returns:
a dated set of the keys of this dated map

put

public DatedValue put(java.lang.Object key,
                      java.lang.Object value,
                      java.util.Date from,
                      java.util.Date to)
Associates key with value in this dated map during the specified date range. This implementation throws an UnsupportedOperationException.

Specified by:
put in interface DatedMap
Parameters:
key - key to put in this dated map
value - value to map to the key
from - starting date of the range (inclusive) to put the mapping
to - ending date of the range (exclusive) to put the mapping
Returns:
the value(s) mapped to the specified key in the specified range before the invocation

putAll

public void putAll(DatedMap datedMap)
Places all mappings in datedMap into this dated map. If this dated map and the map passed in are connected in a way that the map changes during any additions, this method is undefined. This means that this method cannot handle this as the parameter. This implementation iterates through the dates of datedMap, invoking put for each mapping and date range defined in datedMap.

Specified by:
putAll in interface DatedMap
Parameters:
datedMap - mappings to put in this dated map
Throws:
java.lang.NullPointerException - if datedMap is null

remove

public DatedValue remove(java.lang.Object key,
                         java.util.Date from,
                         java.util.Date to)
Removes any values associated with the specified key in the specified date range. This implementation iterates through the entry set at each date between from and to and invokes remove on the iterator at the first occurrence of an entry with the key key.

Specified by:
remove in interface DatedMap
Parameters:
key - key indicating which mapping to remove
from - starting date of the range (inclusive) to remove the mapping
to - ending date of the range (exclusive) to remove the mapping
Returns:
the value(s) mapped to the specified key in the specified range before the invocation

size

public int size(java.util.Date date)
Returns the number of mappings in this dated map at the specified date. This implementation invokes size(date) on the entry set.

Specified by:
size in interface DatedMap
Parameters:
date - date at which to return the size
Returns:
the number of entries in this dated map at the specified date
Throws:
java.lang.NullPointerException - if date is null

toString

public java.lang.String toString(java.util.Date date)
Returns a string representation of this dated map at the specified date. This implementation invokes toString(date) on the entry set.

Specified by:
toString in interface DatedObject
Specified by:
toString in class AbstractDatedObject
Parameters:
date - to which the string should correspond
Returns:
a string representation of this dated object
Throws:
java.lang.NullPointerException - if date is null

values

public DatedCollection values()
Returns a view of the values mapped to keys in this dated map. This implementation returns a dated collection that supports clear and has an iterator that supports remove. All underlying actions operate on this map's entry set.

Specified by:
values in interface DatedMap
Returns:
a modifiable dated collection of this map's values


Copyright 2003 Side of Software (SOS). All rights reserved.