5d6ac02a22d6bf7cad9606ac8f34e8b90ed6148a
[oam.git] / code / network-generator / network_generation / model / python / top.py
1 # Copyright 2023 highstreet technologies GmbH
2 #
3 # Licensed under the Apache License, Version 2.0 (the "License");
4 # you may not use this file except in compliance with the License.
5 # You may obtain a copy of the License at
6 #
7 #     http://www.apache.org/licenses/LICENSE-2.0
8 #
9 # Unless required by applicable law or agreed to in writing, software
10 # distributed under the License is distributed on an "AS IS" BASIS,
11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 # See the License for the specific language governing permissions and
13 # limitations under the License.
14
15 #!/usr/bin/python
16
17 """
18 An abstract Class for all classes
19 """
20 import uuid
21 from abc import ABC
22
23 from network_generation.model.python.type_definitions import (
24     AdministrativeState,
25     AlarmState,
26     LifeCycleState,
27     OperationalState,
28     UsageState,
29     Utilization,
30 )
31
32
33 # Define the ITop interface
34 class ITop:
35     def __init__(
36         self,
37         id: str = None,
38         name: str = None,
39         administrativeState: AdministrativeState = None,
40         operationalState: OperationalState = None,
41         lifeCycleState: LifeCycleState = None,
42         alarmState: AlarmState = None,
43         usageState: UsageState = None,
44         utilization: Utilization = None,
45     ):
46         self.id = id
47         self.name = name
48         self.administrativeState = administrativeState
49         self.operationalState = operationalState
50         self.lifeCycleState = lifeCycleState
51         self.alarmState = alarmState
52         self.usageState = usageState
53         self.utilization = utilization
54
55
56 # Define the Top class
57 class Top(ABC, ITop):
58     def __init__(self, data: [dict[str, dict] | None] = None):
59         self._id = data["id"] if data and "id" in data else str(uuid.uuid4())
60         self._name = (
61             data["name"]
62             if data and "name" in data
63             else " ".join(["Name", "of", self._id])
64         )
65         self._administrativeState = (
66             data["administrativeState"]
67             if data and "administrativeState" in data
68             else AdministrativeState.LOCKED
69         )
70         self._operationalState = (
71             data["operationalState"]
72             if data and "operationalState" in data
73             else OperationalState.DISABLED
74         )
75         self._lifeCycleState = (
76             data["lifeCycleState"]
77             if data and "lifeCycleState" in data
78             else LifeCycleState.PLANNED
79         )
80         self._alarmState = (
81             data["alarmState"] if data and "alarmState" in data else 0
82         )
83         self._usageState = (
84             data["usageState"]
85             if data and "usageState" in data
86             else UsageState.UNUSED
87         )
88         self._utilization = (
89             data["utilization"] if data and "utilization" in data else 0
90         )
91
92     @property
93     def id(self) -> str:
94         return self._id
95
96     @id.setter
97     def id(self, value: str):
98         self._id = value
99
100     @property
101     def name(self) -> str:
102         return self._name
103
104     @name.setter
105     def name(self, value: str):
106         self._name = value
107
108     @property
109     def administrativeState(self) -> AdministrativeState:
110         return self._administrativeState
111
112     @administrativeState.setter
113     def administrativeState(self, value: AdministrativeState):
114         self._administrativeState = value
115
116     @property
117     def operationalState(self) -> OperationalState:
118         return self._operationalState
119
120     @operationalState.setter
121     def operationalState(self, value: OperationalState):
122         self._operationalState = value
123
124     @property
125     def lifeCycleState(self) -> LifeCycleState:
126         return self._lifeCycleState
127
128     @lifeCycleState.setter
129     def lifeCycleState(self, value: LifeCycleState):
130         self._lifeCycleState = value
131
132     @property
133     def alarmState(self) -> AlarmState:
134         return self._alarmState
135
136     @alarmState.setter
137     def alarmState(self, value: AlarmState):
138         self._alarmState = value
139
140     @property
141     def usageState(self) -> UsageState:
142         return self._usageState
143
144     @usageState.setter
145     def usageState(self, value: UsageState):
146         self._usageState = value
147
148     @property
149     def utilization(self) -> Utilization:
150         return self._utilization
151
152     @utilization.setter
153     def utilization(self, value: Utilization):
154         self._utilization = value
155
156     def json(self) -> dict[str, dict]:
157         return {
158             "id": self.id,
159             "name": self.name,
160             "administrativeState": self.administrativeState.value,
161             "operationalState": self.operationalState.value,
162             "lifeCycleState": self.lifeCycleState.value,
163             "alarmState": self.alarmState,
164             "usageState": self.usageState.value,
165             "utilization": self.utilization,
166         }
167
168     def __str__(self) -> str:
169         return str(self.json())