/**
 * 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.table.generator;

import java.util.Set;

import org.eclipse.xtext.generator.OutputConfiguration;

import org.eclipse.osbp.xtext.i18n.DSLOutputConfigurationProvider;

public class OutputConfigurationProvider extends DSLOutputConfigurationProvider {

	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;
	}
}
