Terminally deprecate SchemaNode.getPath()
[yangtools.git] / model / yang-model-api / src / main / java / org / opendaylight / yangtools / yang / model / api / SchemaNode.java
1 /*
2  * Copyright (c) 2013 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.model.api;
9
10 import org.eclipse.jdt.annotation.NonNull;
11 import org.opendaylight.yangtools.yang.common.QName;
12
13 /**
14  * SchemaNode represents a node in schema tree.
15  */
16 public interface SchemaNode extends DocumentedNode.WithStatus {
17     /**
18      * Returns QName of the instance of the type <code>SchemaNode</code>.
19      *
20      * @return QName with the name of the schema node
21      */
22     @NonNull QName getQName();
23
24     /**
25      * Returns the schema path of the instance of the type {@code SchemaNode}.
26      *
27      * <p>
28      * The default implementation throws an {@link UnsupportedOperationException}.
29      *
30      * @return schema path of the schema node
31      * @throws UnsupportedOperationException when the implementation does not support per-node unique paths
32      * @deprecated The idea of identifying SchemaNodes through a global path does not work. There are two problems:
33      *             <ul>
34      *               <li>SchemaPath does not work because it does not discern namespaces, i.e. we do not known whether
35      *                   the {@code QName} refers to a {@code grouping}, a {@code typedef} or a {@code container}.
36      *               </li>
37      *               <li>Such a path needs to be maintained by each SchemaNode and requires us to instantiate each
38      *                   effective statement as a separate object (because {@link #getPath()} is effectively an
39      *                   identity within a given {@link EffectiveModelContext}.
40      *               </li>
41      *             </ul>
42      *             An alternative method of exchanging pointers to schema nodes (well, statements, really), exists in
43      *             the form of {@link EffectiveStatementInference} and its ecosystem. This method is scheduled for
44      *             removal in the next major release.
45      */
46     @Deprecated(forRemoval = true)
47     default @NonNull SchemaPath getPath() {
48         return SchemaNodeDefaults.throwUnsupported(this);
49     }
50 }