/**
 * 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.dsl.entity.xtext.formatting;

import org.eclipse.osbp.xtext.oxtype.formatting.GenericFormatter;
import org.eclipse.osbp.xtext.oxtype.services.OXtypeGrammarAccess;
import org.eclipse.xtext.formatting.impl.AbstractDeclarativeFormatter;
import org.eclipse.xtext.formatting.impl.FormattingConfig;

import com.google.inject.Inject;

/**
 * This class contains custom formatting description.
 * 
 * see : http://www.eclipse.org/Xtext/documentation/latest/xtext.html#formatting
 * on how and when to use it
 * 
 * Also see org.eclipse.xtext.xtext.XtextFormattingTokenSerializer as an example
 */
@SuppressWarnings("restriction")
public class EntityGrammarFormatter extends AbstractDeclarativeFormatter {

	@Inject
	OXtypeGrammarAccess grammarAccess;

	protected void configureFormatting(FormattingConfig c) {
		GenericFormatter genericFormatter = new GenericFormatter();

		genericFormatter.formatFirstLevelBlocks(c, grammar.getGrammar(), "Class");
		genericFormatter.genericFormatting(c, grammar, grammarAccess);
	}

}