import javax.swing.JPanel; import javax.swing.JButton; import javax.swing.JTree; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.TreeSelectionModel; import javax.swing.tree.TreePath; import javax.swing.JScrollPane; import org.mozilla.pluglet.*; import org.mozilla.pluglet.mozilla.*; import java.awt.*; import java.awt.event.*; import java.awt.print.*; import java.io.*; import java.util.zip.*; import java.util.Enumeration; import java.util.Vector; public class ZipView implements PlugletFactory { public ZipView() { } public Pluglet createPluglet(String mimeType) { return new ZipDecoder(); } public void initialize(PlugletManager manager) { } public void shutdown() { } } class Node { public DefaultMutableTreeNode parent, name; public Node(DefaultMutableTreeNode parent, DefaultMutableTreeNode name) { this.parent = parent; this.name = name; } } class ZipDecoder implements Pluglet { Button extract; byte[] b; Frame frm; Panel panel; List contents; FileDialog fsd; boolean firstTime=true; JTree zipTree=null; Dimension defaultSize; String zname; public ZipDecoder() { } public void extractFileEntry(String name, String dir) { ZipInputStream zis = new ZipInputStream((InputStream)(new ByteArrayInputStream(b))); ZipEntry en; try { do { en = zis.getNextEntry(); } while (!en.toString().equals(name)); int size=(int)en.getSize(); byte[] buff = new byte[size]; String path=dir+name; int last = path.lastIndexOf('/'); File dd=null, ff=null; if(last!=-1) { path=path.substring(0, last); dd = new File(path); dd.mkdirs(); ff = new File(dir+name); } else { dd = new File(dir); dd.mkdirs(); ff = new File(dir+name); } FileOutputStream fos = new FileOutputStream(ff); int r = 0; int t = 0; do { r = zis.read(buff, 0, size); fos.write(buff, 0, r); t+=r; } while(t0) { name = path.substring(start, end); start = end+1; } else name = path.substring(start); for(int i=1;i<=depth;i++) { if(!el.hasMoreElements()) { addElement(name, v); break; } else { n = (Node)el.nextElement(); if(n.name.toString().equals(name)) { break; } else { replaceElement(name, v, depth); break; } } } depth++; } while (end!=-1 && start=streamInfo.getLength()) { input.close(); zip.processData(bb, fname); } } catch(Exception e) { System.out.println(e.toString()); } } public void onFileAvailable(PlugletStreamInfo streamInfo, String fileName) { } public void onStopBinding(PlugletStreamInfo streamInfo,int status) { } public int getStreamType() { return 1; } }