Package org.netbeans.gradle.project.output

Source Code of org.netbeans.gradle.project.output.OpenEditorOutputListener

package org.netbeans.gradle.project.output;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.jtrim.utils.ExceptionHelper;
import org.openide.cookies.EditorCookie;
import org.openide.filesystems.FileObject;
import org.openide.filesystems.FileUtil;
import org.openide.loaders.DataObject;
import org.openide.loaders.DataObjectNotFoundException;
import org.openide.text.Line;
import org.openide.windows.OutputEvent;
import org.openide.windows.OutputListener;

public final class OpenEditorOutputListener implements OutputListener, ActionListener {
    private static final Logger LOGGER = Logger.getLogger(OpenEditorOutputListener.class.getName());

    private final EditorCookie editor;
    private final int lineNumber;

    public OpenEditorOutputListener(EditorCookie editor, int lineNumber) {
        ExceptionHelper.checkNotNullArgument(editor, "editor");
        this.editor = editor;
        this.lineNumber = lineNumber;
    }

    public static OpenEditorOutputListener tryCreateListener(File file, int lineNumber) {
        ExceptionHelper.checkNotNullArgument(file, "file");

        File normFile = FileUtil.normalizeFile(file);
        if (normFile == null) {
            return null;
        }

        FileObject fileObj = FileUtil.toFileObject(normFile);
        return fileObj != null ? tryCreateListener(fileObj, lineNumber) : null;
    }

    public static OpenEditorOutputListener tryCreateListener(FileObject fileObj, int lineNumber) {
        ExceptionHelper.checkNotNullArgument(fileObj, "fileObj");

        try {
            DataObject dataObj = DataObject.find(fileObj);
            if (dataObj == null) {
                return null;
            }

            EditorCookie editor = dataObj.getLookup().lookup(EditorCookie.class);
            if (editor == null) {
                LOGGER.log(Level.WARNING, "EditorCookie cannot be found for file: {0}", fileObj);
                return null;
            }

            return new OpenEditorOutputListener(editor, lineNumber);
        } catch (DataObjectNotFoundException ex) {
            LOGGER.log(Level.INFO, "Failed to find DataObject for file.", ex);
        }

        return null;
    }

    @Override
    public void outputLineSelected(OutputEvent ev) {
    }

    @Override
    public void outputLineAction(OutputEvent ev) {
        openInEditor();
    }

    private void openInEditor() {
        if (lineNumber < 0) {
            editor.open();
        }
        else {
            try {
                editor.getLineSet().getCurrent(lineNumber).show(Line.ShowOpenType.OPEN, Line.ShowVisibilityType.FOCUS);
            } catch (IndexOutOfBoundsException ex) {
                // In case the lineNumber is invalid
                LOGGER.warning("Invalid line number in the document to be opened.");
                editor.open();
            }
        }
    }

    @Override
    public void outputLineCleared(OutputEvent ev) {
    }

    public static boolean tryOpenFile(FileObject file, int lineNumber) {
        OpenEditorOutputListener listener = tryCreateListener(file, lineNumber);
        if (listener == null) {
            return false;
        }

        listener.openInEditor();
        return true;
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        openInEditor();
    }
}
TOP

Related Classes of org.netbeans.gradle.project.output.OpenEditorOutputListener

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.