/*******************************************************************************
* Copyright (c) 2011 SAP AG and others.
* 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:
* SAP AG - initial API and implementation
******************************************************************************/
package com.sap.furcas.metamodel.texteditor.editor;
import java.util.Collections;
import java.util.Set;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.util.EcoreUtil;
import com.sap.furcas.ide.dslproject.builder.SyntaxGenerationNature;
import com.sap.furcas.ide.dslproject.conf.IProjectMetaRefConf;
import com.sap.furcas.ide.editor.document.ModelEditorInput;
import com.sap.furcas.ide.editor.imp.AbstractFurcasEditor;
import com.sap.furcas.metamodel.texteditor.Activator;
import com.sap.furcas.parser.tcs.TCSParserFactory;
import com.sap.furcas.runtime.parser.PartitionAssignmentHandler;
import com.sap.ide.cts.parser.incremental.IncrementalParserFacade;
public class TCSEditor extends AbstractFurcasEditor {
public TCSEditor() {
super(new TCSParserFactory());
}
@Override
protected IncrementalParserFacade createParserFacade(ModelEditorInput modelEditorInput, PartitionAssignmentHandler partitionHandler) {
parserFactory.getAdditionalQueryScope().addAll(getReferencedMetamodels(modelEditorInput));
return super.createParserFacade(modelEditorInput, partitionHandler);
}
private Set<URI> getReferencedMetamodels(ModelEditorInput modelEditorInput) {
URI uri = EcoreUtil.getURI(modelEditorInput.getRootObject());
IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(uri.segment(1));
SyntaxGenerationNature nature = SyntaxGenerationNature.getNatureFromProject(project);
IProjectMetaRefConf conf = nature.getMetaModelReferenceConf();
try {
return conf.getMetaLookUpForProject().getReferenceScope();
} catch (CoreException e) {
Activator.getDefault().getLogger().logError("Failed to load referenced metamodels of Syntax", e);
return Collections.emptySet();
}
}
}