Package org.erlide.ui.actions

Source Code of org.erlide.ui.actions.ToggleCommentHandler

package org.erlide.ui.actions;

import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.jface.dialogs.ErrorDialog;
import org.eclipse.jface.text.BadLocationException;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.ITextOperationTarget;
import org.eclipse.jface.text.ITextSelection;
import org.eclipse.jface.text.ITextViewer;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.texteditor.ITextEditor;
import org.erlide.core.ErlangCore;
import org.erlide.core.ErlangStatus;
import org.erlide.engine.ErlangEngine;
import org.erlide.ui.handlers.ErlangAbstractHandler;
import org.erlide.util.ErlLogger;
import org.erlide.util.Util;

import com.ericsson.otp.erlang.OtpErlangObject;

public class ToggleCommentHandler extends ErlangAbstractHandler {

    @Override
    protected void doAction(final ISelection sel, final ITextEditor textEditor) {
        final IDocument document = textEditor.getDocumentProvider().getDocument(
                textEditor.getEditorInput());
        final ITextSelection selection = extendSelectionToWholeLines(document,
                (ITextSelection) sel);
        final ITextSelection getSelection = getTextSelection(document, selection,
                textEditor);
        String text;
        OtpErlangObject r1 = null;
        try {
            text = document.get(getSelection.getOffset(), getSelection.getLength());
            // call erlang, with selection within text
            r1 = callErlang(selection.getOffset() - getSelection.getOffset(),
                    selection.getLength(), text);
        } catch (final Exception e) {
            ErlLogger.error(e);
        }
        final String newText = Util.stringValue(r1);
        if (newText == null) {
            final String msg = "call to " + getClass().getSimpleName()
                    + " timed out; try a smaller selection.";
            final Status status = new Status(IStatus.ERROR, ErlangCore.PLUGIN_ID,
                    ErlangStatus.INTERNAL_ERROR.getValue(), msg, null);
            ErlLogger.error("INTERNAL ERROR: " + msg);

            ErrorDialog.openError(textEditor.getSite().getShell(),
                    ActionMessages.IndentAction_error_message, "Internal error", status);
            return;
        }
        final Display display = textEditor.getEditorSite().getShell().getDisplay();
        display.syncExec(new Runnable() {
            @Override
            public void run() {
                final ITextOperationTarget target1 = (ITextOperationTarget) textEditor
                        .getAdapter(ITextOperationTarget.class);
                if (target1 instanceof ITextViewer) {
                    final ITextViewer textViewer = (ITextViewer) target1;
                    try {
                        if (!document.get(selection.getOffset(), selection.getLength())
                                .equals(newText)) {
                            document.replace(selection.getOffset(),
                                    selection.getLength(), newText);
                            textViewer.setSelectedRange(selection.getOffset(),
                                    newText.length());
                        }
                    } catch (final BadLocationException e) {
                        ErlLogger.warn(e);
                    }
                }
            }
        });
    }

    private OtpErlangObject callErlang(final int offset, final int length,
            final String aText) {
        final String fErlModule = "erlide_comment";
        final String fErlFunction = "toggle_comment";
        final OtpErlangObject r1 = ErlangEngine.getInstance().getGenericService()
                .call(fErlModule, fErlFunction, offset, length, aText);
        return r1;
    }
}
TOP

Related Classes of org.erlide.ui.actions.ToggleCommentHandler

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.