"""
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
+from typing import Any
+
+from model.python.o_ran_smo import ORanSmo
+from model.python.o_ran_spiral_radius_profile import SpiralRadiusProfile
+from model.python.o_ran_object import IORanObject, ORanObject
+import model.python.hexagon as Hexagon
+from model.python.hexagon import Layout
+from model.python.point import Point
import xml.etree.ElementTree as ET
"""
# constructor
- def __init__(self, configuration: Dict[str, Any], of: IORanObject = None, **kwargs):
+ 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))
+ self.name = configuration["name"]
+ self.center = configuration["center"]
+ size = configuration["pattern"]["nr-cell-du"]["max-reach"]
+ layout = Layout(
+ Hexagon.layout_flat, Point(size, size), Point(0, 0)
+ ) # 1 pixel = 1 meter
+ spiral_radius_profile = SpiralRadiusProfile(
+ {
+ "oRanSmoSpiralRadiusOfNearRtRics": configuration["pattern"]["smo"][
+ "near-rt-ric-spiral-radius"
+ ],
+ "oRanNearRtRicSpiralRadiusOfOCus": configuration["pattern"][
+ "near-rt-ric"
+ ]["o-ran-cu-spiral-radius"],
+ "oRanCuSpiralRadiusOfODus": configuration["pattern"]["o-ran-cu"][
+ "o-ran-du-spiral-radius"
+ ],
+ "oRanDuSpiralRadiusOfTowers": configuration["pattern"]["o-ran-du"][
+ "tower-spiral-radius"
+ ],
+ }
+ )
+ self._o_ran_smo = ORanSmo(
+ {
+ "name": "O-RAN-SMO",
+ "geoLocation": self.center,
+ "layout": layout,
+ "spiralRadiusProfile": spiral_radius_profile,
+ "parent": self,
+ }
+ )
# getter
- def configuration(self) -> Dict[str, Dict]:
+ 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:
+ def __appendNodes(self) -> list[dict[str, Any]]:
+ result: list[dict[str, Any]] = []
+ for tower in self._o_ran_smo.towers:
result.append(tower.toTopology())
return result
- def toTopology(self):
+ def toTopology(self) -> dict[str, Any]:
return {
"ietf-network:networks": {
"network": [
}
}
- def toKml(self):
- root: Element = ET.Element("kml", xmlns="http://www.opengis.net/kml/2.2")
+ def toKml(self) -> ET.Element:
+ root: ET.Element = ET.Element("kml", xmlns="http://www.opengis.net/kml/2.2")
document = ET.SubElement(root, "Document")
- open = ET.SubElement(document, "open")
+ open: ET.Element = ET.SubElement(document, "open")
open.text = "1"
+ name: ET.Element = ET.SubElement(document, "name")
+ name.text = self.name
+
+ document.append(self._o_ran_smo.toKml())
+
return root
- def toSvg(self):
+ def toSvg(self) -> ET.Element:
"""
Getter for a xml/svg Element object representing the Network.
:return Network as SVG object.
"""
- root: Element = ET.Element(
+ root: ET.Element = ET.Element(
"svg",
# width=str(self.__svg_width()),
# height=str(self.__svg_height()),