/*
* Copyright 2016 Nokia Solutions and Networks
* Licensed under the Apache License, Version 2.0,
* see license.txt file for details.
*/
package org.robotframework.ide.eclipse.main.plugin.tableeditor.assist;
import static com.google.common.collect.Lists.newArrayList;
import java.util.List;
import org.eclipse.jface.fieldassist.IContentProposal;
import org.eclipse.nebula.widgets.nattable.data.IRowDataProvider;
import org.robotframework.ide.eclipse.main.plugin.assist.AssistProposal;
import org.robotframework.ide.eclipse.main.plugin.assist.AssistProposalPredicate;
import org.robotframework.ide.eclipse.main.plugin.assist.AssistProposalPredicates;
import org.robotframework.ide.eclipse.main.plugin.assist.RedWithNameProposals;
import org.robotframework.ide.eclipse.main.plugin.model.RobotSetting;
import org.robotframework.red.jface.assist.AssistantContext;
import org.robotframework.red.jface.assist.RedContentProposal;
import org.robotframework.red.jface.assist.RedContentProposalProvider;
import org.robotframework.red.nattable.edit.AssistanceSupport.NatTableAssistantContext;
public class WithNameElementsProposalsProvider implements RedContentProposalProvider {
private final IRowDataProvider<?> dataProvider;
public WithNameElementsProposalsProvider(final IRowDataProvider<?> dataProvider) {
this.dataProvider = dataProvider;
}
@Override
public RedContentProposal[] getProposals(final String contents, final int position, final AssistantContext context) {
final String prefix = contents.substring(0, position);
final AssistProposalPredicate<String> predicateWordHasToSatisfy = createWordPredicate(
(NatTableAssistantContext) context);
final List<? extends AssistProposal> withNameProposals = new RedWithNameProposals(predicateWordHasToSatisfy)
.getWithNameProposals(prefix);
final List<IContentProposal> proposals = newArrayList();
for (final AssistProposal proposal : withNameProposals) {
final String additionalSuffix = "";
proposals.add(new AssistProposalAdapter(proposal, additionalSuffix));
}
return proposals.toArray(new RedContentProposal[0]);
}
private AssistProposalPredicate<String> createWordPredicate(final NatTableAssistantContext context) {
final int cellIndex = context.getColumn();
final Object tableElement = dataProvider.getRowObject(context.getRow());
if (tableElement instanceof RobotSetting
&& RobotSetting.SettingsGroup.LIBRARIES.equals(((RobotSetting) tableElement).getGroup())) {
return AssistProposalPredicates.withNamePredicate(cellIndex);
} else {
return AssistProposalPredicates.<String> alwaysFalse();
}
}
}