8324b64aaac7821683c04589016072831975903c
[controller.git] / opendaylight / md-sal / sal-clustering-commons / src / main / java / org / opendaylight / controller / cluster / datastore / node / utils / PathUtils.java
1 /*
2  * Copyright (c) 2014, 2015 Cisco Systems, Inc. and others.  All rights reserved.
3  *
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
7  */
8
9 package org.opendaylight.controller.cluster.datastore.node.utils;
10
11 import com.google.common.base.Splitter;
12 import java.util.ArrayList;
13 import java.util.Iterator;
14 import java.util.List;
15 import java.util.Set;
16 import org.opendaylight.yangtools.yang.common.QName;
17 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
18 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.AugmentationIdentifier;
19 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
20 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
21 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeWithValue;
22 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
23
24 public class PathUtils {
25     private static final Splitter SLASH_SPLITTER = Splitter.on('/').omitEmptyStrings();
26
27     /**
28      * Given a YangInstanceIdentifier return a serialized version of the same
29      * as a String
30      *
31      * @param path
32      * @return
33      */
34     public static String toString(YangInstanceIdentifier path) {
35         final Iterator<PathArgument> it = path.getPathArguments().iterator();
36         if (!it.hasNext()) {
37             return "";
38         }
39
40         final StringBuilder sb = new StringBuilder();
41         for (;;) {
42             sb.append(toString(it.next()));
43             if (!it.hasNext()) {
44                 break;
45             }
46             sb.append('/');
47         }
48
49         return sb.toString();
50     }
51
52     /**
53      * Given a YangInstanceIdentifier.PathArgument return a serialized version
54      * of the same as a String
55      *
56      * @param pathArgument
57      * @return
58      */
59     public static String toString(PathArgument pathArgument){
60         if(pathArgument instanceof NodeIdentifier){
61             return toString((NodeIdentifier) pathArgument);
62         } else if(pathArgument instanceof AugmentationIdentifier){
63             return toString((AugmentationIdentifier) pathArgument);
64         } else if(pathArgument instanceof NodeWithValue){
65             return toString((NodeWithValue<?>) pathArgument);
66         } else if(pathArgument instanceof NodeIdentifierWithPredicates){
67             return toString((NodeIdentifierWithPredicates) pathArgument);
68         }
69
70         return pathArgument.toString();
71     }
72
73     /**
74      * Given a serialized string version of a YangInstanceIdentifier convert
75      * to a YangInstanceIdentifier
76      *
77      * @param path
78      * @return
79      */
80     public static YangInstanceIdentifier toYangInstanceIdentifier(String path){
81         List<PathArgument> pathArguments = new ArrayList<>();
82         for (String segment : SLASH_SPLITTER.split(path)) {
83             pathArguments.add(NodeIdentifierFactory.getArgument(segment));
84         }
85         return YangInstanceIdentifier.create(pathArguments);
86     }
87
88     private static String toString(NodeIdentifier pathArgument){
89         return pathArgument.getNodeType().toString();
90     }
91
92     private static String toString(AugmentationIdentifier pathArgument){
93         Set<QName> childNames = pathArgument.getPossibleChildNames();
94         final StringBuilder sb = new StringBuilder("AugmentationIdentifier{");
95         sb.append("childNames=").append(childNames).append('}');
96         return sb.toString();
97
98     }
99
100     private static String toString(NodeWithValue<?> pathArgument) {
101         return pathArgument.getNodeType().toString() + "[" + pathArgument.getValue() + "]";
102     }
103
104     private static String toString(NodeIdentifierWithPredicates pathArgument){
105         return pathArgument.getNodeType().toString() + '[' + pathArgument.getKeyValues() + ']';
106     }
107
108 }