Martin Kunz 1 éve
szülő
commit
82fa6c389d
4 módosított fájl, 41 hozzáadás és 80 törlés
  1. 35 74
      src/components/TheDynamics.vue
  2. 3 4
      src/components/TheParent.vue
  3. 3 0
      src/ua/UABaseNode.ts
  4. 0 2
      src/util/store.ts

+ 35 - 74
src/components/TheDynamics.vue

@@ -1,21 +1,15 @@
 <script setup lang="ts">
 import { useStore } from '@/util/store'
-import { computed, ref } from 'vue';
+import { computed, ref, watch } from 'vue';
 import { UABaseNode } from '@/ua/UABaseNode';
-import { ReferenceTypeIds } from '@/ua/opcua_node_ids';
+import { ObjectIds, ReferenceTypeIds } from '@/ua/opcua_node_ids';
 import type { UAReferenceType } from '@/ua/UAReferenceType';
-import type { UAObjectType } from '@/ua/UAObjectType';
 import type { UAVariableType } from '@/ua/UAVariableType';
-import { UAObject } from '@/ua/UAObject';
-import { UAVariable } from '@/ua/UAVariable';
 import { DynamicNode} from '@/ua/DynamicNode';
 import { storeToRefs } from 'pinia';
 const store = useStore();
-
 const { selectedNode} = storeToRefs(store)
 
