Package org.w3c.jigadm.editors

Source Code of org.w3c.jigadm.editors.FrameBrowser$Expander

// 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.html

package 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);
  }
    }

}
TOP

Related Classes of org.w3c.jigadm.editors.FrameBrowser$Expander

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.