/***********************************************************************************************************************
 * Copyright (c) 2010 Attensity Europe GmbH. 
 * 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.eclipse.smila.processing.designer.model.record;

import org.eclipse.bpel.model.ExtensibleElement;
import org.eclipse.emf.common.util.EList;

/**
 * <!-- begin-user-doc -->
 * A representation of the model object '<em><b>Annotation</b></em>'.
 * <!-- end-user-doc -->
 *
 * <p>
 * The following features are supported:
 * <ul>
 *   <li>{@link org.eclipse.smila.processing.designer.model.record.Annotation#getName <em>Name</em>}</li>
 *   <li>{@link org.eclipse.smila.processing.designer.model.record.Annotation#getAnnotationValues <em>Annotation Values</em>}</li>
 *   <li>{@link org.eclipse.smila.processing.designer.model.record.Annotation#getAnnotations <em>Annotations</em>}</li>
 * </ul>
 * </p>
 *
 * @see org.eclipse.smila.processing.designer.model.record.RecordPackage#getAnnotation()
 * @model
 * @generated
 */
public interface Annotation extends ExtensibleElement
{
    /**
     * Returns the value of the '<em><b>Name</b></em>' attribute.
     * <!-- begin-user-doc -->
     * <p>
     * If the meaning of the '<em>Name</em>' attribute isn't clear,
     * there really should be more of a description here...
     * </p>
     * <!-- end-user-doc -->
     * @return the value of the '<em>Name</em>' attribute.
     * @see #setName(String)
     * @see org.eclipse.smila.processing.designer.model.record.RecordPackage#getAnnotation_Name()
     * @model required="true"
     * @generated
     */
    String getName();

    /**
     * Sets the value of the '{@link org.eclipse.smila.processing.designer.model.record.Annotation#getName <em>Name</em>}' attribute.
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * @param value the new value of the '<em>Name</em>' attribute.
     * @see #getName()
     * @generated
     */
    void setName(String value);

    /**
     * Returns the value of the '<em><b>Annotation Values</b></em>' containment reference list.
     * The list contents are of type {@link org.eclipse.smila.processing.designer.model.record.AnnotationValue}.
     * <!-- begin-user-doc -->
     * <p>
     * If the meaning of the '<em>Annotation Values</em>' reference list isn't clear,
     * there really should be more of a description here...
     * </p>
     * <!-- end-user-doc -->
     * @return the value of the '<em>Annotation Values</em>' containment reference list.
     * @see org.eclipse.smila.processing.designer.model.record.RecordPackage#getAnnotation_AnnotationValues()
     * @model containment="true"
     * @generated
     */
    EList<AnnotationValue> getAnnotationValues();

    /**
     * Returns the value of the '<em><b>Annotations</b></em>' containment reference list.
     * The list contents are of type {@link org.eclipse.smila.processing.designer.model.record.Annotation}.
     * <!-- begin-user-doc -->
     * <p>
     * If the meaning of the '<em>Annotations</em>' reference list isn't clear,
     * there really should be more of a description here...
     * </p>
     * <!-- end-user-doc -->
     * @return the value of the '<em>Annotations</em>' containment reference list.
     * @see org.eclipse.smila.processing.designer.model.record.RecordPackage#getAnnotation_Annotations()
     * @model containment="true"
     * @generated
     */
    EList<Annotation> getAnnotations();

} // Annotation
