<?xml version="1.0" encoding="UTF-8" ?>
<!-- created at 2025-12-16 14:01:26 -->
<UANodeSet xmlns="http://opcfoundation.org/UA/2011/03/UANodeSet.xsd" xmlns:uax="http://opcfoundation.org/UA/2008/02/Types.xsd">
	<Extensions>
		<atvise Version="3.13"/>
	</Extensions>
	<NamespaceUris>
		<Uri>http://www.atvise.com/atServer/UA/</Uri>
	</NamespaceUris>
	<Aliases>
		<!-- data types -->
		<Alias Alias="Boolean">i=1</Alias>
		<Alias Alias="SByte">i=2</Alias>
		<Alias Alias="Byte">i=3</Alias>
		<Alias Alias="Int16">i=4</Alias>
		<Alias Alias="UInt16">i=5</Alias>
		<Alias Alias="Int32">i=6</Alias>
		<Alias Alias="UInt32">i=7</Alias>
		<Alias Alias="Int64">i=8</Alias>
		<Alias Alias="UInt64">i=9</Alias>
		<Alias Alias="Float">i=10</Alias>
		<Alias Alias="Double">i=11</Alias>
		<Alias Alias="String">i=12</Alias>
		<Alias Alias="DateTime">i=13</Alias>
		<Alias Alias="ByteString">i=15</Alias>
		<Alias Alias="XmlElement">i=16</Alias>
		<Alias Alias="NodeId">i=17</Alias>
		<Alias Alias="LocalizedText">i=21</Alias>
		<!-- references -->
		<Alias Alias="Organizes">i=35</Alias>
		<Alias Alias="HasEventSource">i=36</Alias>
		<Alias Alias="HasModellingRule">i=37</Alias>
		<Alias Alias="HasTypeDefinition">i=40</Alias>
		<Alias Alias="HasSubtype">i=45</Alias>
		<Alias Alias="HasProperty">i=46</Alias>
		<Alias Alias="HasComponent">i=47</Alias>
		<Alias Alias="HasNotifier">i=48</Alias>
		<Alias Alias="HasCondition">i=9006</Alias>
		<Alias Alias="HasHistoricalConfiguration">i=56</Alias>
		<!-- types -->
		<Alias Alias="BaseDataType">i=24</Alias>
		<Alias Alias="BaseObjectType">i=58</Alias>
		<Alias Alias="FolderType">i=61</Alias>
		<Alias Alias="BaseVariableType">i=62</Alias>
		<Alias Alias="BaseDataVariableType">i=63</Alias>
		<Alias Alias="PropertyType">i=68</Alias>
		<Alias Alias="AlarmConditionStateType">ns=1;i=1001</Alias>
		<!-- modelling rules -->
		<Alias Alias="New">i=78</Alias>
		<Alias Alias="Shared">i=79</Alias>
		<Alias Alias="SharedExclusive">i=336</Alias>
		<!-- other -->
		<Alias Alias="Server">i=2253</Alias>
		<Alias Alias="Objects">i=85</Alias>
	</Aliases>
	<UAObject NodeId="ns=1;s=SYSTEM" BrowseName="1:SYSTEM">
		<DisplayName Locale="en">SYSTEM</DisplayName>
		<Description Locale="en">SYSTEM</Description>
		<References>
			<Reference ReferenceType="HasComponent" IsForward="false">Objects</Reference>
			<Reference ReferenceType="HasTypeDefinition">FolderType</Reference>
		</References>
		<Extensions>
			<atvise ExportedNodeId="ns=1;s=SYSTEM.LIBRARY.PROJECT.MENUSCRIPTS.SearchMirrorProperties" ExportedBrowseName="1:SearchMirrorProperties" Upstream="true"/>
		</Extensions>
	</UAObject>
	<UAObject NodeId="ns=1;s=SYSTEM.LIBRARY" BrowseName="1:LIBRARY">
		<DisplayName Locale="en">LIBRARY</DisplayName>
		<Description Locale="en">LIBRARY</Description>
		<References>
			<Reference ReferenceType="HasComponent" IsForward="false">ns=1;s=SYSTEM</Reference>
			<Reference ReferenceType="HasTypeDefinition">FolderType</Reference>
		</References>
		<Extensions>
			<atvise Upstream="true"/>
		</Extensions>
	</UAObject>
	<UAObject NodeId="ns=1;s=SYSTEM.LIBRARY.PROJECT" BrowseName="1:PROJECT">
		<DisplayName Locale="en">PROJECT</DisplayName>
		<Description Locale="en">PROJECT</Description>
		<References>
			<Reference ReferenceType="HasComponent" IsForward="false">ns=1;s=SYSTEM.LIBRARY</Reference>
			<Reference ReferenceType="HasTypeDefinition">FolderType</Reference>
		</References>
		<Extensions>
			<atvise Upstream="true"/>
		</Extensions>
	</UAObject>
	<UAObject NodeId="ns=1;s=SYSTEM.LIBRARY.PROJECT.MENUSCRIPTS" BrowseName="1:MENUSCRIPTS">
		<DisplayName Locale="en">MENUSCRIPTS</DisplayName>
		<Description Locale="en">MENUSCRIPTS</Description>
		<References>
			<Reference ReferenceType="HasComponent" IsForward="false">ns=1;s=SYSTEM.LIBRARY.PROJECT</Reference>
			<Reference ReferenceType="HasTypeDefinition">FolderType</Reference>
		</References>
		<Extensions>
			<atvise Upstream="true"/>
		</Extensions>
	</UAObject>
	<UAVariable NodeId="ns=1;s=SYSTEM.LIBRARY.PROJECT.MENUSCRIPTS.SearchMirrorProperties" BrowseName="1:SearchMirrorProperties" DataType="XmlElement" AccessLevel="103" UserAccessLevel="103" Historizing="true">
		<DisplayName Locale="en">SearchMirrorProperties</DisplayName>
		<Description Locale="en">SearchMirrorProperties</Description>
		<References>
			<Reference ReferenceType="HasComponent" IsForward="false">ns=1;s=SYSTEM.LIBRARY.PROJECT.MENUSCRIPTS</Reference>
			<Reference ReferenceType="HasTypeDefinition">ns=1;s=VariableTypes.ATVISE.ScriptCode</Reference>
		</References>
		<Value>
			<uax:XmlElement><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
