blob: 521bf547a381a7282e9f326254f301539bd67a20 [file] [log] [blame]
/**
*
* Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
*
* 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:
* Christophe Loetz (Loetz GmbH&Co.KG) - initial implementation
*
*
* This copyright notice shows up in the generated Java code
*
*/
package org.eclipse.osbp.xtext.topologydsl.ui.contentassist
import java.io.File
import javax.inject.Inject
import org.eclipse.core.internal.resources.Workspace
import org.eclipse.core.resources.IContainer
import org.eclipse.core.resources.ResourcesPlugin
import org.eclipse.emf.ecore.EObject
import org.eclipse.jface.viewers.StyledString
import org.eclipse.osbp.xtext.basic.ui.contentassist.BasicDSLProposalProviderHelper
import org.eclipse.osbp.xtext.topologydsl.ui.TopologyDSLDocumentationTranslator
import org.eclipse.xtext.Assignment
import org.eclipse.xtext.Keyword
import org.eclipse.xtext.RuleCall
import org.eclipse.xtext.common.ui.contentassist.TerminalsProposalProvider
import org.eclipse.xtext.ui.editor.contentassist.ConfigurableCompletionProposal
import org.eclipse.xtext.ui.editor.contentassist.ContentAssistContext
import org.eclipse.xtext.ui.editor.contentassist.ICompletionProposalAcceptor
class TopologyDSLProposalProvider extends AbstractTopologyDSLProposalProvider {
@Inject TerminalsProposalProvider provider
@Inject BasicDSLProposalProviderHelper providerHelper
def filePickerProposal(EObject model, Assignment assignment, ContentAssistContext context,
ICompletionProposalAcceptor acceptor, String fileExtension) {
var uri = context.resource.URI
if (uri !== null && uri.isPlatform) {
var projectName = ""
for (segment : uri.segments) {
if (segment.contains("model.topology")) {
projectName = segment
}
}
if (!projectName.empty) {
var Workspace workspace = ResourcesPlugin.workspace as Workspace
var projects = workspace.root.getProjects(IContainer.INCLUDE_HIDDEN)
for (project : projects) {
if (project.exists()) {
for (segment : project.fullPath.segments) {
if (segment !== null && segment.contains(projectName)) {
var projectLocation = workspace.getFileSystemManager.locationURIFor(project, true);
if (projectLocation !== null) {
var projectDir = new File(projectLocation);
for (projectFile : projectDir.listFiles) {
if (projectFile.name.endsWith("topologies")) {
var topologiesDir = projectFile
// Pass a FileFilter in the form of an
// Xtend lambda expression
if (topologiesDir.directory) {
for (file : topologiesDir.listFiles[path|path.name.endsWith(fileExtension)]) {
val fileNameR = file.name.replace(fileExtension, "")
val fileNameProposal = createCompletionProposal('''"«fileNameR»"''',
context) as ConfigurableCompletionProposal
acceptor.accept(fileNameProposal)
}
}
}
}
}
}
}
}
}
}
}
}
override completeTopology_FileName(EObject model, Assignment assignment, ContentAssistContext context,
ICompletionProposalAcceptor acceptor) {
filePickerProposal(model, assignment, context, acceptor, ".json")
}
override protected StyledString getKeywordDisplayString(Keyword keyword) {
return BasicDSLProposalProviderHelper.getKeywordDisplayString(keyword,
TopologyDSLDocumentationTranslator.instance())
}
/**
* This override will enable 1 length non letter characters as keyword.
*/
override protected boolean isKeywordWorthyToPropose(Keyword keyword) {
return true;
}
override public void complete_QualifiedName(EObject model, RuleCall ruleCall, ContentAssistContext context,
ICompletionProposalAcceptor acceptor) {
providerHelper.complete_PackageName(model, ruleCall, context, acceptor, this)
}
// ------------------------ delegates to TerminalsProposalProvider -----------------
override public void complete_TRANSLATABLESTRING(EObject model, RuleCall ruleCall, ContentAssistContext context,
ICompletionProposalAcceptor acceptor) {
provider.complete_STRING(model, ruleCall, context, acceptor)
}
override public void complete_ID(EObject model, RuleCall ruleCall, ContentAssistContext context,
ICompletionProposalAcceptor acceptor) {
provider.complete_ID(model, ruleCall, context, acceptor)
}
}