From d2f6ab166614be87baa019e81fdf1e52e1afbfa2 Mon Sep 17 00:00:00 2001
From: Susa Giogoli <su.giogoli@icloud.com>
Date: Wed, 28 Jun 2023 20:02:15 +0200
Subject: [PATCH] Objekte werden instanziiert lasertracker.json funktioniert
 noh nicht

---
 newmodeljsonparse.py | 171 ++++++++++++++++++++++++++++++++-----------
 writefile.py         |  54 +++++++-------
 2 files changed, 155 insertions(+), 70 deletions(-)

diff --git a/newmodeljsonparse.py b/newmodeljsonparse.py
index f7aaeaf..d0b5acc 100644
--- a/newmodeljsonparse.py
+++ b/newmodeljsonparse.py
@@ -154,12 +154,13 @@ def searchlists(list1, list2):
 
 def getdefaultvalue(dimension, datatype):
     if datatype == "float" or datatype == "double" or datatype == "int":
-        if dimension == 1:
-            return  0
-        value = []
-        for i in range(dimension):
-            value.append(0)
-        return value
+        if dimension > 1:
+            value = []
+            for i in range(dimension):
+                value.append(0)
+            return value
+        else:
+            return 0
     else:
         return True
 
@@ -178,9 +179,16 @@ def iteratingInterface(obj, dict, componentslist):
 
 def getInterfaceparam(list1, interface, searched, jsoncomponents, searchinglist):
     #list1.append(searchlists(interface[searched], searchinglist))
+    # if interface["name"] == "Gripper":
+        # print("I am searching Gripper in: ")
+        # print(searchinglist)
+        # print([interface[searched]])
     for inputsearch in interface[searched]:
         for searchobj in searchinglist:
+            # print(inputsearch["value"] + " " + searchobj["uuid"])
             if inputsearch["value"] == searchobj["uuid"]:
+                # print("found matching pair")
+                # print(inputsearch["value"] + " " + searchobj["uuid"])
                 list1.append(searchobj)
     if iskeythere(list(interface.keys()), "baseComponent"):
         for component in jsoncomponents:
@@ -189,9 +197,76 @@ def getInterfaceparam(list1, interface, searched, jsoncomponents, searchinglist)
     else:
         return list1
 
+def buildComponents(interfacesreturn, jsoninterfaces, jsoncomponents, jsonmeasurements, jsonparameters):
+    for obj in jsoninterfaces:
+        rootobj = {}
+        if obj["elementType"] == "interface":
+            for search in jsoncomponents:
+                if obj["rootComponent"] == search["uuid"]:
+                    rootobj = search
+        else:
+            rootobj = obj
+        objcomponentslist = getInterfaceparam([], rootobj, "components", jsoncomponents, jsoncomponents)
+        if obj["name"] not in interfacesreturn.keys():
+            interfacesreturn[str(obj["name"])] = wf.openobject(obj["name"], rootobj["description"])
+            #print(obj["name"])
+            #del obj["cardOpen"]
+            #del obj["uuid"]
+                #rootObjname = obj["rootComponent"]
+
+            # if iskeythere(list(obj.keys()), "baseComponent"):
+            #     basecomponent = obj["baseComponent"]
+            #     for search in jsoncomponents:
+            #         #print(search["uuid"])
+            #         if basecomponent == search["uuid"]:
+            #             wf.writebasecomponent(componenttypesdict[str(obj["name"])], componenttypesdict[str(search["name"])], search["name"])
+            #wf.writecomponents(interfacestypesdict[str(obj["name"])], objcomponentslist, interfacestypesdict)
+            objmeasurementlist = getInterfaceparam([], rootobj, "measurements", jsoncomponents, jsonmeasurements)
+            measurementsobjs = getMeasurements(objmeasurementlist)
+            #print(objmeasurementlist)
+            # print(interfacesreturn)
+            wf.writemeasurement(measurementsobjs, interfacesreturn[str(obj["name"])])
+            # print("I am searching Parameters")
+            objparameterlist = getInterfaceparam([], rootobj, "parameters", jsoncomponents, jsonparameters)
+            parameterobjs = getParameters(objparameterlist)
+            # print(objparameterlist)
+            wf.writeparameter(parameterobjs, interfacesreturn[str(obj["name"])])
+            if len(objcomponentslist) <= 0:
+                return interfacesreturn
+            else:
+                for component in objcomponentslist:
+                    return buildComponents(interfacesreturn, objcomponentslist, jsoncomponents, jsonmeasurements, jsonparameters)
+        else:
+            if len(objcomponentslist) > 0:
+                return buildComponents(interfacesreturn, objcomponentslist, jsoncomponents, jsonmeasurements, jsonparameters)
+            else:
+
 
 
 
