Class PropertyTree
- java.lang.Object
-
- com.inductiveautomation.perspective.gateway.property.PropertyTree
-
public class PropertyTree extends java.lang.Object
This class represents a tree structure of properties. Based on the JSON format, the structure is built up of nodes that are:
- Name/Value pairs, where the name is a string and the value is another node in the tree
- Ordered list of nodes, where each node has an index starting with zero (an array)
- A primitive value, which may be null, string, or number.
Each node in the tree also contains quality and timestamp information. Therefore, any node may be read as a
QualifiedValue
.Any element contained within this structure is represented by a path. The format of the path is identical to the javascript expression you would use to reference the element. For example, you could reference a root property with
"foo"
, a sub-property with"foo.bar"
, an indexed property with"foo.bar[5]"
and a property whose name is not a legal javascript identifier with"foo['sub property here']
This tree is observable in two ways:
-
Interested parties may register a listener for a specific path using
subscribe(String, Set, Consumer)
. Whenever the value at that path has changed, the listener will receive aPropertyTreeChangeEvent
which contains theOrigin
and aSupplier
of the new value as aQualifiedValue
. -
One may also listen to all changes made to the property collection using
subscribeAll(Consumer)
. This listener will be notified of any changes.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
PropertyTree.DollarQualifiedDatasetEncoder
static interface
PropertyTree.Subscription
-
Constructor Summary
Constructors Constructor Description PropertyTree(com.inductiveautomation.ignition.common.gson.JsonObject json, ExecutionQueue queue)
PropertyTree(com.inductiveautomation.ignition.common.gson.JsonObject json, ExecutionQueue queue, PropertyTreePermissionModel permissionModel)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description ExecutionQueue
getQueue()
java.util.List<java.lang.String>
getRootKeys()
boolean
hasProperty(java.lang.String path)
static boolean
isQualifiedValueArray(java.lang.Object object)
static boolean
isQualifiedValueMap(java.lang.Object object)
void
merge(com.inductiveautomation.ignition.common.gson.JsonObject tree)
Merges the given tree's values and structure with this tree.void
merge(com.inductiveautomation.ignition.common.gson.JsonObject tree, boolean prune, boolean fireChange)
Merge, with options.static com.inductiveautomation.ignition.common.gson.JsonObject
newDollarQualifiedObject(java.lang.String type, QualityCode quality, long timestamp)
java.util.Optional<QualifiedValue>
read(JsonPath path)
java.util.Optional<QualifiedValue>
read(java.lang.String pathString)
void
remove(JsonPath path, Origin origin, java.lang.Object source)
void
reset(com.inductiveautomation.ignition.common.gson.JsonObject tree)
PropertyTree.Subscription
subscribe(JsonPath path, java.util.Set<Origin> acceptableOrigins, java.util.function.Consumer<PropertyTreeChangeEvent> consumer)
Subscribes to a specific path in the tree.PropertyTree.Subscription
subscribe(java.lang.String pathString, java.util.Set<Origin> acceptableOrigins, java.util.function.Consumer<PropertyTreeChangeEvent> consumer)
Subscribes to a specific path in the tree.void
subscribeAll(java.util.function.Consumer<PropertyTreeChangeEvent> listener)
com.inductiveautomation.ignition.common.gson.JsonObject
toJson()
Creates a JSON representation of the values in this property tree, encoded in our $-qualified format.void
write(JsonPath path, QualifiedValue value, Origin origin, java.lang.Object source)
void
write(java.lang.String pathString, com.inductiveautomation.ignition.common.gson.JsonElement element, Origin origin, java.lang.Object source)
void
write(java.lang.String pathString, QualifiedValue value, Origin origin, java.lang.Object source)
void
writeAll(com.inductiveautomation.ignition.common.gson.JsonObject writes, Origin origin, java.lang.Object source)
Performs multiple writes into this property tree
-
-
-
Constructor Detail
-
PropertyTree
public PropertyTree(@Nonnull com.inductiveautomation.ignition.common.gson.JsonObject json, @Nonnull ExecutionQueue queue)
-
PropertyTree
public PropertyTree(@Nonnull com.inductiveautomation.ignition.common.gson.JsonObject json, @Nonnull ExecutionQueue queue, @Nonnull PropertyTreePermissionModel permissionModel)
-
-
Method Detail
-
subscribe
public PropertyTree.Subscription subscribe(java.lang.String pathString, java.util.Set<Origin> acceptableOrigins, java.util.function.Consumer<PropertyTreeChangeEvent> consumer)
Subscribes to a specific path in the tree. The provided consumer will be called with aPropertyTreeChangeEvent
which contains aSupplier
that can fetch theQualifiedValue
when it changes.- Parameters:
pathString
- The path to the property to subscribe toacceptableOrigins
- Set of origins that this listener is interested inconsumer
- The listener that will be called when a change that affects the given path occurs- Returns:
- Object that contains unsubscribe() method to remove this listener
-
subscribe
public PropertyTree.Subscription subscribe(JsonPath path, java.util.Set<Origin> acceptableOrigins, java.util.function.Consumer<PropertyTreeChangeEvent> consumer)
Subscribes to a specific path in the tree. The provided consumer will be called with aPropertyTreeChangeEvent
which contains aSupplier
that can fetch theQualifiedValue
when it changes.- Parameters:
path
- TheJsonPath
to the property to subscribe toacceptableOrigins
- Set of origins that this listener is interested inconsumer
- The listener that will be called when a change that affects the given path occurs- Returns:
- Object that contains unsubscribe() method to remove this listener
-
subscribeAll
public void subscribeAll(java.util.function.Consumer<PropertyTreeChangeEvent> listener)
-
merge
public void merge(com.inductiveautomation.ignition.common.gson.JsonObject tree)
Merges the given tree's values and structure with this tree. New structure and values from the given tree may be added to this one. No changes fired.
-
merge
public void merge(com.inductiveautomation.ignition.common.gson.JsonObject tree, boolean prune, boolean fireChange)
Merge, with options.- Parameters:
prune
- If true, existing nodes that aren't in the new merge tree will be removedfireChange
- If true, the change listeners will be notified of the changes due to the merge.
-
reset
public void reset(com.inductiveautomation.ignition.common.gson.JsonObject tree)
-
getQueue
public ExecutionQueue getQueue()
-
read
public java.util.Optional<QualifiedValue> read(java.lang.String pathString)
-
read
public java.util.Optional<QualifiedValue> read(JsonPath path)
-
writeAll
public void writeAll(com.inductiveautomation.ignition.common.gson.JsonObject writes, Origin origin, java.lang.Object source)
Performs multiple writes into this property tree- Parameters:
writes
- An object containing paths of properties to write to and the values to write to themorigin
- where the write came from
-
write
public void write(java.lang.String pathString, com.inductiveautomation.ignition.common.gson.JsonElement element, Origin origin, java.lang.Object source)
-
write
public void write(java.lang.String pathString, QualifiedValue value, Origin origin, java.lang.Object source)
-
write
public void write(JsonPath path, QualifiedValue value, Origin origin, java.lang.Object source)
-
hasProperty
public boolean hasProperty(java.lang.String path)
- Parameters:
path
- Path to look for - should be parseable byJsonPath.parse(java.lang.String)
- Returns:
- true if there is a property for the given path
-
getRootKeys
public java.util.List<java.lang.String> getRootKeys()
-
toJson
public com.inductiveautomation.ignition.common.gson.JsonObject toJson()
Creates a JSON representation of the values in this property tree, encoded in our $-qualified format. Will not include properties marked as access=PRIVATE
-
newDollarQualifiedObject
public static com.inductiveautomation.ignition.common.gson.JsonObject newDollarQualifiedObject(java.lang.String type, QualityCode quality, long timestamp)
-
isQualifiedValueMap
public static boolean isQualifiedValueMap(java.lang.Object object)
-
isQualifiedValueArray
public static boolean isQualifiedValueArray(java.lang.Object object)
-
-