/*
* Copyright (c) 2013 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.controller.sal.binding.model.api.type.builder;
import org.opendaylight.controller.sal.binding.model.api.Constant;
import org.opendaylight.controller.sal.binding.model.api.GeneratedType;
import org.opendaylight.controller.sal.binding.model.api.Type;
/**
* Generated Type Builder interface is helper interface for building and
* defining the GeneratedType.
*
* @see GeneratedType
*/
public interface GeneratedTypeBuilder extends Type {
/**
* Adds new Enclosing Type into definition of Generated Type and returns
* new
Instance of Generated Type Builder.
*
* There is no need of specifying of Package Name because enclosing Type
* is already defined inside Generated Type with specific package name.
*
* The name of enclosing Type cannot be same as Name of parent type and
* if there is already defined enclosing type with the same name,
* the new enclosing type will simply overwrite the older definition.
*
* If the name of enclosing type is null
the method SHOULD
* throw {@link IllegalArgumentException}
*
* @param name Name of Enclosing Type
* @return new
Instance of Generated Type Builder.
*/
public GeneratedTypeBuilder addEnclosingType(final String name);
/**
* Adds new Enclosing Transfer Object into definition of Generated Type
* and returns new
Instance of Generated TO Builder.
*
* There is no need of specifying of Package Name because enclosing Type
* is already defined inside Generated Type with specific package name.
*
* The name of enclosing Type cannot be same as Name of parent type and
* if there is already defined enclosing type with the same name,
* the new enclosing type will simply overwrite the older definition.
*
* If the name of enclosing type is null
the method SHOULD
* throw {@link IllegalArgumentException}
*
* @param name Name of Enclosing Type
* @return new
Instance of Generated Type Builder.
*/
public GeneratedTOBuilder addEnclosingTransferObject(final String name);
/**
* Adds String definition of comment into Method Signature definition.
*
* The comment String MUST NOT contain anny comment specific chars (i.e.
* "/**" or "//") just plain String text description.
*
* @param comment Comment String.
*/
public void addComment(final String comment);
/**
* The method creates new AnnotationTypeBuilder containing specified
* package name an annotation name.
*
* Neither the package name or annotation name can contain
* null
references. In case that
* any of parameters contains null
the method SHOULD thrown
* {@link IllegalArgumentException}
*
* @param packageName Package Name of Annotation Type
* @param name Name of Annotation Type
* @return new
instance of Annotation Type Builder.
*/
public AnnotationTypeBuilder addAnnotation(final String packageName, final String name);
/**
* Sets the abstract
flag to define Generated Type as abstract type.
*
* @param isAbstract abstract flag
*/
public void setAbstract(boolean isAbstract);
/**
* Add Type to implements.
*
* @param genType Type to implement
* @return true
if the addition of type is successful.
*/
public boolean addImplementsType(final Type genType);
/**
* Adds Constant definition and returns new
Constant instance.
*
* By definition Constant MUST be defined by return Type,
* Name and assigned value. The name SHOULD be defined with cpaital
* letters. Neither of method parameters can be null
and the
* method SHOULD throw {@link IllegalArgumentException} if the contract
* is broken.
*
* @param type Constant Type
* @param name Name of Constant
* @param value Assigned Value
* @return new
Constant instance.
*/
public Constant addConstant(final Type type, final String name,
final Object value);
/**
* Adds new Enumeration definition for Generated Type Builder and returns
* Enum Builder for specifying all Enum parameters.
*
* If there is already Enumeration stored with the same name,
* the old enum will be simply overwritten byt new enum definition.
*
* Name of Enumeration cannot be null
,
* if it is null
the method SHOULD throw {@link IllegalArgumentException}
*
* @param name Enumeration Name
* @return new
instance of Enumeration Builder.
*/
public EnumBuilder addEnumeration(final String name);
/**
* Add new Method Signature definition for Generated Type Builder and
* returns Method Signature Builder for specifying all Method parameters.
*
* Name of Method cannot be null
,
* if it is null
the method SHOULD throw {@link IllegalArgumentException}
*
* By Default the MethodSignatureBuilder SHOULD be pre-set as
* {@link MethodSignatureBuilder#setAbstract(true)}, {@link MethodSignatureBuilder#setFinal(false)} and
* {@link MethodSignatureBuilder#setAccessModifier(PUBLIC)}
*
* @param name Name of Method
* @return new
instance of Method Signature Builder.
*/
public MethodSignatureBuilder addMethod(final String name);
/**
* Returns the new
immutable instance of Generated
* Type.
*
* @return the new
immutable instance of Generated
* Type.
*/
public GeneratedType toInstance();
}