+def instantiate(typesdict, interfaces, jsoncomponents):
+    count = 0
+    countcomponent = 0
+    instantiatedict = {}
+    for interface in interfaces:
+        root = {}
+        for component in jsoncomponents:
+            if interface["rootComponent"] == component["uuid"]:
+                root = component
+
+        components = getInterfaceparam([], root, "components", jsoncomponents, jsoncomponents)
+        if interface["name"] in list(instantiatedict.keys()):
+            count += 1
+        dictname = str(interface["name"]) + str(count)
+        instantiatedict[str(dictname)] = wf.writeinterface(typesdict[str(interface["name"])], interface["name"], count)
+        for component in components:
+            if component["name"] in list(instantiatedict.keys()):
+                countcomponent += 1
+            dictnamecomponent = str(component["name"]) + str(count)
+            instantiatedict[dictnamecomponent] = wf.writeobjects(typesdict[str(component["name"])], component["name"], instantiatedict[dictname], countcomponent)
+
+    return instantiatedict
+
 def main():
     try:
         JSON_MODEL = sys.argv[1][:-5]
@@ -225,48 +300,56 @@ def main():
                 jsoncomponents.append(obj)
             elif obj["elementType"] == "interface":
                 jsoninterfaces.append(obj)
-        interfacestypesdict = {}
-        for obj in jsoninterfaces:
-            #print(obj["name"])
-            #del obj["cardOpen"]
-            #del obj["uuid"]
-            rootobj = {}
-            for search in jsoncomponents:
-                if obj["rootComponent"] == search["uuid"]:
-                    rootobj = search
-            objname = wf.openobject(obj["name"], rootobj["description"])
-            interfacestypesdict[str(obj["name"])] = objname
-            #rootObjname = obj["rootComponent"]
 
