Class DefaultTraversalSideEffects
java.lang.Object
org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversalSideEffects
- All Implemented Interfaces:
Serializable,AutoCloseable,Cloneable,TraversalSideEffects
- Author:
- Marko A. Rodriguez (http://markorodriguez.com)
- See Also:
-
Nested Class Summary
Nested classes/interfaces inherited from interface org.apache.tinkerpop.gremlin.process.traversal.TraversalSideEffects
TraversalSideEffects.Exceptions -
Field Summary
FieldsModifier and TypeFieldDescriptionprotected Map<String,BinaryOperator> protected Supplierprotected BinaryOperatorprotected UnaryOperator -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidAdd a value to the global side-effect value.clone()Cloning is used to duplicate the sideEffects typically in distributed execution environments.booleanReturn true if the key is a registered side-effect.<V> VGet the sideEffect associated with the provided key.<V> BinaryOperator<V>getReducer(String key) Get the reducer associated with the side-effect key.<S> Supplier<S>If sacks are enabled, get the initial value of theTraversersack.<S> BinaryOperator<S>If sacks are enabled and a merge function has been specified, then get it (else getnull).<S> UnaryOperator<S>If sacks are enabled and a split operator has been specified, then get it (else getnull).<V> Supplier<V>getSupplier(String key) Get the supplier associated with the side-effect key.keys()The keys of the sideEffect which includes registeredSupplierkeys.voidmergeInto(TraversalSideEffects sideEffects) Add the currentTraversalSideEffectsvalues, suppliers, and reducers to the providedTraversalSideEffects.<V> voidregister(String key, Supplier<V> initialValue, BinaryOperator<V> reducer) <V> voidregisterIfAbsent(String key, Supplier<V> initialValue, BinaryOperator<V> reducer) voidRemove both the value and registeredSupplierassociated with provided key.voidSet the specified key to the specified value.<S> voidsetSack(Supplier<S> initialValue, UnaryOperator<S> splitOperator, BinaryOperator<S> mergeOperator) Set the initial value of eachTraverser"sack" along with the operators for splitting and merging sacks.toString()Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitMethods inherited from interface org.apache.tinkerpop.gremlin.process.traversal.TraversalSideEffects
close, forEach, isEmpty
-
Field Details
-
keys
-
objectMap
-
supplierMap
-
reducerMap
-
sackSplitOperator
-
sackMergeOperator
-
sackInitialValue
-
-
Constructor Details
-
DefaultTraversalSideEffects
public DefaultTraversalSideEffects()
-
-
Method Details
-
exists
Return true if the key is a registered side-effect.- Specified by:
existsin interfaceTraversalSideEffects- Parameters:
key- the key to check for existence- Returns:
- whether the key exists or not
-
get
Get the sideEffect associated with the provided key. If the sideEffect contains an object for the key, return it. Else if the sideEffect has a registeredSupplierfor that key, generate the object, store the object in the sideEffects, and return it.- Specified by:
getin interfaceTraversalSideEffects- Type Parameters:
V- the type of the value to retrieve- Parameters:
key- the key to get the value for- Returns:
- the value associated with key
- Throws:
IllegalArgumentException- if the key does not reference an object or a registered supplier.
-
set
Set the specified key to the specified value. This method should not be used in a distributed environment. Instead, useTraversalSideEffects.add(String, Object). This method is only safe when there is only one representation of the side-effect and thus, not distributed across threads or machines.- Specified by:
setin interfaceTraversalSideEffects- Parameters:
key- the key they key of the side-effectvalue- the value the new value for the side-effect- Throws:
IllegalArgumentException- if the key does not reference a registered side-effect.
-
add
Add a value to the global side-effect value. This should be used by steps to ensure that side-effects are merged properly in a distributed environment.TraversalSideEffects.set(String, Object)should only be used in single-threaded systems or by a master traversal in a distributed environment.- Specified by:
addin interfaceTraversalSideEffects- Parameters:
key- the key of the side-effect.value- the partital value (to be merged) of the side-effect.- Throws:
IllegalArgumentException- if no side-effect exists for the provided key
-
register
Register a side-effect with theTraversalSideEffectsproviding aSupplierand aBinaryOperator. If a null value is provided for the supplier or reducer, then it no supplier or reducer is registered.- Specified by:
registerin interfaceTraversalSideEffects- Type Parameters:
V- the type of the side-effect value- Parameters:
key- the key of the side-effect valueinitialValue- the initial value supplierreducer- the reducer to use for merging a distributed side-effect value into a single value
-
registerIfAbsent
Register a side-effect with theTraversalSideEffectsproviding aSupplierand aBinaryOperator. The registration will only overwrite a supplier or reducer if no supplier or reducer existed prior. If a null value is provided for the supplier or reducer, then it no supplier or reducer is registered.- Specified by:
registerIfAbsentin interfaceTraversalSideEffects- Type Parameters:
V- the type of the side-effect value- Parameters:
key- the key of the side-effect valueinitialValue- the initial value supplierreducer- the reducer to use for merging a distributed side-effect value into a single value
-
getReducer
Get the reducer associated with the side-effect key. If no reducer was registered, thenOperator.assignis provided.- Specified by:
getReducerin interfaceTraversalSideEffects- Type Parameters:
V- the type of the side-effect value- Parameters:
key- the key of the side-effect- Returns:
- the registered reducer
- Throws:
IllegalArgumentException- if no side-effect exists for the provided key
-
getSupplier
Get the supplier associated with the side-effect key. If no supplier was registered, thenConstantSupplieris provided.- Specified by:
getSupplierin interfaceTraversalSideEffects- Type Parameters:
V- the type of the side-effect value- Parameters:
key- the key of the side-effect- Returns:
- the registered supplier
- Throws:
IllegalArgumentException- if no side-effect exists for the provided key
-
setSack
public <S> void setSack(Supplier<S> initialValue, UnaryOperator<S> splitOperator, BinaryOperator<S> mergeOperator) Set the initial value of eachTraverser"sack" along with the operators for splitting and merging sacks. If no split operator is provided, then a direct memory copy is assumed (this is typically good for primitive types and strings). If no merge operator is provided, then traversers with sacks will not be merged.- Specified by:
setSackin interfaceTraversalSideEffects- Type Parameters:
S- the sack type- Parameters:
initialValue- the initial value supplier of the traverser sacksplitOperator- the split operator for splitting traverser sacksmergeOperator- the merge operator for merging traverser sacks
-
getSackInitialValue
If sacks are enabled, get the initial value of theTraversersack. If its not enabled, thennullis returned.- Specified by:
getSackInitialValuein interfaceTraversalSideEffects- Type Parameters:
S- the sack type- Returns:
- the supplier of the initial value of the traverser sack
-
getSackSplitter
If sacks are enabled and a split operator has been specified, then get it (else getnull). The split operator is used to split a sack when a bifurcation in aTraverserhappens.- Specified by:
getSackSplitterin interfaceTraversalSideEffects- Type Parameters:
S- the sack type- Returns:
- the operator for splitting a traverser sack
-
getSackMerger
If sacks are enabled and a merge function has been specified, then get it (else getnull). The merge function is used to merge two sacks when twoTraversers converge.- Specified by:
getSackMergerin interfaceTraversalSideEffects- Type Parameters:
S- the sack type- Returns:
- the operator for merging two traverser sacks
-
remove
Remove both the value and registeredSupplierassociated with provided key.- Specified by:
removein interfaceTraversalSideEffects- Parameters:
key- the key of the value and registered supplier to remove
-
keys
The keys of the sideEffect which includes registeredSupplierkeys. In essence, that which is possible toTraversalSideEffects.get(String).- Specified by:
keysin interfaceTraversalSideEffects- Returns:
- the keys of the sideEffect
-
mergeInto
Add the currentTraversalSideEffectsvalues, suppliers, and reducers to the providedTraversalSideEffects. The implementation should (under the hood), useTraversalSideEffects.registerIfAbsent(String, Supplier, BinaryOperator)so that if the argumentTraversalSideEffectsalready has a registered supplier or binary operator, then don't overwrite it.- Specified by:
mergeIntoin interfaceTraversalSideEffects- Parameters:
sideEffects- the sideEffects to add this traversal's sideEffect data to.
-
toString
-
clone
Cloning is used to duplicate the sideEffects typically in distributed execution environments.- Specified by:
clonein interfaceTraversalSideEffects- Overrides:
clonein classObject- Returns:
- The cloned sideEffects
-