<script>
  <parameter name="nodes" type="array" trigger="false" relative="false" value=""/>
  <parameter name="relativeMode" type="boolean" trigger="false" relative="false" value="false"/>
  <parameter name="recursive" type="boolean" trigger="false" relative="false" value="true"/>
  <parameter name="useSearchNode" type="boolean" trigger="false" relative="false" value="false"/>
  <code><![CDATA[// **************************************************************************************
// * Searches for absolute and relative mirror properties
// * Parameters
// * nodes --> Selected nodes when script is executet via atvise builder context menu
// * relativeMode --> Search for relative or absolute mirror properties (true = yes; false = no),
// * recursive --> Search recursivevly or not (true = yes; false = no)
// * useSearchNode --> Use searchNode variable instead of selected nodes in atvise builder context menu (true = yes; false = no)
// **************************************************************************************

var relMirrorTypes = [
	"VariableTypes.ATVISE.Mirror.Relative.Output",
	"VariableTypes.ATVISE.Mirror.Relative.Input",
	"VariableTypes.ATVISE.Mirror.Relative.InputOutput",
	"VariableTypes.ATVISE.Mirror.Relative.PathFragment",
	"VariableTypes.ATVISE.Mirror.Relative.Base"
];

var absMirrorTypes = [
	"VariableTypes.ATVISE.Mirror.Output",
	"VariableTypes.ATVISE.Mirror.Input",
	"VariableTypes.ATVISE.Mirror.InputOutput",
];

// If searchString is empty all mirrors get displayed
var searchStrings = [
	"OPC UA/ns=2;s=WeatherStation001", // rel mirror base content
	"2:AirPressure" // rel mirror path fragment
];

var searchNode = "AGENT.OBJECTS";


function search (nodeId) {
	var node = Ua.findNode(nodeId);
	var result = node.result.browse({
		direction: Ua.Node.BROWSEDIRECTION_FORWARD,
          reference: Ua.Reference.HIERARCHICALREFERENCES,
          subType: true,
          nodeClass: Ua.NodeClass.UNSPECIFIED,
          maxResult:0,
		  recursive: recursive,
		  typeDefinition: relativeMode ? relMirrorTypes : absMirrorTypes
	});
	
	for (var i = 0; i < result.result.length; i++) {
		var value = result.result[i]["node"]["value"];
		if(searchStrings.length === 0){
			console.log("Found property: " , result.result[i]["node"]["nodeId"]["xml"]);
		}else{
			for ( var k = 0; k < searchStrings.length; k++) {
				if (value.indexOf(searchStrings[k]) > -1) {
					console.log("Found property: " , result.result[i]["node"]["nodeId"]["xml"]);
					break;
				}
			}
		}
		
	}
}

if (useSearchNode) {
	search(searchNode);
} else {
	for (var i = 0; i < nodes.length; i++) {
		search(nodes[i]);
	}
}]]]]><![CDATA[></code>
</script>
]]></uax:XmlElement>
		</Value>
	</UAVariable>
</UANodeSet>
