Skip to content

Commit

Permalink
The containing folder is displayed in the caption of the tab of an op…
Browse files Browse the repository at this point in the history
…ened "build.gradle".
  • Loading branch information
kelemen committed Aug 24, 2012
1 parent 410c60d commit 9567086
Show file tree
Hide file tree
Showing 3 changed files with 149 additions and 6 deletions.
4 changes: 2 additions & 2 deletions nbproject/genfiles.properties
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
build.xml.data.CRC32=474432ea
build.xml.data.CRC32=97924811
build.xml.script.CRC32=0117b527
build.xml.stylesheet.CRC32=a56c6a5b@2.50.1
# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml.
# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you.
nbproject/build-impl.xml.data.CRC32=474432ea
nbproject/build-impl.xml.data.CRC32=97924811
nbproject/build-impl.xml.script.CRC32=5e3e9e94
nbproject/build-impl.xml.stylesheet.CRC32=238281d1@2.50.1
9 changes: 9 additions & 0 deletions nbproject/project.xml
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,15 @@
<specification-version>1.28.1</specification-version>
</run-dependency>
</dependency>
<dependency>
<code-name-base>org.netbeans.core.multiview</code-name-base>
<build-prerequisite/>
<compile-dependency/>
<run-dependency>
<release-version>1</release-version>
<specification-version>1.29.1</specification-version>
</run-dependency>
</dependency>
<dependency>
<code-name-base>org.netbeans.modules.java.platform</code-name-base>
<build-prerequisite/>
Expand Down
142 changes: 138 additions & 4 deletions src/org/netbeans/gradle/project/filesupport/GradleDataObject.java
Original file line number Diff line number Diff line change
@@ -1,10 +1,23 @@
package org.netbeans.gradle.project.filesupport;

import java.io.IOException;
import org.netbeans.core.api.multiview.MultiViews;
import org.netbeans.gradle.project.GradleProjectConstants;
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;
Expand All @@ -13,11 +26,13 @@
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.windows.CloneableOpenSupport;

@MIMEResolver.ExtensionRegistration(
displayName = "#LBL_GradleFile",
mimeType = "text/x-gradle",
mimeType = GradleDataObject.GRADLE_MIME_TYPE,
extension = {"gradle", "Gradle", "GRADLE"})
@DataObject.Registration(
mimeType = "text/x-gradle",
Expand Down Expand Up @@ -69,10 +84,13 @@
})
@SuppressWarnings("serial")
public final class GradleDataObject extends MultiDataObject {
public GradleDataObject(FileObject pf, MultiFileLoader loader) throws DataObjectExistsException, IOException {
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);
registerEditor("text/x-gradle", false);
getLookup().lookup(DataEditorSupport.class).setMIMEType("text/x-groovy");

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

@Override
Expand All @@ -84,4 +102,120 @@ protected int associateLookup() {
protected Node createNodeDelegate() {
return new DataNode(this, Children.LEAF, getLookup());
}

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);
}
}
}

0 comments on commit 9567086

Please sign in to comment.