-            # if iskeythere(list(obj.keys()), "baseComponent"):
-            #     basecomponent = obj["baseComponent"]
-            #     for search in jsoncomponents:
-            #         #print(search["uuid"])
-            #         if basecomponent == search["uuid"]:
-            #             wf.writebasecomponent(componenttypesdict[str(obj["name"])], componenttypesdict[str(search["name"])], search["name"])
-            objcomponentslist = getInterfaceparam([], rootobj, "components", jsoncomponents, jsoncomponents)
-            wf.writecomponents(interfacestypesdict[str(obj["name"])], objcomponentslist, interfacestypesdict)
-            objmeasurementlist = getInterfaceparam([], rootobj, "measurements", jsoncomponents, jsonmeasurements)
-            measurementsobjs = getMeasurements(objmeasurementlist)
-            #print(objmeasurementlist)
-            wf.writemeasurement(measurementsobjs, interfacestypesdict[str(obj["name"])])
-            objparameterlist = getInterfaceparam([], rootobj, "parameters", jsoncomponents, jsonparameters)
-            parameterobjs = getParameters(objparameterlist)
-            wf.writemeasurement(parameterobjs, interfacestypesdict[str(obj["name"])])
+
+        # interfacestypesdict = {}
+        # for obj in jsoninterfaces:
+        #     #print(obj["name"])
+        #     #del obj["cardOpen"]
+        #     #del obj["uuid"]
+        #     rootobj = {}
+        #     for search in jsoncomponents:
+        #         if obj["rootComponent"] == search["uuid"]:
+        #             rootobj = search
+        #     objname = wf.openobject(obj["name"], rootobj["description"])
+        #     interfacestypesdict[str(obj["name"])] = objname
+        #     #rootObjname = obj["rootComponent"]
+        #
+        #     # if iskeythere(list(obj.keys()), "baseComponent"):
+        #     #     basecomponent = obj["baseComponent"]
+        #     #     for search in jsoncomponents:
+        #     #         #print(search["uuid"])
+        #     #         if basecomponent == search["uuid"]:
+        #     #             wf.writebasecomponent(componenttypesdict[str(obj["name"])], componenttypesdict[str(search["name"])], search["name"])
+        #     objcomponentslist = getInterfaceparam([], rootobj, "components", jsoncomponents, jsoncomponents)
+        #     wf.writecomponents(interfacestypesdict[str(obj["name"])], objcomponentslist, interfacestypesdict)
+        #     objmeasurementlist = getInterfaceparam([], rootobj, "measurements", jsoncomponents, jsonmeasurements)
+        #     measurementsobjs = getMeasurements(objmeasurementlist)
+        #     #print(objmeasurementlist)
+        #     wf.writemeasurement(measurementsobjs, interfacestypesdict[str(obj["name"])])
+        #     objparameterlist = getInterfaceparam([], rootobj, "parameters", jsoncomponents, jsonparameters)
+        #     parameterobjs = getParameters(objparameterlist)
+        #     wf.writemeasurement(parameterobjs, interfacestypesdict[str(obj["name"])])
+
+        typesdict = buildComponents({}, jsoninterfaces, jsoncomponents, jsonmeasurements, jsonparameters)
+        print(typesdict)
+        intantiateddict = instantiate(typesdict, jsoninterfaces, jsoncomponents)
 
         wf.writend()
 
-        print("Measurements: ")
-        print(objmeasurementlist)
-        print("\n")
-        print("Components: ")
-        print(objcomponentslist)
-        print("\n")
-        print("Parameters: ")
-        print(objparameterlist)
-        print("\n")
-        print("Functions: ")
-        print(jsonfunctions)
+
+
+        # print("Measurements: ")
+        # print(objmeasurementlist)
+        # print("\n")
+        # print("Components: ")
+        # print(objcomponentslist)
+        # print("\n")
+        # print("Parameters: ")
+        # print(objparameterlist)
+        # print("\n")
+        # print("Functions: ")
+        # print(jsonfunctions)
 
 
 
diff --git a/writefile.py b/writefile.py
index 9765d2b..e6c9ee3 100644
--- a/writefile.py
+++ b/writefile.py
@@ -98,17 +98,17 @@ def writemeasurement(measurementobj, headnode):
         server.write(writeindent + varname + " = " + "await " + headnode + ".add_variable(idx, \"" + str(
             i.name) + "\", " + str(i.value) + ", " + varianttype + ", " + datatype + ")\n")
         server.write(writeindent + "await " + varname + "." + "set_modelling_rule(True)\n")
-        # if i.range is not None and i.range is not "(None, None)":
-        #     rangename = "rangeprop"
-        #     server.write(
-        #         writeindent + rangename + " = await " + headnode + ".add_property(idx, \"range\", ua.Range(" + str(
-        #             i.range[0]) + "," + str(i.range[1]) + "))\n")
-        #     server.write(writeindent + "await " + rangename + ".set_modelling_rule(True)\n")
-        # if i.unit != "UNITLESS":
-        #     unitname = "unitprop"
-        #     server.write(
-        #         writeindent + unitname + " = await " + headnode + ".add_property(idx, \"unit\"," + "\"" + i.unit + "\")\n")
-        #     server.write(writeindent + "await " + unitname + ".set_modelling_rule(True)\n")
+        if i.range is not None or i.range != "(None, None)":
+            rangename = "rangeprop"
+            server.write(
+                writeindent + rangename + " = await " + varname + ".add_property(idx, \"range\", ua.Range(" + str(
+                    i.range[0]) + "," + str(i.range[1]) + "))\n")
+            server.write(writeindent + "await " + rangename + ".set_modelling_rule(True)\n")
+        if i.unit != "UNITLESS":
+            unitname = "unitprop"
+            server.write(
+                writeindent + unitname + " = await " + varname + ".add_property(idx, \"unit\"," + "\"" + i.unit + "\")\n")
+            server.write(writeindent + "await " + unitname + ".set_modelling_rule(True)\n")
 
         server.write(
             writeindent + varname + "description = await " + varname + ".add_property(idx, \"Description\", " + "\"" + i.description + "\")" + "\n")
