/*
* Copyright (c) 2014 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.yangtools.yang.data.impl.codec.xml;
import java.net.URI;
import java.util.Map.Entry;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
import org.opendaylight.yangtools.yang.model.api.SchemaContext;
import org.w3c.dom.Element;
public final class InstanceIdentifierForXmlCodec {
private InstanceIdentifierForXmlCodec() {
throw new UnsupportedOperationException("Utility class");
}
public static YangInstanceIdentifier deserialize(final Element element, final SchemaContext schemaContext) {
final ElementInstanceIdentifierParser codec = new ElementInstanceIdentifierParser(schemaContext, element);
return codec.deserialize(element.getTextContent().trim());
}
public static Element serialize(final YangInstanceIdentifier id, final Element element, final SchemaContext context) {
final RandomPrefixInstanceIdentifierSerializer codec = new RandomPrefixInstanceIdentifierSerializer(context);
final String str = codec.serialize(id);
for (Entry<URI, String> e : codec.getPrefixes()) {
element.setAttribute("xmlns:" + e.getValue(), e.getKey().toString());
}
element.setTextContent(str);
return element;
}
private static String getIdAndPrefixAsStr(final String pathPart) {
int predicateStartIndex = pathPart.indexOf('[');
return predicateStartIndex == -1 ? pathPart : pathPart.substring(0, predicateStartIndex);
}
public static QName toIdentity(final String xPathArgument, final Element element, final SchemaContext schemaContext) {
final ElementIdentityrefParser codec = new ElementIdentityrefParser(schemaContext, element);
return codec.deserialize(getIdAndPrefixAsStr(xPathArgument).trim());
}
}