--- /dev/null
+// ServerBrowser.java\r
+// $Id: ServerBrowser.java,v 1.1 2010/06/15 12:27:17 smhuang Exp $\r
+// (c) COPYRIGHT MIT and INRIA, 1997.\r
+// Please first read the full copyright statement in file COPYRIGHT.html\r
+\r
+package org.w3c.jigadm.gui ;\r
+\r
+import java.awt.BorderLayout;\r
+import java.awt.Button;\r
+import java.awt.Color;\r
+import java.awt.Component;\r
+import java.awt.Container;\r
+import java.awt.Cursor;\r
+import java.awt.Dimension;\r
+import java.awt.Frame;\r
+import java.awt.GridBagConstraints;\r
+import java.awt.GridBagLayout;\r
+import java.awt.GridLayout;\r
+import java.awt.Image;\r
+import java.awt.Insets;\r
+import java.awt.Label;\r
+import java.awt.Menu;\r
+import java.awt.MenuBar;\r
+import java.awt.MenuComponent;\r
+import java.awt.MenuItem;\r
+import java.awt.Panel;\r
+import java.awt.Scrollbar;\r
+import java.awt.TextComponent;\r
+import java.awt.TextField;\r
+import java.awt.Toolkit;\r
+import java.awt.Window;\r
+\r
+import java.awt.event.ActionEvent;\r
+import java.awt.event.ActionListener;\r
+import java.awt.event.WindowAdapter;\r
+import java.awt.event.WindowEvent;\r
+\r
+import java.util.EventObject;\r
+import java.util.Hashtable;\r
+import java.util.Properties;\r
+\r
+import java.io.PrintStream;\r
+\r
+import java.net.URL;\r
+\r
+import org.w3c.jigadm.PropertyManager;\r
+import org.w3c.jigadm.RemoteResourceWrapper;\r
+\r
+import org.w3c.jigsaw.admin.AdminContext;\r
+import org.w3c.jigsaw.admin.RemoteAccessException;\r
+import org.w3c.jigsaw.admin.RemoteResource;\r
+\r
+import org.w3c.tools.sorter.Sorter;\r
+\r
+import org.w3c.tools.widgets.MessagePopup;\r
+import org.w3c.tools.widgets.NodeHandler;\r
+import org.w3c.tools.widgets.TreeBrowser;\r
+import org.w3c.tools.widgets.TreeNode;\r
+\r
+class UrlPopup extends Frame implements ActionListener {\r
+ ServerBrowser browser = null;\r
+ Frame frame = null;\r
+ TextField url = null;\r
+ Button okB = null; \r
+ Button cancelB = null;\r
+ boolean keepOnCancel = true;\r
+\r
+ private class Openner extends Thread {\r
+ ServerBrowser browser = null;\r
+ AdminContext ac = null;\r
+\r
+ public void run() {\r
+ browser.open(ac);\r
+ }\r
+\r
+ private Openner(ServerBrowser browser,\r
+ AdminContext ac) {\r
+ this.browser = browser;\r
+ this.ac = ac;\r
+ }\r
+ }\r
+\r
+ private String getAdminUrl() {\r
+ String adminUrl = url.getText();\r
+ if (adminUrl.length() < 1)\r
+ return null;\r
+ else if (! adminUrl.startsWith("http")) {\r
+ adminUrl = "http://"+adminUrl;\r
+ }\r
+ return adminUrl;\r
+ }\r
+\r
+ public void actionPerformed(ActionEvent evt) {\r
+ Object target = evt.getSource();\r
+ if ((target == url) || (target == okB)) {\r
+ String adminUrl = getAdminUrl();\r
+ if (adminUrl != null) {\r
+ AdminContext ac = null;\r
+ try {\r
+ ac = new AdminContext(new URL(adminUrl));\r
+ } catch (RemoteAccessException ex) {\r
+ browser.errorPopup("RemoteAccessException", ex);\r
+ // (new MessagePopup("RemoteAccessException : "+\r
+ // ex.getMessage())).show();\r
+ ex.printStackTrace();\r
+ return;\r
+ } catch (java.net.MalformedURLException ex) {\r
+ browser.errorPopup("MalformedURLException", ex);\r
+ // (new MessagePopup("MalformedURL : "+adminUrl)).show();\r
+ return;\r
+ }\r
+ dispose();\r
+ frame.setTitle("Server Browser: " +adminUrl);\r
+ frame.show();\r
+ ( new Openner(browser,ac)).start();\r
+ }\r
+ } else if (target == cancelB) {\r
+ if (! keepOnCancel) {\r
+ frame.dispose();\r
+ WindowCloser.windows--;\r
+ if (WindowCloser.windows < 0) {\r
+ dispose();\r
+ System.exit(0);\r
+ }\r
+ }\r
+ dispose();\r
+ }\r
+ }\r
+\r
+ /**\r
+ * create the URL popup\r
+ */\r
+\r
+ UrlPopup(String title, \r
+ ServerBrowser browser, \r
+ Frame frame, \r
+ boolean keepOnCancel) {\r
+ super(title);\r
+ setBackground(Color.lightGray);\r
+ this.browser = browser;\r
+ this.frame = frame;\r
+ this.keepOnCancel = keepOnCancel;\r
+ Label label = new Label("Location :");\r
+ url = new TextField(20);\r
+ url.addActionListener(this);\r
+ okB = new Button("Ok");\r
+ okB.addActionListener(this);\r
+ cancelB = new Button("Cancel");\r
+ cancelB.addActionListener(this);\r
+\r
+ GridBagLayout gbl = new GridBagLayout();\r
+ GridBagConstraints gbc = new GridBagConstraints();\r
+\r
+ setLayout(gbl);\r
+ gbc.insets = new Insets(10,0,10,0);\r
+ gbc.fill = GridBagConstraints.NONE;\r
+ gbc.gridwidth = GridBagConstraints.RELATIVE;\r
+ gbl.setConstraints(label,gbc);\r
+ add(label);\r
+\r
+ gbc.gridwidth = GridBagConstraints.REMAINDER;\r
+ gbl.setConstraints(url,gbc);\r
+ add(url);\r
+\r
+ gbc.gridwidth = GridBagConstraints.RELATIVE;\r
+ gbc.anchor = GridBagConstraints.EAST;\r
+ gbl.setConstraints(okB,gbc);\r
+ add(okB);\r
+\r
+ gbc.gridwidth = GridBagConstraints.REMAINDER;\r
+ gbc.anchor = GridBagConstraints.WEST;\r
+ gbl.setConstraints(cancelB,gbc);\r
+ add(cancelB);\r
+\r
+ pack();\r
+ show();\r
+\r
+ url.requestFocus();\r
+ }\r
+}\r
+\r
+class WindowCloser extends WindowAdapter {\r
+\r
+ protected static int windows = 0;\r
+\r
+ Frame window = null;\r
+\r
+ public void windowClosing(WindowEvent e) {\r
+ if (e.getWindow() == window) {\r
+ window.setVisible(false);\r
+ window.dispose();\r
+ windows--;\r
+ if (windows < 0)\r
+ System.exit(0);\r
+ }\r
+ }\r
+\r
+ WindowCloser(Frame window) {\r
+ this.window = window;\r
+ }\r
+\r
+}\r
+\r
+class ServerMenu extends MenuBar implements ActionListener {\r
+\r
+ ServerBrowser browser = null;\r
+\r
+ public void actionPerformed(ActionEvent evt) {\r
+ String command = evt.getActionCommand();\r
+ if (command.equals("open")) {\r
+ new UrlPopup("Open new Admin-server", browser, \r
+ (Frame)getParent(), true);\r
+ } else if(command.equals("new")) {\r
+ try { \r
+ Frame f = new Frame("New Server Browser");\r
+ f.setBackground(Color.lightGray);\r
+ Panel editor = new Panel();\r
+ Panel newbrowser = new Panel(new BorderLayout());\r
+ TreeListener tl = new TreeListener(editor);\r
+ ServerBrowser sb = null;\r
+ sb = new ServerBrowser(f,tl);\r
+ Scrollbar sv = new Scrollbar(Scrollbar.VERTICAL);\r
+ sb.setVerticalScrollbar(sv);\r
+ Scrollbar sh = new Scrollbar(Scrollbar.HORIZONTAL);\r
+ sb.setHorizontalScrollbar(sh);\r
+ newbrowser.add("Center", sb);\r
+ newbrowser.add("East", sv);\r
+ newbrowser.add("South", sh);\r
+ editor.setLayout(new BorderLayout());\r
+ // Add a menubar\r
+ ServerMenu menu = new ServerMenu(sb);\r
+ GridLayout g = new GridLayout(1, 2) ;\r
+ f.setLayout(g);\r
+ f.setMenuBar(menu);\r
+ f.add(newbrowser);\r
+ f.add(editor);\r
+ f.setSize(new Dimension(850,600));\r
+ WindowCloser.windows++;\r
+ f.addWindowListener(new WindowCloser(f));\r
+ } catch (Exception ex) {\r
+ ex.printStackTrace();\r
+ } \r
+ } else if(command.equals("close")) {\r
+ Frame cont = (Frame)getParent();\r
+ cont.setVisible(false);\r
+ cont.dispose();\r
+ WindowCloser.windows--;\r
+ if (WindowCloser.windows < 0)\r
+ System.exit(0);\r
+ } else if(command.equals("quit")) {\r
+ Frame cont = (Frame)getParent();\r
+ cont.setVisible(false);\r
+ cont.dispose();\r
+ WindowCloser.windows = 0;\r
+ System.exit(0);\r
+ }\r
+ }\r
+\r
+ ServerMenu(ServerBrowser browser) {\r
+ super();\r
+ this.browser = browser;\r
+ Menu server = new Menu("Admin-Server");\r
+ add(server);\r
+ MenuItem open = new MenuItem("Open");\r
+ open.setActionCommand("open");\r
+ open.addActionListener(this);\r
+ server.add( open );\r
+ MenuItem newOpen = new MenuItem("Open in new window");\r
+ newOpen.setActionCommand("new");\r
+ newOpen.addActionListener(this);\r
+ server.add( newOpen );\r
+ server.addSeparator();\r
+ MenuItem close = new MenuItem("Close window");\r
+ close.setActionCommand("close");\r
+ close.addActionListener(this);\r
+ server.add( close );\r
+ MenuItem quit = new MenuItem("Exit");\r
+ quit.setActionCommand("quit");\r
+ quit.addActionListener(this);\r
+ server.add( quit );\r
+ }\r
+}\r
+\r
+public class ServerBrowser extends TreeBrowser implements NodeHandler {\r
+\r
+ class Expander extends Thread {\r
+ TreeBrowser browser;\r
+ TreeNode nd;\r
+\r
+ public void run() {\r
+ if(getLock()) {\r
+ notifyExpander(browser, nd);\r
+ unlock();\r
+ }\r
+ }\r
+\r
+ Expander(TreeBrowser browser, TreeNode nd) {\r
+ this.browser = browser;\r
+ this.nd = nd;\r
+ }\r
+ }\r
+\r
+ public static final boolean debug = false;\r
+ Image diricon = null;\r
+ Image diropenedicon = null;\r
+ Image fileicon = null;\r
+ AdminContext admin = null;\r
+ TreeListener tl = null;\r
+ TreeNode lastn = null;\r
+ RemoteResourceWrapper rootResource;\r
+ boolean locked;\r
+ private Frame popup = null;\r
+\r
+ protected void errorPopup(String name, Exception ex) {\r
+ (new MessagePopup(name+" : "+ex.getMessage())).show();\r
+ }\r
+\r
+ /**\r
+ * gets a lock to avoid adding node while removing other nodes\r
+ * it sets also the Cursor to WAIT_CURSOR\r
+ */\r
+\r
+ protected synchronized boolean getLock() {\r
+ if(locked)\r
+ return false;\r
+ setCursor(Frame.WAIT_CURSOR);\r
+ locked = true;\r
+ return true;\r
+ }\r
+\r
+ /**\r
+ * release the lock and sets the Cursor to the default\r
+ */\r
+\r
+ protected synchronized void unlock() {\r
+ locked = false;\r
+ setCursor(Frame.DEFAULT_CURSOR);\r
+ }\r
+\r
+ // get rid of the Auth Popup\r
+\r
+ protected void dispose(boolean Ok) {\r
+ if (! Ok) {\r
+ Frame f = getFrame(this);\r
+ if (f != null)\r
+ f.dispose();\r
+ WindowCloser.windows--;\r
+ popup.dispose();\r
+ if (WindowCloser.windows < 0)\r
+ System.exit(0);\r
+ } else if (popup != null) {\r
+ popup.dispose();\r
+ popup = null;\r
+ }\r
+ } \r
+\r
+ // pops up a new Auth popup\r
+\r
+ public void popupDialog(String name) {\r
+ if(popup == null) {\r
+ AuthPopup ap = new AuthPopup(this, name);\r
+ popup = new Frame("Authorization for jigadm");\r
+ popup.setBackground(Color.lightGray);\r
+ popup.setSize(new Dimension(300, 200));\r
+ popup.setLayout(new BorderLayout());\r
+ popup.add("Center", ap);\r
+ popup.show();\r
+ ap.user.requestFocus();\r
+ while(!ap.waitForCompletion());\r
+ }\r
+ } \r
+\r
+ /**\r
+ * give the Root Resource of the browser\r
+ */\r
+\r
+ public RemoteResourceWrapper getRootWrapper() {\r
+ return rootResource;\r
+ }\r
+\r
+ public void renameNode(RemoteResourceWrapper rw, String label) {\r
+ try {\r
+ if (rw.getResource().isContainer()) {\r
+ (new MessagePopup("WARNING: you have changed the identifier. "+\r
+ "To access the sons, close and reopen the node")\r
+ ).show();\r
+ }\r
+ } catch (RemoteAccessException ex) {\r
+ // ??\r
+ }\r
+ TreeNode tn = getNode(rw);\r
+ // if it is a visible node, change the label and repaint\r
+ if (tn != null) {\r
+ tn.setLabel(label);\r
+ repaint();\r
+ }\r
+ }\r
+\r
+ public void removeNode(RemoteResourceWrapper rw) {\r
+ if(getLock()) {\r
+ if (getNode(rw) != null) {\r
+ removeBranch(getNode(rw));\r
+ tl.nodeRemoved(rw);\r
+ }\r
+ unlock();\r
+ repaint();\r
+ }\r
+ }\r
+\r
+ public void insertNode(RemoteResourceWrapper father, \r
+ RemoteResourceWrapper son,\r
+ String name) {\r
+ TreeNode fatherNode;\r
+ boolean ic = false;\r
+\r
+ if(father == null)\r
+ System.out.println("Error null father");\r
+ fatherNode = getNode(father);\r
+ if(fatherNode.getChildren() == TreeNode.NOCHILD)\r
+ return;\r
+ \r
+ if (fatherNode == null)\r
+ return; // this should never happen, but...\r
+ try {\r
+ ic = son.getResource().isContainer();\r
+ } catch (RemoteAccessException ex) {\r
+ // fancy thing\r
+ errorPopup("RemoteAccessException",ex);\r
+ }\r
+\r
+ if(ic)\r
+ insert(fatherNode, son, this, name, diricon);\r
+ else\r
+ insert(fatherNode, son, this, name, fileicon);\r
+ repaint();\r
+ }\r
+\r
+ protected RemoteResourceWrapper getResources(\r
+ RemoteResourceWrapper rw,String name) {\r
+\r
+ RemoteResource resource = null;\r
+ if(rw != null) {\r
+ try {\r
+ resource = rw.getResource().loadResource(name);\r
+ } catch (RemoteAccessException ex) {\r
+ errorPopup("RemoteAccessException", ex);\r
+ ex.printStackTrace();\r
+ }\r
+ }\r
+ return new RemoteResourceWrapper(rw, resource, this);\r
+ }\r
+\r
+ private final Image getImage(String name) {\r
+ Image img;\r
+ img = Toolkit.getDefaultToolkit().getImage(name);\r
+ return img;\r
+ }\r
+\r
+ private final Frame getFrame(Component c) {\r
+ while(! (c instanceof Frame)) {\r
+ c = c.getParent();\r
+ if (c == null)\r
+ return null;\r
+ }\r
+ return (Frame)c;\r
+ }\r
+ /* private final*/ public void setCursor(int cursor) {\r
+ getFrame(this).setCursor(new Cursor(cursor));\r
+ Toolkit.getDefaultToolkit().sync();\r
+ }\r
+\r
+ protected void open(AdminContext ac) {\r
+ RemoteResource rr = null;\r
+ admin = ac;\r
+ locked = false;\r
+ boolean authorized = false;\r
+\r
+ if (rootResource != null)\r
+ removeNode(rootResource);\r
+ tl.focusChanged( null );\r
+ while (!authorized) {\r
+ try {\r
+ authorized = true;\r
+ ac.initialize();\r
+ } catch (RemoteAccessException ex) {\r
+ if(ex.getMessage().equals("Unauthorized")) {\r
+ authorized = false;\r
+ } else {\r
+ ex.printStackTrace();\r
+ }\r
+ } finally {\r
+ if(!authorized) {\r
+ popupDialog("admin");\r
+ }\r
+ }\r
+ }\r
+ try {\r
+ rr = ac.getAdminResource();\r
+ } catch (RemoteAccessException ex) { \r
+ errorPopup("RemoteAccessException", ex);\r
+ //( new MessagePopup("RemoteAccessException : "+\r
+ //ex.getMessage())).show();\r
+ return;\r
+ }\r
+ rootResource = new RemoteResourceWrapper(rr, this);\r
+ initialize(rootResource, "Root", this, diricon);\r
+ tl.focusChanged(rootResource);\r
+ repaint();\r
+ }\r
+\r
+ public ServerBrowser(Frame frame, TreeListener tl) {\r
+ PropertyManager pm = PropertyManager.getPropertyManager();\r
+ this.tl = tl;\r
+\r
+ diricon = getImage(pm.getIconLocation("smalldir"));\r
+ fileicon = getImage(pm.getIconLocation("smallfile"));\r
+ diropenedicon = getImage(pm.getIconLocation("smalldiropened"));\r
+\r
+ new UrlPopup("Open Admin Server : ", this, frame, false);\r
+ }\r
+\r
+ public ServerBrowser(AdminContext ac, TreeListener tl) {\r
+ boolean authorized = false;\r
+ RemoteResource rr = null;\r
+ PropertyManager pm = PropertyManager.getPropertyManager();\r
+ admin = ac;\r
+ this.tl = tl;\r
+\r
+ locked = false;\r
+ diricon = getImage(pm.getIconLocation("smalldir"));\r
+ fileicon = getImage(pm.getIconLocation("smallfile"));\r
+ diropenedicon = getImage(pm.getIconLocation("smalldiropened"));\r
+ while (!authorized) {\r
+ try {\r
+ authorized = true;\r
+ ac.initialize();\r
+ } catch (RemoteAccessException ex) {\r
+ if(ex.getMessage().equals("Unauthorized")) {\r
+ authorized = false;\r
+ } else {\r
+ ex.printStackTrace();\r
+ }\r
+ } finally {\r
+ if(!authorized) {\r
+ popupDialog("admin");\r
+ }\r
+ }\r
+ }\r
+ try {\r
+ rr = ac.getAdminResource();\r
+ } catch (RemoteAccessException ex) { \r
+ // Unable to connect for whatever reason... exit!\r
+ ex.printStackTrace();\r
+ System.exit(0);\r
+ }\r
+ rootResource = new RemoteResourceWrapper(rr, this);\r
+ initialize(rootResource, "Root", this, diricon);\r
+ }\r
+\r
+ public void notifySelect(TreeBrowser browser, TreeNode nd) {\r
+ if(tl != null) {\r
+ tl.editedChanged(this, (RemoteResourceWrapper)nd.getItem());\r
+ }\r
+ browser.unselect(lastn);\r
+ browser.select(nd);\r
+ browser.repaint();\r
+ lastn = nd;\r
+ }\r
+\r
+ /**\r
+ * Handles Select notifications.\r
+ *\r
+ * we simply select the node and redraw the browser.\r
+ */ \r
+ public void notifyExecute(TreeBrowser browser, TreeNode node) {\r
+ if(tl != null) {\r
+ tl.focusChanged((RemoteResourceWrapper)node.getItem());\r
+ }\r
+ if(!node.equals(lastn)) {\r
+ browser.unselect(lastn);\r
+ lastn = null;\r
+ }\r
+ browser.repaint();\r
+ }\r
+\r
+ public void notifyExpand(TreeBrowser browser, TreeNode nd) {\r
+ (new Expander(browser, nd)).start();\r
+ }\r
+\r
+ /**\r
+ * Handles Expand notifications\r
+ *\r
+ * if the node is a directory, we list its content and insert the\r
+ * directories and files in the browser.\r
+ */\r
+ public void notifyExpander(TreeBrowser browser, TreeNode nd) {\r
+ if(tl != null) {\r
+ tl.focusChanged((RemoteResourceWrapper)nd.getItem());\r
+ }\r
+ RemoteResourceWrapper rrw = null;\r
+ RemoteResource rr = null;\r
+ boolean ic = false;\r
+ boolean authorized;\r
+\r
+ rrw = (RemoteResourceWrapper)nd.getItem();\r
+ if(rrw == null)\r
+ return;\r
+ rr = rrw.getResource();\r
+ try {\r
+ ic = rr.isContainer();\r
+ } catch(Exception ex) {\r
+ ex.printStackTrace();\r
+ }\r
+ if(ic) {\r
+ String names[] = null;\r
+ setCursor(Frame.WAIT_CURSOR);\r
+ authorized = false;\r
+ while(!authorized) {\r
+ authorized = true;\r
+ try {\r
+ names = rr.enumerateResourceIdentifiers();\r
+ } catch (RemoteAccessException ex) {\r
+ if( ex.getMessage().equals("Unauthorized")) {\r
+ authorized = false;\r
+ } else {\r
+ names = new String[0];\r
+ errorPopup("RemoteAccessException", ex);\r
+ ex.printStackTrace();\r
+ }\r
+ } finally {\r
+ if(!authorized) {\r
+ popupDialog("admin");\r
+ }\r
+ }\r
+ }\r
+ Sorter.sortStringArray(names, true);\r
+ if (debug)\r
+ System.out.println("Found "+names.length+" identifiers");\r
+ for(int i = 0; i <names.length; i++) {\r
+ boolean nic = false;\r
+ RemoteResourceWrapper nrrw = getResources(rrw, names[i]);\r
+ RemoteResource nrr = nrrw.getResource();\r
+ try {\r
+ nic = nrr.isContainer();\r
+ } catch(Exception ex) {\r
+ ex.printStackTrace();\r
+ }\r
+ if(nic) {\r
+ browser.insert(nd, nrrw, this, names[i], diricon);\r
+ }\r
+ else {\r
+ browser.insert(nd, nrrw, this, names[i], fileicon);\r
+ }\r
+ }\r
+ if(!nd.equals(lastn)) {\r
+ browser.unselect(lastn);\r
+ lastn = null;\r
+ }\r
+ setCursor(Frame.DEFAULT_CURSOR);\r
+ browser.repaint();\r
+ }\r
+ if(isDirectory(this, nd))\r
+ nd.setIcon(diropenedicon);\r
+ }\r
+\r
+ public boolean isDirectory(TreeBrowser browser, TreeNode nd) {\r
+ RemoteResourceWrapper rrw = null;\r
+ boolean ic = false;\r
+ rrw = (RemoteResourceWrapper)nd.getItem();\r
+ if(rrw == null)\r
+ return false;\r
+ try {\r
+ return rrw.getResource().isContainer();\r
+ } catch (Exception ex) {\r
+ ex.printStackTrace();\r
+ }\r
+ return false;\r
+ }\r
+\r
+ /**\r
+ * Handles Collapse notifications\r
+ *\r
+ * we simply collapse the given node and repaint the browser.\r
+ */ \r
+ public void notifyCollapse(TreeBrowser browser, TreeNode node) {\r
+ if(getLock()) {\r
+ if(tl != null) {\r
+ tl.focusChanged((RemoteResourceWrapper)node.getItem());\r
+ }\r
+ browser.collapse(node);\r
+ if(!node.equals(lastn)) {\r
+ browser.unselect(lastn);\r
+ lastn = null;\r
+ }\r
+ unlock();\r
+ browser.repaint();\r
+ node.setIcon(diricon);\r
+ }\r
+ }\r
+\r
+ static public void main(String args[]) {\r
+ String baseURL=null;\r
+ String jigadmRoot = null;\r
+ \r
+ for (int i = 0 ; i < args.length ; i++) {\r
+ if (args[i].equals("-root")) {\r
+ Properties p = System.getProperties();\r
+ jigadmRoot = args[++i];\r
+ p.put(PropertyManager.ROOT_P, jigadmRoot);\r
+ System.setProperties(p);\r
+ }\r
+ baseURL = args[i];\r
+ }\r
+ try {\r
+ Frame f = new Frame("Server Browser: " + baseURL);\r
+ f.setBackground(Color.lightGray);\r
+ Panel editor = new Panel();\r
+ Panel browser = new Panel(new BorderLayout());\r
+ TreeListener tl = new TreeListener(editor);\r
+ ServerBrowser sb = null;\r
+ Scrollbar sv = new Scrollbar(Scrollbar.VERTICAL);\r
+ Scrollbar sh = new Scrollbar(Scrollbar.HORIZONTAL);\r
+ try {\r
+ AdminContext ac = new AdminContext(new URL(baseURL));\r
+ sb = new ServerBrowser(ac, tl);\r
+ sb.setVerticalScrollbar(sv);\r
+ sb.setHorizontalScrollbar(sh);\r
+ browser.add("Center", sb);\r
+ browser.add("East", sv);\r
+ browser.add("South", sh);\r
+ editor.setLayout(new BorderLayout());\r
+ ServerMenu menu = new ServerMenu(sb);\r
+\r
+ GridLayout g = new GridLayout(1, 2) ;\r
+ f.setLayout(g);\r
+ f.setMenuBar(menu);\r
+ f.add(browser);\r
+ f.add(editor); \r
+ f.setSize(new Dimension(850,600));\r
+ f.addWindowListener(new WindowCloser(f));\r
+ f.show();\r
+\r
+ } catch (java.net.MalformedURLException ex) {\r
+ sb = new ServerBrowser(f,tl);\r
+ sb.setVerticalScrollbar(sv);\r
+ sb.setHorizontalScrollbar(sh);\r
+ browser.add("Center", sb);\r
+ browser.add("East", sv);\r
+ browser.add("South", sh);\r
+ editor.setLayout(new BorderLayout());\r
+ ServerMenu menu = new ServerMenu(sb);\r
+ GridLayout g = new GridLayout(1, 2) ;\r
+ f.setLayout(g);\r
+ f.setMenuBar(menu);\r
+ f.add(browser);\r
+ f.add(editor);\r
+ f.setSize(new Dimension(850,600));\r
+ }\r
+ } catch (Exception ex) {\r
+ ex.printStackTrace();\r
+ }\r
+ }\r
+}\r
+\r
+\r