/**
 * 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 2.0 
 *  which accompanies this distribution, and is available at
 *  https://www.eclipse.org/legal/epl-2.0/
 * 
 *  SPDX-License-Identifier: EPL-2.0
 *  
 *  Contributors:                                                      
 *     Christophe Loetz (Loetz GmbH&Co.KG) - initial implementation
 *  
 *  generated from AuthoritarionDSL.xcore
 * 
 *  
 */
package org.eclipse.osbp.xtext.authorizationdsl;

import org.eclipse.osbp.dsl.semantic.dto.LDtoFeature;

/**
 * <!-- begin-user-doc -->
 * A representation of the model object '<em><b>Role Dto Feature</b></em>'.
 * <!-- end-user-doc -->
 *
 * <p>
 * The following features are supported:
 * </p>
 * <ul>
 *   <li>{@link org.eclipse.osbp.xtext.authorizationdsl.RoleDtoFeature#getDtoAttriCol <em>Dto Attri Col</em>}</li>
 * </ul>
 *
 * @see org.eclipse.osbp.xtext.authorizationdsl.AuthorizationDSLPackage#getRoleDtoFeature()
 * @model
 * @generated
 */
public interface RoleDtoFeature extends AuthorizationLazyResolver {
	/**
	 * Returns the value of the '<em><b>Dto Attri Col</b></em>' reference.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Dto Attri Col</em>' reference isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Dto Attri Col</em>' reference.
	 * @see #setDtoAttriCol(LDtoFeature)
	 * @see org.eclipse.osbp.xtext.authorizationdsl.AuthorizationDSLPackage#getRoleDtoFeature_DtoAttriCol()
	 * @model
	 * @generated
	 */
	LDtoFeature getDtoAttriCol();

	/**
	 * Sets the value of the '{@link org.eclipse.osbp.xtext.authorizationdsl.RoleDtoFeature#getDtoAttriCol <em>Dto Attri Col</em>}' reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Dto Attri Col</em>' reference.
	 * @see #getDtoAttriCol()
	 * @generated
	 */
	void setDtoAttriCol(LDtoFeature value);

} // RoleDtoFeature
