Class ModelNode
- java.lang.Object
-
- org.jboss.dmr.ModelNode
-
- All Implemented Interfaces:
Externalizable,Serializable,Cloneable
public class ModelNode extends Object implements Externalizable, Cloneable
A dynamic model representation node object.A node can be of any type specified in the
ModelTypeenumeration. The type can be queried viagetType()and updated via any of theset*()methods. The value of the node can be acquired via theas<type>()methods, where<type>is the desired value type. If the type is not the same as the node type, a conversion is attempted between the types.A node can be made read-only by way of its
protect()method, which will prevent any further changes to the node or its sub-nodes.Instances of this class are not thread-safe and need to be synchronized externally.
- Author:
- David M. Lloyd, Richard Opalka
- See Also:
- Serialized Form
-
-
Constructor Summary
Constructors Constructor Description ModelNode()Creates a newModelNodewith an undefined value.ModelNode(boolean value)Creates a newModelNodewith the givenvalue.ModelNode(byte[] value)Creates a newModelNodewith the givenvalue.ModelNode(double value)Creates a newModelNodewith the givenvalue.ModelNode(int value)Creates a newModelNodewith the givenvalue.ModelNode(long value)Creates a newModelNodewith the givenvalue.ModelNode(String value)Creates a newModelNodewith the givenvalue.ModelNode(BigDecimal value)Creates a newModelNodewith the givenvalue.ModelNode(BigInteger value)Creates a newModelNodewith the givenvalue.ModelNode(ModelType value)Creates a newModelNodewith the givenvalue.ModelNode(ValueExpression value)Creates a newModelNodewith the givenvalue.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Deprecated Methods Modifier and Type Method Description ModelNodeadd()Add a node to the end of this node's value list and return it.ModelNodeadd(boolean newValue)Add the given value to the end of this node's value list.ModelNodeadd(byte[] newValue)Add the given value to the end of this node's value list.ModelNodeadd(double newValue)Add the given value to the end of this node's value list.ModelNodeadd(int newValue)Add the given value to the end of this node's value list.ModelNodeadd(long newValue)Add the given value to the end of this node's value list.ModelNodeadd(String newValue)Add the given value to the end of this node's value list.ModelNodeadd(String propertyName, boolean propertyValue)Add a property with the given name and value to the end of this node's value list.ModelNodeadd(String propertyName, byte[] propertyValue)Add a property with the given name and value to the end of this node's value list.ModelNodeadd(String propertyName, double propertyValue)Add a property with the given name and value to the end of this node's value list.ModelNodeadd(String propertyName, int propertyValue)Add a property with the given name and value to the end of this node's value list.ModelNodeadd(String propertyName, long propertyValue)Add a property with the given name and value to the end of this node's value list.ModelNodeadd(String propertyName, String propertyValue)Add a property with the given name and value to the end of this node's value list.ModelNodeadd(String propertyName, BigDecimal propertyValue)Add a property with the given name and value to the end of this node's value list.ModelNodeadd(String propertyName, BigInteger propertyValue)Add a property with the given name and value to the end of this node's value list.ModelNodeadd(String propertyName, ModelNode propertyValue)Add a property with the given name and value to the end of this node's value list.ModelNodeadd(String propertyName, ValueExpression propertyValue)Add a property with the given name and value to the end of this node's value list.ModelNodeadd(BigDecimal newValue)Add the given value to the end of this node's value list.ModelNodeadd(BigInteger newValue)Add the given value to the end of this node's value list.ModelNodeadd(ModelNode newValue)Add a copy of the given value to the end of this node's value list.ModelNodeadd(Property property)Add a property to the end of this node's value list.ModelNodeadd(ValueExpression newValue)Add the given value to the end of this node's value list.ModelNodeaddEmptyList()Add a node of typeModelType.LISTto the end of this node's value list and return it.ModelNodeaddEmptyObject()Add a node of typeModelType.OBJECTto the end of this node's value list and return it.ModelNodeaddExpression(String newValue)Deprecated.Useadd(ValueExpression)instead.BigDecimalasBigDecimal()Get the value of this node as aBigDecimal.BigDecimalasBigDecimalOrNull()BigIntegerasBigInteger()Get the value of this node as aBigInteger.BigIntegerasBigIntegerOrNull()booleanasBoolean()Get the value of this node as aboolean.booleanasBoolean(boolean defVal)Get the value of this node as aboolean.BooleanasBooleanOrNull()byte[]asBytes()Get the value of this node as a byte array.byte[]asBytesOrNull()Get the value of this node as a byte array ornullif this node is notdefined.doubleasDouble()Get the value of this node as adouble.doubleasDouble(double defVal)Get the value of this node as andouble.DoubleasDoubleOrNull()ValueExpressionasExpression()Get the value of this node as an expression.intasInt()Get the value of this node as anint.intasInt(int defVal)Get the value of this node as anint.IntegerasIntOrNull()List<ModelNode>asList()Get the list of entries contained in this object.List<ModelNode>asList(List<ModelNode> defVal)List<ModelNode>asListOrEmpty()longasLong()Get the value of this node as along.longasLong(long defVal)Get the value of this node as along.LongasLongOrNull()ModelNodeasObject()Get a copy of this value as an object.PropertyasProperty()Get the value of this node as a property.List<Property>asPropertyList()Get the value of this node as a property list.List<Property>asPropertyList(List<Property> defaultValue)Get the value of this node as a property list.List<Property>asPropertyListOrEmpty()Get the value of this node as a property list.StringasString()Get the value as a string.StringasString(String defVal)Get the value as a string.StringasStringOrNull()Get the value as a string ornullif this node is notdefined.ModelTypeasType()Get the value of this node as a type, expressed using theModelTypeenum.ModelNodeclear()Clear this node's value and change its type toModelType.UNDEFINED.ModelNodeclone()Clone this model node.booleanequals(Object other)Determine whether this object is equal to another.booleanequals(ModelNode other)Determine whether this object is equal to another.static ModelNodefromBase64(InputStream stream)Reads base64 data from the passed stream, and deserializes the decoded result.static ModelNodefromBase64String(String encoded)Reads base64 data from the passed string, and deserializes the decoded result.static ModelNodefromJSONStream(InputStream stream)Get a model node from a JSON text representation of the model node.static ModelNodefromJSONString(String input)static ModelNodefromStream(InputStream stream)Get a model node from a text representation of the model node.static ModelNodefromString(String input)Get a model node from a string representation of the model node.ModelNodeget(int index)Get the child of this node with the given index.ModelNodeget(String name)Get the child of this node with the given name.ModelNodeget(String... names)Recursively get the children of this node with the given names.ModelTypegetType()Get the current type of this node.booleanhas(int index)Determine whether this node has a child with the given index.booleanhas(String key)Determine whether this node has a child with the given name.booleanhas(String... names)Recursively determine whether this node has children with the given names.booleanhasDefined(int index)Determine whether this node has a defined child with the given index.booleanhasDefined(String key)Determine whether this node has a defined child with the given name.booleanhasDefined(String... names)Recursively determine whether this node has defined children with the given names.inthashCode()Get the hash code of this node object.ModelNodeinsert(int index)Insert a node at provided index of this node's value list and return it.ModelNodeinsert(ModelNode newValue, int index)insert copy of the given value to provided index of this node's value list.booleanisDefined()Determine whether this node is defined.booleanisProtected()Returns whether this node has beenprotected.Set<String>keys()Get the set of keys contained in this object.voidprotect()Prevent further modifications to this node and its sub-nodes.voidreadExternal(DataInput in)Read this node's content in binary format from the given source.voidreadExternal(DataInputStream in)Read this node's content in binary format from the given source.voidreadExternal(InputStream in)Read this node's content in binary format from the given source.voidreadExternal(ObjectInput in)Read this node's content in binary format from the given source.ModelNoderemove(int index)Remove a child of this list, returning the child.ModelNoderemove(String name)Remove a child of this node, returning the child.ModelNoderequire(int index)Require the existence of a child of this node with the given index, returning the child.ModelNoderequire(String name)Require the existence of a child of this node with the given name, returning the child.ModelNoderesolve()Return a copy of this model node, with all values of typeModelType.EXPRESSIONlocally resolved.ModelNodeset(boolean newValue)Change this node's value to the given value.ModelNodeset(byte[] newValue)Change this node's value to the given value.ModelNodeset(double newValue)Change this node's value to the given value.ModelNodeset(int newValue)Change this node's value to the given value.ModelNodeset(long newValue)Change this node's value to the given value.ModelNodeset(String newValue)Change this node's value to the given value.ModelNodeset(String propertyName, boolean propertyValue)Change this node's value to a property with the given name and value.ModelNodeset(String propertyName, byte[] propertyValue)Change this node's value to a property with the given name and value.ModelNodeset(String propertyName, double propertyValue)Change this node's value to a property with the given name and value.ModelNodeset(String propertyName, int propertyValue)Change this node's value to a property with the given name and value.ModelNodeset(String propertyName, long propertyValue)Change this node's value to a property with the given name and value.ModelNodeset(String propertyName, String propertyValue)Change this node's value to a property with the given name and value.ModelNodeset(String propertyName, BigDecimal propertyValue)Change this node's value to a property with the given name and value.ModelNodeset(String propertyName, BigInteger propertyValue)Change this node's value to a property with the given name and value.ModelNodeset(String propertyName, ModelNode propertyValue)Change this node's value to a property with the given name and value.ModelNodeset(String propertyName, ModelType propertyValue)Change this node's value to a property with the given name and value.ModelNodeset(String propertyName, ValueExpression propertyValue)Change this node's value to a property with the given name and value.ModelNodeset(BigDecimal newValue)Change this node's value to the given value.ModelNodeset(BigInteger newValue)Change this node's value to the given value.ModelNodeset(Collection<ModelNode> newValue)Change this node's value to a list whose values are copied from the given collection.ModelNodeset(ModelNode newValue)Change this node's value to the given value.ModelNodeset(ModelType newValue)Change this node's value to the given value.ModelNodeset(Property newValue)Change this node's value to the given value.ModelNodeset(ValueExpression newValue)Change this node's value to the given value.ModelNodesetEmptyList()Change this node's value to an empty list.ModelNodesetEmptyObject()Change this node's value to an empty object.ModelNodesetExpression(String newValue)Deprecated.Useset(ValueExpression)instead.ModelNodesetExpression(String propertyName, String propertyValue)Deprecated.Useset(String,ValueExpression)instead.StringtoJSONString(boolean compact)Get a JSON string representation of this model node, formatted nicely, if requested.StringtoString()Get a human-readable string representation of this model node, formatted nicely (possibly on multiple lines).voidwriteBase64(OutputStream stream)Encodes the serialized representation in base64 form and writes it to the specified output stream.voidwriteExternal(DataOutput out)Write this node's content in binary format to the given target.voidwriteExternal(DataOutputStream out)Write this node's content in binary format to the given target.voidwriteExternal(ObjectOutput out)Write this node's content in binary format to the given target.voidwriteExternal(OutputStream out)Write this node's content in binary format to the given target.voidwriteJSONString(PrintWriter writer, boolean compact)Output the JSON string representation of this model node, formatted nicely, if requested to the supplied PrintWriter instance.voidwriteString(PrintWriter writer, boolean compact)Output the DMR string representation of this model node, formatted nicely, if requested to the supplied PrintWriter instance.
-
-
-
Constructor Detail
-
ModelNode
public ModelNode()
Creates a newModelNodewith an undefined value.
-
ModelNode
public ModelNode(BigDecimal value)
Creates a newModelNodewith the givenvalue.- Parameters:
value- the value. Cannot benull- Throws:
IllegalArgumentException- ifvalueisnull
-
ModelNode
public ModelNode(BigInteger value)
Creates a newModelNodewith the givenvalue.- Parameters:
value- the value. Cannot benull- Throws:
IllegalArgumentException- ifvalueisnull
-
ModelNode
public ModelNode(boolean value)
Creates a newModelNodewith the givenvalue.- Parameters:
value- the value.
-
ModelNode
public ModelNode(byte[] value)
Creates a newModelNodewith the givenvalue.- Parameters:
value- the value. Cannot benull- Throws:
IllegalArgumentException- ifvalueisnull
-
ModelNode
public ModelNode(double value)
Creates a newModelNodewith the givenvalue.- Parameters:
value- the value.
-
ModelNode
public ModelNode(int value)
Creates a newModelNodewith the givenvalue.- Parameters:
value- the value.
-
ModelNode
public ModelNode(long value)
Creates a newModelNodewith the givenvalue.- Parameters:
value- the value.
-
ModelNode
public ModelNode(String value)
Creates a newModelNodewith the givenvalue.- Parameters:
value- the value. Cannot benull- Throws:
IllegalArgumentException- ifvalueisnull
-
ModelNode
public ModelNode(ValueExpression value)
Creates a newModelNodewith the givenvalue.- Parameters:
value- the value. Cannot benull- Throws:
IllegalArgumentException- ifvalueisnull
-
ModelNode
public ModelNode(ModelType value)
Creates a newModelNodewith the givenvalue.- Parameters:
value- the value. Cannot benull- Throws:
IllegalArgumentException- ifvalueisnull
-
-
Method Detail
-
protect
public void protect()
Prevent further modifications to this node and its sub-nodes. Note that copies of this node made after this method call will not be protected.
-
isProtected
public boolean isProtected()
Returns whether this node has beenprotected.- Returns:
trueifprotect()has been invoked on this node
-
asLong
public long asLong() throws IllegalArgumentExceptionGet the value of this node as along. Collection types will return the size of the collection for this value. Other types may attempt a string conversion.- Returns:
- the long value
- Throws:
IllegalArgumentException- if this node is notdefinedor if no conversion is possible
-
asLong
public long asLong(long defVal)
Get the value of this node as along. Collection types will return the size of the collection for this value. Other types may attempt a string conversion.- Parameters:
defVal- the default value to return if this node is notdefined- Returns:
- the long value
- Throws:
NumberFormatException- if this node'stypeisModelType.STRINGand a numeric conversion of the string value is not possibleIllegalArgumentException- if this node'stypeis one where no numeric conversion is possible
-
asLongOrNull
public Long asLongOrNull()
Get the value of this node as aLong, ornullif this node is notdefined. Collection types will return the size of the collection for this value. Other types may attempt a string conversion.- Returns:
- the long value or
null - Throws:
NumberFormatException- if this node'stypeisModelType.STRINGand a numeric conversion of the string value is not possibleIllegalArgumentException- if this node'stypeis one where no numeric conversion is possible
-
asInt
public int asInt() throws IllegalArgumentExceptionGet the value of this node as anint. Collection types will return the size of the collection for this value. Other types may attempt a string conversion.- Returns:
- the int value
- Throws:
IllegalArgumentException- if this node is notdefinedor if no conversion is possible
-
asInt
public int asInt(int defVal)
Get the value of this node as anint. Collection types will return the size of the collection for this value. Other types may attempt a string conversion.- Parameters:
defVal- the default value to return if this node is notdefined- Returns:
- the int value
- Throws:
NumberFormatException- if this node'stypeisModelType.STRINGand a numeric conversion of the string value is not possibleIllegalArgumentException- if this node'stypeis one where no numeric conversion is possible
-
asIntOrNull
public Integer asIntOrNull()
Get the value of this node as anint, ornullif this node is notdefined. Collection types will return the size of the collection for this value. Other types may attempt a string conversion.- Returns:
- the int value or
null - Throws:
IllegalArgumentException- if no conversion is possible
-
asBoolean
public boolean asBoolean() throws IllegalArgumentExceptionGet the value of this node as aboolean. Collection types returntruefor non-empty collections. Numerical types returntruefor non-zero values.- Returns:
- the boolean value
- Throws:
IllegalArgumentException- if this node is notdefinedor if no conversion is possible
-
asBoolean
public boolean asBoolean(boolean defVal)
Get the value of this node as aboolean. Collection types returntruefor non-empty collections. Numerical types returntruefor non-zero values.- Parameters:
defVal- the default value to return if this node is notdefined- Returns:
- the boolean value
- Throws:
IllegalArgumentException- if this node'stypeis one where no numeric conversion is possible or if the type isModelType.STRINGand the string value is not equal, ignoring case, to the literaltrueorfalse
-
asBooleanOrNull
public Boolean asBooleanOrNull() throws IllegalArgumentException
Get the value of this node as aboolean, ornullif this node is notdefined. Collection types returntruefor non-empty collections. Numerical types returntruefor non-zero values.- Returns:
- the boolean value or
null - Throws:
IllegalArgumentException- if no conversion is possible
-
asString
public String asString()
Get the value as a string. This is the literal value of this model node. More than one node type may yield the same value for this method.- Returns:
- the string value. A node that is not
definedreturns the literal stringundefined
-
asString
public String asString(String defVal)
Get the value as a string. This is the literal value of this model node. More than one node type may yield the same value for this method.- Parameters:
defVal- the default value to return if this node is notdefined- Returns:
- the string value.
-
asStringOrNull
public String asStringOrNull()
Get the value as a string ornullif this node is notdefined. This is the literal value of this model node. More than one node type may yield the same value for this method.- Returns:
- the string value or
null
-
asDouble
public double asDouble() throws IllegalArgumentExceptionGet the value of this node as adouble. Collection types will return the size of the collection for this value. Other types may attempt a string conversion.- Returns:
- the double value
- Throws:
IllegalArgumentException- if this node is notdefinedor if no conversion is possible
-
asDouble
public double asDouble(double defVal)
Get the value of this node as andouble. Collection types will return the size of the collection for this value. Other types may attempt a string conversion.- Parameters:
defVal- the default value to return if this node is notdefined- Returns:
- the int value
- Throws:
NumberFormatException- if this node'stypeisModelType.STRINGand a numeric conversion of the string value is not possibleIllegalArgumentException- if this node'stypeis one where no numeric conversion is possible
-
asDoubleOrNull
public Double asDoubleOrNull() throws IllegalArgumentException
Get the value of this node as adoubleornullif this node is notdefined. Collection types will return the size of the collection for this value. Other types may attempt a string conversion.- Returns:
- the double value or
null - Throws:
IllegalArgumentException- if no conversion is possible
-
asType
public ModelType asType() throws IllegalArgumentException
Get the value of this node as a type, expressed using theModelTypeenum. The string value of this node must be convertible to a type.- Returns:
- the
ModelTypevalue - Throws:
IllegalArgumentException- if this node is notdefinedor if no conversion is possible
-
asBigDecimal
public BigDecimal asBigDecimal() throws IllegalArgumentException
Get the value of this node as aBigDecimal. Collection types will return the size of the collection for this value. Other types may attempt a string conversion.- Returns:
- the
BigDecimalvalue - Throws:
IllegalArgumentException- if this node is notdefinedor if no conversion is possible
-
asBigDecimalOrNull
public BigDecimal asBigDecimalOrNull() throws IllegalArgumentException
Get the value of this node as aBigDecimalornullif this node is notdefined. Collection types will return the size of the collection for this value. Other types may attempt a string conversion.- Returns:
- the
BigDecimalvalue ornull - Throws:
IllegalArgumentException- if no conversion is possible
-
asBigInteger
public BigInteger asBigInteger() throws IllegalArgumentException
Get the value of this node as aBigInteger. Collection types will return the size of the collection for this value. Other types may attempt a string conversion.- Returns:
- the
BigIntegervalue - Throws:
IllegalArgumentException- if this node is notdefinedor if no conversion is possible
-
asBigIntegerOrNull
public BigInteger asBigIntegerOrNull() throws IllegalArgumentException
Get the value of this node as aBigIntegerornullif this node is notdefined. Collection types will return the size of the collection for this value. Other types may attempt a string conversion.- Returns:
- the
BigIntegervalue ornull - Throws:
IllegalArgumentException- if no conversion is possible
-
asBytes
public byte[] asBytes() throws IllegalArgumentExceptionGet the value of this node as a byte array. Strings and string-like values will return the UTF-8 encoding of the string. Numerical values will return the byte representation of the number.- Returns:
- the bytes
- Throws:
IllegalArgumentException- if this node is notdefinedor if no conversion is possible
-
asBytesOrNull
public byte[] asBytesOrNull() throws IllegalArgumentExceptionGet the value of this node as a byte array ornullif this node is notdefined. Strings and string-like values will return the UTF-8 encoding of the string. Numerical values will return the byte representation of the number.- Returns:
- the bytes or
null - Throws:
IllegalArgumentException- if no conversion is possible
-
asExpression
public ValueExpression asExpression() throws IllegalArgumentException
Get the value of this node as an expression.- Returns:
- the expression
- Throws:
IllegalArgumentException- if this node is notdefinedor if no conversion is possible
-
asProperty
public Property asProperty() throws IllegalArgumentException
Get the value of this node as a property. Object values will return a property if there is exactly one property in the object. List values will return a property if there are exactly two items in the list, and if the first is convertible to a string.- Returns:
- the property value
- Throws:
IllegalArgumentException- if this node is notdefinedor if no conversion is possible
-
asPropertyList
public List<Property> asPropertyList() throws IllegalArgumentException
Get the value of this node as a property list. Object values will return a list of properties representing each key-value pair in the object. List values will return all the values of the list, failing if any of the values are not convertible to a property value.- Returns:
- the property list value
- Throws:
IllegalArgumentException- if this node is notdefinedor if no conversion is possible
-
asPropertyListOrEmpty
public List<Property> asPropertyListOrEmpty() throws IllegalArgumentException
Get the value of this node as a property list. Object values will return a list of properties representing each key-value pair in the object. List values will return all the values of the list, failing if any of the values are not convertible to a property value.- Returns:
- the property list value or an empty list if not
defined. - Throws:
IllegalArgumentException- if no conversion is possible
-
asPropertyList
public List<Property> asPropertyList(List<Property> defaultValue) throws IllegalArgumentException
Get the value of this node as a property list. Object values will return a list of properties representing each key-value pair in the object. List values will return all the values of the list, failing if any of the values are not convertible to a property value.- Parameters:
defaultValue- the value to return if notdefined.- Returns:
- the property list value or the specified default value if not
defined. - Throws:
IllegalArgumentException- if no conversion is possible
-
asObject
public ModelNode asObject() throws IllegalArgumentException
Get a copy of this value as an object. Object values will simply copy themselves as by theclone()method. Property values will return a single-entry object whose key and value are copied from the property key and value. List values will attempt to interpolate the list into an object by iterating each item, mapping each property into an object entry and otherwise taking pairs of list entries, converting the first to a string, and using the pair of entries as a single object entry. If an object key appears more than once in the source object, the last key takes precedence.- Returns:
- the object value
- Throws:
IllegalArgumentException- if this node is notdefinedor if no conversion is possible
-
isDefined
public boolean isDefined()
Determine whether this node is defined. Equivalent to the expression:getType() != ModelType.UNDEFINED.- Returns:
trueif this node's value is defined
-
set
public ModelNode set(int newValue)
Change this node's value to the given value.- Parameters:
newValue- the new value- Returns:
- this node
-
set
public ModelNode set(long newValue)
Change this node's value to the given value.- Parameters:
newValue- the new value- Returns:
- this node
-
set
public ModelNode set(double newValue)
Change this node's value to the given value.- Parameters:
newValue- the new value- Returns:
- this node
-
set
public ModelNode set(boolean newValue)
Change this node's value to the given value.- Parameters:
newValue- the new value- Returns:
- this node
-
setExpression
@Deprecated public ModelNode setExpression(String newValue)
Deprecated.Useset(ValueExpression)instead.Change this node's value to the given expression value.- Parameters:
newValue- the new value- Returns:
- this node
-
set
public ModelNode set(ValueExpression newValue)
Change this node's value to the given value.- Parameters:
newValue- the new value- Returns:
- this node
-
set
public ModelNode set(String newValue)
Change this node's value to the given value.- Parameters:
newValue- the new value- Returns:
- this node
-
set
public ModelNode set(BigDecimal newValue)
Change this node's value to the given value.- Parameters:
newValue- the new value- Returns:
- this node
-
set
public ModelNode set(BigInteger newValue)
Change this node's value to the given value.- Parameters:
newValue- the new value- Returns:
- this node
-
set
public ModelNode set(ModelNode newValue)
Change this node's value to the given value. The value is copied from the parameter.- Parameters:
newValue- the new value- Returns:
- this node
-
set
public ModelNode set(byte[] newValue)
Change this node's value to the given value.- Parameters:
newValue- the new value- Returns:
- this node
-
set
public ModelNode set(ModelType newValue)
Change this node's value to the given value.- Parameters:
newValue- the new value- Returns:
- this node
-
set
public ModelNode set(Property newValue)
Change this node's value to the given value.- Parameters:
newValue- the new value- Returns:
- this node
-
set
public ModelNode set(String propertyName, ModelNode propertyValue)
Change this node's value to a property with the given name and value.- Parameters:
propertyName- the property namepropertyValue- the property value- Returns:
- this node
-
set
public ModelNode set(String propertyName, int propertyValue)
Change this node's value to a property with the given name and value.- Parameters:
propertyName- the property namepropertyValue- the property value- Returns:
- this node
-
set
public ModelNode set(String propertyName, long propertyValue)
Change this node's value to a property with the given name and value.- Parameters:
propertyName- the property namepropertyValue- the property value- Returns:
- this node
-
set
public ModelNode set(String propertyName, double propertyValue)
Change this node's value to a property with the given name and value.- Parameters:
propertyName- the property namepropertyValue- the property value- Returns:
- this node
-
set
public ModelNode set(String propertyName, boolean propertyValue)
Change this node's value to a property with the given name and value.- Parameters:
propertyName- the property namepropertyValue- the property value- Returns:
- this node
-
set
public ModelNode set(String propertyName, String propertyValue)
Change this node's value to a property with the given name and value.- Parameters:
propertyName- the property namepropertyValue- the property value- Returns:
- this node
-
setExpression
@Deprecated public ModelNode setExpression(String propertyName, String propertyValue)
Deprecated.Useset(String,ValueExpression)instead.Change this node's value to a property with the given name and expression value.- Parameters:
propertyName- the property namepropertyValue- the property expression value- Returns:
- this node
-
set
public ModelNode set(String propertyName, ValueExpression propertyValue)
Change this node's value to a property with the given name and value.- Parameters:
propertyName- the property namepropertyValue- the property value- Returns:
- this node
-
set
public ModelNode set(String propertyName, BigDecimal propertyValue)
Change this node's value to a property with the given name and value.- Parameters:
propertyName- the property namepropertyValue- the property value- Returns:
- this node
-
set
public ModelNode set(String propertyName, BigInteger propertyValue)
Change this node's value to a property with the given name and value.- Parameters:
propertyName- the property namepropertyValue- the property value- Returns:
- this node
-
set
public ModelNode set(String propertyName, byte[] propertyValue)
Change this node's value to a property with the given name and value.- Parameters:
propertyName- the property namepropertyValue- the property value- Returns:
- this node
-
set
public ModelNode set(String propertyName, ModelType propertyValue)
Change this node's value to a property with the given name and value.- Parameters:
propertyName- the property namepropertyValue- the property value- Returns:
- this node
-
set
public ModelNode set(Collection<ModelNode> newValue)
Change this node's value to a list whose values are copied from the given collection.- Parameters:
newValue- the list value- Returns:
- this node
-
setEmptyList
public ModelNode setEmptyList()
Change this node's value to an empty list.- Returns:
- this node
-
setEmptyObject
public ModelNode setEmptyObject()
Change this node's value to an empty object.- Returns:
- this node
-
clear
public ModelNode clear()
Clear this node's value and change its type toModelType.UNDEFINED.- Returns:
- this node
-
get
public ModelNode get(String name)
Get the child of this node with the given name. If no such child exists, create it. If the node is undefined, it will be initialized to be of typeModelType.OBJECT.When called on property values, the name must match the property name.
- Parameters:
name- the child name- Returns:
- the child
- Throws:
IllegalArgumentException- if this node does not support getting a child with the given name
-
require
public ModelNode require(String name) throws NoSuchElementException
Require the existence of a child of this node with the given name, returning the child. If no such child exists, an exception is thrown.When called on property values, the name must match the property name.
- Parameters:
name- the child name- Returns:
- the child
- Throws:
NoSuchElementException- if the element does not exist
-
remove
public ModelNode remove(String name) throws NoSuchElementException
Remove a child of this node, returning the child. If no such child exists,nullis returned.When called on property values, the name must match the property name.
- Parameters:
name- the child name- Returns:
- the child, or
nullif no child with the givennameexists - Throws:
NoSuchElementException
-
remove
public ModelNode remove(int index) throws NoSuchElementException
Remove a child of this list, returning the child. If no such child exists, an exception is thrown.When called on property values, the name must match the property name.
- Parameters:
index- the child index- Returns:
- the child
- Throws:
NoSuchElementException- if the element does not exist
-
get
public ModelNode get(int index)
Get the child of this node with the given index. If no such child exists, create it (adding list entries as needed). If the node is undefined, it will be initialized to be of typeModelType.LIST.When called on property values, the index must be zero.
- Parameters:
index- the child index- Returns:
- the child
- Throws:
IllegalArgumentException- if this node does not support getting a child with the given index
-
require
public ModelNode require(int index)
Require the existence of a child of this node with the given index, returning the child. If no such child exists, an exception is thrown.When called on property values, the index must be zero.
- Parameters:
index- the child index- Returns:
- the child
- Throws:
NoSuchElementException- if the element does not exist
-
add
public ModelNode add(int newValue)
Add the given value to the end of this node's value list. If the node is undefined, it will be initialized to be of typeModelType.LIST.- Parameters:
newValue- the new value to add- Returns:
- this node
- Throws:
IllegalArgumentException- if this node isdefinedand itstypeis notModelType.LIST
-
add
public ModelNode add(long newValue)
Add the given value to the end of this node's value list. If the node is undefined, it will be initialized to be of typeModelType.LIST.- Parameters:
newValue- the new value to add- Returns:
- this node
- Throws:
IllegalArgumentException- if this node isdefinedand itstypeis notModelType.LIST
-
add
public ModelNode add(double newValue)
Add the given value to the end of this node's value list. If the node is undefined, it will be initialized to be of typeModelType.LIST.- Parameters:
newValue- the new value to add- Returns:
- this node
- Throws:
IllegalArgumentException- if this node isdefinedand itstypeis notModelType.LIST
-
add
public ModelNode add(boolean newValue)
Add the given value to the end of this node's value list. If the node is undefined, it will be initialized to be of typeModelType.LIST.- Parameters:
newValue- the new value to add- Returns:
- this node
- Throws:
IllegalArgumentException- if this node isdefinedand itstypeis notModelType.LIST
-
addExpression
@Deprecated public ModelNode addExpression(String newValue)
Deprecated.Useadd(ValueExpression)instead.Add the given expression to the end of this node's value list. If the node is undefined, it will be initialized to be of typeModelType.LIST.- Parameters:
newValue- the new value to add- Returns:
- this node
- Throws:
IllegalArgumentException- if this node isdefinedand itstypeis notModelType.LIST
-
add
public ModelNode add(ValueExpression newValue)
Add the given value to the end of this node's value list. If the node is undefined, it will be initialized to be of typeModelType.LIST.- Parameters:
newValue- the new value to add- Returns:
- this node
- Throws:
IllegalArgumentException- if this node isdefinedand itstypeis notModelType.LIST
-
add
public ModelNode add(String newValue)
Add the given value to the end of this node's value list. If the node is undefined, it will be initialized to be of typeModelType.LIST.- Parameters:
newValue- the new value to add- Returns:
- this node
- Throws:
IllegalArgumentException- if this node isdefinedand itstypeis notModelType.LIST
-
add
public ModelNode add(BigDecimal newValue)
Add the given value to the end of this node's value list. If the node is undefined, it will be initialized to be of typeModelType.LIST.- Parameters:
newValue- the new value to add- Returns:
- this node
- Throws:
IllegalArgumentException- if this node isdefinedand itstypeis notModelType.LIST
-
add
public ModelNode add(BigInteger newValue)
Add the given value to the end of this node's value list. If the node is undefined, it will be initialized to be of typeModelType.LIST.- Parameters:
newValue- the new value to add- Returns:
- this node
- Throws:
IllegalArgumentException- if this node isdefinedand itstypeis notModelType.LIST
-
add
public ModelNode add(ModelNode newValue)
Add a copy of the given value to the end of this node's value list. If the node is undefined, it will be initialized to be of typeModelType.LIST.- Parameters:
newValue- the new value to add- Returns:
- this node
- Throws:
IllegalArgumentException- if this node isdefinedand itstypeis notModelType.LIST
-
insert
public ModelNode insert(ModelNode newValue, int index)
insert copy of the given value to provided index of this node's value list. If the node is undefined, it will be initialized to be of typeModelType.LIST. An index equal to the current number of child elements held by this node is allowed (thus adding a child) but an index greater than that is not allowed (i.e. adding intervening elements is not supported.)- Parameters:
newValue- the new value to add- Returns:
- this node
- Throws:
IndexOutOfBoundsException- ifindexis greater than zero and is greater than the number of child nodes currently stored in this nodeIllegalArgumentException- if this node isdefinedand itstypeis notModelType.LIST
-
add
public ModelNode add(byte[] newValue)
Add the given value to the end of this node's value list. If the node is undefined, it will be initialized to be of typeModelType.LIST.- Parameters:
newValue- the new value to add- Returns:
- this node
- Throws:
IllegalArgumentException- if this node isdefinedand itstypeis notModelType.LIST
-
add
public ModelNode add(Property property)
Add a property to the end of this node's value list. If the node is undefined, it will be initialized to be of typeModelType.LIST.- Parameters:
property- the property- Returns:
- this node
- Throws:
IllegalArgumentException- if this node isdefinedand itstypeis notModelType.LIST
-
add
public ModelNode add(String propertyName, int propertyValue)
Add a property with the given name and value to the end of this node's value list. If the node is undefined, it will be initialized to be of typeModelType.LIST.- Parameters:
propertyName- the property namepropertyValue- the property value- Returns:
- this node
- Throws:
IllegalArgumentException- if this node isdefinedand itstypeis notModelType.LIST
-
add
public ModelNode add(String propertyName, long propertyValue)
Add a property with the given name and value to the end of this node's value list. If the node is undefined, it will be initialized to be of typeModelType.LIST.- Parameters:
propertyName- the property namepropertyValue- the property value- Returns:
- this node
- Throws:
IllegalArgumentException- if this node isdefinedand itstypeis notModelType.LIST
-
add
public ModelNode add(String propertyName, double propertyValue)
Add a property with the given name and value to the end of this node's value list. If the node is undefined, it will be initialized to be of typeModelType.LIST.- Parameters:
propertyName- the property namepropertyValue- the property value- Returns:
- this node
- Throws:
IllegalArgumentException- if this node isdefinedand itstypeis notModelType.LIST
-
add
public ModelNode add(String propertyName, boolean propertyValue)
Add a property with the given name and value to the end of this node's value list. If the node is undefined, it will be initialized to be of typeModelType.LIST.- Parameters:
propertyName- the property namepropertyValue- the property value- Returns:
- this node
- Throws:
IllegalArgumentException- if this node isdefinedand itstypeis notModelType.LIST
-
add
public ModelNode add(String propertyName, ValueExpression propertyValue)
Add a property with the given name and value to the end of this node's value list. If the node is undefined, it will be initialized to be of typeModelType.LIST.- Parameters:
propertyName- the property namepropertyValue- the property value- Returns:
- this node
- Throws:
IllegalArgumentException- if this node isdefinedand itstypeis notModelType.LIST
-
add
public ModelNode add(String propertyName, String propertyValue)
Add a property with the given name and value to the end of this node's value list. If the node is undefined, it will be initialized to be of typeModelType.LIST.- Parameters:
propertyName- the property namepropertyValue- the property value- Returns:
- this node
- Throws:
IllegalArgumentException- if this node isdefinedand itstypeis notModelType.LIST
-
add
public ModelNode add(String propertyName, BigDecimal propertyValue)
Add a property with the given name and value to the end of this node's value list. If the node is undefined, it will be initialized to be of typeModelType.LIST.- Parameters:
propertyName- the property namepropertyValue- the property value- Returns:
- this node
- Throws:
IllegalArgumentException- if this node isdefinedand itstypeis notModelType.LIST
-
add
public ModelNode add(String propertyName, BigInteger propertyValue)
Add a property with the given name and value to the end of this node's value list. If the node is undefined, it will be initialized to be of typeModelType.LIST.- Parameters:
propertyName- the property namepropertyValue- the property value- Returns:
- this node
- Throws:
IllegalArgumentException- if this node isdefinedand itstypeis notModelType.LIST
-
add
public ModelNode add(String propertyName, ModelNode propertyValue)
Add a property with the given name and value to the end of this node's value list. If the node is undefined, it will be initialized to be of typeModelType.LIST.- Parameters:
propertyName- the property namepropertyValue- the property value- Returns:
- this node
- Throws:
IllegalArgumentException- if this node isdefinedand itstypeis notModelType.LIST
-
add
public ModelNode add(String propertyName, byte[] propertyValue)
Add a property with the given name and value to the end of this node's value list. If the node is undefined, it will be initialized to be of typeModelType.LIST.- Parameters:
propertyName- the property namepropertyValue- the property value- Returns:
- this node
- Throws:
IllegalArgumentException- if this node isdefinedand itstypeis notModelType.LIST
-
add
public ModelNode add()
Add a node to the end of this node's value list and return it. If the node is undefined, it will be initialized to be of typeModelType.LIST.- Returns:
- the new node
- Throws:
IllegalArgumentException- if this node isdefinedand itstypeis notModelType.LIST
-
insert
public ModelNode insert(int index)
Insert a node at provided index of this node's value list and return it. If the node is undefined, it will be initialized to be of typeModelType.LIST. An index equal to the current number of child elements held by this node is allowed (thus adding a child) but an index greater than that is not allowed (i.e. adding intervening elements is not supported.)- Parameters:
index- where in list to put it- Returns:
- the new node
- Throws:
IndexOutOfBoundsException- ifindexis greater than zero and is greater than the number of child nodes currently stored in this nodeIllegalArgumentException- if this node isdefinedand itstypeis notModelType.LIST
-
addEmptyList
public ModelNode addEmptyList()
Add a node of typeModelType.LISTto the end of this node's value list and return it. If this node is undefined, it will be initialized to be of typeModelType.LIST.- Returns:
- the new node
- Throws:
IllegalArgumentException- if this node isdefinedand itstypeis notModelType.LIST
-
addEmptyObject
public ModelNode addEmptyObject()
Add a node of typeModelType.OBJECTto the end of this node's value list and return it. If this node is undefined, it will be initialized to be of typeModelType.LIST.- Returns:
- the new node
- Throws:
IllegalArgumentException- if this node isdefinedand itstypeis notModelType.LIST
-
has
public boolean has(int index)
Determine whether this node has a child with the given index. Property node types always contain exactly one value.- Parameters:
index- the index- Returns:
trueif there is a (possibly undefined) node at the given index
-
has
public boolean has(String key)
Determine whether this node has a child with the given name. Property node types always contain exactly one value with a key equal to the property name.- Parameters:
key- the name- Returns:
trueif there is a (possibly undefined) node at the given key
-
has
public boolean has(String... names)
Recursively determine whether this node has children with the given names. If any child along the path does not exist, returnfalse.- Parameters:
names- the child names- Returns:
trueif a call toget(String...)with the givennameswould succeed without needing to create any new nodes;falseotherwise
-
hasDefined
public boolean hasDefined(int index)
Determine whether this node has a defined child with the given index. Property node types always contain exactly one value.- Parameters:
index- the index- Returns:
trueif there is a node at the given index and itstypeis notModelType.UNDEFINED
-
hasDefined
public boolean hasDefined(String key)
Determine whether this node has a defined child with the given name. Property node types always contain exactly one value with a key equal to the property name.- Parameters:
key- the name- Returns:
trueif there is a node at the given index and itstypeis notModelType.UNDEFINED
-
hasDefined
public boolean hasDefined(String... names)
Recursively determine whether this node has defined children with the given names. If any child along the path does not exist or is not defined, returnfalse.- Parameters:
names- the child names- Returns:
trueif a call toget(String...)with the givennameswould succeed without needing to create any new nodes and without traversing any undefined nodes;falseotherwise
-
keys
public Set<String> keys()
Get the set of keys contained in this object. Property node types always contain exactly one value with a key equal to the property name. Other non-object types will throw an exception.- Returns:
- the key set
- Throws:
IllegalArgumentException- if this node'stypeis notModelType.OBJECTorModelType.PROPERTY
-
asList
public List<ModelNode> asList()
Get the list of entries contained in this object. Property node types always contain exactly one entry (itself). Lists will return an unmodifiable view of their contained list. Objects will return a list of properties corresponding to the mappings within the object. OtherisDefined()types will return an empty list.- Returns:
- the entry list
- Throws:
IllegalArgumentException- if this node is notdefined
-
asList
public List<ModelNode> asList(List<ModelNode> defVal)
- Parameters:
defVal- the default value to return if this node is not defined- Returns:
- the list value or an empty list
-
asListOrEmpty
public List<ModelNode> asListOrEmpty()
- Returns:
- the list value or an empty list (not
null)
-
get
public ModelNode get(String... names)
Recursively get the children of this node with the given names. If any child along the path does not exist, create it. If any node is the path is undefined, it will be initialized to be of typeModelType.OBJECT.- Parameters:
names- the child names- Returns:
- the child
- Throws:
IllegalArgumentException- if a node does not support getting a child with the given name path
-
toString
public String toString()
Get a human-readable string representation of this model node, formatted nicely (possibly on multiple lines).
-
writeString
public void writeString(PrintWriter writer, boolean compact)
Output the DMR string representation of this model node, formatted nicely, if requested to the supplied PrintWriter instance.- Parameters:
writer- A PrintWriter instance used to output the DMR string.compact- Flag that indicates whether or not the string should be all on one line (i.e.true) or should be printed on multiple lines (false).
-
toJSONString
public String toJSONString(boolean compact)
Get a JSON string representation of this model node, formatted nicely, if requested.- Parameters:
compact- Flag that indicates whether or not the string should be all on one line (i.e.true) or should be printed on multiple lines (false).- Returns:
- The JSON string.
-
writeJSONString
public void writeJSONString(PrintWriter writer, boolean compact)
Output the JSON string representation of this model node, formatted nicely, if requested to the supplied PrintWriter instance.- Parameters:
writer- A PrintWriter instance used to output the JSON string.compact- Flag that indicates whether or not the string should be all on one line (i.e.true) or should be printed on multiple lines (false).
-
fromString
public static ModelNode fromString(String input)
Get a model node from a string representation of the model node.- Parameters:
input- the input string- Returns:
- the model node
-
fromStream
public static ModelNode fromStream(InputStream stream) throws IOException
Get a model node from a text representation of the model node. The stream must be decodable using the UTF-8 charset.- Parameters:
stream- the source stream- Returns:
- the model node
- Throws:
IOException
-
fromJSONStream
public static ModelNode fromJSONStream(InputStream stream) throws IOException
Get a model node from a JSON text representation of the model node. The stream should be encoded in UTF-8.- Parameters:
stream- the source stream- Returns:
- the model node
- Throws:
IOException
-
fromBase64
public static ModelNode fromBase64(InputStream stream) throws IOException
Reads base64 data from the passed stream, and deserializes the decoded result.- Returns:
- the decoded model node
- Throws:
IOException- if the passed stream has an issue- See Also:
writeBase64(OutputStream)
-
fromBase64String
public static ModelNode fromBase64String(String encoded) throws IOException
Reads base64 data from the passed string, and deserializes the decoded result.- Returns:
- the decoded model node
- Throws:
IOException- if the passed stream has an issue- See Also:
writeBase64(OutputStream)
-
resolve
public ModelNode resolve()
Return a copy of this model node, with all values of typeModelType.EXPRESSIONlocally resolved. The caller must have permission to access all of the system properties named in the node tree. If an expression begins with {@code ${env.} then a system property named {@code env.@lt;remainder of expression@gt;} will be checked, and if not present a {@link System#getenv(String) system environment variable named @lt;remainder of expression@gt;} will be checked. In that case the caller must have permission to access the environment variable.- Returns:
- the resolved copy
- Throws:
IllegalStateException- if there is a value of typeModelType.EXPRESSIONin the node tree and there is no system property or environment variable that matches the expressionSecurityException- if a security manager exists and itscheckPermissionmethod doesn't allow access to the relevant system property or environment variable
-
equals
public boolean equals(Object other)
Determine whether this object is equal to another.
-
equals
public boolean equals(ModelNode other)
Determine whether this object is equal to another.- Parameters:
other- the other object- Returns:
trueif they are equal,falseotherwise
-
hashCode
public int hashCode()
Get the hash code of this node object. Note that unless the value isprotect()ed, the hash code may change over time, thus making unprotected nodes unsuitable for use as hash table keys.
-
clone
public ModelNode clone()
Clone this model node.
-
getType
public ModelType getType()
Get the current type of this node.- Returns:
- the node type
-
writeExternal
public void writeExternal(ObjectOutput out) throws IOException
Write this node's content in binary format to the given target.- Specified by:
writeExternalin interfaceExternalizable- Parameters:
out- the target to which the content should be written- Throws:
IOException- if an I/O error occurs
-
writeExternal
public void writeExternal(OutputStream out) throws IOException
Write this node's content in binary format to the given target.- Parameters:
out- the target to which the content should be written- Throws:
IOException- if an I/O error occurs
-
writeExternal
public void writeExternal(DataOutputStream out) throws IOException
Write this node's content in binary format to the given target.- Parameters:
out- the target to which the content should be written- Throws:
IOException- if an I/O error occurs
-
writeExternal
public void writeExternal(DataOutput out) throws IOException
Write this node's content in binary format to the given target.- Parameters:
out- the target to which the content should be written- Throws:
IOException- if an I/O error occurs
-
readExternal
public void readExternal(ObjectInput in) throws IOException
Read this node's content in binary format from the given source.- Specified by:
readExternalin interfaceExternalizable- Parameters:
in- the source from which the content should be read- Throws:
IOException- if an I/O error occurs
-
readExternal
public void readExternal(DataInputStream in) throws IOException
Read this node's content in binary format from the given source.- Parameters:
in- the source from which the content should be read- Throws:
IOException- if an I/O error occurs
-
readExternal
public void readExternal(InputStream in) throws IOException
Read this node's content in binary format from the given source.- Parameters:
in- the source from which the content should be read- Throws:
IOException- if an I/O error occurs
-
readExternal
public void readExternal(DataInput in) throws IOException
Read this node's content in binary format from the given source.- Parameters:
in- the source from which the content should be read- Throws:
IOException- if an I/O error occurs
-
writeBase64
public void writeBase64(OutputStream stream) throws IOException
Encodes the serialized representation in base64 form and writes it to the specified output stream.- Parameters:
stream- the stream to write to- Throws:
IOException- if the specified stream has an issue
-
-