/*
* 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.api.schema;
import javax.annotation.Nonnull;
import org.opendaylight.yangtools.concepts.Identifiable;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
/**
* Node which is normalized according to the YANG schema
* is identifiable by a {@link org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier}.
*
*
* See subinterfaces of this interface for concretization of node.
*
* @param Local identifier of node
* @param Value of node
*/
/*
* FIXME: 3.0.0: NormalizedNode represents the perfectly-compliant view of the data, as evaluated by an implementation,
* which is currently singular, with respect of its interpretation of a SchemaContext. This includes
* leaf values, which are required to hold normalized representation for a particular implementation,
* which may be affected by its understanding of any YANG extensions present -- such as optional type
* handling hints and bindings.
*
* Implementations (i.e. the reference implementation and parsers) will need to start using
* yang.common.Uint8 and friends and, if possible, express data validation in terms
* of yang.common.CanonicalValue and yang.common.CanonicalValueValidator.
*
* This notably means that to efficiently implement any sort of lenient parsing, we need a separate
* concept which contains an unverified, potentially non-conformant data tree, which the consumer needs
* to check/fixup if it wishes to use it as a NormalizedNode. Such a concept should be called
* "UnverifiedData".
*/
/*
* FIXME: 4.0.0: Once we have UnverifiedData, we should really rename this to "NormalizedData" or similar to unload
* some "Node" ambiguity. "Node" should be a generic term reserved for a particular domain -- hence 'node'
* can be used to refer to either a 'schema node' in context of yang.model.api, or to
* a 'normalized data node' in context of yang.data.api.
*/
public interface NormalizedNode extends Identifiable {
/**
* QName of the node as defined in YANG schema.
*
* @return QName of this node, non-null.
*/
QName getNodeType();
/**
* Locally unique identifier of the node.
*
* @return Node identifier, non-null.
*/
@Override
@Nonnull K getIdentifier();
/**
* Value of node.
*
* @return Value of the node, may be null.
*/
@Nonnull V getValue();
}