/* * 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.yangtools.yang.data.jaxen; import static com.google.common.base.Preconditions.checkArgument; import com.google.common.base.Converter; import java.util.Optional; import org.jaxen.ContextSupport; import org.jaxen.SimpleVariableContext; import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNodes; import org.opendaylight.yangtools.yang.model.api.SchemaContext; import org.opendaylight.yangtools.yang.model.api.SchemaContextProvider; final class NormalizedNodeContextSupport extends ContextSupport implements SchemaContextProvider { private static final long serialVersionUID = 1L; private final NormalizedNodeContext root; private NormalizedNodeContextSupport(final ConverterNamespaceContext context, final NormalizedNodeNavigator navigator) { super(context, YangFunctionContext.getInstance(), new SimpleVariableContext(), navigator); this.root = NormalizedNodeContext.forRoot(this); } static NormalizedNodeContextSupport create(final JaxenDocument document, final Converter prefixes) { final ConverterNamespaceContext context = new ConverterNamespaceContext(prefixes); final NormalizedNodeNavigator navigator = new NormalizedNodeNavigator(context, document); return new NormalizedNodeContextSupport(context, navigator); } NormalizedNodeContext createContext(final YangInstanceIdentifier path) { NormalizedNodeContext result = root; for (PathArgument arg : path.getPathArguments()) { final Optional> node = NormalizedNodes.getDirectChild(result.getNode(), arg); checkArgument(node.isPresent(), "Node %s has no child %s", result.getNode(), arg); result = result.createChild(node.get()); } return result; } @Override public NormalizedNodeNavigator getNavigator() { return (NormalizedNodeNavigator) super.getNavigator(); } @Override public SchemaContext getSchemaContext() { return getNavigator().getSchemaContext(); } }