org.faktorips.runtime.internal.tableindex
Class TwoColumnRangeStructure<K extends Comparable<? super K>,V extends SearchStructure<R> & MergeAndCopyStructure<V>,R>

java.lang.Object
  extended by org.faktorips.runtime.internal.tableindex.SearchStructure<R>
      extended by org.faktorips.runtime.internal.tableindex.AbstractMapStructure<org.faktorips.runtime.internal.tableindex.TwoColumnRange<K>,V,R>
          extended by org.faktorips.runtime.internal.tableindex.TwoColumnRangeStructure<K,V,R>
All Implemented Interfaces:
MergeAndCopyStructure<TwoColumnRangeStructure<K,V,R>>

public class TwoColumnRangeStructure<K extends Comparable<? super K>,V extends SearchStructure<R> & MergeAndCopyStructure<V>,R>
extends AbstractMapStructure<org.faktorips.runtime.internal.tableindex.TwoColumnRange<K>,V,R>
implements MergeAndCopyStructure<TwoColumnRangeStructure<K,V,R>>

A SearchStructure that maps ranges (keys) to nested SearchStructures i.e. sets of values. Each range in a TwoColumnRangeStructure is defined by lower and upper bound. Thus there might be "gaps" in between ranges, in contrast to RangeStructures. The TwoColumnRangeStructure also supports overlapping ranges, as well as "infinite" ranges.

Ranges are set up by putting one or more key-key-value tuples into this structure. The keys are of a comparable data type (of course, as they define a range). The value is a nested SearchStructure. The first key defines the lower bound, the second the upper bound of the range. The value can be retrieved by calling get(Object) with a key inside the defined range.

Example: In a TwoColumnRangeStructure by calling put(10, 24, "AAA") and put(25, 50, "BBB"), two ranges are defined. Calls to get(Object) with the:

Overlapping ranges: In a TwoColumnRangeStructure by calling put(0, 100, "AAA") and put(50, 200, "BBB"), two ranges are defined. Calls to get(Object) with keys:

Calling put(null, 100, "AAA") defines a range from negative infinity to 100, that maps to {"AAA"}. This range includes all values less than and equal to 100. Calling put(0, null, "BBB") in turn defines a range from 0 to positive infinity. This range includes all values greater than and equal to 0.


Method Summary
 TwoColumnRangeStructure<K,V,R> copy()
          This method copies the object which calls it.
static
<K extends Comparable<? super K>,V extends SearchStructure<R> & MergeAndCopyStructure<V>,R>
TwoColumnRangeStructure<K,V,R>
create()
          Creates an empty TwoColumnRangeStructure.
static
<K extends Comparable<? super K>,V extends SearchStructure<R> & MergeAndCopyStructure<V>,R>
TwoColumnRangeStructure<K,V,R>
createWith(K lowerBound, K upperBound, V value)
          Creates a new TwoColumnRangeStructure and adds the given range-value pair.
 SearchStructure<R> get(Object key)
          Returns the nested SearchStructure for the given key.
protected  TreeMap<org.faktorips.runtime.internal.tableindex.TwoColumnRange<K>,V> getMap()
           
 void merge(TwoColumnRangeStructure<K,V,R> map)
          Merging adds the contents of the otherMergable to this object.
 void put(K lower, K upper, boolean lowerInclusive, boolean upperInclusive, V value)
          Defines a range that maps to the given value.
 void put(K lower, K upper, V value)
          Defines a range that maps to the given value.
 void put(org.faktorips.runtime.internal.tableindex.TwoColumnRange<K> key, V value)
          Puts a new element in the map.
 
Methods inherited from class org.faktorips.runtime.internal.tableindex.AbstractMapStructure
emptyResult, fillCopy, get, getValidResult, merge
 
Methods inherited from class org.faktorips.runtime.internal.tableindex.SearchStructure
getUnique, getUnique
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Method Detail

create

