/*******************************************************************************
* Copyright (c) 2011 Sebastian Benz.
* 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:
* Sebastian Benz - initial API and implementation
******************************************************************************/
/*
* generated by Xtext
*/
package de.sebastianbenz.xgherkin.ui.contentassist;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.xtext.Assignment;
import org.eclipse.xtext.RuleCall;
import org.eclipse.xtext.ui.editor.contentassist.ContentAssistContext;
import org.eclipse.xtext.ui.editor.contentassist.ICompletionProposalAcceptor;
import de.sebastianbenz.xgherkin.gherkin.Example;
import de.sebastianbenz.xgherkin.gherkin.ExampleCell;
import de.sebastianbenz.xgherkin.gherkin.ExampleRow;
import de.sebastianbenz.xgherkin.gherkin.ScenarioWithOutline;
/**
* see
* http://www.eclipse.org/Xtext/documentation/latest/xtext.html#contentAssist on
* how to customize content assistant
*/
public class GherkinProposalProvider extends AbstractGherkinProposalProvider {
@Override
public void completeFeature_Name(EObject model, Assignment assignment,
ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
acceptor.accept(createCompletionProposal("Feature: ", context));
}
@Override
public void completeScenario_Name(EObject model, Assignment assignment,
ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
acceptor.accept(createCompletionProposal("Scenario: ", context));
}
@Override
public void completeScenarioWithOutline_Name(EObject model,
Assignment assignment, ContentAssistContext context,
ICompletionProposalAcceptor acceptor) {
acceptor.accept(createCompletionProposal("Scenario Outline: ", context));
}
// @Override
// public void completeThenStep_Desc(EObject model, Assignment assignment,
// ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
// acceptor.accept(createCompletionProposal("Then ", context));
// }
//
// @Override
// public void completeGivenStep_Desc(EObject model, Assignment assignment,
// ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
// acceptor.accept(createCompletionProposal("Given ", context));
// }
//
// @Override
// public void completeAndStep_Desc(EObject model, Assignment assignment,
// ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
// acceptor.accept(createCompletionProposal("And ", context));
// }
//
// @Override
// public void completeWhenStep_Desc(EObject model, Assignment assignment,
// ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
// acceptor.accept(createCompletionProposal("When ", context));
// }
@Override
public void complete_EXAMPLE_HEADING(EObject model, RuleCall ruleCall,
ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
acceptor.accept(createCompletionProposal("Examples: ", context));
}
public void complete_Step(ScenarioWithOutline model, RuleCall ruleCall,
ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
Example example = model.getExample();
if (example == null) {
return;
}
ExampleRow heading = example.getHeading();
if (heading == null) {
return;
}
String firstChar = calculateFirstChar(context);
for (ExampleCell cell : heading.getCells()) {
String cellValue = cell.getValue();
acceptor.accept(createCompletionProposal(context.getPrefix()
+ firstChar + cellValue + ">", cellValue, null, context));
}
}
@Override
protected boolean isValidProposal(String proposal, String prefix,
ContentAssistContext context) {
return true;
}
private String calculateFirstChar(ContentAssistContext context) {
String prefix = context.getPrefix();
String start = "<";
for (int i = prefix.length() - 1; i >= 0; i--) {
char c = prefix.charAt(i);
if (c == '<') {
start = "";
break;
}
if (c == '>') {
break;
}
}
return start;
}
}