/**
 * 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 
 * 
 *  Based on ideas from Xtext, Xtend, Xcore
 *   
 *  Contributors:  
 *  		Christophe Loetz  (Loetz GmbH&Co.KG) - Initial implementation 
 *  
 */
package org.eclipse.osbp.xtext.entitymock;

import org.eclipse.emf.ecore.EObject;

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

/**
 * <!-- begin-user-doc -->
 * A representation of the model object '<em><b>Entity Mock By Resource Attribute</b></em>'.
 * <!-- end-user-doc -->
 *
 * <p>
 * The following features are supported:
 * </p>
 * <ul>
 *   <li>{@link org.eclipse.osbp.xtext.entitymock.EntityMockByResourceAttribute#getAttributeRef <em>Attribute Ref</em>}</li>
 *   <li>{@link org.eclipse.osbp.xtext.entitymock.EntityMockByResourceAttribute#getResourceAttribute <em>Resource Attribute</em>}</li>
 * </ul>
 *
 * @see org.eclipse.osbp.xtext.entitymock.EntityMockDSLPackage#getEntityMockByResourceAttribute()
 * @model
 * @generated
 */
public interface EntityMockByResourceAttribute extends EObject {
	/**
	 * Returns the value of the '<em><b>Attribute Ref</b></em>' reference.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Attribute 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>Attribute Ref</em>' reference.
	 * @see #setAttributeRef(LEntityAttribute)
	 * @see org.eclipse.osbp.xtext.entitymock.EntityMockDSLPackage#getEntityMockByResourceAttribute_AttributeRef()
	 * @model
	 * @generated
	 */
	LEntityAttribute getAttributeRef();

	/**
	 * Sets the value of the '{@link org.eclipse.osbp.xtext.entitymock.EntityMockByResourceAttribute#getAttributeRef <em>Attribute Ref</em>}' reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Attribute Ref</em>' reference.
	 * @see #getAttributeRef()
	 * @generated
	 */
	void setAttributeRef(LEntityAttribute value);

	/**
	 * Returns the value of the '<em><b>Resource Attribute</b></em>' reference.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Resource Attribute</em>' reference isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Resource Attribute</em>' reference.
	 * @see #setResourceAttribute(EntityMockResourceAttribute)
	 * @see org.eclipse.osbp.xtext.entitymock.EntityMockDSLPackage#getEntityMockByResourceAttribute_ResourceAttribute()
	 * @model
	 * @generated
	 */
	EntityMockResourceAttribute getResourceAttribute();

	/**
	 * Sets the value of the '{@link org.eclipse.osbp.xtext.entitymock.EntityMockByResourceAttribute#getResourceAttribute <em>Resource Attribute</em>}' reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Resource Attribute</em>' reference.
	 * @see #getResourceAttribute()
	 * @generated
	 */
	void setResourceAttribute(EntityMockResourceAttribute value);

} // EntityMockByResourceAttribute
