2 * Copyright (c) 2016 Cisco Systems, 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.restconf.restful.utils;
10 import java.util.HashMap;
12 import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker.DataChangeScope;
13 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
14 import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker;
15 import org.opendaylight.controller.md.sal.dom.api.DOMDataChangeListener;
16 import org.opendaylight.netconf.sal.streams.listeners.ListenerAdapter;
17 import org.opendaylight.netconf.sal.streams.websockets.WebSocketServer;
18 import org.opendaylight.restconf.utils.RestconfConstants;
19 import org.opendaylight.yangtools.concepts.ListenerRegistration;
20 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
23 * Subscribe to stream util class
26 public final class SubscribeToStreamUtil {
28 private SubscribeToStreamUtil() {
29 throw new UnsupportedOperationException("Util class");
38 * - string of enum value
41 public static <T> T parseURIEnum(final Class<T> clazz, final String value) {
42 if ((value == null) || value.equals("")) {
45 return StreamUtil.resolveEnum(clazz, value);
49 * Prepare map of values from URI
55 public static Map<String, String> mapValuesFromUri(final String identifier) {
56 final HashMap<String, String> result = new HashMap<>();
57 final String[] tokens = identifier.split(String.valueOf(RestconfConstants.SLASH));
58 for (final String token : tokens) {
59 final String[] paramToken = token.split(String.valueOf(RestconfStreamsConstants.EQUAL));
60 if (paramToken.length == 2) {
61 result.put(paramToken[0], paramToken[1]);
68 * Register data change listener in dom data broker and set it to listener
72 * - {@link LogicalDatastoreType}
74 * - {@link DataChangeScope}
76 * - listener on specific stream
77 * @param domDataBroker
78 * - data broker for register data change listener
80 public static void registration(final LogicalDatastoreType ds, final DataChangeScope scope,
81 final ListenerAdapter listener, final DOMDataBroker domDataBroker) {
82 if (listener.isListening()) {
86 final YangInstanceIdentifier path = listener.getPath();
87 final ListenerRegistration<DOMDataChangeListener> registration = domDataBroker.registerDataChangeListener(ds,
88 path, listener, scope);
90 listener.setRegistration(registration);
94 * Get port from web socket server. If doesn't exit, create it.
98 public static int prepareNotificationPort() {
99 int port = RestconfStreamsConstants.NOTIFICATION_PORT;
101 final WebSocketServer webSocketServer = WebSocketServer.getInstance();
102 port = webSocketServer.getPort();
103 } catch (final NullPointerException e) {
104 WebSocketServer.createInstance(RestconfStreamsConstants.NOTIFICATION_PORT);