package de.sebastianbenz.xgherkin.serializer;
import com.google.inject.Inject;
import com.google.inject.Provider;
import de.sebastianbenz.xgherkin.gherkin.AndStep;
import de.sebastianbenz.xgherkin.gherkin.AsA;
import de.sebastianbenz.xgherkin.gherkin.Background;
import de.sebastianbenz.xgherkin.gherkin.Example;
import de.sebastianbenz.xgherkin.gherkin.ExampleCell;
import de.sebastianbenz.xgherkin.gherkin.ExampleRow;
import de.sebastianbenz.xgherkin.gherkin.Feature;
import de.sebastianbenz.xgherkin.gherkin.FreeText;
import de.sebastianbenz.xgherkin.gherkin.GherkinPackage;
import de.sebastianbenz.xgherkin.gherkin.GivenStep;
import de.sebastianbenz.xgherkin.gherkin.IWantTo;
import de.sebastianbenz.xgherkin.gherkin.InOrderTo;
import de.sebastianbenz.xgherkin.gherkin.Scenario;
import de.sebastianbenz.xgherkin.gherkin.ScenarioWithOutline;
import de.sebastianbenz.xgherkin.gherkin.ThenStep;
import de.sebastianbenz.xgherkin.gherkin.WhenStep;
import de.sebastianbenz.xgherkin.services.GherkinGrammarAccess;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.xtext.serializer.acceptor.ISemanticSequenceAcceptor;
import org.eclipse.xtext.serializer.acceptor.SequenceFeeder;
import org.eclipse.xtext.serializer.diagnostic.ISemanticSequencerDiagnosticProvider;
import org.eclipse.xtext.serializer.diagnostic.ISerializationDiagnostic.Acceptor;
import org.eclipse.xtext.serializer.sequencer.AbstractDelegatingSemanticSequencer;
import org.eclipse.xtext.serializer.sequencer.GenericSequencer;
import org.eclipse.xtext.serializer.sequencer.ISemanticNodeProvider.INodesForEObjectProvider;
import org.eclipse.xtext.serializer.sequencer.ISemanticSequencer;
import org.eclipse.xtext.serializer.sequencer.ITransientValueService;
import org.eclipse.xtext.serializer.sequencer.ITransientValueService.ValueTransient;
@SuppressWarnings("all")
public abstract class AbstractGherkinSemanticSequencer extends AbstractDelegatingSemanticSequencer {
@Inject
private GherkinGrammarAccess grammarAccess;
public void createSequence(EObject context, EObject semanticObject) {
if(semanticObject.eClass().getEPackage() == GherkinPackage.eINSTANCE) switch(semanticObject.eClass().getClassifierID()) {
case GherkinPackage.AND_STEP:
if(context == grammarAccess.getAndStepRule() ||
context == grammarAccess.getStepRule()) {
sequence_AndStep(context, (AndStep) semanticObject);
return;
}
else break;
case GherkinPackage.AS_A:
if(context == grammarAccess.getAsARule() ||
context == grammarAccess.getNarrativeElementRule()) {
sequence_AsA(context, (AsA) semanticObject);
return;
}
else break;
case GherkinPackage.BACKGROUND:
if(context == grammarAccess.getAbstractScenarioRule() ||
context == grammarAccess.getBackgroundRule()) {
sequence_Background(context, (Background) semanticObject);
return;
}
else break;
case GherkinPackage.EXAMPLE:
if(context == grammarAccess.getExampleRule()) {
sequence_Example(context, (Example) semanticObject);
return;
}
else break;
case GherkinPackage.EXAMPLE_CELL:
if(context == grammarAccess.getExampleCellRule()) {
sequence_ExampleCell(context, (ExampleCell) semanticObject);
return;
}
else break;
case GherkinPackage.EXAMPLE_ROW:
if(context == grammarAccess.getExampleRowRule()) {
sequence_ExampleRow(context, (ExampleRow) semanticObject);
return;
}
else break;
case GherkinPackage.FEATURE:
if(context == grammarAccess.getFeatureRule()) {
sequence_Feature(context, (Feature) semanticObject);
return;
}
else break;
case GherkinPackage.FREE_TEXT:
if(context == grammarAccess.getFreeTextRule() ||
context == grammarAccess.getNarrativeElementRule()) {
sequence_FreeText(context, (FreeText) semanticObject);
return;
}
else break;
case GherkinPackage.GIVEN_STEP:
if(context == grammarAccess.getGivenStepRule() ||
context == grammarAccess.getStepRule()) {
sequence_GivenStep(context, (GivenStep) semanticObject);
return;
}
else break;
case GherkinPackage.IWANT_TO:
if(context == grammarAccess.getIWantToRule() ||
context == grammarAccess.getNarrativeElementRule()) {
sequence_IWantTo(context, (IWantTo) semanticObject);
return;
}
else break;
case GherkinPackage.IN_ORDER_TO:
if(context == grammarAccess.getInOrderToRule() ||
context == grammarAccess.getNarrativeElementRule()) {
sequence_InOrderTo(context, (InOrderTo) semanticObject);
return;
}
else break;
case GherkinPackage.SCENARIO:
if(context == grammarAccess.getAbstractScenarioRule() ||
context == grammarAccess.getScenarioRule()) {
sequence_Scenario(context, (Scenario) semanticObject);
return;
}
else break;
case GherkinPackage.SCENARIO_WITH_OUTLINE:
if(context == grammarAccess.getAbstractScenarioRule() ||
context == grammarAccess.getScenarioWithOutlineRule()) {
sequence_ScenarioWithOutline(context, (ScenarioWithOutline) semanticObject);
return;
}
else break;
case GherkinPackage.THEN_STEP:
if(context == grammarAccess.getStepRule() ||
context == grammarAccess.getThenStepRule()) {
sequence_ThenStep(context, (ThenStep) semanticObject);
return;
}
else break;
case GherkinPackage.WHEN_STEP:
if(context == grammarAccess.getStepRule() ||
context == grammarAccess.getWhenStepRule()) {
sequence_WhenStep(context, (WhenStep) semanticObject);
return;
}
else break;
}
if (errorAcceptor != null) errorAcceptor.accept(diagnosticProvider.createInvalidContextOrTypeDiagnostic(semanticObject, context));
}
/**
* Constraint:
* (desc+=AND_TEXT desc+=OptionalText* rows+=ExampleRow*)
*/
protected void sequence_AndStep(EObject context, AndStep semanticObject) {
genericSequencer.createSequence(context, semanticObject);
}
/**
* Constraint:
* name=AS_A
*/
protected void sequence_AsA(EObject context, AsA semanticObject) {
if(errorAcceptor != null) {
if(transientValues.isValueTransient(semanticObject, GherkinPackage.Literals.NARRATIVE_ELEMENT__NAME) == ValueTransient.YES)
errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, GherkinPackage.Literals.NARRATIVE_ELEMENT__NAME));
}
INodesForEObjectProvider nodes = createNodeProvider(semanticObject);
SequenceFeeder feeder = createSequencerFeeder(semanticObject, nodes);
feeder.accept(grammarAccess.getAsAAccess().getNameAS_ATerminalRuleCall_0(), semanticObject.getName());
feeder.finish();
}
/**
* Constraint:
* (tags+=TAG* name=BACKGROUND_TEXT steps+=Step*)
*/
protected void sequence_Background(EObject context, Background semanticObject) {
genericSequencer.createSequence(context, semanticObject);
}
/**
* Constraint:
* value=EXAMPLE_CELL
*/
protected void sequence_ExampleCell(EObject context, ExampleCell semanticObject) {
if(errorAcceptor != null) {
if(transientValues.isValueTransient(semanticObject, GherkinPackage.Literals.EXAMPLE_CELL__VALUE) == ValueTransient.YES)
errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, GherkinPackage.Literals.EXAMPLE_CELL__VALUE));
}
INodesForEObjectProvider nodes = createNodeProvider(semanticObject);
SequenceFeeder feeder = createSequencerFeeder(semanticObject, nodes);
feeder.accept(grammarAccess.getExampleCellAccess().getValueEXAMPLE_CELLTerminalRuleCall_0(), semanticObject.getValue());
feeder.finish();
}
/**
* Constraint:
* cells+=ExampleCell+
*/
protected void sequence_ExampleRow(EObject context, ExampleRow semanticObject) {
genericSequencer.createSequence(context, semanticObject);
}
/**
* Constraint:
* (heading=ExampleRow rows+=ExampleRow*)
*/
protected void sequence_Example(EObject context, Example semanticObject) {
genericSequencer.createSequence(context, semanticObject);
}
/**
* Constraint:
* (tags+=TAG* name=FEATURE_TEXT? elements+=NarrativeElement* scenarios+=AbstractScenario*)
*/
protected void sequence_Feature(EObject context, Feature semanticObject) {
genericSequencer.createSequence(context, semanticObject);
}
/**
* Constraint:
* name=TEXT
*/
protected void sequence_FreeText(EObject context, FreeText semanticObject) {
if(errorAcceptor != null) {
if(transientValues.isValueTransient(semanticObject, GherkinPackage.Literals.NARRATIVE_ELEMENT__NAME) == ValueTransient.YES)
errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, GherkinPackage.Literals.NARRATIVE_ELEMENT__NAME));
}
INodesForEObjectProvider nodes = createNodeProvider(semanticObject);
SequenceFeeder feeder = createSequencerFeeder(semanticObject, nodes);
feeder.accept(grammarAccess.getFreeTextAccess().getNameTEXTTerminalRuleCall_0(), semanticObject.getName());
feeder.finish();
}
/**
* Constraint:
* (tags+=TAG* desc+=GIVEN_TEXT desc+=OptionalText* rows+=ExampleRow*)
*/
protected void sequence_GivenStep(EObject context, GivenStep semanticObject) {
genericSequencer.createSequence(context, semanticObject);
}
/**
* Constraint:
* name=I_WANT_TO
*/
protected void sequence_IWantTo(EObject context, IWantTo semanticObject) {
if(errorAcceptor != null) {
if(transientValues.isValueTransient(semanticObject, GherkinPackage.Literals.NARRATIVE_ELEMENT__NAME) == ValueTransient.YES)
errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, GherkinPackage.Literals.NARRATIVE_ELEMENT__NAME));
}
INodesForEObjectProvider nodes = createNodeProvider(semanticObject);
SequenceFeeder feeder = createSequencerFeeder(semanticObject, nodes);
feeder.accept(grammarAccess.getIWantToAccess().getNameI_WANT_TOTerminalRuleCall_0(), semanticObject.getName());
feeder.finish();
}
/**
* Constraint:
* name=IN_ORDER_TO
*/
protected void sequence_InOrderTo(EObject context, InOrderTo semanticObject) {
if(errorAcceptor != null) {
if(transientValues.isValueTransient(semanticObject, GherkinPackage.Literals.NARRATIVE_ELEMENT__NAME) == ValueTransient.YES)
errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, GherkinPackage.Literals.NARRATIVE_ELEMENT__NAME));
}
INodesForEObjectProvider nodes = createNodeProvider(semanticObject);
SequenceFeeder feeder = createSequencerFeeder(semanticObject, nodes);
feeder.accept(grammarAccess.getInOrderToAccess().getNameIN_ORDER_TOTerminalRuleCall_0(), semanticObject.getName());
feeder.finish();
}
/**
* Constraint:
* (tags+=TAG* name=SCENARIO_OUTLINE_TEXT elements+=NarrativeElement* steps+=Step+ example=Example)
*/
protected void sequence_ScenarioWithOutline(EObject context, ScenarioWithOutline semanticObject) {
genericSequencer.createSequence(context, semanticObject);
}
/**
* Constraint:
* (tags+=TAG* name=SCENARIO_TEXT elements+=NarrativeElement* steps+=Step+)
*/
protected void sequence_Scenario(EObject context, Scenario semanticObject) {
genericSequencer.createSequence(context, semanticObject);
}
/**
* Constraint:
* (tags+=TAG* desc+=THEN_TEXT desc+=OptionalText* rows+=ExampleRow*)
*/
protected void sequence_ThenStep(EObject context, ThenStep semanticObject) {
genericSequencer.createSequence(context, semanticObject);
}
/**
* Constraint:
* (tags+=TAG* desc+=WHEN_TEXT desc+=OptionalText* rows+=ExampleRow*)
*/
protected void sequence_WhenStep(EObject context, WhenStep semanticObject) {
genericSequencer.createSequence(context, semanticObject);
}
}