/*
* Copyright (c) 2016 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.binding2.model.api.type.builder;
import com.google.common.annotations.Beta;
import java.util.List;
import org.opendaylight.mdsal.binding2.model.api.AnnotationType;
import org.opendaylight.mdsal.binding2.model.api.Type;
/**
* Annotation Type Builder Interface serves for creation and instantiation of
* immutable copy of Annotation Type. The Annotation Type Builder extends from
* {@link Type} interface. The Annotation Type contains set of methods which are
* capable to provide information about other Annotation Types and Annotation
* Parameters.
*
* @see AnnotationType
*/
@Beta
public interface AnnotationTypeBuilder extends Type {
/**
* 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.
* @throws IllegalArgumentException if packageName and/or name is null
*/
AnnotationTypeBuilder addAnnotation(final String packageName, final String name);
/**
* Adds the parameter into List of parameters for Annotation Type.
* If there is already stored parameter with the same name as the new
* parameter, the value of the old one will be simply overwritten by the
* newer parameter.
* Neither the param name or value can contain null
references.
* In case that any of parameters contains null
the method
* SHOULD thrown {@link IllegalArgumentException}
*
* @param paramName
* Parameter Name
* @param value
* Parameter Value
* @return true
if the parameter has been successfully assigned
* for Annotation Type
* @throws IllegalArgumentException if paramName and/or value is null
*/
boolean addParameter(final String paramName, String value);
/**
* Adds the parameter with specified List of parameter values into List of
* parameters for Annotation Type.
* If there is already stored parameter with the same name as the new
* parameter, the value of the old one will be simply overwritten by the
* newer parameter.
* Neither the param name or value can contain null
references.
* In case that any of parameters contains null
the method
* SHOULD thrown {@link IllegalArgumentException}
*
* @param paramName
* Parameter Name
* @param values
* List of Values bounded to Parameter Name
* @return true
if the parameter has been successfully assigned
* for Annotation Type
* @throws IllegalArgumentException if paramName and/or any of values is null
*/
boolean addParameters(final String paramName, List values);
/**
* Returns new
immutable instance of Annotation Type
* with values assigned in current instance of Annotation Type Builder.
* The return Annotation Type instance is immutable thus no additional
* modification to Annotation Type Builder will have an impact to
* instantiated Annotation Type.
* For this purpose call this method after all additions are complete.
*
* @return new
immutable instance of Annotation Type.
*/
AnnotationType toInstance();
}