Package org.netbeans.gradle.project.filesupport

Source Code of org.netbeans.gradle.project.filesupport.GradleDataObject$GradleDataEditor

package org.netbeans.gradle.project.filesupport;

import java.io.IOException;
import org.netbeans.core.api.multiview.MultiViews;
import org.netbeans.core.spi.multiview.MultiViewElement;
import org.netbeans.core.spi.multiview.text.MultiViewEditorElement;
import org.netbeans.gradle.project.GradleProjectConstants;
import org.netbeans.gradle.project.NbIcons;
import org.openide.awt.ActionID;
import org.openide.awt.ActionReference;
import org.openide.awt.ActionReferences;
import org.openide.cookies.CloseCookie;
import org.openide.cookies.EditCookie;
import org.openide.cookies.EditorCookie;
import org.openide.cookies.OpenCookie;
import org.openide.cookies.PrintCookie;
import org.openide.cookies.SaveCookie;
import org.openide.filesystems.FileChangeAdapter;
import org.openide.filesystems.FileChangeListener;
import org.openide.filesystems.FileEvent;
import org.openide.filesystems.FileLock;
import org.openide.filesystems.FileObject;
import org.openide.filesystems.FileUtil;
import org.openide.filesystems.MIMEResolver;
import org.openide.loaders.DataNode;
import org.openide.loaders.DataObject;
import org.openide.loaders.DataObjectExistsException;
import org.openide.loaders.MultiDataObject;
import org.openide.loaders.MultiFileLoader;
import org.openide.nodes.Children;
import org.openide.nodes.Node;
import org.openide.text.CloneableEditorSupport;
import org.openide.text.DataEditorSupport;
import org.openide.util.Lookup;
import org.openide.windows.CloneableOpenSupport;
import org.openide.windows.TopComponent;

@MIMEResolver.ExtensionRegistration(
        displayName = "#LBL_GradleFile",
        mimeType = GradleDataObject.GRADLE_MIME_TYPE,
        extension = {"gradle", "Gradle", "GRADLE"})
@DataObject.Registration(
        mimeType = "text/x-gradle",
        iconBase = NbIcons.PROJECT_ICON_PATH,
        displayName = "#LBL_GradleFile",
        position = 300)
@ActionReferences({
    @ActionReference(
        path = "Loaders/text/x-gradle/Actions",
        id = @ActionID(category = "System", id = "org.openide.actions.OpenAction"),
        position = 100,
        separatorAfter = 200),
    @ActionReference(
        path = "Loaders/text/x-gradle/Actions",
        id =@ActionID(category = "Edit", id = "org.openide.actions.CutAction"),
        position = 300),
    @ActionReference(
        path = "Loaders/text/x-gradle/Actions",
        id = @ActionID(category = "Edit", id = "org.openide.actions.CopyAction"),
        position = 400,
        separatorAfter = 500),
    @ActionReference(
        path = "Loaders/text/x-gradle/Actions",
        id = @ActionID(category = "Edit", id = "org.openide.actions.DeleteAction"),
        position = 600),
    @ActionReference(
        path = "Loaders/text/x-gradle/Actions",
        id = @ActionID(category = "System", id = "org.openide.actions.RenameAction"),
        position = 700,
        separatorAfter = 800),
    @ActionReference(
        path = "Loaders/text/x-gradle/Actions",
        id = @ActionID(category = "System", id = "org.openide.actions.SaveAsTemplateAction"),
        position = 900,
        separatorAfter = 1000),
    @ActionReference(
        path = "Loaders/text/x-gradle/Actions",
        id = @ActionID(category = "System", id = "org.openide.actions.FileSystemAction"),
        position = 1100,
        separatorAfter = 1200),
    @ActionReference(
        path = "Loaders/text/x-gradle/Actions",
        id = @ActionID(category = "System", id = "org.openide.actions.ToolsAction"),
        position = 1300),
    @ActionReference(
        path = "Loaders/text/x-gradle/Actions",
        id = @ActionID(category = "System", id = "org.openide.actions.PropertiesAction"),
        position = 1400)
})
public final class GradleDataObject extends MultiDataObject {
    private static final long serialVersionUID = 814372868086075839L;

