/**
 * 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{  
 *  		Joerg Riegel - Initial implementation 
 *  
 */
package org.eclipse.osbp.xtext.table;

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

import org.eclipse.osbp.infogrid.model.gridsource.CxGridSource;

/**
 * <!-- begin-user-doc -->
 * A representation of the model object '<em><b>Table Dto Datasource</b></em>'.
 * <!-- end-user-doc -->
 *
 * <p>
 * The following features are supported:
 * </p>
 * <ul>
 *   <li>{@link org.eclipse.osbp.xtext.table.TableDtoDatasource#getDtoSource <em>Dto Source</em>}</li>
 * </ul>
 *
 * @see org.eclipse.osbp.xtext.table.TableDSLPackage#getTableDtoDatasource()
 * @model
 * @generated
 */
public interface TableDtoDatasource extends CxGridSource {
	/**
	 * Returns the value of the '<em><b>Dto Source</b></em>' reference.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Dto Source</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 Source</em>' reference.
	 * @see #setDtoSource(LDto)
	 * @see org.eclipse.osbp.xtext.table.TableDSLPackage#getTableDtoDatasource_DtoSource()
	 * @model
	 * @generated
	 */
	LDto getDtoSource();

	/**
	 * Sets the value of the '{@link org.eclipse.osbp.xtext.table.TableDtoDatasource#getDtoSource <em>Dto Source</em>}' reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Dto Source</em>' reference.
	 * @see #getDtoSource()
	 * @generated
	 */
	void setDtoSource(LDto value);

} // TableDtoDatasource
