/**
 * Copyright (c) 2011, 2015 - Lunifera GmbH (Gross Enzersdorf, Austria), 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:
 * 		Florian Pirchner - Initial implementation
 */
package org.eclipse.osbp.xtext.oxtype.hooks;

import java.util.Set;

import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.xtext.generator.IFileSystemAccess;
import org.eclipse.xtext.generator.OutputConfiguration;

// TODO: Auto-generated Javadoc
/**
 * The Interface IGeneratorDelegate.
 */
public interface IGeneratorDelegate {

	/**
	 * Returns a set of output configurations that should be registered with the
	 * grammar. Must NEVER return <code>null</code>.
	 *
	 * @return the output configurations
	 */
	Set<OutputConfiguration> getOutputConfigurations();

	/**
	 * Delegates can implement their own generator that will be called during
	 * the main generation.
	 *
	 * @param input
	 *            the input
	 * @param fsa
	 *            the fsa
	 */
	void generate(Resource input, IFileSystemAccess fsa);

}
