/**
 *                                                                            
 * 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 
 */
package org.eclipse.osbp.utils.classloader;

import org.eclipse.emf.ecore.EClass;
import org.eclipse.xtext.resource.IEObjectDescription;
import org.eclipse.xtext.resource.XtextResourceSet;

public interface IEObjectLoader {
	/**
	 *  @param eClass the type of EClass to be loaded
	 *  @param qualifiedName the full qualified name of the class
	 *  @return xtext resource set for the loaded EObject
	 */
	public XtextResourceSet getConfiguredXtextResourceFor(EClass eClass, String qualifiedName);
	
	/**
	 *  @param eClass the type of EClass to be loaded
	 *  @param qualifiedName the full qualified name of the class
	 *  @return eobject description for the loaded EObject
	 */
	public Iterable<IEObjectDescription> getEObjectDescriptions(EClass eClass, String qualifiedName);
}
