/*
* 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.hyperlink.detectors;
import java.util.ArrayList;
import java.util.List;
import java.util.Map.Entry;
import org.eclipse.jface.text.IRegion;
import org.eclipse.jface.text.Region;
import org.eclipse.jface.text.hyperlink.IHyperlink;
import org.eclipse.nebula.widgets.nattable.data.IRowDataProvider;
import org.robotframework.ide.eclipse.main.plugin.RedPlugin;
import org.robotframework.ide.eclipse.main.plugin.hyperlink.SuiteFileTableElementHyperlink;
import org.robotframework.ide.eclipse.main.plugin.model.RobotFileInternalElement;
import org.robotframework.ide.eclipse.main.plugin.model.RobotModel;
import org.robotframework.ide.eclipse.main.plugin.model.RobotSuiteFile;
import com.google.common.annotations.VisibleForTesting;
public class TableHyperlinksToKeywordsDetector extends HyperlinksToKeywordsDetector implements ITableHyperlinksDetector {
private final IRowDataProvider<? extends Object> dataProvider;
public TableHyperlinksToKeywordsDetector(final IRowDataProvider<? extends Object> dataProvider) {
this(RedPlugin.getModelManager().getModel(), dataProvider);
}
@VisibleForTesting
TableHyperlinksToKeywordsDetector(final RobotModel model, final IRowDataProvider<? extends Object> dataProvider) {
super(model);
this.dataProvider = dataProvider;
}
@SuppressWarnings("rawtypes")
@Override
public List<IHyperlink> detectHyperlinks(final int row, final int column, final String label, final int indexInLabel) {
Object rowObject = dataProvider.getRowObject(row);
if (rowObject instanceof Entry) {
rowObject = ((Entry) rowObject).getValue();
}
if (rowObject instanceof RobotFileInternalElement) {
final RobotFileInternalElement element = (RobotFileInternalElement) rowObject;
final RobotSuiteFile suiteFile = element.getSuiteFile();
return detectHyperlinks(suiteFile, new Region(0, label.length()), label);
}
return new ArrayList<>();
}
@Override
protected IHyperlink createLocalKeywordHyperlink(final KeywordHyperlinkEntity keywordEntity, final IRegion from,
final String additionalInfo) {
return new SuiteFileTableElementHyperlink(from, keywordEntity.exposingResource, keywordEntity.userKeyword,
null);
}
@Override
protected IHyperlink createResourceKeywordHyperlink(final KeywordHyperlinkEntity keywordEntity, final IRegion from,
final String additionalInfo) {
return new SuiteFileTableElementHyperlink(from, keywordEntity.exposingResource, keywordEntity.userKeyword,
null);
}
}