/**
 * 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 v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *         Florian Pirchner - Initial implementation
 */

package org.eclipse.osbp.xtext.gridsource.generator;

import java.util.Set;

import org.eclipse.xtext.generator.OutputConfiguration;

public class OutputConfigurationProvider extends
		org.eclipse.xtext.generator.OutputConfigurationProvider {

	public Set<OutputConfiguration> getOutputConfigurations() {
		Set<OutputConfiguration> configs = super.getOutputConfigurations();

		OutputConfiguration binOutput = new OutputConfiguration("xmi");
		binOutput.setDescription("xmi");
		binOutput.setOutputDirectory("./modelsbin");
		binOutput.setOverrideExistingResources(true);
		binOutput.setCreateOutputDirectory(true);
		binOutput.setCleanUpDerivedResources(true);
		binOutput.setSetDerivedProperty(true);
		binOutput.setKeepLocalHistory(true);
		configs.add(binOutput);

		return configs;
	}
}
