/* * Copyright 2015 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.EnumSet; import java.util.List; import java.util.Map.Entry; import org.eclipse.jface.fieldassist.IContentProposal; import org.eclipse.nebula.widgets.nattable.data.IRowDataProvider; import org.rf.ide.core.testdata.text.read.recognizer.RobotTokenType; import org.robotframework.ide.eclipse.main.plugin.assist.AssistProposal; import org.robotframework.ide.eclipse.main.plugin.assist.RedKeywordProposals; import org.robotframework.ide.eclipse.main.plugin.model.RobotSuiteFile; 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 KeywordProposalsInSettingsProvider implements RedContentProposalProvider { private final RobotSuiteFile suiteFile; private final IRowDataProvider<?> dataProvider; public KeywordProposalsInSettingsProvider(final RobotSuiteFile suiteFile, final IRowDataProvider<?> dataProvider) { this.suiteFile = suiteFile; this.dataProvider = dataProvider; } @Override public RedContentProposal[] getProposals(final String contents, final int position, final AssistantContext context) { final String prefix = contents.substring(0, position); final List<IContentProposal> proposals = newArrayList(); final NatTableAssistantContext tableContext = (NatTableAssistantContext) context; if (tableContext.getColumn() == 1 && isKeywordBasedSetting(dataProvider, tableContext.getRow())) { final List<? extends AssistProposal> keywordsEntities = new RedKeywordProposals(suiteFile) .getKeywordProposals(prefix); for (final AssistProposal proposedKeyword : keywordsEntities) { proposals.add(new AssistProposalAdapter(proposedKeyword)); } } return proposals.toArray(new RedContentProposal[0]); } static boolean isKeywordBasedSetting(final IRowDataProvider<?> dataProvider, final int row) { final Entry<?, ?> entry = (Entry<?, ?>) dataProvider.getRowObject(row); final String settingName = (String) entry.getKey(); final RobotTokenType actualType = RobotTokenType.findTypeOfDeclarationForSettingTable(settingName); return EnumSet.of(RobotTokenType.SETTING_SUITE_SETUP_DECLARATION, RobotTokenType.SETTING_SUITE_TEARDOWN_DECLARATION, RobotTokenType.SETTING_TEST_SETUP_DECLARATION, RobotTokenType.SETTING_TEST_TEARDOWN_DECLARATION, RobotTokenType.SETTING_TEST_TEMPLATE_DECLARATION) .contains(actualType); } }