2 * Copyright (c) 2017 Cisco Systems, Inc. and others. All rights reserved.
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
9 package org.opendaylight.mdsal.binding.javav2.model.api;
11 import com.google.common.annotations.Beta;
12 import java.util.List;
13 import java.util.Optional;
14 import org.opendaylight.mdsal.binding.javav2.spec.runtime.BindingNamespaceType;
17 * Every Java interface has to be specified with:
19 * <li><code>package</code> that belongs into</li>
20 * <li><code>interface</code> name (with commentary that <b>SHOULD</b> be
21 * present to proper define interface and base <i>contracts</i> specified for
23 * <li>Each Generated Type can define list of types that Generated Type can
24 * implement to extend it's definition (i.e. interface extends list of
25 * interfaces or java class implements list of interfaces)</li>
26 * <li>Each Generated Type can contain multiple enclosed definitions of
27 * Generated Types (i.e. interface can contain N enclosed interface definitions
28 * or enclosed classes)</li>
29 * <li><code>enum</code> and <code>constant</code> definitions (i.e. each
30 * constant definition is by default defined as <code>public static final</code>
31 * + type (either primitive or object) and constant name</li>
32 * <li><code>method definitions</code> with specified input parameters (with
33 * types) and return values</li>
36 * By the definition of the interface constant, enum, enclosed types and method
37 * definitions MUST be public, so there is no need to specify the scope of
41 public interface GeneratedType extends Type, DocumentedType {
44 * Returns the parent type if Generated Type is defined as enclosing type,
45 * otherwise returns <code>null</code>
47 * @return the parent type if Generated Type is defined as enclosing type,
48 * otherwise returns <code>null</code>
53 * Returns comment string associated with Generated Type.
55 * @return comment string associated with Generated Type.
57 TypeComment getComment();
60 * Returns List of annotation definitions associated with generated type.
62 * @return List of annotation definitions associated with generated type.
64 List<AnnotationType> getAnnotations();
67 * Returns <code>true</code> if The Generated Type is defined as abstract.
69 * @return <code>true</code> if The Generated Type is defined as abstract.
74 * Returns List of Types that Generated Type will implement.
76 * @return List of Types that Generated Type will implement.
78 List<Type> getImplements();
81 * Returns List of enclosing Generated Types.
83 * @return List of enclosing Generated Types.
85 List<GeneratedType> getEnclosedTypes();
88 * Returns List of all Enumerator definitions associated with Generated
91 * @return List of all Enumerator definitions associated with Generated
94 List<Enumeration> getEnumerations();
97 * Returns List of Constant definitions associated with Generated Type.
99 * @return List of Constant definitions associated with Generated Type.
101 List<Constant> getConstantDefinitions();
104 * Returns List of Method Definitions associated with Generated Type.
106 * List does not contains getters and setters for properties.
108 * @return List of Method Definitions associated with Generated Type.
110 List<MethodSignature> getMethodDefinitions();
113 * Returns List of Properties that are declared for Generated Transfer
116 * @return List of Properties that are declared for Generated Transfer
119 List<GeneratedProperty> getProperties();
122 * Returns parent type for data schema node builder
124 Type getParentTypeForBuilder();
127 * Returns the YANG definition of this type, if available.
129 * @return YANG source definition, or empty when unavailable.
131 Optional<YangSourceDefinition> getYangSourceDefinition();
134 * Get the BindingNamespaceType.
136 * @return BindingNamespaceType which type belongs to.
138 BindingNamespaceType getBindingNamespaceType();