/**
 * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
 *  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:                                                      
 *     Christophe Loetz (Loetz GmbH&Co.KG) - initial implementation
 *  
 *  generated from AuthoritarionDSL.xcore
 * 
 *  
 */
package org.eclipse.osbp.xtext.authorizationdsl;

import org.eclipse.emf.common.util.EList;

import org.eclipse.osbp.dsl.semantic.entity.LEntity;

/**
 * <!-- begin-user-doc -->
 * A representation of the model object '<em><b>Role Entity</b></em>'.
 * <!-- end-user-doc -->
 *
 * <p>
 * The following features are supported:
 * </p>
 * <ul>
 *   <li>{@link org.eclipse.osbp.xtext.authorizationdsl.RoleEntity#getEntityAuthorized <em>Entity Authorized</em>}</li>
 *   <li>{@link org.eclipse.osbp.xtext.authorizationdsl.RoleEntity#getEntityFeatures <em>Entity Features</em>}</li>
 *   <li>{@link org.eclipse.osbp.xtext.authorizationdsl.RoleEntity#getEntityRef <em>Entity Ref</em>}</li>
 * </ul>
 *
 * @see org.eclipse.osbp.xtext.authorizationdsl.AuthorizationDSLPackage#getRoleEntity()
 * @model
 * @generated
 */
public interface RoleEntity extends RoleElement {
	/**
	 * Returns the value of the '<em><b>Entity Authorized</b></em>' attribute list.
	 * The list contents are of type {@link org.eclipse.osbp.xtext.authorizationdsl.RoleEnum}.
	 * The literals are from the enumeration {@link org.eclipse.osbp.xtext.authorizationdsl.RoleEnum}.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Entity Authorized</em>' attribute list isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Entity Authorized</em>' attribute list.
	 * @see org.eclipse.osbp.xtext.authorizationdsl.RoleEnum
	 * @see org.eclipse.osbp.xtext.authorizationdsl.AuthorizationDSLPackage#getRoleEntity_EntityAuthorized()
	 * @model unique="false"
	 * @generated
	 */
	EList<RoleEnum> getEntityAuthorized();

	/**
	 * Returns the value of the '<em><b>Entity Features</b></em>' containment reference list.
	 * The list contents are of type {@link org.eclipse.osbp.xtext.authorizationdsl.RoleEntityFeature}.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Entity Features</em>' containment reference list isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Entity Features</em>' containment reference list.
	 * @see org.eclipse.osbp.xtext.authorizationdsl.AuthorizationDSLPackage#getRoleEntity_EntityFeatures()
	 * @model containment="true"
	 * @generated
	 */
	EList<RoleEntityFeature> getEntityFeatures();

	/**
	 * Returns the value of the '<em><b>Entity Ref</b></em>' reference.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Entity Ref</em>' reference isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Entity Ref</em>' reference.
	 * @see #setEntityRef(LEntity)
	 * @see org.eclipse.osbp.xtext.authorizationdsl.AuthorizationDSLPackage#getRoleEntity_EntityRef()
	 * @model
	 * @generated
	 */
	LEntity getEntityRef();

	/**
	 * Sets the value of the '{@link org.eclipse.osbp.xtext.authorizationdsl.RoleEntity#getEntityRef <em>Entity Ref</em>}' reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Entity Ref</em>' reference.
	 * @see #getEntityRef()
	 * @generated
	 */
	void setEntityRef(LEntity value);

} // RoleEntity
