package org.eclipse.papyrus.uml.textedit.collaborationuse.xtext.serializer;
import com.google.inject.Inject;
import com.google.inject.Provider;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.papyrus.uml.textedit.collaborationuse.xtext.services.UmlCollaborationUseGrammarAccess;
import org.eclipse.papyrus.uml.textedit.collaborationuse.xtext.umlCollaborationUse.CollaborationUseRule;
import org.eclipse.papyrus.uml.textedit.collaborationuse.xtext.umlCollaborationUse.TypeRule;
import org.eclipse.papyrus.uml.textedit.collaborationuse.xtext.umlCollaborationUse.UmlCollaborationUsePackage;
import org.eclipse.papyrus.uml.textedit.common.xtext.serializer.AbstractUmlCommonSemanticSequencer;
import org.eclipse.papyrus.uml.textedit.common.xtext.umlCommon.BoundSpecification;
import org.eclipse.papyrus.uml.textedit.common.xtext.umlCommon.MultiplicityRule;
import org.eclipse.papyrus.uml.textedit.common.xtext.umlCommon.QualifiedName;
import org.eclipse.papyrus.uml.textedit.common.xtext.umlCommon.UmlCommonPackage;
import org.eclipse.xtext.serializer.acceptor.ISemanticSequenceAcceptor;
import org.eclipse.xtext.serializer.diagnostic.ISemanticSequencerDiagnosticProvider;
import org.eclipse.xtext.serializer.diagnostic.ISerializationDiagnostic.Acceptor;
import org.eclipse.xtext.serializer.sequencer.AbstractSemanticSequencer;
import org.eclipse.xtext.serializer.sequencer.GenericSequencer;
import org.eclipse.xtext.serializer.sequencer.ISemanticSequencer;
import org.eclipse.xtext.serializer.sequencer.ITransientValueService;
@SuppressWarnings("restriction")
public class AbstractUmlCollaborationUseSemanticSequencer extends AbstractSemanticSequencer {
@Inject
protected UmlCollaborationUseGrammarAccess grammarAccess;
@Inject
protected ISemanticSequencerDiagnosticProvider diagnosticProvider;
@Inject
protected ITransientValueService transientValues;
@Inject
@GenericSequencer
protected Provider<ISemanticSequencer> genericSequencerProvider;
protected ISemanticSequencer genericSequencer;
@Inject
protected Provider<AbstractUmlCommonSemanticSequencer> superSequencerProvider;
protected AbstractUmlCommonSemanticSequencer superSequencer;
@Override
public void init(ISemanticSequencer sequencer, ISemanticSequenceAcceptor sequenceAcceptor, Acceptor errorAcceptor) {
super.init(sequencer, sequenceAcceptor, errorAcceptor);
this.genericSequencer = genericSequencerProvider.get();
this.genericSequencer.init(sequencer, sequenceAcceptor, errorAcceptor);
this.superSequencer = superSequencerProvider.get();
this.superSequencer.init(sequencer, sequenceAcceptor, errorAcceptor);
}
public void createSequence(EObject context, EObject semanticObject) {
if(semanticObject.eClass().getEPackage() == UmlCollaborationUsePackage.eINSTANCE) switch(semanticObject.eClass().getClassifierID()) {
case UmlCollaborationUsePackage.COLLABORATION_USE_RULE:
if(context == grammarAccess.getCollaborationUseRuleRule()) {
sequence_CollaborationUseRule(context, (CollaborationUseRule) semanticObject);
return;
}
else break;
case UmlCollaborationUsePackage.TYPE_RULE:
if(context == grammarAccess.getTypeRuleRule()) {
sequence_TypeRule(context, (TypeRule) semanticObject);
return;
}
else break;
}
else if(semanticObject.eClass().getEPackage() == UmlCommonPackage.eINSTANCE) switch(semanticObject.eClass().getClassifierID()) {
case UmlCommonPackage.BOUND_SPECIFICATION:
if(context == grammarAccess.getBoundSpecificationRule()) {
sequence_BoundSpecification(context, (BoundSpecification) semanticObject);
return;
}
else break;
case UmlCommonPackage.MULTIPLICITY_RULE:
if(context == grammarAccess.getMultiplicityRuleRule()) {
sequence_MultiplicityRule(context, (MultiplicityRule) semanticObject);
return;
}
else break;
case UmlCommonPackage.QUALIFIED_NAME:
if(context == grammarAccess.getQualifiedNameRule()) {
sequence_QualifiedName(context, (QualifiedName) semanticObject);
return;
}
else break;
}
if (errorAcceptor != null) errorAcceptor.accept(diagnosticProvider.createInvalidContextOrTypeDiagnostic(semanticObject, context));
}
/**
* Constraint:
* value=UnlimitedLiteral
*/
protected void sequence_BoundSpecification(EObject context, BoundSpecification semanticObject) {
superSequencer.createSequence(context, semanticObject);
}
/**
* Constraint:
* (visibility=VisibilityKind name=ID type=TypeRule?)
*/
protected void sequence_CollaborationUseRule(EObject context, CollaborationUseRule semanticObject) {
genericSequencer.createSequence(context, semanticObject);
}
/**
* Constraint:
* (bounds+=BoundSpecification bounds+=BoundSpecification?)
*/
protected void sequence_MultiplicityRule(EObject context, MultiplicityRule semanticObject) {
superSequencer.createSequence(context, semanticObject);
}
/**
* Constraint:
* (path=[Namespace|ID] remaining=QualifiedName?)
*/
protected void sequence_QualifiedName(EObject context, QualifiedName semanticObject) {
superSequencer.createSequence(context, semanticObject);
}
/**
* Constraint:
* (path=QualifiedName? type=[Collaboration|ID])
*/
protected void sequence_TypeRule(EObject context, TypeRule semanticObject) {
genericSequencer.createSequence(context, semanticObject);
}
}