    public static final String GRADLE_MIME_TYPE = "text/x-gradle";
    private static final String GROOVY_MIME_TYPE = "text/x-groovy";

    public GradleDataObject(FileObject pf, MultiFileLoader loader) throws DataObjectExistsException {
        super(pf, loader);

        getCookieSet().add(new GradleDataEditor());
    }

    @Override
    protected int associateLookup() {
        return 1;
    }

    @Override
    protected Node createNodeDelegate() {
        return new DataNode(this, Children.LEAF, getLookup());
    }

    @MultiViewElement.Registration(
        mimeType = GROOVY_MIME_TYPE,
        displayName = "Source",
        iconBase = NbIcons.PROJECT_ICON_PATH,
        persistenceType = TopComponent.PERSISTENCE_ONLY_OPENED,
        preferredID = "gradle.sourceID",
        position = 1
    )
    public static MultiViewEditorElement createEditor(Lookup lkp) {
        return new MultiViewEditorElement(lkp);
    }

    private class GradleDataEditor
    extends
            DataEditorSupport
    implements
            EditorCookie.Observable,
            OpenCookie,
            EditCookie,
            PrintCookie,
            CloseCookie {

        private final SaveCookie save;
        private final FileChangeListener listener;

        public GradleDataEditor() {
            super(GradleDataObject.this, null, new GradleEnv(GradleDataObject.this));

            save = new SaveCookie() {
                @Override
                public void save() throws IOException {
                    saveDocument();
                }

                @Override
                public String toString() {
                    return getPrimaryFile().getNameExt();
                }
            };
            listener = new FileChangeAdapter() {
                @Override
                public void fileChanged(FileEvent fe) {
                    updateTitles();
                }
            };

            getPrimaryFile().addFileChangeListener(FileUtil.weakFileChangeListener(listener, getPrimaryFile()));
            setMIMEType(GROOVY_MIME_TYPE);
        }

        @Override
        protected Pane createPane() {
            return (CloneableEditorSupport.Pane)MultiViews.createCloneableMultiView(GROOVY_MIME_TYPE, getDataObject());
        }

        @Override
        protected boolean notifyModified() {
            if (!super.notifyModified()) {
                return false;
            }
            if (getLookup().lookup(SaveCookie.class) == null) {
                getCookieSet().add(save);
                setModified(true);
            }
            return true;
        }

        @Override
        protected void notifyUnmodified() {
            super.notifyUnmodified();
            if (getLookup().lookup(SaveCookie.class) == save) {
                getCookieSet().remove(save);
                setModified(false);
            }
        }

        @Override
        protected String messageName() {
            return annotateWithFolder(super.messageName());
        }

        @Override
        protected String messageHtmlName() {
            String name = super.messageHtmlName();
            return name != null ? annotateWithFolder(name) : null;
        }

        private String annotateWithFolder(String name) {
            if (GradleProjectConstants.BUILD_FILE_NAME.equals(getPrimaryFile().getNameExt())) {
                FileObject parent = getPrimaryFile().getParent();
                if (parent != null) {
                    String folderName = parent.getNameExt();
                    return name + " [" + folderName + "]";
                }
            }

            return name;
        }

        @Override
        protected boolean asynchronousOpen() {
            return true;
        }
    }

    private static class GradleEnv extends DataEditorSupport.Env {
        private static final long serialVersionUID = 136529845402150749L;

        public GradleEnv(MultiDataObject dataObject) {
            super(dataObject);
        }

        @Override
        protected FileObject getFile() {
            return getDataObject().getPrimaryFile();
        }

        @Override
        protected FileLock takeLock() throws IOException {
            return ((MultiDataObject)getDataObject()).getPrimaryEntry().takeLock();
        }

        @Override
        public CloneableOpenSupport findCloneableOpenSupport() {
            return getDataObject().getLookup().lookup(GradleDataEditor.class);
        }
    }
}
TOP

Related Classes of org.netbeans.gradle.project.filesupport.GradleDataObject$GradleDataEditor

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.