--- /dev/null
+# Copyright 2023 highstreet technologies GmbH
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+#!/usr/bin/python
+"""
+Module for a class representing a O-RAN Network
+"""
+from typing import Any, Dict, List
+from model.python.Tower import Tower
+from model.python.ORanObject import IORanObject, ORanObject
+import xml.etree.ElementTree as ET
+
+
+class ORanNetwork(ORanObject):
+ """
+ Class representing an O-RAN Network object.
+ """
+
+ # constructor
+ def __init__(self, configuration: Dict[str, Any], of: IORanObject = None, **kwargs):
+ super().__init__(of, **kwargs)
+ self.__configuration = configuration
+ self.__towers: List[Tower] = []
+
+ center = configuration["center"]
+ self.__towers.append(Tower(center))
+
+ # getter
+ def configuration(self) -> Dict[str, Dict]:
+ """
+ Getter for a json object representing the O-RAN Network.
+ :return O-RAN Network as json object.
+ """
+ return self.__configuration
+
+ def __appendNodes(self):
+ result: List[Dict[str, Any]] = []
+ for tower in self.__towers:
+ result.append(tower.toTopology())
+ return result
+
+ def toTopology(self):
+ return {
+ "ietf-network:networks": {
+ "network": [
+ {
+ "network-id": self.id,
+ "node": self.__appendNodes(),
+ "ietf-network-topology:link": [],
+ }
+ ],
+ }
+ }
+
+ def toKml(self):
+ root: Element = ET.Element("kml", xmlns="http://www.opengis.net/kml/2.2")
+ document = ET.SubElement(root, "Document")
+ open = ET.SubElement(document, "open")
+ open.text = "1"
+ return root
+
+ def toSvg(self):
+ """
+ Getter for a xml/svg Element object representing the Network.
+ :return Network as SVG object.
+ """
+ root: Element = ET.Element(
+ "svg",
+ # width=str(self.__svg_width()),
+ # height=str(self.__svg_height()),
+ # viewBox=" ".join([
+ # str(-3*self.FONTSIZE),
+ # str(-3*self.FONTSIZE),
+ # str(self.__svg_width()),
+ # str(self.__svg_height())]
+ # ),
+ xmlns="http://www.w3.org/2000/svg",
+ )
+ desc = ET.Element("desc")
+ # desc.text="\n context: " + str(self.id()) + "\n name: " + str(self.name())
+ root.append(desc)
+
+ title = ET.Element("title")
+ title.text = self.configuration()["name"]
+ root.append(title)
+
+ # root.append(self.__context.svg(x, y))
+ return root