package com.sap.furcas.runtime.syntaxprovider;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
import org.eclipse.ocl.ecore.opposites.DefaultOppositeEndFinder;
import org.eclipse.ocl.ecore.opposites.OppositeEndFinder;
import com.sap.furcas.metamodel.FURCAS.TCS.ConcreteSyntax;
import com.sap.furcas.runtime.parser.ParserFactory;
import com.sap.furcas.runtime.referenceresolving.SyntaxRegistry;
public class SyntaxProviderImpl implements SyntaxProvider {
private ConcreteSyntax syntax;
private final OppositeEndFinder oppositeEndFinder;
private final ParserFactory<?, ?> parserFactory;
public SyntaxProviderImpl(ParserFactory<?, ?> parserFactory) {
super();
this.parserFactory = parserFactory;
this.oppositeEndFinder = DefaultOppositeEndFinder.getInstance();
}
@Override
public ConcreteSyntax getSyntax() {
if (syntax == null) {
ResourceSet resourceSet = new ResourceSetImpl();
syntax = (ConcreteSyntax) resourceSet.getEObject(URI.createURI(parserFactory.getSyntaxUUID()), true);
}
return syntax;
}
@Override
public void registerForIncrementalEvaluation(SyntaxRegistry registry) {
registry.registerSyntaxForIncrementalEvaluation(getSyntax(), oppositeEndFinder, /*progressmonitor*/null, parserFactory);
}
}