diff --git a/java.j2seplatform/src/org/netbeans/modules/java/j2seplatform/resources/layer.xml b/java.j2seplatform/src/org/netbeans/modules/java/j2seplatform/resources/layer.xml --- a/java.j2seplatform/src/org/netbeans/modules/java/j2seplatform/resources/layer.xml +++ b/java.j2seplatform/src/org/netbeans/modules/java/j2seplatform/resources/layer.xml @@ -43,7 +43,7 @@ Version 2 license, then the option applies only if the new code is made subject to such option by the copyright holder. --> - + @@ -72,54 +72,113 @@ - - - + + + + + + + + + + + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - + + + @@ -130,7 +189,7 @@ - + @@ -159,7 +218,7 @@ - + diff --git a/java.j2seplatform/src/org/netbeans/modules/java/jarloader/Bundle.properties b/java.j2seplatform/src/org/netbeans/modules/java/jarloader/Bundle.properties --- a/java.j2seplatform/src/org/netbeans/modules/java/jarloader/Bundle.properties +++ b/java.j2seplatform/src/org/netbeans/modules/java/jarloader/Bundle.properties @@ -42,3 +42,8 @@ LBL_loaderName=JAR Files JarResolver=Java Archive File +JarLoader=JAR File Loader + +LBL_ZipLoaderName=ZIP Files +ZIPResolver=ZIP File +ZIPLoader=ZIP File Loader \ No newline at end of file diff --git a/java.j2seplatform/src/org/netbeans/modules/java/jarloader/JarDataLoader.java b/java.j2seplatform/src/org/netbeans/modules/java/jarloader/JarDataLoader.java --- a/java.j2seplatform/src/org/netbeans/modules/java/jarloader/JarDataLoader.java +++ b/java.j2seplatform/src/org/netbeans/modules/java/jarloader/JarDataLoader.java @@ -44,26 +44,19 @@ package org.netbeans.modules.java.jarloader; import java.io.IOException; -import org.openide.actions.CopyAction; -import org.openide.actions.CutAction; -import org.openide.actions.DeleteAction; -import org.openide.actions.FileSystemAction; -import org.openide.actions.PasteAction; -import org.openide.actions.PropertiesAction; -import org.openide.actions.RenameAction; -import org.openide.actions.ToolsAction; import org.openide.filesystems.FileObject; +import org.openide.loaders.DataObject; import org.openide.loaders.DataObjectExistsException; import org.openide.loaders.ExtensionList; import org.openide.loaders.MultiDataObject; import org.openide.loaders.UniFileLoader; import org.openide.util.NbBundle; -import org.openide.util.actions.SystemAction; /** * Recognizes JAR files and shows their contents. * @author Jesse Glick */ +@DataObject.Registration(displayName = "org.netbeans.modules.java.jarloader.Bundle#JarLoader", mimeType = "application/x-java-archive") public final class JarDataLoader extends UniFileLoader { static final String JAR_MIME_TYPE = "application/x-java-archive"; //NOI18N @@ -74,10 +67,12 @@ super("org.netbeans.modules.java.jarloader.JarDataObject"); // NOI18N } + @Override protected String defaultDisplayName() { return NbBundle.getMessage(JarDataLoader.class, "LBL_loaderName"); } + @Override protected void initialize() { super.initialize(); ExtensionList extensions = new ExtensionList(); diff --git a/java.j2seplatform/src/org/netbeans/modules/java/jarloader/JarDataLoaderBeanInfo.java b/java.j2seplatform/src/org/netbeans/modules/java/jarloader/JarDataLoaderBeanInfo.java --- a/java.j2seplatform/src/org/netbeans/modules/java/jarloader/JarDataLoaderBeanInfo.java +++ b/java.j2seplatform/src/org/netbeans/modules/java/jarloader/JarDataLoaderBeanInfo.java @@ -49,10 +49,8 @@ import java.beans.IntrospectionException; import java.beans.Introspector; import java.beans.SimpleBeanInfo; -import org.openide.ErrorManager; import org.openide.loaders.UniFileLoader; import org.openide.util.ImageUtilities; -import org.openide.util.Utilities; /** * Description of {@link JarDataLoader}. @@ -60,6 +58,7 @@ */ public final class JarDataLoaderBeanInfo extends SimpleBeanInfo { + @Override public BeanInfo[] getAdditionalBeanInfo() { try { return new BeanInfo[] {Introspector.getBeanInfo(UniFileLoader.class)}; @@ -68,6 +67,7 @@ } } + @Override public Image getIcon(int type) { return ImageUtilities.loadImage("org/netbeans/modules/java/jarloader/jar.gif", true); } diff --git a/java.j2seplatform/src/org/netbeans/modules/java/jarloader/JarDataNode.java b/java.j2seplatform/src/org/netbeans/modules/java/jarloader/JarDataNode.java --- a/java.j2seplatform/src/org/netbeans/modules/java/jarloader/JarDataNode.java +++ b/java.j2seplatform/src/org/netbeans/modules/java/jarloader/JarDataNode.java @@ -78,7 +78,7 @@ public Action getPreferredAction() { return null; } - + private static Children childrenFor(FileObject jar) { if (!FileUtil.isArchiveFile(jar)) { // Maybe corrupt, etc. diff --git a/java.j2seplatform/src/org/netbeans/modules/java/jarloader/JarDataObject.java b/java.j2seplatform/src/org/netbeans/modules/java/jarloader/JarDataObject.java --- a/java.j2seplatform/src/org/netbeans/modules/java/jarloader/JarDataObject.java +++ b/java.j2seplatform/src/org/netbeans/modules/java/jarloader/JarDataObject.java @@ -56,17 +56,19 @@ * Represents a JAR file. * @author Jesse Glick */ -@MIMEResolver.Registration(resource="../j2seplatform/resources/platforms-mime-resolver.xml", displayName="#JarResolver", position=480) +@MIMEResolver.Registration(resource="mime-resolver-jar.xml", displayName="#JarResolver", position=480) public final class JarDataObject extends MultiDataObject { public JarDataObject(FileObject pf, JarDataLoader loader) throws DataObjectExistsException { super(pf, loader); } + @Override public HelpCtx getHelpCtx() { return HelpCtx.DEFAULT_HELP; } + @Override protected Node createNodeDelegate() { return new JarDataNode(this); } diff --git a/java.j2seplatform/src/org/netbeans/modules/java/jarloader/JarDataLoader.java b/java.j2seplatform/src/org/netbeans/modules/java/jarloader/ZipDataLoader.java copy from java.j2seplatform/src/org/netbeans/modules/java/jarloader/JarDataLoader.java copy to java.j2seplatform/src/org/netbeans/modules/java/jarloader/ZipDataLoader.java --- a/java.j2seplatform/src/org/netbeans/modules/java/jarloader/JarDataLoader.java +++ b/java.j2seplatform/src/org/netbeans/modules/java/jarloader/ZipDataLoader.java @@ -44,54 +44,49 @@ package org.netbeans.modules.java.jarloader; import java.io.IOException; -import org.openide.actions.CopyAction; -import org.openide.actions.CutAction; -import org.openide.actions.DeleteAction; -import org.openide.actions.FileSystemAction; -import org.openide.actions.PasteAction; -import org.openide.actions.PropertiesAction; -import org.openide.actions.RenameAction; -import org.openide.actions.ToolsAction; import org.openide.filesystems.FileObject; +import org.openide.loaders.DataObject; import org.openide.loaders.DataObjectExistsException; import org.openide.loaders.ExtensionList; import org.openide.loaders.MultiDataObject; import org.openide.loaders.UniFileLoader; import org.openide.util.NbBundle; -import org.openide.util.actions.SystemAction; /** - * Recognizes JAR files and shows their contents. - * @author Jesse Glick + * Recognizes ZIP files and shows their contents. */ -public final class JarDataLoader extends UniFileLoader { +@DataObject.Registration(displayName = "org.netbeans.modules.java.jarloader.Bundle#ZIPLoader", mimeType = "application/zip") +public final class ZipDataLoader extends UniFileLoader { - static final String JAR_MIME_TYPE = "application/x-java-archive"; //NOI18N + static final String ZIP_MIME_TYPE = "application/zip"; //NOI18N private static final long serialVersionUID = 1L; - public JarDataLoader() { - super("org.netbeans.modules.java.jarloader.JarDataObject"); // NOI18N + public ZipDataLoader() { + super("org.netbeans.modules.java.jarloader.ZipDataObject"); // NOI18N } + @Override protected String defaultDisplayName() { - return NbBundle.getMessage(JarDataLoader.class, "LBL_loaderName"); + return NbBundle.getMessage(ZipDataLoader.class, "LBL_ZipLoaderName"); } + @Override protected void initialize() { super.initialize(); ExtensionList extensions = new ExtensionList(); - extensions.addMimeType(JAR_MIME_TYPE); + extensions.addMimeType(ZIP_MIME_TYPE); setExtensions(extensions); } @Override protected String actionsContext() { - return "Loaders/application/x-java-archive/Actions/"; // NOI18N + return "Loaders/application/zip/Actions/"; // NOI18N } + @Override protected MultiDataObject createMultiObject(FileObject primaryFile) throws DataObjectExistsException, IOException { - return new JarDataObject(primaryFile, this); + return new ZipDataObject(primaryFile, this); } } diff --git a/java.j2seplatform/src/org/netbeans/modules/java/jarloader/JarDataNode.java b/java.j2seplatform/src/org/netbeans/modules/java/jarloader/ZipDataNode.java copy from java.j2seplatform/src/org/netbeans/modules/java/jarloader/JarDataNode.java copy to java.j2seplatform/src/org/netbeans/modules/java/jarloader/ZipDataNode.java --- a/java.j2seplatform/src/org/netbeans/modules/java/jarloader/JarDataNode.java +++ b/java.j2seplatform/src/org/netbeans/modules/java/jarloader/ZipDataNode.java @@ -41,98 +41,52 @@ * Version 2 license, then the option applies only if the new code is * made subject to such option by the copyright holder. */ - package org.netbeans.modules.java.jarloader; -import java.beans.PropertyChangeListener; -import javax.swing.Action; -import javax.swing.Icon; -import org.netbeans.api.project.SourceGroup; -import org.netbeans.spi.java.project.support.ui.PackageView; +import java.awt.Image; +import java.awt.datatransfer.Transferable; import org.openide.filesystems.FileObject; -import org.openide.filesystems.FileUtil; -import org.openide.loaders.DataNode; -import org.openide.nodes.Children; import org.openide.nodes.FilterNode; import org.openide.nodes.Node; -import org.openide.util.RequestProcessor; - +import org.openide.util.ImageUtilities; +import org.openide.util.datatransfer.PasteType; /** * A node to represent a JAR file. - * @author Jesse Glick */ -final class JarDataNode extends DataNode { - private static final RequestProcessor RP = new RequestProcessor(JarDataNode.class.getName(), 1, false, false); +final class ZipDataNode extends FilterNode { + private final Image icon = ImageUtilities.loadImage("org/netbeans/modules/java/jarloader/jar.gif", true); + + private final FileObject realFile; + private final Node folderNode; + + public ZipDataNode(FileObject realFile, Node original, Node folderNode) { + super(original); + this.realFile = realFile; + this.folderNode = folderNode; + } - public JarDataNode(JarDataObject obj) { - this(obj, new DummyChildren()); + @Override + public String getDisplayName() { + return realFile.getNameExt(); } - - private JarDataNode(JarDataObject obj, DummyChildren c) { - super(obj, c); - c.attachJarNode(this); - setIconBaseWithExtension("org/netbeans/modules/java/jarloader/jar.gif"); // NOI18N + + @Override + public Image getIcon(int type) { + return icon; } - - public Action getPreferredAction() { - return null; + + @Override + public Image getOpenedIcon(int type) { + return icon; } - - private static Children childrenFor(FileObject jar) { - if (!FileUtil.isArchiveFile(jar)) { - // Maybe corrupt, etc. - return Children.LEAF; - } - final FileObject root = FileUtil.getArchiveRoot(jar); - if (root != null) { - return new FilterNode.Children(PackageView.createPackageView(new SourceGroup() { - @Override public FileObject getRootFolder() {return root;} - @Override public String getName() {return null;} - @Override public String getDisplayName() {return null;} - @Override public Icon getIcon(boolean opened) {return null;} - @Override public boolean contains(FileObject file) {return true;} - @Override public void addPropertyChangeListener(PropertyChangeListener listener) {} - @Override public void removePropertyChangeListener(PropertyChangeListener listener) {} - })); + + @Override + public PasteType[] getPasteTypes(Transferable t) { + if(folderNode != null) { + return folderNode.getPasteTypes(t); } else { - return Children.LEAF; + return null; } } - - /** - * There is no nice way to lazy create delegating node's children. - * So, in order to fix #83595, here is a little hack that schedules - * replacement of this dummy children on addNotify call. - */ - final static class DummyChildren extends Children implements Runnable { - - private JarDataNode node; - - protected void addNotify() { - super.addNotify(); - assert node != null; - RP.post(this); - } - - private void attachJarNode(JarDataNode jarDataNode) { - this.node = jarDataNode; - } - - public void run() { - node.setChildren(childrenFor(node.getDataObject().getPrimaryFile())); - } - - public boolean add(final Node[] nodes) { - // no-op - return false; - } - - public boolean remove(final Node[] nodes) { - // no-op - return false; - } - - } - -} +} \ No newline at end of file diff --git a/java.j2seplatform/src/org/netbeans/modules/java/jarloader/JarDataObject.java b/java.j2seplatform/src/org/netbeans/modules/java/jarloader/ZipDataObject.java copy from java.j2seplatform/src/org/netbeans/modules/java/jarloader/JarDataObject.java copy to java.j2seplatform/src/org/netbeans/modules/java/jarloader/ZipDataObject.java --- a/java.j2seplatform/src/org/netbeans/modules/java/jarloader/JarDataObject.java +++ b/java.j2seplatform/src/org/netbeans/modules/java/jarloader/ZipDataObject.java @@ -41,34 +41,53 @@ * Version 2 license, then the option applies only if the new code is * made subject to such option by the copyright holder. */ - package org.netbeans.modules.java.jarloader; import org.openide.filesystems.FileObject; +import org.openide.filesystems.FileUtil; import org.openide.filesystems.MIMEResolver; +import org.openide.loaders.DataFilter; +import org.openide.loaders.DataFolder; +import org.openide.loaders.DataNode; import org.openide.loaders.DataObjectExistsException; import org.openide.loaders.MultiDataObject; +import org.openide.nodes.Children; import org.openide.nodes.Node; import org.openide.util.HelpCtx; import org.openide.util.Lookup; /** - * Represents a JAR file. - * @author Jesse Glick + * Recognizes ZIP files and shows their contents. */ -@MIMEResolver.Registration(resource="../j2seplatform/resources/platforms-mime-resolver.xml", displayName="#JarResolver", position=480) -public final class JarDataObject extends MultiDataObject { +@MIMEResolver.Registration(resource="mime-resolver-zip.xml", displayName="#ZIPResolver", position=481) +public final class ZipDataObject extends MultiDataObject { - public JarDataObject(FileObject pf, JarDataLoader loader) throws DataObjectExistsException { + public ZipDataObject(FileObject pf, ZipDataLoader loader) throws DataObjectExistsException { super(pf, loader); } + @Override public HelpCtx getHelpCtx() { return HelpCtx.DEFAULT_HELP; } + @Override protected Node createNodeDelegate() { - return new JarDataNode(this); + Node fileNode = null; + Node folderNode = null; + + final FileObject folderObject = FileUtil.getArchiveRoot(getPrimaryFile()); + if (folderObject != null) { + DataFolder dataFolder = DataFolder.findFolder(folderObject); + fileNode = new DataNode(this, dataFolder.createNodeChildren(DataFilter.ALL)); + folderNode = dataFolder.getNodeDelegate(); + } + + if (fileNode == null) { + fileNode = new DataNode(this, Children.LEAF); + } + + return new ZipDataNode(getPrimaryFile(), fileNode, folderNode); } @Override @@ -76,4 +95,4 @@ return getCookieSet().getLookup(); } -} +} \ No newline at end of file diff --git a/java.j2seplatform/src/org/netbeans/modules/java/j2seplatform/resources/platforms-mime-resolver.xml b/java.j2seplatform/src/org/netbeans/modules/java/jarloader/mime-resolver-jar.xml rename from java.j2seplatform/src/org/netbeans/modules/java/j2seplatform/resources/platforms-mime-resolver.xml rename to java.j2seplatform/src/org/netbeans/modules/java/jarloader/mime-resolver-jar.xml --- a/java.j2seplatform/src/org/netbeans/modules/java/j2seplatform/resources/platforms-mime-resolver.xml +++ b/java.j2seplatform/src/org/netbeans/modules/java/jarloader/mime-resolver-jar.xml @@ -45,28 +45,21 @@ --> - - - - - + + + + + + + + + + - - - - - - - - - - diff --git a/java.j2seplatform/src/org/netbeans/modules/java/j2seplatform/resources/platforms-mime-resolver.xml b/java.j2seplatform/src/org/netbeans/modules/java/jarloader/mime-resolver-zip.xml copy from java.j2seplatform/src/org/netbeans/modules/java/j2seplatform/resources/platforms-mime-resolver.xml copy to java.j2seplatform/src/org/netbeans/modules/java/jarloader/mime-resolver-zip.xml --- a/java.j2seplatform/src/org/netbeans/modules/java/j2seplatform/resources/platforms-mime-resolver.xml +++ b/java.j2seplatform/src/org/netbeans/modules/java/jarloader/mime-resolver-zip.xml @@ -45,28 +45,19 @@ --> - - - - - - - - + - - + + - - + +