public static <K extends Comparable<? super K>,V extends SearchStructure<R> & MergeAndCopyStructure<V>,R> TwoColumnRangeStructure<K,V,R> create()
Creates an empty TwoColumnRangeStructure.


createWith

public static <K extends Comparable<? super K>,V extends SearchStructure<R> & MergeAndCopyStructure<V>,R> TwoColumnRangeStructure<K,V,R> createWith(K lowerBound,
                                                                                                                                                   K upperBound,
                                                                                                                                                   V value)
Creates a new TwoColumnRangeStructure and adds the given range-value pair.


put

public void put(K lower,
                K upper,
                V value)
Defines a range that maps to the given value. The keys define the upper and lower bound of the range. The lower and upper bounds are inclusive.

Parameters:
lower - the lower bound of the range (included)
upper - the upper bound of the range (included)
value - the nested SearchStructure to be added

put

public void put(K lower,
                K upper,
                boolean lowerInclusive,
                boolean upperInclusive,
                V value)
Defines a range that maps to the given value. The keys define the upper and lower bound of the range.

If the lower bound is greater than upper bound, the lower and upper bound are automatically switched (including lower- and upper-inclusive parameter).

Parameters:
lower - the lower bound of the range (included)
upper - the upper bound of the range (included)
lowerInclusive - true if the lower bound should be inclusive, false if it should be exclusive
upperInclusive - true if the upper bound should be inclusive, false if it should be exclusive
value - the nested SearchStructure to be added

put

public void put(org.faktorips.runtime.internal.tableindex.TwoColumnRange<K> key,
                V value)
Description copied from class: AbstractMapStructure
Puts a new element in the map. If there is already a value for the given key, the two values will be merged together. Thus existing values will never be overwritten.

Overrides:
put in class AbstractMapStructure<org.faktorips.runtime.internal.tableindex.TwoColumnRange<K extends Comparable<? super K>>,V extends SearchStructure<R> & MergeAndCopyStructure<V>,R>
Parameters:
key - key that maps to the specified value
value - value to be associated with the specified key.
See Also:
Map.put(Object, Object), AbstractMapStructure.merge(AbstractMapStructure)

getMap

protected TreeMap<org.faktorips.runtime.internal.tableindex.TwoColumnRange<K>,V> getMap()
Overrides:
getMap in class AbstractMapStructure<org.faktorips.runtime.internal.tableindex.TwoColumnRange<K extends Comparable<? super K>>,V extends SearchStructure<R> & MergeAndCopyStructure<V>,R>

get

public SearchStructure<R> get(Object key)
Description copied from class: SearchStructure
Returns the nested SearchStructure for the given key. This method never returns null. If no value exists for a given key an EmptySearchStructure is returned as a fall-back.

Specified by:
get in class SearchStructure<R>
Parameters:
key - The key for the requested nested SearchStructure
Returns:
The nested SearchStructure or an EmptySearchStructure if the key does not exist.

merge

public void merge(TwoColumnRangeStructure<K,V,R> map)
Description copied from interface: MergeAndCopyStructure
Merging adds the contents of the otherMergable to this object. This object then contains the combined content. The other object remains unchanged.Merging a SearchStructure deletes no content, instead equal values are being merged recursively.

Specified by:
merge in interface MergeAndCopyStructure<TwoColumnRangeStructure<K extends Comparable<? super K>,V extends SearchStructure<R> & MergeAndCopyStructure<V>,R>>
Parameters:
map - The object that should be merged into this object

copy

public TwoColumnRangeStructure<K,V,R> copy()
Description copied from interface: MergeAndCopyStructure
This method copies the object which calls it. The newly created object has the same properties like the object calling MergeAndCopyStructure.copy().

Specified by:
copy in interface MergeAndCopyStructure<TwoColumnRangeStructure<K extends Comparable<? super K>,V extends SearchStructure<R> & MergeAndCopyStructure<V>,R>>
Returns:
T that is a copy of the calling object


Copyright © 2015. All rights reserved.