/*******************************************************************************
 * <copyright>
 *
 * Copyright (c) 2013, 2013 SAP AG.
 * 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
 *
 * Contributors:
 *    SAP AG - initial API, implementation and documentation
 *
 * </copyright>
 *
 *******************************************************************************/
package org.eclipse.fmc.mm;


/**
 * <!-- begin-user-doc -->
 * A representation of the model object '<em><b>Comment</b></em>'.
 * <!-- end-user-doc -->
 *
 * <p>
 * The following features are supported:
 * <ul>
 *   <li>{@link org.eclipse.fmc.mm.Comment#getContent <em>Content</em>}</li>
 *   <li>{@link org.eclipse.fmc.mm.Comment#getCommentAssignment <em>Comment Assignment</em>}</li>
 *   <li>{@link org.eclipse.fmc.mm.Comment#getType <em>Type</em>}</li>
 * </ul>
 * </p>
 *
 * @see org.eclipse.fmc.mm.FmcPackage#getComment()
 * @model
 * @generated
 */
public interface Comment extends FMCElement {
	/**
	 * Returns the value of the '<em><b>Content</b></em>' attribute.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Content</em>' attribute isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Content</em>' attribute.
	 * @see #setContent(String)
	 * @see org.eclipse.fmc.mm.FmcPackage#getComment_Content()
	 * @model
	 * @generated
	 */
	String getContent();

	/**
	 * Sets the value of the '{@link org.eclipse.fmc.mm.Comment#getContent <em>Content</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Content</em>' attribute.
	 * @see #getContent()
	 * @generated
	 */
	void setContent(String value);

	/**
	 * Returns the value of the '<em><b>Comment Assignment</b></em>' reference.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Comment Assignment</em>' reference isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Comment Assignment</em>' reference.
	 * @see #setCommentAssignment(FMCElement)
	 * @see org.eclipse.fmc.mm.FmcPackage#getComment_CommentAssignment()
	 * @model
	 * @generated
	 */
	FMCElement getCommentAssignment();

	/**
	 * Sets the value of the '{@link org.eclipse.fmc.mm.Comment#getCommentAssignment <em>Comment Assignment</em>}' reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Comment Assignment</em>' reference.
	 * @see #getCommentAssignment()
	 * @generated
	 */
	void setCommentAssignment(FMCElement value);

	/**
	 * Returns the value of the '<em><b>Type</b></em>' attribute.
	 * The literals are from the enumeration {@link org.eclipse.fmc.mm.CommentType}.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Type</em>' attribute isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Type</em>' attribute.
	 * @see org.eclipse.fmc.mm.CommentType
	 * @see #setType(CommentType)
	 * @see org.eclipse.fmc.mm.FmcPackage#getComment_Type()
	 * @model
	 * @generated
	 */
	CommentType getType();

	/**
	 * Sets the value of the '{@link org.eclipse.fmc.mm.Comment#getType <em>Type</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Type</em>' attribute.
	 * @see org.eclipse.fmc.mm.CommentType
	 * @see #getType()
	 * @generated
	 */
	void setType(CommentType value);

} // Comment
