/******************************************************************************* * Copyright (c) 2010 Fraunhofer IWU 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: * Fraunhofer IWU - initial API and implementation *******************************************************************************/ package net.enilink.komma.sparql.ui.assist; import java.util.ArrayList; import java.util.Collection; import java.util.HashSet; import java.util.List; import java.util.Set; import org.parboiled.support.ParsingResult; import net.enilink.komma.edit.assist.ContentProposal; import net.enilink.komma.edit.assist.IContentProposal; import net.enilink.komma.edit.assist.ReflectiveSemanticProposals; import net.enilink.komma.parser.sparql.tree.Variable; import net.enilink.komma.parser.sparql.tree.visitor.TreeWalker; import net.enilink.komma.parser.sparql.tree.visitor.Visitable; public class SparqlProposals extends ReflectiveSemanticProposals { static class VarCollector extends TreeWalker<Object> { private Set<String> queryVarNames = new HashSet<String>(); public Collection<String> process(Visitable node) { node.accept(this, null); return queryVarNames; } @Override public Boolean variable(Variable variable, Object value) { queryVarNames.add(variable.getName()); return variable.getPropertyList().accept(this, value); } } public IContentProposal[] Var(ParsingResult<?> result, int index, String prefix) { if (result.resultValue instanceof Visitable) { List<IContentProposal> results = new ArrayList<IContentProposal>(); for (String var : new VarCollector() .process((Visitable) result.resultValue)) { String content = '?' + var; // content = content.substring(prefix.length()); results.add(new ContentProposal(content, content, content)); } return results.toArray(new IContentProposal[results.size()]); } return null; } }