Merge "BUG-1276: fixed generated union constructor"
[yangtools.git] / yang / yang-data-impl / src / main / java / org / opendaylight / yangtools / yang / data / impl / codec / xml / XmlUtils.java
1 /*
2  * Copyright (c) 2014 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 package org.opendaylight.yangtools.yang.data.impl.codec.xml;
9
10 import java.util.Map;
11
12 import javax.annotation.Nonnull;
13
14 import org.opendaylight.yangtools.yang.common.QName;
15 import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier;
16 import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier.NodeIdentifierWithPredicates;
17 import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier.NodeWithValue;
18 import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier.PathArgument;
19 import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
20
21 /**
22  * Common XML-related utility methods, which are not specific to a particular
23  * JAXP API.
24  */
25 final class XmlUtils {
26
27     private XmlUtils() {
28
29     }
30
31     public static TypeDefinition<?> resolveBaseTypeFrom(final @Nonnull TypeDefinition<?> type) {
32         TypeDefinition<?> superType = type;
33         while (superType.getBaseType() != null) {
34             superType = superType.getBaseType();
35         }
36         return superType;
37     }
38
39     static String encodeIdentifier(final RandomPrefix prefixes, final InstanceIdentifier id) {
40         StringBuilder textContent = new StringBuilder();
41         for (PathArgument pathArgument : id.getPathArguments()) {
42             textContent.append('/');
43             textContent.append(prefixes.encodeQName(pathArgument.getNodeType()));
44             if (pathArgument instanceof NodeIdentifierWithPredicates) {
45                 Map<QName, Object> predicates = ((NodeIdentifierWithPredicates) pathArgument).getKeyValues();
46
47                 for (QName keyValue : predicates.keySet()) {
48                     String predicateValue = String.valueOf(predicates.get(keyValue));
49                     textContent.append('[');
50                     textContent.append(prefixes.encodeQName(keyValue));
51                     textContent.append("='");
52                     textContent.append(predicateValue);
53                     textContent.append("']");
54                 }
55             } else if (pathArgument instanceof NodeWithValue) {
56                 textContent.append("[.='");
57                 textContent.append(((NodeWithValue) pathArgument).getValue());
58                 textContent.append("']");
59             }
60         }
61
62         return textContent.toString();
63     }
64 }