Class TwoColumnRangeStructure<K extends java.lang.Comparable<? super K>,V extends SearchStructure<R> & MergeAndCopyStructure<V>,R>
- java.lang.Object
-
- org.faktorips.runtime.internal.tableindex.SearchStructure<R>
-
- org.faktorips.runtime.internal.tableindex.AbstractMapStructure<org.faktorips.runtime.internal.tableindex.TwoColumnRange<K>,V,R>
-
- org.faktorips.runtime.internal.tableindex.TwoColumnRangeStructure<K,V,R>
-
- All Implemented Interfaces:
MergeAndCopyStructure<TwoColumnRangeStructure<K,V,R>>
public class TwoColumnRangeStructure<K extends java.lang.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>>
ASearchStructurethat maps ranges (keys) to nestedSearchStructuresi.e. sets of values. Eachrangein aTwoColumnRangeStructureis defined by lower and upper bound. Thus there might be "gaps" in between ranges, in contrast toRangeStructures. TheTwoColumnRangeStructurealso 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 callingget(Object)with a key inside the defined range.Example: In a
TwoColumnRangeStructureby callingput(10, 24, "AAA")andput(25, 50, "BBB"), two ranges are defined. Calls toget(Object)with the:- keys 10, 24 and all in between will yield {"AAA"} as a result
- keys 25, 50 and all in between will yield {"BBB"} respectively
- keys outside these ranges, e.g. 0 or 100 will return an
EmptySearchStructure.
Overlapping ranges: In a
TwoColumnRangeStructureby callingput(0, 100, "AAA")andput(50, 200, "BBB"), two ranges are defined. Calls toget(Object)with keys:- keys 0, 49 and all in between will yield {"AAA"} as a result
- keys 101, 200 and all in between will yield {"BBB"} respectively
- keys in the overlapping, 50, 100 and all in between, will yield the set union {"AAA", "BBB"} as a result
- keys outside these ranges, e.g. -100 or 500 will return an
EmptySearchStructure.
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. Callingput(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
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description TwoColumnRangeStructure<K,V,R>copy()This method copies the object which calls it.static <K extends java.lang.Comparable<? super K>,V extends SearchStructure<R> & MergeAndCopyStructure<V>,R>
TwoColumnRangeStructure<K,V,R>create()Creates an emptyTwoColumnRangeStructure.static <K extends java.lang.Comparable<? super K>,V extends SearchStructure<R> & MergeAndCopyStructure<V>,R>
TwoColumnRangeStructure<K,V,R>createWith(K lowerBound, K upperBound, V value)Creates a newTwoColumnRangeStructureand adds the given range-value pair.SearchStructure<R>get(java.lang.Object key)Returns the nestedSearchStructurefor the given key.protected java.util.TreeMap<org.faktorips.runtime.internal.tableindex.TwoColumnRange<K>,V>getMap()voidmerge(TwoColumnRangeStructure<K,V,R> map)Merging adds the contents of the otherMergable to this object.voidput(K lower, K upper, boolean lowerInclusive, boolean upperInclusive, V value)Defines a range that maps to the given value.voidput(K lower, K upper, V value)Defines a range that maps to the given value.voidput(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
-
-
-
-
Method Detail
-
create
public static <K extends java.lang.Comparable<? super K>,V extends SearchStructure<R> & MergeAndCopyStructure<V>,R> TwoColumnRangeStructure<K,V,R> create()
Creates an emptyTwoColumnRangeStructure.
-
createWith
public static <K extends java.lang.Comparable<? super K>,V extends SearchStructure<R> & MergeAndCopyStructure<V>,R> TwoColumnRangeStructure<K,V,R> createWith(K lowerBound, K upperBound, V value)
Creates a newTwoColumnRangeStructureand 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 nestedSearchStructureto 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-trueif the lower bound should be inclusive,falseif it should be exclusiveupperInclusive-trueif the upper bound should be inclusive,falseif it should be exclusivevalue- the nestedSearchStructureto be added
-
put
public void put(org.faktorips.runtime.internal.tableindex.TwoColumnRange<K> key, V value)
Description copied from class:AbstractMapStructurePuts 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:
putin classAbstractMapStructure<org.faktorips.runtime.internal.tableindex.TwoColumnRange<K extends java.lang.Comparable<? super K>>,V extends SearchStructure<R> & MergeAndCopyStructure<V>,R>- Parameters:
key- key that maps to the specified valuevalue- value to be associated with the specified key.- See Also:
Map.put(Object, Object),AbstractMapStructure.merge(AbstractMapStructure)
-
getMap
protected java.util.TreeMap<org.faktorips.runtime.internal.tableindex.TwoColumnRange<K>,V> getMap()
- Overrides:
getMapin classAbstractMapStructure<org.faktorips.runtime.internal.tableindex.TwoColumnRange<K extends java.lang.Comparable<? super K>>,V extends SearchStructure<R> & MergeAndCopyStructure<V>,R>
-
get
public SearchStructure<R> get(java.lang.Object key)
Description copied from class:SearchStructureReturns the nestedSearchStructurefor the given key. This method never returnsnull. If no value exists for a given key anEmptySearchStructureis returned as a fall-back.- Specified by:
getin classSearchStructure<R>- Parameters:
key- The key for the requested nestedSearchStructure- Returns:
- The nested
SearchStructureor anEmptySearchStructureif the key does not exist.
-
merge
public void merge(TwoColumnRangeStructure<K,V,R> map)
Description copied from interface:MergeAndCopyStructureMerging adds the contents of the otherMergable to this object. This object then contains the combined content. The other object remains unchanged.Merging aSearchStructuredeletes no content, instead equal values are being merged recursively.- Specified by:
mergein interfaceMergeAndCopyStructure<K extends java.lang.Comparable<? super K>>- Parameters:
map- The object that should be merged into this object
-
copy
public TwoColumnRangeStructure<K,V,R> copy()
Description copied from interface:MergeAndCopyStructureThis method copies the object which calls it. The newly created object has the same properties like the object callingMergeAndCopyStructure.copy().- Specified by:
copyin interfaceMergeAndCopyStructure<K extends java.lang.Comparable<? super K>>- Returns:
- T that is a copy of the calling object
-
-