Require SchemaSourceRepresentation.getSymbolicName()
[yangtools.git] / yang / yang-repo-api / src / main / java / org / opendaylight / yangtools / yang / model / repo / api / SchemaSourceRepresentation.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.model.repo.api;
9
10 import com.google.common.annotations.Beta;
11 import java.util.Optional;
12 import org.eclipse.jdt.annotation.NonNull;
13 import org.opendaylight.yangtools.concepts.Identifiable;
14 import org.opendaylight.yangtools.concepts.Immutable;
15
16 /**
17  * Common interface for schema source representations. A schema source is an atomic piece of the overall schema context.
18  * In YANG terms, a schema source is semantically equivalent to a single YANG text file, be it a module or a submodule.
19  *
20  * <p>
21  * A schema source can exist in various forms, which we call representations. Again, in YANG terms, each representation
22  * is semantically equivalent, but from implementation perspective certain operations on a schema source may require it
23  * to be first transformed into a particular representation before they can be applied. Such transformations are
24  * affected via instances of SchemaSourceTransformation.
25  *
26  * <p>
27  * Typical examples of a schema source representation include:
28  * <ul>
29  * <li>a {@link java.lang.String} - textual representation of source code
30  * <li>a {@link java.io.InputStream} - input stream containing source code
31  * <li>a {@link com.google.common.io.ByteSource} - source for input streams
32  * containing source code
33  * <li>Parsed abstract syntax tree (AST), which is the result of a syntactic parser
34  * </ul>
35  *
36  * <p>
37  * Implementations of this interface expected to comply with the {@link Immutable} contract.
38  */
39 @Beta
40 public interface SchemaSourceRepresentation extends Identifiable<SourceIdentifier>, Immutable {
41     @Override
42     SourceIdentifier getIdentifier();
43
44     /**
45      * Return the concrete representation type.
46      *
47      * @return The type of representation.
48      */
49     @NonNull Class<? extends SchemaSourceRepresentation> getType();
50
51     /**
52      * Return the symbolic name, if available. This name has no semantic meaning beyond being useful for debugging
53      * by humans.
54      *
55      * @return Symbolic name, if available
56      */
57     Optional<String> getSymbolicName();
58 }