Decouple message bus from netconf connector
[controller.git] / opendaylight / md-sal / messagebus-util / src / main / java / org / opendaylight / controller / messagebus / app / util / Util.java
diff --git a/opendaylight/md-sal/messagebus-util/src/main/java/org/opendaylight/controller/messagebus/app/util/Util.java b/opendaylight/md-sal/messagebus-util/src/main/java/org/opendaylight/controller/messagebus/app/util/Util.java
new file mode 100644 (file)
index 0000000..cc20662
--- /dev/null
@@ -0,0 +1,88 @@
+/*
+ * Copyright (c) 2015 Cisco Systems, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.controller.messagebus.app.util;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.Future;
+import java.util.regex.Pattern;
+
+import org.opendaylight.yangtools.yang.common.RpcResult;
+import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
+import org.opendaylight.yangtools.yang.model.api.SchemaPath;
+
+import com.google.common.util.concurrent.Futures;
+
+
+public final class Util {
+
+    public static <T> Future<RpcResult<T>> resultRpcSuccessFor(final T output) {
+        final RpcResult<T> result = RpcResultBuilder.success(output).build();
+        return Futures.immediateFuture(result);
+    }
+
+    /**
+     * Method filters qnames based on wildcard strings
+     *
+     * @param list
+     * @param patterh matching pattern
+     * @return list of filtered qnames
+     */
+    public static List<SchemaPath> expandQname(final List<SchemaPath> list, final Pattern pattern) {
+        final List<SchemaPath> matchingQnames = new ArrayList<>();
+
+        for (final SchemaPath notification : list) {
+            final String namespace = notification.getLastComponent().getNamespace().toString();
+            if (pattern.matcher(namespace).matches()) {
+                matchingQnames.add(notification);
+            }
+        }
+        return matchingQnames;
+    }
+
+    /**
+     * CREDIT to http://www.rgagnon.com/javadetails/java-0515.html
+     * @param wildcard
+     * @return
+     */
+    public static String wildcardToRegex(final String wildcard){
+        final StringBuffer s = new StringBuffer(wildcard.length());
+        s.append('^');
+        for (final char c : wildcard.toCharArray()) {
+            switch(c) {
+                case '*':
+                    s.append(".*");
+                    break;
+                case '?':
+                    s.append('.');
+                    break;
+                // escape special regexp-characters
+                case '(':
+                case ')':
+                case '[':
+                case ']':
+                case '$':
+                case '^':
+                case '.':
+                case '{':
+                case '}':
+                case '|':
+                case '\\':
+                    s.append("\\");
+                    s.append(c);
+                    break;
+                default:
+                    s.append(c);
+                    break;
+            }
+        }
+        s.append('$');
+        return s.toString();
+    }
+}