1 package com.proalpha.java.oea.plugins.querygenerator;
3 import java.util.Scanner;
5 import org.eclipse.jface.dialogs.MessageDialog;
6 import org.eclipse.jface.text.BadLocationException;
7 import org.eclipse.jface.text.IDocument;
8 import org.eclipse.jface.text.ITextOperationTarget;
9 import org.eclipse.jface.text.ITextSelection;
10 import org.eclipse.jface.text.ITextViewer;
11 import org.eclipse.jface.text.link.LinkedModeModel;
12 import org.eclipse.jface.text.link.LinkedModeUI;
13 import org.eclipse.jface.text.link.LinkedPosition;
14 import org.eclipse.jface.text.link.LinkedPositionGroup;
15 import org.eclipse.jface.viewers.ISelection;
16 import org.eclipse.jface.viewers.ISelectionProvider;
17 import org.eclipse.ui.IEditorPart;
18 import org.eclipse.ui.IWorkbenchPage;
19 import org.eclipse.ui.IWorkbenchWindow;
20 import org.eclipse.ui.PlatformUI;
21 import org.eclipse.ui.texteditor.IDocumentProvider;
22 import org.eclipse.ui.texteditor.ITextEditor;
34 if (editorTools ==
null)
41 public void insertText(String insertString) {
43 this.insertText(getActiveEditor(), insertString);
47 public String getSelectionText() {
49 return getSelectionText(getActiveEditor());
53 public String getSelectionText(ITextEditor editor) {
55 ISelectionProvider selectionProvider = editor.getSelectionProvider();
56 ISelection selection = selectionProvider.getSelection();
58 if (selection instanceof ITextSelection) {
60 ITextSelection textSelection = (ITextSelection) selection;
61 return textSelection.getText();
69 public void insertText(ITextEditor editor, String insertString) {
73 IDocumentProvider documentProvider = editor.getDocumentProvider();
74 IDocument document = documentProvider.getDocument(editor.getEditorInput());
76 ISelectionProvider selectionProvider = editor.getSelectionProvider();
77 ISelection selection = selectionProvider.getSelection();
79 if (selection instanceof ITextSelection) {
84 ITextSelection textSelection = (ITextSelection) selection;
86 int line = textSelection.getStartLine();
87 int selectionOffset = textSelection.getOffset();
89 int indentation = selectionOffset - document.getLineOffset(line);
90 insertString = indent(insertString, indentation, 1);
94 variableParser.parse();
97 insertString = variableParser.getResultText();
98 document.replace(selectionOffset, textSelection.getLength(), insertString);
101 Variable[] variables = variableParser.getVariables();
103 if (variables.length > 0) {
105 ITextViewer viewer = (ITextViewer) editor.getAdapter(ITextOperationTarget.class);
106 LinkedModeModel model=
new LinkedModeModel();
109 int exitPosition = selectionOffset + insertString.length();
111 for (
int i = 0; i < variables.length; i++) {
113 switch (variables[i].getVariableType()) {
116 exitPosition = selectionOffset + variables[i].getOffset();
121 LinkedPositionGroup group =
new LinkedPositionGroup();
123 group.addPosition(
new LinkedPosition(document, selectionOffset + variables[i].getOffset(), variables[i].getLength()));
124 model.addGroup(group);
133 editor.selectAndReveal(exitPosition, 0);
137 model.forceInstall();
139 LinkedModeUI ui =
new LinkedModeUI(model, viewer);
140 ui.setExitPosition(viewer, exitPosition, 0, Integer.MAX_VALUE);
147 }
catch (BadLocationException e) {
148 IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
149 MessageDialog.openInformation(window.getShell(),
"QueryGenerator", e.getMessage());
205 private ITextEditor getActiveEditor() {
207 IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
208 IWorkbenchPage page = window.getActivePage();
209 IEditorPart editorPart = page.getActiveEditor();
211 return (ITextEditor) editorPart.getAdapter(ITextEditor.class);
215 private String indent(String text,
int spaceCount,
int skipLines) {
217 String lineSeparator = System.getProperty(
"line.separator");
219 StringBuilder stringBuilder =
new StringBuilder();
220 Scanner scanner =
new Scanner(text);
222 for (
int lineNo = 1; scanner.hasNextLine(); lineNo++) {
225 stringBuilder.append(lineSeparator);
227 if (lineNo > skipLines)
228 for (
int i = 0; i < spaceCount; i++)
229 stringBuilder.append(
" ");
231 stringBuilder.append(scanner.nextLine());
237 return stringBuilder.toString();