Commit 670a09bf authored by Martti Käärik's avatar Martti Käärik
Browse files

Use context finder to pick out correct parser rule for serialization based on object class.

Change-Id: Ia2667c9c3f3327e47dffc0e5e7044e8274c620ea
parent 9ec177d5
Loading
Loading
Loading
Loading
+54 −0
Original line number Diff line number Diff line
package org.etsi.mts.tdl.graphical.labels;

import java.util.Collections;
import java.util.Set;

import org.eclipse.emf.ecore.EObject;
import org.eclipse.xtext.IGrammarAccess;
import org.eclipse.xtext.ParserRule;
import org.eclipse.xtext.serializer.ISerializationContext;
import org.eclipse.xtext.serializer.analysis.SerializationContext;
import org.eclipse.xtext.serializer.sequencer.IContextFinder;
import org.etsi.mts.tdl.DataUse;
import org.etsi.mts.tdl.graphical.labels.services.DataGrammarAccess;

import com.google.inject.Inject;

public class DataContextFinder implements IContextFinder {
	
	@Inject
	private IGrammarAccess grammarAccess;

	@Override
	public Set<ISerializationContext> findByContents(EObject semanticObject,
			Iterable<ISerializationContext> contextCandidates) {
		return findByContentsAndContainer(semanticObject, contextCandidates);
	}

	@Override
	public Set<ISerializationContext> findByContentsAndContainer(EObject semanticObject,
			Iterable<ISerializationContext> contextCandidates) {
		ParserRule rule = null;
		if (semanticObject instanceof DataUse)
			rule = ((DataGrammarAccess)grammarAccess).getDataUseRule();
		if (rule != null) {
			ISerializationContext context = SerializationContext.fromEObject(rule, semanticObject);
			return Collections.singleton(context);
		}
		return null;
	}

	@Override
	public Iterable<EObject> findContextsByContents(EObject semanticObject, Iterable<EObject> contextCandidates) {
		// This is deprecated
		return null;
	}

	@Override
	public Iterable<EObject> findContextsByContentsAndContainer(EObject semanticObject,
			Iterable<EObject> contextCandidates) {
		// This is deprecated
		return null;
	}

}
+7 −1
Original line number Diff line number Diff line
@@ -3,6 +3,8 @@
 */
package org.etsi.mts.tdl.graphical.labels;

import org.eclipse.xtext.serializer.sequencer.IContextFinder;
import org.eclipse.xtext.serializer.tokens.ICrossReferenceSerializer;
import org.etsi.mts.tdl.graphical.labels.serializer.DataCrossReferenceSerializer;

/**
@@ -10,7 +12,11 @@ import org.etsi.mts.tdl.graphical.labels.serializer.DataCrossReferenceSerializer
 */
public class DataRuntimeModule extends AbstractDataRuntimeModule {

	public Class<? extends org.eclipse.xtext.serializer.tokens.ICrossReferenceSerializer> bindICrossReferenceSerializer() {
	public Class<? extends ICrossReferenceSerializer> bindICrossReferenceSerializer() {
		return DataCrossReferenceSerializer.class;
	}

	public Class<? extends IContextFinder> bindIContextFinder() {
		return DataContextFinder.class;
	}
}