/*
* 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.source.handler;
import java.util.Optional;
import javax.inject.Named;
import org.eclipse.e4.core.di.annotations.Execute;
import org.eclipse.jface.text.BadLocationException;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.IRegion;
import org.eclipse.jface.text.ITextViewer;
import org.eclipse.jface.text.link.LinkedModeModel;
import org.eclipse.jface.text.link.LinkedModeUI;
import org.eclipse.jface.text.link.LinkedPosition;
import org.eclipse.jface.text.link.LinkedPositionGroup;
import org.eclipse.jface.text.source.SourceViewer;
import org.eclipse.ui.ISources;
import org.robotframework.ide.eclipse.main.plugin.model.RobotSuiteFile;
import org.robotframework.ide.eclipse.main.plugin.tableeditor.RobotEditorSources;
import org.robotframework.ide.eclipse.main.plugin.tableeditor.RobotFormEditor;
import org.robotframework.ide.eclipse.main.plugin.tableeditor.source.DocumentUtilities;
import org.robotframework.ide.eclipse.main.plugin.tableeditor.source.handler.RenameInSourceHandler.E4RenameInSourceHandler;
import org.robotframework.red.commands.DIParameterizedHandler;
/**
* @author Michal Anglart
*/
public class RenameInSourceHandler extends DIParameterizedHandler<E4RenameInSourceHandler> {
public RenameInSourceHandler() {
super(E4RenameInSourceHandler.class);
}
public static class E4RenameInSourceHandler {
@Execute
public void formatSource(final @Named(ISources.ACTIVE_EDITOR_NAME) RobotFormEditor editor,
@Named(RobotEditorSources.SUITE_FILE_MODEL) final RobotSuiteFile fileModel) {
final SourceViewer viewer = editor.getSourceEditor().getViewer();
final int offset = viewer.getTextWidget().getCaretOffset();
final IDocument document = editor.getSourceEditor().getDocument();
try {
final Optional<IRegion> cell = DocumentUtilities.findCellRegion(document, fileModel.isTsvFile(),
offset);
if (cell.isPresent()) {
/* create groups - this step is independent of the linked mode */
final LinkedPositionGroup group1 = new LinkedPositionGroup();
group1.addPosition(new LinkedPosition(document, cell.get().getOffset(), cell.get().getLength()));
/* set up linked mode */
final LinkedModeModel model = new LinkedModeModel();
model.addGroup(group1);
model.forceInstall();
/* create UI */
final LinkedModeUI ui = new LinkedModeUI(model, new ITextViewer[] { viewer });
ui.enter();
}
} catch (final BadLocationException e) {
// nothing to do
}
}
// private void foo(final RobotSuiteFile fileModel) {
// new KeywordDefinitionLocator(fileModel).locateKeywordDefinition(new KeywordDetector() {
//
// @Override
// public ContinueDecision libraryKeywordDetected(final LibrarySpecification libSpec,
// final KeywordSpecification kwSpec) {
// return ContinueDecision.CONTINUE;
// }
//
// @Override
// public ContinueDecision keywordDetected(final RobotSuiteFile file,
// final RobotKeywordDefinition keyword) {
// if (file == fileModel) {
//
// }
// return null;
// }
// });
// }
}
}