Merge "Bug 2894 - Yang Data Codec Gson: null pointer exception when trying to deseria...
[yangtools.git] / yang / yang-model-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 org.opendaylight.yangtools.concepts.Identifiable;
12 import org.opendaylight.yangtools.concepts.Immutable;
13
14 /**
15  * Common interface for schema source representations.
16  *
17  * A schema source is an atomic piece of the overall schema context. In YANG terms,
18  * a schema source is semantically equivalent to a single YANG text file, be it a
19  * module or a submodule.
20  *
21  * A schema source can exist in various forms, which we call representations. Again,
22  * in YANG terms, each representation is semantically equivalent, but from
23  * implementation perspective certain operations on a schema source may require it
24  * to be first transformed into a particular representation before they can be
25  * applied. Such transformations are affected via instances of
26  * SchemaSourceTransformation.
27  *
28  * Typical examples of a schema source representation include:
29  * <ul>
30  * <li>a {@link java.lang.String} - textual representation of source code
31  * <li>a {@link java.io.InputStream} - input stream containing source code
32  * <li>a {@link com.google.common.io.ByteSource} - source for input streams
33  * containing source code
34  * <li>Parsed abstract syntax tree (AST), which is the result of a syntactic parser
35  * </ul>
36  *
37  * Implementations of this interface expected to comply with the {@link Immutable}
38  * contract.
39  */
40 @Beta
41 public interface SchemaSourceRepresentation extends Identifiable<SourceIdentifier>, Immutable {
42     /**
43      * {@inheritDoc}
44      */
45     @Override
46     SourceIdentifier getIdentifier();
47
48     /**
49      * Return the concrete representation type.
50      *
51      * @return The type of representation.
52      */
53     Class<? extends SchemaSourceRepresentation> getType();
54 }