package sk.stuba.fiit.perconik.activity.listeners.ui.text; import org.eclipse.jface.text.IDocument; import org.eclipse.jface.text.ITextViewer; import org.eclipse.swt.graphics.Point; import org.eclipse.ui.IWorkbenchPart; import sk.stuba.fiit.perconik.eclipse.jface.text.Documents; import sk.stuba.fiit.perconik.eclipse.jface.text.LineRegion; /** * TODO * * @author Pavol Zbell * @since 1.0 */ abstract class AbstractTextClipboardListener extends AbstractTextListener { AbstractTextClipboardListener() {} final void process(final long time, final Action action) { String text = this.execute(ClipboardReader.instance); TextSelectionCapture capture = this.execute(TextSelectionReader.instance); if (capture == null) { if (this.log.isEnabled()) { this.log.print("%s: unable to capture content", "clipboard"); } return; } IWorkbenchPart part = capture.part; ITextViewer viewer = capture.viewer; IDocument document = viewer.getDocument(); Point range = capture.range; int offset = range.x; int length = range.y; LineRegion region = LineRegion.compute(document, offset, length, text).normalize(); String selection = Documents.get(document, offset, length); this.process(time, action, part, document, region, selection); } final void process(final long time, final Action action, final IWorkbenchPart part, final IDocument document, final LineRegion region, final String selection) { if (!this.validate(part, document, region, selection)) { return; } this.process(time, action, part, region); } abstract boolean validate(final IWorkbenchPart part, final IDocument document, final LineRegion region, final String selection); }