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 + -
显示快捷键?