@@ -129,17 +129,17 @@ def writeparameter(parameterobj, headnode):
         server.write(writeindent + varname + " = " + "await " + headnode + ".add_variable(idx, \"" + str(
             i.name) + "\", " + str(i.value) + ", " + varianttype + ", " + datatype + ")\n")
         server.write(writeindent + "await " + varname + "." + "set_modelling_rule(True)\n")
-        if i.range is not None or i.range != (None, None):
-            rangename = "rangeprop"
-            server.write(
-                writeindent + rangename + " = await " + headnode + ".add_property(idx, \"range\", ua.Range(" + str(
-                    i.range[0]) + "," + str(i.range[1]) + "))\n")
-            server.write(writeindent + "await " + rangename + ".set_modelling_rule(True)\n")
-        if i.unit != "UNITLESS":
-            unitname = "unitprop"
-            server.write(
-                writeindent + unitname + " = await " + headnode + ".add_property(idx, \"unit\"," + "\"" + i.unit + "\")\n")
-            server.write(writeindent + "await " + unitname + ".set_modelling_rule(True)\n")
+        # if i.range is not None or i.range != (None, None):
+        #     rangename = "rangeprop"
+        #     server.write(
+        #         writeindent + rangename + " = await " + headnode + ".add_property(idx, \"range\", ua.Range(" + str(
+        #             i.range[0]) + "," + str(i.range[1]) + "))\n")
+        #     server.write(writeindent + "await " + rangename + ".set_modelling_rule(True)\n")
+        # if i.unit != "UNITLESS":
+        #     unitname = "unitprop"
+        #     server.write(
+        #         writeindent + unitname + " = await " + headnode + ".add_property(idx, \"unit\"," + "\"" + i.unit + "\")\n")
+        #     server.write(writeindent + "await " + unitname + ".set_modelling_rule(True)\n")
 
         server.write(
             writeindent + varname + "description = await " + varname + ".add_property(idx, \"Description\", " + "\"" + i.description + "\")" + "\n")
@@ -163,18 +163,20 @@ def writefunction(functionobj, headnode):
                 inargslist.append(getVariantType(j))
         server.write(writeindent + "await mobilerobot.add_method(idx, \"" + i.name +"\", " + functionname + ", " + str(inargslist) + ", "+ str(outargslist) + ")\n\n")
 
-def writeobjects(objtype, objname, headnode):
+def writeobjects(objtype, objname, headnode, count):
     server = open("opcua-server.py", "a")
     writeindent = "    "
-    #objtypename = (objname.lower()).replace(" ", "") + "var"
+    objtypename = (objname.lower()).replace(" ", "") + "var" + str(count)
     server.write(
         writeindent + objtypename + "= await " + headnode + ".add_object(idx, \"" + objname + "\", " + objtype + ".nodeid)\n")
+    return objtypename
 
-def writeinterface(objtype, objname):
+def writeinterface(objtype, objname, count):
     server = open("opcua-server.py", "a")
     writeindent = "    "
-    #objtypename = (objname.lower()).replace(" ","") + "var"
+    objtypename = (objname.lower()).replace(" ","") + "var" + str(count)
     server.write(writeindent + objtypename + "= await server.nodes.objects.add_object(idx, \"" + objname + "\", " + objtype + ".nodeid)\n")
+    return objtypename
 
 def writend():
     server = open("opcua-server.py", "a")
-- 
GitLab