/*
* Copyright (c) 2017 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.mdsal.binding.javav2.model.api;
import com.google.common.annotations.Beta;
import java.util.List;
import java.util.Optional;
/**
* Every Java interface has to be specified with:
*
* package
that belongs into
* interface
name (with commentary that SHOULD be
* present to proper define interface and base contracts specified for
* interface)
* - Each Generated Type can define list of types that Generated Type can
* implement to extend it's definition (i.e. interface extends list of
* interfaces or java class implements list of interfaces)
* - Each Generated Type can contain multiple enclosed definitions of
* Generated Types (i.e. interface can contain N enclosed interface definitions
* or enclosed classes)
* enum
and constant
definitions (i.e. each
* constant definition is by default defined as public static final
* + type (either primitive or object) and constant name
* method definitions
with specified input parameters (with
* types) and return values
*
*
* By the definition of the interface constant, enum, enclosed types and method
* definitions MUST be public, so there is no need to specify the scope of
* visibility.
*/
@Beta
public interface GeneratedType extends Type, DocumentedType {
/**
* Returns the parent type if Generated Type is defined as enclosing type,
* otherwise returns null
*
* @return the parent type if Generated Type is defined as enclosing type,
* otherwise returns null
*/
Type getParentType();
/**
* Returns comment string associated with Generated Type.
*
* @return comment string associated with Generated Type.
*/
TypeComment getComment();
/**
* Returns List of annotation definitions associated with generated type.
*
* @return List of annotation definitions associated with generated type.
*/
List getAnnotations();
/**
* Returns true
if The Generated Type is defined as abstract.
*
* @return true
if The Generated Type is defined as abstract.
*/
boolean isAbstract();
/**
* Returns List of Types that Generated Type will implement.
*
* @return List of Types that Generated Type will implement.
*/
List getImplements();
/**
* Returns List of enclosing Generated Types.
*
* @return List of enclosing Generated Types.
*/
List getEnclosedTypes();
/**
* Returns List of all Enumerator definitions associated with Generated
* Type.
*
* @return List of all Enumerator definitions associated with Generated
* Type.
*/
List getEnumerations();
/**
* Returns List of Constant definitions associated with Generated Type.
*
* @return List of Constant definitions associated with Generated Type.
*/
List getConstantDefinitions();
/**
* Returns List of Method Definitions associated with Generated Type.
*
* List does not contains getters and setters for properties.
*
* @return List of Method Definitions associated with Generated Type.
*/
List getMethodDefinitions();
/**
* Returns List of Properties that are declared for Generated Transfer
* Object.
*
* @return List of Properties that are declared for Generated Transfer
* Object.
*/
List getProperties();
/**
* Returns parent type for data schema node builder
*/
Type getParentTypeForBuilder();
/**
* Returns the YANG definition of this type, if available.
*
* @return YANG source definition, or empty when unavailable.
*/
Optional getYangSourceDefinition();
}