-
-
 const nameSpaceName = computed(() => {
   if(!selectedNode.value)
     return "";
@@ -33,9 +27,16 @@ let opt = {
   name:"...",
   startIndex:0
 };
+const dynNode = ref(new DynamicNode(opt));
+const checked = ref("")
+const typedef = ref("")
 
-let dynNode = new DynamicNode(opt);
-
+watch(selectedNode, async (newNode, _oldNode) => {
+  if(!newNode)
+    return;
+  //TODO: what id does typedef hold?
+  typedef.value=newNode.nodeId.toString();
+})
 
 function getRefTypes():UABaseNode[] {
   let list=(store.addressSpace?.getSubTreeAsList("ns=0;i="+ReferenceTypeIds.HierarchicalReferences)||[]) as UAReferenceType[];
@@ -43,68 +44,31 @@ function getRefTypes():UABaseNode[] {
   return list;
 }
 
-function getObjTypes(flag:any):UABaseNode[] {
-    let list = [];
-    if(flag){
-        list=(store.addressSpace?.getSubTreeAsList("ns=0;i=89")||[]) as UAVariableType[]; 
-    }else{
-        list=(store.addressSpace?.getSubTreeAsList("ns=0;i=88")||[]) as UAObjectType[];
-    }
-  list=list.filter((node) => node.isAbstract==false)
-  return list;
-}
-
-function defType(flag:any ):String{
-    let lab = "ObjectType";
-    if(flag){
-        lab = "VariableType";
-    }
-    return lab;
+function getObjTypes(nid: string):UABaseNode[] {
+  const list=(store.addressSpace?.getSubTreeAsList(nid)||[]) as UAVariableType[]; 
+  return list.filter((node) => node.isAbstract==false)
 }
 
-function getInstanceDecl(nid="ns=0;i=84"){
-  if(nid==""){nid="ns=0;i=84"}
-  let component_refs:String[] = [];
-  let res_man:any[] = [];
-  let res_opt:any[] = [];
-      dynNode.mandatory = [];
-      dynNode.optionals = [];
-  let res:any[] = [];
-  let node =  (store.addressSpace?.findNode(nid)) as UABaseNode;
-  let refs = node.references;
-  let list = (store.addressSpace?.getSubTreeAsList("ns=0;i="+ReferenceTypeIds.Aggregates)||[]) as UABaseNode[];
-  list.forEach((item) => {
-    component_refs.push(item.browseName);
+function getInstanceDecl(nid: string, mrType: string){
+  //TODO: why aggregates?
+  const aggregates = (store.addressSpace?.getSubTreeAsList("ns=0;i="+ReferenceTypeIds.Aggregates)||[]) as UABaseNode[];
+  let aggStrings:String[] = [];
+  aggregates.forEach((item) => {
+    aggStrings.push(item.browseName);
   })
-  refs.forEach((item) => {
-    if(component_refs.includes(item.referenceType) && item.isForward){
-      let mr = "";
-      if(item.toNode.nodeClass == "Object"){
-        let i = item.toNode as UAObject;
-        mr = i.getModellingRule()||"";
-      }else if(item.toNode.nodeClass == "Variable"){
-        let i = item.toNode as UAVariable;
-        mr = i.getModellingRule()||"";
-      }
-      if(mr == "Mandatory"){
-        res_man.push(item.toNode.displayName);
-      }else{
-        res_opt.push(item.toNode.displayName);
+  let node =  (store.addressSpace?.findNode(nid)) as UABaseNode;
+  let res:string[] = [];
+  node.references.forEach((item) => {
+    if(aggStrings.includes(item.referenceType) && item.isForward){
+      let mr = item.toNode.getModellingRule()||"";
+      if(mr == mrType){
+        res.push(item.toNode.displayName||"");
       }
-      dynNode.mandatory = res_man;
-      dynNode.optionals = res_opt;
-      dynNode.o_check = new Array(res_opt.length).fill(false);
     }
   })
   return res;
 }
 
-
-function getComponents(nid:string):DynamicNode{
-  getInstanceDecl(nid);
-  return dynNode;
-}
-
 function getNodeVersion(nid:string){
   let node =  (store.addressSpace?.findNode(nid)) as UABaseNode;
   if(!node) 
@@ -119,18 +83,16 @@ function getNodeVersion(nid:string){
   })
 }
 
-
-
 async function createDynamic() {
   //dynNode.namespaceUri = nameSpaceName.value;
   //dynNode.parentNodeId = selectedNode.value?.nodeId.toString();
-  dynNode.typeNodeId = typedef.value.toString();
+  dynNode.value.typeNodeId = typedef.value.toString();
 
  // console.log(dynNode);
   //console.log(c_man);
   //console.log(c_opt.value);
-  console.log(dynNode.optionals)
-  console.log(dynNode.o_check)
+  console.log(dynNode.value.optionals)
+  console.log(dynNode.value.o_check)
   //dynNode = new DynamicNode(opt);
 
   /*
@@ -145,8 +107,7 @@ async function createDynamic() {
 
 
 }
-const checked = ref("")
-const typedef = ref("")
+
 
 function okPressed() {
   console.log('TODO: Handle OK Button');
@@ -213,7 +174,7 @@ defineExpose({ okPressed })
         <div class="input-group mb-3">
           <div class="input-group-prepend">
             <input type="checkbox" id="checkbox" v-model="checked" />
-            <label for="checkbox">{{ defType(checked) }}</label>
+            <label for="checkbox">{{ checked?"ObjectType":"VariableType" }}</label>
           </div>
         </div>
         <div class="input-group mb-3">
@@ -221,14 +182,14 @@ defineExpose({ okPressed })
             <span class="input-group-text" id="inputGroup-sizing-default">Type Definition</span>
           </div>
           <select v-model="typedef" class="form-select" aria-label="Default select example" >
-            <option v-for="option1 in getObjTypes(checked)" :value="option1.nodeId.toString()" v-bind:key="option1.nodeId.toString()">
+            <option v-for="option1 in getObjTypes('ns=0;i='+ ObjectIds.VariableTypesFolder)" :value="option1.nodeId.toString()" v-bind:key="option1.nodeId.toString()">
               {{ option1.displayName }}
             </option>
           </select>
         </div>
         <div class="input-group mb-3">
           <ul class="no-bullets"><b>Mandatory Components</b>
-            <li v-for="item of getComponents(typedef).mandatory" v-bind:key = item>
+            <li v-for="item of getInstanceDecl(typedef, 'Mandatory')" v-bind:key = item>
               <input type="checkbox" id="checkbox-digg-{{ item }}" :checked="true" :disabled="true">
               <label for="checkbox-digg-{{ item}}">{{ item}}</label>
             </li>
@@ -236,7 +197,7 @@ defineExpose({ okPressed })
         </div>
         <div>
           <ul class="no-bullets"><b>Optional Components</b>
-            <li v-for="(item1,index) of getComponents(typedef).optionals" v-bind:key = item1>
+            <li v-for="(item1,index) of getInstanceDecl(typedef, 'Optional')" v-bind:key = item1>
               <input type="checkbox" id="checkbox-digg-{{ item1 }}" v-model="dynNode.o_check![index]" :value="item1" :checked="dynNode.o_check![index]">
               <label for="checkbox-digg-{{ item1 }}">{{ item1 }}</label>
             </li>

+ 3 - 4
src/components/TheParent.vue

@@ -18,6 +18,7 @@ const selectedParent = ref(new UABaseNode({browseName: "", nodeId:NodeId.nullNod
 function clickNode(clickedNode: UABaseNode) {
   selectedParent.value=clickedNode;
   parentDialogOpen.value=false;
+ //clickedNode.setParent()
 }
 
 watch(node, async (newNode, _oldNode) => {
@@ -38,12 +39,10 @@ function filter(fnode: UABaseNode) {
 }
 
 function getRefTypes():UABaseNode[] {
-  let list=(store.addressSpace?.getSubTreeAsList("ns=0;i="+ReferenceTypeIds.HierarchicalReferences)||[]) as UAReferenceType[];
-  list=list.filter((node) => node.isAbstract==false)
+  let list=(store.addressSpace?.getSubTreeAsList("ns=0;i="+ReferenceTypeIds.HierarchicalReferences)) as UAReferenceType[];
+  list=list.filter((node) => node.isAbstract==false);
   return list;
 }
-
-
 </script>
 
 <template>

+ 3 - 0
src/ua/UABaseNode.ts

@@ -60,6 +60,9 @@ export class UABaseNode implements IToXML{
     }
 
     setParent(node: UABaseNode, refType: String) {
+        for(const ref of this.references) {
+            //ref.
+        }
         //TODO replace parent-like references in both directions.
     }
 

+ 0 - 2
src/util/store.ts

@@ -3,7 +3,6 @@ import { UABaseNode } from '@/ua/UABaseNode'
 import type { UANodeSet } from '@/ua/UANodeSet'
 import { defineStore } from 'pinia'
 import { ref } from 'vue'
-import type { DynamicNode } from '@/ua/DynamicNode'
 import type { ServerConfig } from './sconfig'
 
 
@@ -12,7 +11,6 @@ export const useStore = defineStore('user', {
       addressSpace: null as AddressSpace | null,
       rootNode: ref<UABaseNode | null>(null),
       selectedNode: ref<UABaseNode | null>(null),
-      dynNode: ref<DynamicNode | null>(null),
       sConfig: null as ServerConfig | null
   }),
   actions: {