Class SimpleConfigurationNode
- java.lang.Object
-
- ninja.leaping.configurate.SimpleConfigurationNode
-
- All Implemented Interfaces:
ConfigurationNode
- Direct Known Subclasses:
SimpleCommentedConfigurationNode
public class SimpleConfigurationNode extends Object implements ConfigurationNode
Simple implementation ofConfigurationNode
.
-
-
Field Summary
-
Fields inherited from interface ninja.leaping.configurate.ConfigurationNode
NUMBER_DEF
-
-
Constructor Summary
Constructors Modifier Constructor Description protected
SimpleConfigurationNode(@Nullable Object key, @Nullable SimpleConfigurationNode parent, @NonNull ConfigurationOptions options)
protected
SimpleConfigurationNode(@Nullable SimpleConfigurationNode parent, SimpleConfigurationNode copyOf)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Deprecated Methods Modifier and Type Method Description protected SimpleConfigurationNode
attachChildIfAbsent(SimpleConfigurationNode child)
protected void
attachIfNecessary()
protected void
clear()
@NonNull SimpleConfigurationNode
copy()
Creates a deep copy of this node.protected @NonNull SimpleConfigurationNode
copy(@Nullable SimpleConfigurationNode parent)
protected SimpleConfigurationNode
createNode(Object path)
boolean
equals(Object o)
@NonNull SimpleConfigurationNode
getAppendedNode()
Deprecated.protected SimpleConfigurationNode
getChild(Object key, boolean attach)
Gets a child node, relative to this.@NonNull List<? extends SimpleConfigurationNode>
getChildrenList()
Gets the "list children" attached to this node, if it has any.@NonNull Map<Object,? extends SimpleConfigurationNode>
getChildrenMap()
Gets the "map children" attached to this node, if it has any.@Nullable Object
getKey()
Gets the "key" of this node.<T> List<T>
getList(@NonNull TypeToken<T> type, @NonNull Supplier<List<T>> defSupplier)
If this node has list values, this function unwraps them and converts them to an appropriate type based on the provided function.<T> List<T>
getList(@NonNull TypeToken<T> type, List<T> def)
If this node has list values, this function unwraps them and converts them to an appropriate type based on the provided function.<T> @NonNull List<T>
getList(@NonNull Function<Object,T> transformer)
If this node has list values, this function unwraps them and converts them to an appropriate type based on the provided function.<T> List<T>
getList(@NonNull Function<Object,T> transformer, @NonNull Supplier<List<T>> defSupplier)
If this node has list values, this function unwraps them and converts them to an appropriate type based on the provided function.<T> List<T>
getList(@NonNull Function<Object,T> transformer, List<T> def)
If this node has list values, this function unwraps them and converts them to an appropriate type based on the provided function.@NonNull SimpleConfigurationNode
getNode(@NonNull Iterable<?> path)
Gets the node at the given (relative) path, possibly traversing multiple levels of nodes.@NonNull SimpleConfigurationNode
getNode(@NonNull Object @NonNull ... path)
Gets the node at the given (relative) path, possibly traversing multiple levels of nodes.@NonNull ConfigurationOptions
getOptions()
Gets the options that currently apply to this node@Nullable SimpleConfigurationNode
getParent()
Gets the parent of this node.@NonNull Object[]
getPath()
Gets the full path ofkeys
from the root node to this node.<T> T
getValue(@NonNull TypeToken<T> type, @NonNull Supplier<T> defSupplier)
Get the current value associated with this node.<T> T
getValue(@NonNull TypeToken<T> type, T def)
Get the current value associated with this node.<T> T
getValue(@NonNull Function<Object,T> transformer, @NonNull Supplier<T> defSupplier)
Gets the appropriately transformed typed version of this node's value from the provided transformation function.<T> T
getValue(@NonNull Function<Object,T> transformer, T def)
Gets the appropriately transformed typed version of this node's value from the provided transformation function.Object
getValue(@NonNull Supplier<Object> defSupplier)
Get the current value associated with this node.Object
getValue(Object def)
Get the current value associated with this node.@NonNull ValueType
getValueType()
Gets the value type of this node.int
hashCode()
boolean
isEmpty()
Return true when this node has a null or empty value.boolean
isVirtual()
Gets if this node is virtual.@NonNull ConfigurationNode
mergeValuesFrom(@NonNull ConfigurationNode other)
Set all the values from the given node that are not present in this node to their values in the provided node.boolean
removeChild(@NonNull Object key)
Removes a direct child of this nodestatic @NonNull SimpleConfigurationNode
root()
Deprecated.UseConfigurationNode.root()
insteadstatic @NonNull SimpleConfigurationNode
root(@NonNull ConfigurationOptions options)
Deprecated.UseConfigurationNode.root(ConfigurationOptions)
instead@NonNull SimpleConfigurationNode
setValue(@Nullable Object newValue)
Set this node's value to the given value.String
toString()
<S,T>
Tvisit(ConfigurationVisitor.Safe<S,T> visitor, S state)
Visit this node hierarchy as described inConfigurationVisitor
This overload will remove the need for exception handling for visitors that do not have any checked exceptions.<S,T,E extends Exception>
Tvisit(ConfigurationVisitor<S,T,E> visitor, S state)
Visit this node hierarchy as described inConfigurationVisitor
-
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface ninja.leaping.configurate.ConfigurationNode
act, appendListNode, getBoolean, getBoolean, getDouble, getDouble, getFloat, getFloat, getInt, getInt, getList, getLong, getLong, getString, getString, getValue, getValue, getValue, hasListChildren, hasMapChildren, isList, isMap, setValue, visit, visit
-
-
-
-
Constructor Detail
-
SimpleConfigurationNode
protected SimpleConfigurationNode(@Nullable Object key, @Nullable SimpleConfigurationNode parent, @NonNull ConfigurationOptions options)
-
SimpleConfigurationNode
protected SimpleConfigurationNode(@Nullable SimpleConfigurationNode parent, SimpleConfigurationNode copyOf)
-
-
Method Detail
-
root
@Deprecated public static @NonNull SimpleConfigurationNode root()
Deprecated.UseConfigurationNode.root()
insteadCreate a new node with no parent anddefault
options- Returns:
- The newly created node
-
root
@Deprecated public static @NonNull SimpleConfigurationNode root(@NonNull ConfigurationOptions options)
Deprecated.UseConfigurationNode.root(ConfigurationOptions)
insteadCreate a new node with no parent and defined options- Parameters:
options
- The options to use in this node.- Returns:
- The newly created node
-
getValue
public Object getValue(Object def)
Description copied from interface:ConfigurationNode
Get the current value associated with this node.If this node has children, this method will recursively unwrap them to construct a List or a Map.
- Specified by:
getValue
in interfaceConfigurationNode
- Parameters:
def
- The default value to return if this node has no set value- Returns:
- This configuration's current value, or
def
if there is none
-
getValue
public Object getValue(@NonNull Supplier<Object> defSupplier)
Description copied from interface:ConfigurationNode
Get the current value associated with this node.If this node has children, this method will recursively unwrap them to construct a List or a Map.
- Specified by:
getValue
in interfaceConfigurationNode
- Parameters:
defSupplier
- The function that will be called to calculate a default value only if there is no existing value- Returns:
- This configuration's current value, or
def
if there is none
-
getValue
public <T> T getValue(@NonNull Function<Object,T> transformer, T def)
Description copied from interface:ConfigurationNode
Gets the appropriately transformed typed version of this node's value from the provided transformation function.- Specified by:
getValue
in interfaceConfigurationNode
- Type Parameters:
T
- The expected type- Parameters:
transformer
- The transformation functiondef
- The default value to return if this node has no set value or is not of a convertible type- Returns:
- A transformed value of the correct type, or
def
either if no value is present or the value could not be converted
-
getValue
public <T> T getValue(@NonNull Function<Object,T> transformer, @NonNull Supplier<T> defSupplier)
Description copied from interface:ConfigurationNode
Gets the appropriately transformed typed version of this node's value from the provided transformation function.- Specified by:
getValue
in interfaceConfigurationNode
- Type Parameters:
T
- The expected type- Parameters:
transformer
- The transformation functiondefSupplier
- The function that will be called to calculate a default value only if there is no existing value of the correct type- Returns:
- A transformed value of the correct type, or
def
either if no value is present or the value could not be converted
-
getList
public <T> @NonNull List<T> getList(@NonNull Function<Object,T> transformer)
Description copied from interface:ConfigurationNode
If this node has list values, this function unwraps them and converts them to an appropriate type based on the provided function.If this node has a scalar value, this function treats it as a list with one value
- Specified by:
getList
in interfaceConfigurationNode
- Type Parameters:
T
- The expected type- Parameters:
transformer
- The transformation function- Returns:
- An immutable copy of the values contained
-
getList
public <T> List<T> getList(@NonNull Function<Object,T> transformer, List<T> def)
Description copied from interface:ConfigurationNode
If this node has list values, this function unwraps them and converts them to an appropriate type based on the provided function.If this node has a scalar value, this function treats it as a list with one value.
- Specified by:
getList
in interfaceConfigurationNode
- Type Parameters:
T
- The expected type- Parameters:
transformer
- The transformation functiondef
- The default value if no appropriate value is set- Returns:
- An immutable copy of the values contained that could be successfully converted, or
def
if no values could be converted
-
getList
public <T> List<T> getList(@NonNull Function<Object,T> transformer, @NonNull Supplier<List<T>> defSupplier)
Description copied from interface:ConfigurationNode
If this node has list values, this function unwraps them and converts them to an appropriate type based on the provided function.If this node has a scalar value, this function treats it as a list with one value.
- Specified by:
getList
in interfaceConfigurationNode
- Type Parameters:
T
- The expected type- Parameters:
transformer
- The transformation functiondefSupplier
- The function that will be called to calculate a default value only if there is no existing value of the correct type- Returns:
- An immutable copy of the values contained that could be successfully converted, or
def
if no values could be converted
-
getList
public <T> List<T> getList(@NonNull TypeToken<T> type, List<T> def) throws ObjectMappingException
Description copied from interface:ConfigurationNode
If this node has list values, this function unwraps them and converts them to an appropriate type based on the provided function.If this node has a scalar value, this function treats it as a list with one value.
- Specified by:
getList
in interfaceConfigurationNode
- Type Parameters:
T
- The expected type- Parameters:
type
- The expected typedef
- The default value if no appropriate value is set- Returns:
- An immutable copy of the values contained that could be successfully converted, or
def
if no values could be converted - Throws:
ObjectMappingException
- If any value fails to be converted to the requested type
-
getList
public <T> List<T> getList(@NonNull TypeToken<T> type, @NonNull Supplier<List<T>> defSupplier) throws ObjectMappingException
Description copied from interface:ConfigurationNode
If this node has list values, this function unwraps them and converts them to an appropriate type based on the provided function.If this node has a scalar value, this function treats it as a list with one value.
- Specified by:
getList
in interfaceConfigurationNode
- Type Parameters:
T
- The expected type- Parameters:
type
- The expected typedefSupplier
- The function that will be called to calculate a default value only if there is no existing value of the correct type- Returns:
- An immutable copy of the values contained that could be successfully converted, or
def
if no values could be converted - Throws:
ObjectMappingException
- If any value fails to be converted to the requested type
-
getValue
public <T> T getValue(@NonNull TypeToken<T> type, T def) throws ObjectMappingException
Description copied from interface:ConfigurationNode
Get the current value associated with this node.If this node has children, this method will recursively unwrap them to construct a List or a Map.
This method will also perform deserialization using the appropriate TypeSerializer for the given type, or casting if no type serializer is found.
- Specified by:
getValue
in interfaceConfigurationNode
- Type Parameters:
T
- the type to get- Parameters:
type
- The type to deserialize todef
- The value to return if no value or value is not of appropriate type- Returns:
- the value if of the proper type, else
def
- Throws:
ObjectMappingException
- If the value fails to be converted to the requested type
-
getValue
public <T> T getValue(@NonNull TypeToken<T> type, @NonNull Supplier<T> defSupplier) throws ObjectMappingException
Description copied from interface:ConfigurationNode
Get the current value associated with this node.If this node has children, this method will recursively unwrap them to construct a List or a Map.
This method will also perform deserialization using the appropriate TypeSerializer for the given type, or casting if no type serializer is found.
- Specified by:
getValue
in interfaceConfigurationNode
- Type Parameters:
T
- the type to get- Parameters:
type
- The type to deserialize todefSupplier
- The function that will be called to calculate a default value only if there is no existing value of the correct type- Returns:
- the value if of the proper type, else
def
- Throws:
ObjectMappingException
- If the value fails to be converted to the requested type
-
setValue
public @NonNull SimpleConfigurationNode setValue(@Nullable Object newValue)
Description copied from interface:ConfigurationNode
Set this node's value to the given value.If the provided value is a
This method only accepts native types as values. If the type of a value is unknown at runtime,Collection
or aMap
, it will be unwrapped into the appropriate configuration node structure.ConfigurationOptions.acceptsType(Class)
will return whether or not it is a native type.- Specified by:
setValue
in interfaceConfigurationNode
- Parameters:
newValue
- The value to set- Returns:
- this
- See Also:
to set a value with any type conversion necessary
-
mergeValuesFrom
public @NonNull ConfigurationNode mergeValuesFrom(@NonNull ConfigurationNode other)
Description copied from interface:ConfigurationNode
Set all the values from the given node that are not present in this node to their values in the provided node.Map keys will be merged. Lists and scalar values will be replaced.
- Specified by:
mergeValuesFrom
in interfaceConfigurationNode
- Parameters:
other
- The node to merge values from- Returns:
- this
-
getNode
public @NonNull SimpleConfigurationNode getNode(@NonNull Object @NonNull ... path)
Description copied from interface:ConfigurationNode
Gets the node at the given (relative) path, possibly traversing multiple levels of nodes.This is the main method used to navigate through the configuration.
The path parameter effectively consumes an array of keys, which locate the unique position of a given node within the structure. Each element will navigate one level down in the configration hierarchy
A node is always returned by this method. If the given node does not exist in the structure, a
virtual
node will be returned which represents the position.- Specified by:
getNode
in interfaceConfigurationNode
- Parameters:
path
- The path to fetch the node at- Returns:
- The node at the given path, possibly virtual
-
getNode
public @NonNull SimpleConfigurationNode getNode(@NonNull Iterable<?> path)
Description copied from interface:ConfigurationNode
Gets the node at the given (relative) path, possibly traversing multiple levels of nodes.This is the main method used to navigate through the configuration.
The path parameter effectively consumes an iterable of keys, which locate the unique position of a given node within the structure.
A node is always returned by this method. If the given node does not exist in the structure, a
virtual
node will be returned which represents the position.- Specified by:
getNode
in interfaceConfigurationNode
- Parameters:
path
- The path to fetch the node at- Returns:
- The node at the given path, possibly virtual
-
isVirtual
public boolean isVirtual()
Description copied from interface:ConfigurationNode
Gets if this node is virtual.Virtual nodes are nodes which are not attached to a wider configuration structure.
A node is primarily "virtual" when it has no set value.
- Specified by:
isVirtual
in interfaceConfigurationNode
- Returns:
- true if this node is virtual
-
getValueType
public @NonNull ValueType getValueType()
Description copied from interface:ConfigurationNode
Gets the value type of this node.- Specified by:
getValueType
in interfaceConfigurationNode
- Returns:
- The value type
-
getChildrenList
public @NonNull List<? extends SimpleConfigurationNode> getChildrenList()
Description copied from interface:ConfigurationNode
Gets the "list children" attached to this node, if it has any.If this node does not
have list children
, an empty list is returned. For example, if the value of this node is a map, this will return an empty result.- Specified by:
getChildrenList
in interfaceConfigurationNode
- Returns:
- The list children currently attached to this node
-
getChildrenMap
public @NonNull Map<Object,? extends SimpleConfigurationNode> getChildrenMap()
Description copied from interface:ConfigurationNode
Gets the "map children" attached to this node, if it has any.If this node does not
have map children
, an empty map returned.- Specified by:
getChildrenMap
in interfaceConfigurationNode
- Returns:
- The map children currently attached to this node
-
isEmpty
public boolean isEmpty()
Description copied from interface:ConfigurationNode
Return true when this node has a null or empty value. Values that may result in this method returning true include:null
- the empty string
- an empty map
- an empty list
- Any other type of empty collection
ConfigurationNode.isVirtual()
. Emptiness refers to the value of this node itself, while virtuality refers to whether or not this node is attached to its parent and the rest of the configuration structure.- Specified by:
isEmpty
in interfaceConfigurationNode
- Returns:
- Whether this node is empty
-
getChild
protected SimpleConfigurationNode getChild(Object key, boolean attach)
Gets a child node, relative to this.- Parameters:
key
- The keyattach
- If the resultant node should be automatically attached- Returns:
- The child node
-
removeChild
public boolean removeChild(@NonNull Object key)
Description copied from interface:ConfigurationNode
Removes a direct child of this node- Specified by:
removeChild
in interfaceConfigurationNode
- Parameters:
key
- The key of the node to remove- Returns:
- If a node was removed
-
getAppendedNode
@Deprecated public @NonNull SimpleConfigurationNode getAppendedNode()
Deprecated.Description copied from interface:ConfigurationNode
Gets a new child node created as the next entry in the list.- Specified by:
getAppendedNode
in interfaceConfigurationNode
- Returns:
- A new child created as the next entry in the list when it is attached
-
getKey
public @Nullable Object getKey()
Description copied from interface:ConfigurationNode
Gets the "key" of this node.The key determines this
ConfigurationNode
s position within the overall configuration structure.If this node is currently
virtual
, this method's result may be inaccurate.Note that this method only returns the nearest "link" in the hierarchy, and does not return a representation of the full path. See
ConfigurationNode.getPath()
for that.The
ConfigurationNode
s returned as values fromConfigurationNode.getChildrenMap()
will have keys derived from their pairing in the map node.The
ConfigurationNode
s returned fromConfigurationNode.getChildrenList()
will have keys derived from their position (index) in the list node.- Specified by:
getKey
in interfaceConfigurationNode
- Returns:
- The key of this node
-
getPath
public @NonNull Object[] getPath()
Description copied from interface:ConfigurationNode
Gets the full path ofkeys
from the root node to this node.Node implementations may not keep a full path for each node, so this method may be somewhat complex to calculate. Most uses should not need to calculate the full path unless providing debug information
- Specified by:
getPath
in interfaceConfigurationNode
- Returns:
- An array compiled from the keys for each node up the hierarchy
- See Also:
for this node's key relative to its direct parent
-
getParent
public @Nullable SimpleConfigurationNode getParent()
Description copied from interface:ConfigurationNode
Gets the parent of this node.If this node is currently
virtual
, this method's result may be inaccurate.- Specified by:
getParent
in interfaceConfigurationNode
- Returns:
- The nodes parent
-
getOptions
public @NonNull ConfigurationOptions getOptions()
Description copied from interface:ConfigurationNode
Gets the options that currently apply to this node- Specified by:
getOptions
in interfaceConfigurationNode
- Returns:
- The ConfigurationOptions instance that governs the functionality of this node
-
copy
public @NonNull SimpleConfigurationNode copy()
Description copied from interface:ConfigurationNode
Creates a deep copy of this node.If this node has child nodes (is a list or map), the child nodes will also be copied. This action is performed recursively.
The resultant node will (initially) contain the same value(s) as this node, and will therefore be
equal
, however, changes made to the original will not be reflected in the copy, and vice versa.The actual scalar values that back the configuration will not be copied - only the node structure that forms the configuration. This is not a problem in most cases, as the scalar values stored in configurations are usually immutable. (e.g. strings, numbers, booleans).
- Specified by:
copy
in interfaceConfigurationNode
- Returns:
- A copy of this node
-
copy
protected @NonNull SimpleConfigurationNode copy(@Nullable SimpleConfigurationNode parent)
-
attachIfNecessary
protected void attachIfNecessary()
-
createNode
protected SimpleConfigurationNode createNode(Object path)
-
attachChildIfAbsent
protected SimpleConfigurationNode attachChildIfAbsent(SimpleConfigurationNode child)
-
clear
protected void clear()
-
visit
public <S,T,E extends Exception> T visit(ConfigurationVisitor<S,T,E> visitor, S state) throws E extends Exception
Description copied from interface:ConfigurationNode
Visit this node hierarchy as described inConfigurationVisitor
- Specified by:
visit
in interfaceConfigurationNode
- Type Parameters:
S
- The state typeT
- The terminal typeE
- exception type that may be thrown- Parameters:
visitor
- The visitorstate
- The state to start with- Returns:
- The returned terminal from the visitor
- Throws:
E
- when throw by visitor implementationE extends Exception
-
visit
public <S,T> T visit(ConfigurationVisitor.Safe<S,T> visitor, S state)
Description copied from interface:ConfigurationNode
Visit this node hierarchy as described inConfigurationVisitor
This overload will remove the need for exception handling for visitors that do not have any checked exceptions.- Specified by:
visit
in interfaceConfigurationNode
- Type Parameters:
S
- The state typeT
- The terminal type- Parameters:
visitor
- The visitorstate
- The state to start with- Returns:
- The returned terminal from the visitor
-
-