package com.github.fabrizioiannetti.largefileeditor; import org.eclipse.ui.IWorkbenchPart; import com.github.fabeclipse.textedgrep.IGrepTarget; import com.github.fabrizioiannetti.largefileeditor.FileTextModel.LineOffsets; public class LargeFileGrepTarget implements IGrepTarget { final private LargeFileEditor editor; final private FileTextModel model; private int grepLine; private int grepLineCount; public LargeFileGrepTarget(LargeFileEditor editor) { this.editor = editor; model = editor.getViewer().getModel(); } @Override public void start() { grepLine = 0; grepLineCount = model.getLineCount(); } @Override public void stop() { } @Override public boolean hasNextLine() { return grepLine < grepLineCount; } @Override public String nextLine() { String line = null; if (grepLine < grepLineCount) { line = model.getLine(grepLine); grepLine++; } return line; } @Override public void select(int start, int length) { editor.select(start, length); } @Override public int getLineOffset(int line) { final LineOffsets offsets = new LineOffsets(); editor.getViewer().getModel().getOffsetsForLine(line, offsets); return (int) offsets.start; } @Override public boolean isSame(IWorkbenchPart part) { return part != null && part.equals(editor); } @Override public String getTitle() { return editor.getTitle(); } @Override public long getLength() { return editor.getViewer().getModel().getLength(); } @Override public String getTextBetweenLines(int origStartLine, int origEndLine, int startDelta, int endDelta) { String text = model.getTextBetweenLines(origStartLine, origEndLine, startDelta, endDelta); return text; } }