/**
 *                                                                            
 *  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 v1.0       
 *  which accompanies this distribution, and is available at                  
 *  http://www.eclipse.org/legal/epl-v10.html                                 
 *                                                                            
 *  Contributors:                                                      
 * 	   Christophe Loetz (Loetz GmbH&Co.KG) - initial implementation
 * 
 */
package org.eclipse.osbp.xtext.gridsource.ui.contentassist.antlr;

import java.util.Collection;
import java.util.Map;
import java.util.HashMap;

import org.antlr.runtime.RecognitionException;
import org.eclipse.xtext.AbstractElement;
import org.eclipse.xtext.ui.editor.contentassist.antlr.AbstractContentAssistParser;
import org.eclipse.xtext.ui.editor.contentassist.antlr.FollowElement;
import org.eclipse.xtext.ui.editor.contentassist.antlr.internal.AbstractInternalContentAssistParser;

import com.google.inject.Inject;

import org.eclipse.osbp.xtext.gridsource.services.GridSourceGrammarAccess;

public class GridSourceParser extends AbstractContentAssistParser {
	
	@Inject
	private GridSourceGrammarAccess grammarAccess;
	
	private Map<AbstractElement, String> nameMappings;
	
	@Override
	protected org.eclipse.osbp.xtext.gridsource.ui.contentassist.antlr.internal.InternalGridSourceParser createParser() {
		org.eclipse.osbp.xtext.gridsource.ui.contentassist.antlr.internal.InternalGridSourceParser result = new org.eclipse.osbp.xtext.gridsource.ui.contentassist.antlr.internal.InternalGridSourceParser(null);
		result.setGrammarAccess(grammarAccess);
		return result;
	}
	
