2 * Copyright © 2020 Orange, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.transportpce.nbinotifications.utils;
10 import java.nio.charset.Charset;
11 import java.time.OffsetDateTime;
12 import java.time.ZoneOffset;
13 import java.time.format.DateTimeFormatter;
14 import java.util.HashMap;
15 import java.util.HashSet;
16 import java.util.List;
18 import java.util.UUID;
19 import java.util.concurrent.ExecutionException;
20 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
21 import org.opendaylight.transportpce.common.network.NetworkTransactionService;
22 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.node.types.rev210528.NodeIdType;
23 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.ConnectionType;
24 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.endpoint.RxDirection;
25 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.endpoint.RxDirectionBuilder;
26 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.endpoint.RxDirectionKey;
27 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.endpoint.TxDirection;
28 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.endpoint.TxDirectionBuilder;
29 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.endpoint.TxDirectionKey;
30 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.lgx.LgxBuilder;
31 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.port.PortBuilder;
32 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev191129.State;
33 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.format.rev191129.ServiceFormat;
34 import org.opendaylight.yang.gen.v1.nbi.notifications.rev230726.NotificationProcessService;
35 import org.opendaylight.yang.gen.v1.nbi.notifications.rev230726.NotificationProcessServiceBuilder;
36 import org.opendaylight.yang.gen.v1.nbi.notifications.rev230726.get.notifications.alarm.service.output.NotificationsAlarmService;
37 import org.opendaylight.yang.gen.v1.nbi.notifications.rev230726.get.notifications.alarm.service.output.NotificationsAlarmServiceBuilder;
38 import org.opendaylight.yang.gen.v1.nbi.notifications.rev230726.get.notifications.process.service.output.NotificationsProcessService;
39 import org.opendaylight.yang.gen.v1.nbi.notifications.rev230726.get.notifications.process.service.output.NotificationsProcessServiceBuilder;
40 import org.opendaylight.yang.gen.v1.nbi.notifications.rev230726.notification.process.service.ServiceAEndBuilder;
41 import org.opendaylight.yang.gen.v1.nbi.notifications.rev230726.notification.process.service.ServiceZEndBuilder;
42 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.AdministrativeState;
43 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.Context;
44 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.ContextBuilder;
45 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.DateAndTime;
46 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.LayerProtocolName;
47 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.OperationalState;
48 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.Uuid;
49 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.local._class.Name;
50 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.local._class.NameBuilder;
51 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.Context1;
52 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.Context1Builder;
53 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.context.ConnectivityContextBuilder;
54 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.CreateNotificationSubscriptionServiceInputBuilder;
55 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.GetNotificationListInputBuilder;
56 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.NotificationType;
57 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.ObjectType;
58 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.SubscriptionState;
59 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.context.NotificationContextBuilder;
60 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.create.notification.subscription.service.input.SubscriptionFilter;
61 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.create.notification.subscription.service.input.SubscriptionFilterBuilder;
62 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.get.notification.list.output.Notification;
63 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.get.notification.list.output.NotificationBuilder;
64 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.notification.ChangedAttributes;
65 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.notification.ChangedAttributesBuilder;
66 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.notification.TargetObjectName;
67 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.notification.TargetObjectNameBuilder;
68 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.context.TopologyContextBuilder;
69 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.context.NwTopologyServiceBuilder;
70 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
71 import org.opendaylight.yangtools.yang.common.Uint32;
72 import org.opendaylight.yangtools.yang.common.Uint8;
74 public final class NotificationServiceDataUtils {
76 public static final String TAPI_CONTEXT = "T-API context";
78 private NotificationServiceDataUtils() {
81 public static NotificationProcessService buildSendEventInput() {
82 return new NotificationProcessServiceBuilder()
83 .setMessage("message")
84 .setServiceName("service1")
85 .setOperationalState(State.InService)
86 .setResponseFailed("")
87 .setCommonId("commond-id")
88 .setConnectionType(ConnectionType.Service)
89 .setServiceZEnd(getServiceZEndBuild().build())
90 .setServiceAEnd(getServiceAEndBuild().build())
94 public static NotificationsProcessService buildReceivedEvent() {
95 return new NotificationsProcessServiceBuilder()
96 .setMessage("message")
97 .setServiceName("service1")
98 .setOperationalState(State.InService)
99 .setResponseFailed("")
100 .setCommonId("commond-id")
101 .setConnectionType(ConnectionType.Service)
102 .setServiceZEnd(getServiceZEndBuild().build())
103 .setServiceAEnd(getServiceAEndBuild().build())
107 public static NotificationsAlarmService buildReceivedAlarmEvent() {
108 return new NotificationsAlarmServiceBuilder()
109 .setMessage("message")
110 .setServiceName("service1")
111 .setOperationalState(State.InService)
112 .setConnectionType(ConnectionType.Service)
116 public static Notification buildReceivedTapiAlarmEvent() {
117 DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssxxx");
118 OffsetDateTime offsetDateTime = OffsetDateTime.now(ZoneOffset.UTC);
119 DateAndTime datetime = new DateAndTime(dtf.format(offsetDateTime));
120 Uuid targetObjectId = new Uuid(UUID.randomUUID().toString());
121 TargetObjectName objectName = new TargetObjectNameBuilder()
122 .setValue(targetObjectId.getValue())
123 .setValueName("Connectivity Service Name")
125 ChangedAttributes adminStateChange = new ChangedAttributesBuilder()
126 .setValueName("administrativeState")
127 .setOldValue(AdministrativeState.LOCKED.getName())
128 .setNewValue(AdministrativeState.UNLOCKED.getName())
130 ChangedAttributes operStateChange = new ChangedAttributesBuilder()
131 .setValueName("operationalState")
132 .setOldValue(OperationalState.DISABLED.getName())
133 .setNewValue(OperationalState.ENABLED.getName())
135 return new NotificationBuilder()
136 .setNotificationType(NotificationType.ATTRIBUTEVALUECHANGE)
137 .setLayerProtocolName(LayerProtocolName.ETH)
138 .setTargetObjectType(ObjectType.CONNECTIVITYSERVICE)
139 .setEventTimeStamp(datetime)
140 .setUuid(new Uuid(UUID.randomUUID().toString()))
141 .setTargetObjectIdentifier(targetObjectId)
142 .setTargetObjectName(Map.of(objectName.key(), objectName))
143 .setChangedAttributes(Map.of(adminStateChange.key(), adminStateChange,
144 operStateChange.key(), operStateChange))
148 public static ServiceAEndBuilder getServiceAEndBuild() {
149 return new ServiceAEndBuilder()
151 .setServiceFormat(ServiceFormat.OC)
152 .setServiceRate(Uint32.valueOf(1))
153 .setNodeId(new NodeIdType("XPONDER-1-2"))
154 .setTxDirection(getTxDirection())
155 .setRxDirection(getRxDirection());
158 public static ServiceZEndBuilder getServiceZEndBuild() {
159 return new ServiceZEndBuilder()
161 .setServiceFormat(ServiceFormat.OC)
162 .setServiceRate(Uint32.valueOf(1))
163 .setNodeId(new NodeIdType("XPONDER-1-2"))
164 .setTxDirection(getTxDirection())
165 .setRxDirection(getRxDirection());
168 public static CreateNotificationSubscriptionServiceInputBuilder buildNotificationSubscriptionServiceInputBuilder() {
169 Name name = new NameBuilder()
170 .setValue("test subscription")
171 .setValueName("Subscription name")
173 SubscriptionFilter subscriptionFilter = new SubscriptionFilterBuilder()
174 .setRequestedObjectTypes(new HashSet<>(List.of(ObjectType.CONNECTIVITYSERVICE)))
175 .setRequestedNotificationTypes(new HashSet<>(List.of(NotificationType.ALARMEVENT)))
176 .setRequestedLayerProtocols(new HashSet<>(List.of(LayerProtocolName.ETH)))
177 .setRequestedObjectIdentifier(new HashSet<>(List.of(new Uuid(UUID.randomUUID().toString()))))
178 .setIncludeContent(true)
179 .setLocalId("localId")
180 .setName(Map.of(name.key(), name))
182 return new CreateNotificationSubscriptionServiceInputBuilder()
183 .setSubscriptionFilter(subscriptionFilter)
184 .setSubscriptionState(SubscriptionState.ACTIVE);
187 private static Map<TxDirectionKey, TxDirection> getTxDirection() {
188 return Map.of(new TxDirectionKey(Uint8.ZERO), new TxDirectionBuilder()
189 .setPort(new PortBuilder()
190 .setPortDeviceName("device name")
191 .setPortName("port name")
192 .setPortRack("port rack")
193 .setPortShelf("port shelf")
194 .setPortSlot("port slot")
195 .setPortSubSlot("port subslot")
196 .setPortType("port type")
198 .setLgx(new LgxBuilder()
199 .setLgxDeviceName("lgx device name")
200 .setLgxPortName("lgx port name")
201 .setLgxPortRack("lgx port rack")
202 .setLgxPortShelf("lgx port shelf")
204 .setIndex(Uint8.ZERO)
208 private static Map<RxDirectionKey, RxDirection> getRxDirection() {
209 return Map.of(new RxDirectionKey(Uint8.ZERO), new RxDirectionBuilder()
210 .setPort(new PortBuilder()
211 .setPortDeviceName("device name")
212 .setPortName("port name")
213 .setPortRack("port rack")
214 .setPortShelf("port shelf")
215 .setPortSlot("port slot")
216 .setPortSubSlot("port subslot")
217 .setPortType("port type")
219 .setLgx(new LgxBuilder()
220 .setLgxDeviceName("lgx device name")
221 .setLgxPortName("lgx port name")
222 .setLgxPortRack("lgx port rack")
223 .setLgxPortShelf("lgx port shelf")
225 .setIndex(Uint8.ZERO)
229 public static void createTapiContext(
230 NetworkTransactionService networkTransactionService) throws ExecutionException, InterruptedException {
231 // Augmenting tapi context to include topology and connectivity contexts
232 org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.global._class.Name contextName
233 = new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.global._class.NameBuilder()
234 .setValue(TAPI_CONTEXT).setValueName("TAPI Context Name").build();
236 Context1 connectivityContext =
237 new Context1Builder()
238 .setConnectivityContext(
239 new ConnectivityContextBuilder()
240 .setConnection(new HashMap<>())
241 .setConnectivityService(new HashMap<>())
245 org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.global._class.Name nwTopoServiceName =
246 new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.global._class.NameBuilder()
247 .setValue("Network Topo Service")
248 .setValueName("Network Topo Service Name")
251 org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.Context1 topologyContext
252 = new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.Context1Builder()
253 .setTopologyContext(new TopologyContextBuilder()
254 .setNwTopologyService(new NwTopologyServiceBuilder()
255 .setTopology(new HashMap<>())
258 UUID.nameUUIDFromBytes("Network Topo Service".getBytes(Charset.forName("UTF-8")))
260 .setName(Map.of(nwTopoServiceName.key(), nwTopoServiceName))
262 .setTopology(new HashMap<>())
266 org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.Context1 notificationContext
267 = new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.Context1Builder()
268 .setNotificationContext(new NotificationContextBuilder()
269 .setNotification(new HashMap<>())
270 .setNotifSubscription(new HashMap<>())
274 ContextBuilder contextBuilder = new ContextBuilder()
275 .setName(Map.of(contextName.key(), contextName))
277 new Uuid(UUID.nameUUIDFromBytes(TAPI_CONTEXT.getBytes(Charset.forName("UTF-8"))).toString()))
278 .setServiceInterfacePoint(new HashMap<>())
279 .addAugmentation(connectivityContext)
280 .addAugmentation(topologyContext)
281 .addAugmentation(notificationContext);
283 // todo: add notification context
284 InstanceIdentifier<Context> contextIID = InstanceIdentifier.builder(Context.class).build();
286 networkTransactionService.put(LogicalDatastoreType.OPERATIONAL, contextIID, contextBuilder.build());
287 networkTransactionService.commit().get();
290 public static GetNotificationListInputBuilder buildGetNotificationListInputBuilder(String subscriptionUuid) {
291 return new GetNotificationListInputBuilder()
292 .setSubscriptionIdOrName(subscriptionUuid)
293 .setTimePeriod("some string");