framebrowser.java
来自「很棒的web服务器源代码」· Java 代码 · 共 372 行
JAVA
372 行
// FrameBrowser.java// $Id: FrameBrowser.java,v 1.5 2000/08/16 21:37:27 ylafon Exp $// (c) COPYRIGHT MIT and INRIA, 1997.// Please first read the full copyright statement in file COPYRIGHT.htmlpackage org.w3c.jigadm.editors ;import java.awt.Component;import java.awt.Container;import java.awt.Cursor;import java.awt.Dimension;import java.awt.Frame;import java.awt.Image;import java.awt.Toolkit;import java.awt.Window;import java.io.PrintStream;import java.net.URL;import org.w3c.jigadm.PropertyManager;import org.w3c.jigadm.RemoteResourceWrapper;import org.w3c.jigadm.gui.ServerBrowser;import org.w3c.jigsaw.admin.RemoteAccessException;import org.w3c.jigsaw.admin.RemoteResource;import org.w3c.tools.widgets.MessagePopup;import org.w3c.tools.widgets.NodeHandler;import org.w3c.tools.widgets.TreeBrowser;import org.w3c.tools.widgets.TreeNode;public class FrameBrowser extends TreeBrowser implements NodeHandler { class Expander extends Thread { TreeBrowser browser; TreeNode nd; public void run() { if(getLock()) { notifyExpander(browser, nd); unlock(); } } Expander(TreeBrowser browser, TreeNode nd) { this.browser = browser; this.nd = nd; } } public static final boolean debug = false; Image frameopened = null; Image frameicon = null; ServerBrowser serverBrowser = null; FrameTreeListener tl = null; TreeNode lastn = null; RemoteResourceWrapper rootResource; boolean locked; protected void errorPopup(String name, Exception ex) { (new MessagePopup(name+" : "+ex.getMessage())).show(); } private Dimension preferredSize = null; public Dimension getPreferredSize() { if (preferredSize == null) { preferredSize = new Dimension(120,100); } return preferredSize; } private final Frame getFrame(Component c) { while(! (c instanceof Frame)) { c = c.getParent(); if (c == null) return null; } return (Frame)c; } public void setCursor(int cursor) { getFrame(serverBrowser).setCursor(new Cursor(cursor)); Toolkit.getDefaultToolkit().sync(); } /** * gets a lock to avoid adding node while removing other nodes * it sets also the Cursor to WAIT_CURSOR */ protected synchronized boolean getLock() { if(locked) return false; setCursor(Frame.WAIT_CURSOR); locked = true; return true; } /** * release the lock and sets the Cursor to the default */ protected synchronized void unlock() { locked = false; setCursor(Frame.DEFAULT_CURSOR); } /** * give the Root Resource of the browser */ public RemoteResourceWrapper getRootWrapper() { return rootResource; } public void renameNode(RemoteResourceWrapper rw, String label) { TreeNode tn = getNode(rw); // if it is a visible node, change the label and repaint if (tn != null) { try { if (rw != rootResource) label = getFrameName(rw.getResource(), label); } catch (RemoteAccessException ex) { //nothing } tn.setLabel(label); repaint(); } } public void removeNode(RemoteResourceWrapper rw) { if(getLock()) { if (getNode(rw) != null) { removeBranch(getNode(rw)); tl.nodeRemoved(rw); } unlock(); repaint(); } } public void insertNode(RemoteResourceWrapper father, RemoteResourceWrapper son) { RemoteResource newFrame = son.getResource(); String name = null; try { name = getFrameName(newFrame); } catch (RemoteAccessException ex) { // fancy thing errorPopup("RemoteAccessException",ex); } insertNode(father, son, name); } public void insertNode(RemoteResourceWrapper father, RemoteResourceWrapper son, String name) { TreeNode fatherNode; boolean ic = false; if(father == null) System.out.println("Error null father"); fatherNode = getNode(father); if(fatherNode.getChildren() == TreeNode.NOCHILD) return; if (fatherNode == null) return; // this should never happen, but... try { ic = son.getResource().isContainer(); } catch (RemoteAccessException ex) { // fancy thing errorPopup("RemoteAccessException",ex); } insert(fatherNode, son, this, name, frameicon); repaint(); } protected RemoteResourceWrapper getResources(RemoteResourceWrapper rw, String name) { RemoteResource resource = null; if(rw != null) { try { resource = rw.getResource().loadResource(name); } catch (RemoteAccessException ex) { errorPopup("RemoteAccessException", ex); ex.printStackTrace(); } } return new RemoteResourceWrapper(rw, resource, serverBrowser); } private final Image getImage(String name) { Image img; img = Toolkit.getDefaultToolkit().getImage(name); return img; } public FrameBrowser(FrameTreeListener tl, RemoteResourceWrapper rrw) { boolean authorized = false; RemoteResource rr = null; PropertyManager pm = PropertyManager.getPropertyManager(); serverBrowser = rrw.getBrowser(); this.tl = tl; locked = false; frameicon = getImage(pm.getIconLocation("frame")); frameopened = getImage(pm.getIconLocation("frameopened")); rootResource = rrw; String name = null; while (!authorized) { try { authorized = true; rr = rrw.getResource(); name = (String) rr.getValue("identifier"); } catch (RemoteAccessException ex) { if( ex.getMessage().equals("Unauthorized")) { authorized = false; } else { errorPopup("Can't read resource identifier",ex); } } finally { if(!authorized) { serverBrowser.popupDialog("admin"); } } } if (name != null) initialize(rootResource, name, this, frameicon); } public void notifySelect(TreeBrowser browser, TreeNode nd) { if(tl != null) { tl.editedChanged(this, (RemoteResourceWrapper)nd.getItem()); } browser.unselect(lastn); browser.select(nd); browser.repaint(); lastn = nd; } /** * Handles Select notifications. * * we simply select the node and redraw the browser. */ public void notifyExecute(TreeBrowser browser, TreeNode node) { if(tl != null) { tl.focusChanged((RemoteResourceWrapper)node.getItem()); } if(!node.equals(lastn)) { browser.unselect(lastn); lastn = null; } browser.repaint(); } public void notifyExpand(TreeBrowser browser, TreeNode nd) { (new Expander(browser, nd)).start(); } public boolean isDirectory(TreeBrowser browser, TreeNode nd) { //FIXME ?? return true; } /** * Get the pretty ResourceFrame name * @param frame The ResourceFrame * @param name The ResourceFrame name * @exception RemoteAccessException if a remote access error occurs. */ public String getFrameName(RemoteResource frame, String name) throws RemoteAccessException { String className = frame.getClassHierarchy()[0]; String shortName = className.substring(className.lastIndexOf('.') + 1); return shortName.concat(" (").concat(name).concat(")"); } /** * Get the pretty ResourceFrame name * @param frame The ResourceFrame * @exception RemoteAccessException if a remote access error occurs. */ public String getFrameName(RemoteResource frame) throws RemoteAccessException { String className = frame.getClassHierarchy()[0]; String shortName = className.substring(className.lastIndexOf('.') + 1); String frameName = (String) frame.getValue("identifier"); return shortName.concat(" (").concat(frameName).concat(")"); } /** * Handles Expand notifications * * if the node is a directory, we list its content and insert the * directories and files in the browser. */ public void notifyExpander(TreeBrowser browser, TreeNode nd) { boolean authorized = true; if(tl != null) { tl.focusChanged((RemoteResourceWrapper)nd.getItem()); } RemoteResourceWrapper rrw = null; RemoteResource rr = null; rrw = (RemoteResourceWrapper)nd.getItem(); if(rrw == null) return; rr = rrw.getResource(); setCursor(Frame.WAIT_CURSOR); try { RemoteResource frames[] = rr.getFrames(); if (frames != null) { if (debug) System.out.println("Found "+frames.length+" identifiers"); for(int i = 0; i <frames.length; i++) { RemoteResourceWrapper frw = new RemoteResourceWrapper(rrw, frames[i], serverBrowser); browser.insert(nd, frw, this, getFrameName(frames[i]), frameicon); } } } catch (RemoteAccessException ex) { if( ex.getMessage().equals("Unauthorized")) { authorized = false; } else { errorPopup("RemoteAccessException", ex); ex.printStackTrace(); } } finally { if(!authorized) { serverBrowser.popupDialog("admin"); } } setCursor(Frame.DEFAULT_CURSOR); nd.setIcon(frameopened); browser.repaint(); } /** * Handles Collapse notifications * * we simply collapse the given node and repaint the browser. */ public void notifyCollapse(TreeBrowser browser, TreeNode node) { if(getLock()) { if(tl != null) { tl.focusChanged((RemoteResourceWrapper)node.getItem()); } browser.collapse(node); if(!node.equals(lastn)) { browser.unselect(lastn); lastn = null; } unlock(); browser.repaint(); node.setIcon(frameicon); } }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?