	@Override
	protected String getRuleName(AbstractElement element) {
		if (nameMappings == null) {
			nameMappings = new HashMap<AbstractElement, String>() {
				private static final long serialVersionUID = 1L;
				{
					put(grammarAccess.getPropertyStyleAccess().getAlternatives(), "rule__PropertyStyle__Alternatives");
					put(grammarAccess.getStyleConfigAccess().getAlternatives(), "rule__StyleConfig__Alternatives");
					put(grammarAccess.getLIntAccess().getAlternatives_0(), "rule__LInt__Alternatives_0");
					put(grammarAccess.getJvmTypeReferenceAccess().getAlternatives(), "rule__JvmTypeReference__Alternatives");
					put(grammarAccess.getJvmArgumentTypeReferenceAccess().getAlternatives(), "rule__JvmArgumentTypeReference__Alternatives");
					put(grammarAccess.getJvmWildcardTypeReferenceAccess().getAlternatives_2(), "rule__JvmWildcardTypeReference__Alternatives_2");
					put(grammarAccess.getXImportDeclarationAccess().getAlternatives_1(), "rule__XImportDeclaration__Alternatives_1");
					put(grammarAccess.getXImportDeclarationAccess().getAlternatives_1_0_3(), "rule__XImportDeclaration__Alternatives_1_0_3");
					put(grammarAccess.getStyleCompareAccess().getAlternatives(), "rule__StyleCompare__Alternatives");
					put(grammarAccess.getSourceAccess().getGroup(), "rule__Source__Group__0");
					put(grammarAccess.getInputAccess().getGroup(), "rule__Input__Group__0");
					put(grammarAccess.getInputAccess().getGroup_4(), "rule__Input__Group_4__0");
					put(grammarAccess.getEQFilterAccess().getGroup(), "rule__EQFilter__Group__0");
					put(grammarAccess.getPropertyAccess().getGroup(), "rule__Property__Group__0");
					put(grammarAccess.getNestedFieldAccess().getGroup(), "rule__NestedField__Group__0");
					put(grammarAccess.getNestedPathAccess().getGroup(), "rule__NestedPath__Group__0");
					put(grammarAccess.getPropertyButtonStyleAccess().getGroup(), "rule__PropertyButtonStyle__Group__0");
					put(grammarAccess.getPropertyHtmlStyleAccess().getGroup(), "rule__PropertyHtmlStyle__Group__0");
					put(grammarAccess.getPropertyBooleanStyleAccess().getGroup(), "rule__PropertyBooleanStyle__Group__0");
					put(grammarAccess.getPropertyDateStyleAccess().getGroup(), "rule__PropertyDateStyle__Group__0");
					put(grammarAccess.getPropertyNumberStyleAccess().getGroup(), "rule__PropertyNumberStyle__Group__0");
					put(grammarAccess.getPropertyProgressbarStyleAccess().getGroup(), "rule__PropertyProgressbarStyle__Group__0");
					put(grammarAccess.getGridPropIndicatorStyleAccess().getGroup(), "rule__GridPropIndicatorStyle__Group__0");
					put(grammarAccess.getPropertyQuantityStyleAccess().getGroup(), "rule__PropertyQuantityStyle__Group__0");
					put(grammarAccess.getPropertyQuantityStyleAccess().getGroup_6(), "rule__PropertyQuantityStyle__Group_6__0");
					put(grammarAccess.getPropertyPriceStyleAccess().getGroup(), "rule__PropertyPriceStyle__Group__0");
					put(grammarAccess.getPropertyPriceStyleAccess().getGroup_6(), "rule__PropertyPriceStyle__Group_6__0");
					put(grammarAccess.getPropertyTextStyleAccess().getGroup(), "rule__PropertyTextStyle__Group__0");
					put(grammarAccess.getPropertyImageStyleAccess().getGroup(), "rule__PropertyImageStyle__Group__0");
					put(grammarAccess.getPropertyImageStyleAccess().getGroup_2(), "rule__PropertyImageStyle__Group_2__0");
					put(grammarAccess.getQualifiedNameAccess().getGroup(), "rule__QualifiedName__Group__0");
					put(grammarAccess.getQualifiedNameAccess().getGroup_1(), "rule__QualifiedName__Group_1__0");
					put(grammarAccess.getNumericToResourceStyleConfigAccess().getGroup(), "rule__NumericToResourceStyleConfig__Group__0");
					put(grammarAccess.getStringToResourceStyleConfigAccess().getGroup(), "rule__StringToResourceStyleConfig__Group__0");
					put(grammarAccess.getLIntAccess().getGroup(), "rule__LInt__Group__0");
					put(grammarAccess.getLDoubleAccess().getGroup(), "rule__LDouble__Group__0");
					put(grammarAccess.getLDoubleAccess().getGroup_1(), "rule__LDouble__Group_1__0");
					put(grammarAccess.getJvmTypeReferenceAccess().getGroup_0(), "rule__JvmTypeReference__Group_0__0");
					put(grammarAccess.getJvmTypeReferenceAccess().getGroup_0_1(), "rule__JvmTypeReference__Group_0_1__0");
					put(grammarAccess.getJvmTypeReferenceAccess().getGroup_0_1_0(), "rule__JvmTypeReference__Group_0_1_0__0");
					put(grammarAccess.getArrayBracketsAccess().getGroup(), "rule__ArrayBrackets__Group__0");
					put(grammarAccess.getXFunctionTypeRefAccess().getGroup(), "rule__XFunctionTypeRef__Group__0");
					put(grammarAccess.getXFunctionTypeRefAccess().getGroup_0(), "rule__XFunctionTypeRef__Group_0__0");
					put(grammarAccess.getXFunctionTypeRefAccess().getGroup_0_1(), "rule__XFunctionTypeRef__Group_0_1__0");
					put(grammarAccess.getXFunctionTypeRefAccess().getGroup_0_1_1(), "rule__XFunctionTypeRef__Group_0_1_1__0");
					put(grammarAccess.getJvmParameterizedTypeReferenceAccess().getGroup(), "rule__JvmParameterizedTypeReference__Group__0");
					put(grammarAccess.getJvmParameterizedTypeReferenceAccess().getGroup_1(), "rule__JvmParameterizedTypeReference__Group_1__0");
					put(grammarAccess.getJvmParameterizedTypeReferenceAccess().getGroup_1_2(), "rule__JvmParameterizedTypeReference__Group_1_2__0");
					put(grammarAccess.getJvmParameterizedTypeReferenceAccess().getGroup_1_4(), "rule__JvmParameterizedTypeReference__Group_1_4__0");
					put(grammarAccess.getJvmParameterizedTypeReferenceAccess().getGroup_1_4_0(), "rule__JvmParameterizedTypeReference__Group_1_4_0__0");
					put(grammarAccess.getJvmParameterizedTypeReferenceAccess().getGroup_1_4_0_0(), "rule__JvmParameterizedTypeReference__Group_1_4_0_0__0");
					put(grammarAccess.getJvmParameterizedTypeReferenceAccess().getGroup_1_4_2(), "rule__JvmParameterizedTypeReference__Group_1_4_2__0");
					put(grammarAccess.getJvmParameterizedTypeReferenceAccess().getGroup_1_4_2_2(), "rule__JvmParameterizedTypeReference__Group_1_4_2_2__0");
					put(grammarAccess.getJvmWildcardTypeReferenceAccess().getGroup(), "rule__JvmWildcardTypeReference__Group__0");
					put(grammarAccess.getJvmWildcardTypeReferenceAccess().getGroup_2_0(), "rule__JvmWildcardTypeReference__Group_2_0__0");
					put(grammarAccess.getJvmWildcardTypeReferenceAccess().getGroup_2_1(), "rule__JvmWildcardTypeReference__Group_2_1__0");
					put(grammarAccess.getJvmUpperBoundAccess().getGroup(), "rule__JvmUpperBound__Group__0");
					put(grammarAccess.getJvmUpperBoundAndedAccess().getGroup(), "rule__JvmUpperBoundAnded__Group__0");
					put(grammarAccess.getJvmLowerBoundAccess().getGroup(), "rule__JvmLowerBound__Group__0");
					put(grammarAccess.getJvmLowerBoundAndedAccess().getGroup(), "rule__JvmLowerBoundAnded__Group__0");
					put(grammarAccess.getJvmTypeParameterAccess().getGroup(), "rule__JvmTypeParameter__Group__0");
					put(grammarAccess.getJvmTypeParameterAccess().getGroup_1(), "rule__JvmTypeParameter__Group_1__0");
					put(grammarAccess.getQualifiedNameWithWildcardAccess().getGroup(), "rule__QualifiedNameWithWildcard__Group__0");
					put(grammarAccess.getXImportDeclarationAccess().getGroup(), "rule__XImportDeclaration__Group__0");
					put(grammarAccess.getXImportDeclarationAccess().getGroup_1_0(), "rule__XImportDeclaration__Group_1_0__0");
					put(grammarAccess.getQualifiedNameInStaticImportAccess().getGroup(), "rule__QualifiedNameInStaticImport__Group__0");
					put(grammarAccess.getSourceAccess().getIdAssignment_1(), "rule__Source__IdAssignment_1");
					put(grammarAccess.getSourceAccess().getRootTypeAssignment_3(), "rule__Source__RootTypeAssignment_3");
					put(grammarAccess.getSourceAccess().getInputsAssignment_7(), "rule__Source__InputsAssignment_7");
					put(grammarAccess.getSourceAccess().getPropertiesAssignment_9(), "rule__Source__PropertiesAssignment_9");
					put(grammarAccess.getInputAccess().getInputTypeAssignment_1(), "rule__Input__InputTypeAssignment_1");
					put(grammarAccess.getInputAccess().getFiltersAssignment_3(), "rule__Input__FiltersAssignment_3");
					put(grammarAccess.getInputAccess().getFiltersAssignment_4_1(), "rule__Input__FiltersAssignment_4_1");
					put(grammarAccess.getEQFilterAccess().getRootTypePropertyPathAssignment_2(), "rule__EQFilter__RootTypePropertyPathAssignment_2");
					put(grammarAccess.getEQFilterAccess().getInputTypePropertyPathAssignment_5(), "rule__EQFilter__InputTypePropertyPathAssignment_5");
					put(grammarAccess.getPropertyAccess().getPathAssignment_1(), "rule__Property__PathAssignment_1");
					put(grammarAccess.getPropertyAccess().getStyleAssignment_3(), "rule__Property__StyleAssignment_3");
					put(grammarAccess.getNestedFieldAccess().getFieldAssignment_1(), "rule__NestedField__FieldAssignment_1");
					put(grammarAccess.getNestedFieldAccess().getPathAssignment_2(), "rule__NestedField__PathAssignment_2");
					put(grammarAccess.getNestedPathAccess().getFieldAssignment_2(), "rule__NestedPath__FieldAssignment_2");
					put(grammarAccess.getNestedPathAccess().getPathAssignment_3(), "rule__NestedPath__PathAssignment_3");
					put(grammarAccess.getPropertyButtonStyleAccess().getEventTopicAssignment_3(), "rule__PropertyButtonStyle__EventTopicAssignment_3");
					put(grammarAccess.getPropertyDateStyleAccess().getDateFormatAssignment_3(), "rule__PropertyDateStyle__DateFormatAssignment_3");
					put(grammarAccess.getPropertyNumberStyleAccess().getNumberFormatAssignment_3(), "rule__PropertyNumberStyle__NumberFormatAssignment_3");
					put(grammarAccess.getPropertyProgressbarStyleAccess().getMaxValueAssignment_3(), "rule__PropertyProgressbarStyle__MaxValueAssignment_3");
					put(grammarAccess.getGridPropIndicatorStyleAccess().getGreenStartsAssignment_3(), "rule__GridPropIndicatorStyle__GreenStartsAssignment_3");
					put(grammarAccess.getGridPropIndicatorStyleAccess().getRedEndsAssignment_5(), "rule__GridPropIndicatorStyle__RedEndsAssignment_5");
					put(grammarAccess.getPropertyQuantityStyleAccess().getHtmlPatternAssignment_2(), "rule__PropertyQuantityStyle__HtmlPatternAssignment_2");
					put(grammarAccess.getPropertyQuantityStyleAccess().getValuePropertyPathAssignment_5(), "rule__PropertyQuantityStyle__ValuePropertyPathAssignment_5");
					put(grammarAccess.getPropertyQuantityStyleAccess().getValueNumberFormatAssignment_6_2(), "rule__PropertyQuantityStyle__ValueNumberFormatAssignment_6_2");
					put(grammarAccess.getPropertyQuantityStyleAccess().getUomPropertyPathAssignment_9(), "rule__PropertyQuantityStyle__UomPropertyPathAssignment_9");
					put(grammarAccess.getPropertyPriceStyleAccess().getHtmlPatternAssignment_2(), "rule__PropertyPriceStyle__HtmlPatternAssignment_2");
					put(grammarAccess.getPropertyPriceStyleAccess().getValuePropertyPathAssignment_5(), "rule__PropertyPriceStyle__ValuePropertyPathAssignment_5");
					put(grammarAccess.getPropertyPriceStyleAccess().getValueNumberFormatAssignment_6_2(), "rule__PropertyPriceStyle__ValueNumberFormatAssignment_6_2");
					put(grammarAccess.getPropertyPriceStyleAccess().getCurrencyPropertyPathAssignment_9(), "rule__PropertyPriceStyle__CurrencyPropertyPathAssignment_9");
					put(grammarAccess.getPropertyImageStyleAccess().getEventTopicAssignment_2_1(), "rule__PropertyImageStyle__EventTopicAssignment_2_1");
					put(grammarAccess.getPropertyImageStyleAccess().getConfigsAssignment_4(), "rule__PropertyImageStyle__ConfigsAssignment_4");
					put(grammarAccess.getNumericToResourceStyleConfigAccess().getCompareAssignment_1(), "rule__NumericToResourceStyleConfig__CompareAssignment_1");
					put(grammarAccess.getNumericToResourceStyleConfigAccess().getValueAssignment_2(), "rule__NumericToResourceStyleConfig__ValueAssignment_2");
					put(grammarAccess.getNumericToResourceStyleConfigAccess().getResourceThemePathAssignment_4(), "rule__NumericToResourceStyleConfig__ResourceThemePathAssignment_4");
					put(grammarAccess.getStringToResourceStyleConfigAccess().getCompareAssignment_1(), "rule__StringToResourceStyleConfig__CompareAssignment_1");
					put(grammarAccess.getStringToResourceStyleConfigAccess().getValueAssignment_2(), "rule__StringToResourceStyleConfig__ValueAssignment_2");
					put(grammarAccess.getStringToResourceStyleConfigAccess().getResourceThemePathAssignment_4(), "rule__StringToResourceStyleConfig__ResourceThemePathAssignment_4");
					put(grammarAccess.getXFunctionTypeRefAccess().getParamTypesAssignment_0_1_0(), "rule__XFunctionTypeRef__ParamTypesAssignment_0_1_0");
					put(grammarAccess.getXFunctionTypeRefAccess().getParamTypesAssignment_0_1_1_1(), "rule__XFunctionTypeRef__ParamTypesAssignment_0_1_1_1");
					put(grammarAccess.getXFunctionTypeRefAccess().getReturnTypeAssignment_2(), "rule__XFunctionTypeRef__ReturnTypeAssignment_2");
					put(grammarAccess.getJvmParameterizedTypeReferenceAccess().getTypeAssignment_0(), "rule__JvmParameterizedTypeReference__TypeAssignment_0");
					put(grammarAccess.getJvmParameterizedTypeReferenceAccess().getArgumentsAssignment_1_1(), "rule__JvmParameterizedTypeReference__ArgumentsAssignment_1_1");
					put(grammarAccess.getJvmParameterizedTypeReferenceAccess().getArgumentsAssignment_1_2_1(), "rule__JvmParameterizedTypeReference__ArgumentsAssignment_1_2_1");
					put(grammarAccess.getJvmParameterizedTypeReferenceAccess().getTypeAssignment_1_4_1(), "rule__JvmParameterizedTypeReference__TypeAssignment_1_4_1");
					put(grammarAccess.getJvmParameterizedTypeReferenceAccess().getArgumentsAssignment_1_4_2_1(), "rule__JvmParameterizedTypeReference__ArgumentsAssignment_1_4_2_1");
					put(grammarAccess.getJvmParameterizedTypeReferenceAccess().getArgumentsAssignment_1_4_2_2_1(), "rule__JvmParameterizedTypeReference__ArgumentsAssignment_1_4_2_2_1");
					put(grammarAccess.getJvmWildcardTypeReferenceAccess().getConstraintsAssignment_2_0_0(), "rule__JvmWildcardTypeReference__ConstraintsAssignment_2_0_0");
					put(grammarAccess.getJvmWildcardTypeReferenceAccess().getConstraintsAssignment_2_0_1(), "rule__JvmWildcardTypeReference__ConstraintsAssignment_2_0_1");
					put(grammarAccess.getJvmWildcardTypeReferenceAccess().getConstraintsAssignment_2_1_0(), "rule__JvmWildcardTypeReference__ConstraintsAssignment_2_1_0");
					put(grammarAccess.getJvmWildcardTypeReferenceAccess().getConstraintsAssignment_2_1_1(), "rule__JvmWildcardTypeReference__ConstraintsAssignment_2_1_1");
					put(grammarAccess.getJvmUpperBoundAccess().getTypeReferenceAssignment_1(), "rule__JvmUpperBound__TypeReferenceAssignment_1");
					put(grammarAccess.getJvmUpperBoundAndedAccess().getTypeReferenceAssignment_1(), "rule__JvmUpperBoundAnded__TypeReferenceAssignment_1");
					put(grammarAccess.getJvmLowerBoundAccess().getTypeReferenceAssignment_1(), "rule__JvmLowerBound__TypeReferenceAssignment_1");
					put(grammarAccess.getJvmLowerBoundAndedAccess().getTypeReferenceAssignment_1(), "rule__JvmLowerBoundAnded__TypeReferenceAssignment_1");
					put(grammarAccess.getJvmTypeParameterAccess().getNameAssignment_0(), "rule__JvmTypeParameter__NameAssignment_0");
					put(grammarAccess.getJvmTypeParameterAccess().getConstraintsAssignment_1_0(), "rule__JvmTypeParameter__ConstraintsAssignment_1_0");
					put(grammarAccess.getJvmTypeParameterAccess().getConstraintsAssignment_1_1(), "rule__JvmTypeParameter__ConstraintsAssignment_1_1");
					put(grammarAccess.getXImportSectionAccess().getImportDeclarationsAssignment(), "rule__XImportSection__ImportDeclarationsAssignment");
					put(grammarAccess.getXImportDeclarationAccess().getStaticAssignment_1_0_0(), "rule__XImportDeclaration__StaticAssignment_1_0_0");
					put(grammarAccess.getXImportDeclarationAccess().getExtensionAssignment_1_0_1(), "rule__XImportDeclaration__ExtensionAssignment_1_0_1");
					put(grammarAccess.getXImportDeclarationAccess().getImportedTypeAssignment_1_0_2(), "rule__XImportDeclaration__ImportedTypeAssignment_1_0_2");
					put(grammarAccess.getXImportDeclarationAccess().getWildcardAssignment_1_0_3_0(), "rule__XImportDeclaration__WildcardAssignment_1_0_3_0");
					put(grammarAccess.getXImportDeclarationAccess().getMemberNameAssignment_1_0_3_1(), "rule__XImportDeclaration__MemberNameAssignment_1_0_3_1");
					put(grammarAccess.getXImportDeclarationAccess().getImportedTypeAssignment_1_1(), "rule__XImportDeclaration__ImportedTypeAssignment_1_1");
					put(grammarAccess.getXImportDeclarationAccess().getImportedNamespaceAssignment_1_2(), "rule__XImportDeclaration__ImportedNamespaceAssignment_1_2");
				}
			};
		}
		return nameMappings.get(element);
	}
	
	@Override
	protected Collection<FollowElement> getFollowElements(AbstractInternalContentAssistParser parser) {
		try {
			org.eclipse.osbp.xtext.gridsource.ui.contentassist.antlr.internal.InternalGridSourceParser typedParser = (org.eclipse.osbp.xtext.gridsource.ui.contentassist.antlr.internal.InternalGridSourceParser) parser;
			typedParser.entryRuleSource();
			return typedParser.getFollowElements();
		} catch(RecognitionException ex) {
			throw new RuntimeException(ex);
		}		
	}
	
	@Override
	protected String[] getInitialHiddenTokens() {
		return new String[] { "RULE_WS", "RULE_ML_COMMENT", "RULE_SL_COMMENT" };
	}
	
	public GridSourceGrammarAccess getGrammarAccess() {
		return this.grammarAccess;
	}
	
	public void setGrammarAccess(GridSourceGrammarAccess grammarAccess) {
		this.grammarAccess = grammarAccess;
	}
}
