1
/*******************************************************************************
2
* Copyright (c) 2007, 2010 Red Hat, Inc.
3
* All rights reserved. This program and the accompanying materials
4
* are made available under the terms of the Eclipse Public License v1.0
5
* which accompanies this distribution, and is available at
6
* http://www.eclipse.org/legal/epl-v10.html
9
* Red Hat - initial API and implementation
10
*******************************************************************************/
11
package org.eclipse.linuxtools.internal.rpm.ui.editor.hyperlink;
13
import org.eclipse.core.resources.IFile;
14
import org.eclipse.jface.text.BadLocationException;
15
import org.eclipse.jface.text.IDocument;
16
import org.eclipse.jface.text.IRegion;
17
import org.eclipse.jface.text.ITextViewer;
18
import org.eclipse.jface.text.Region;
19
import org.eclipse.jface.text.hyperlink.AbstractHyperlinkDetector;
20
import org.eclipse.jface.text.hyperlink.IHyperlink;
21
import org.eclipse.linuxtools.internal.rpm.ui.editor.UiUtils;
22
import org.eclipse.linuxtools.rpm.ui.editor.SpecfileEditor;
23
import org.eclipse.ui.part.FileEditorInput;
26
* Detects values for Patch and Source definitions.
29
public class SourcesFileHyperlinkDetector extends AbstractHyperlinkDetector {
31
SpecfileEditor editor;
32
private static final String PATCH_IDENTIFIER = "Patch"; //$NON-NLS-1$
33
private static final String SOURCE_IDENTIFIER = "Source"; //$NON-NLS-1$
36
* @see org.eclipse.jface.text.hyperlink.IHyperlinkDetector#detectHyperlinks(org.eclipse.jface.text.ITextViewer,
37
* org.eclipse.jface.text.IRegion, boolean)
39
public IHyperlink[] detectHyperlinks(ITextViewer textViewer,
40
IRegion region, boolean canShowMultipleHyperlinks) {
41
if (region == null || textViewer == null) {
46
editor = ((SpecfileEditor) this.getAdapter(SpecfileEditor.class));
52
IDocument document = textViewer.getDocument();
54
int offset = region.getOffset();
56
if (document == null) {
62
lineInfo = document.getLineInformationOfOffset(offset);
63
line = document.get(lineInfo.getOffset(), lineInfo.getLength());
64
} catch (BadLocationException ex) {
67
if (editor.getEditorInput() instanceof FileEditorInput) {
68
IFile original = ((FileEditorInput) editor.getEditorInput())
70
if (line.startsWith(SOURCE_IDENTIFIER)
71
|| line.startsWith(PATCH_IDENTIFIER)) {
72
int delimiterIndex = line.indexOf(':') + 1;
73
String fileName = line.substring(delimiterIndex).trim();
74
if (region.getOffset() > lineInfo.getOffset()
75
+ line.indexOf(fileName)) {
76
IRegion fileNameRegion = new Region(lineInfo.getOffset()
77
+ line.indexOf(fileName), fileName.length());
78
return new IHyperlink[] {
79
new SourcesFileHyperlink(original, UiUtils
80
.resolveDefines(editor.getSpecfile(),
81
fileName), fileNameRegion),
82
new SourcesFileDownloadHyperlink(original, UiUtils
83
.resolveDefines(editor.getSpecfile(),
84
fileName), fileNameRegion) };
92
public void setEditor(SpecfileEditor editor) {