Package edu.stanford.genetics.treeview.applet

Source Code of edu.stanford.genetics.treeview.applet.ButtonApplet

/* BEGIN_HEADER                                              Java TreeView
*
* $Author: alokito $
* $RCSfile: ButtonApplet.java,v $
* $Revision: 1.15 $
* $Date: 2008-03-09 21:06:34 $
* $Name:  $
*
* This file is part of Java TreeView
* Copyright (C) 2001-2003 Alok Saldanha, All Rights Reserved. Modified by Alex Segal 2004/08/13. Modifications Copyright (C) Lawrence Berkeley Lab.
*
* This software is provided under the GNU GPL Version 2. In particular,
*
* 1) If you modify a source file, make a comment in it containing your name and the date.
* 2) If you distribute a modified version, you must do it under the GPL 2.
* 3) Developers are encouraged but not required to notify the Java TreeView maintainers at alok@genome.stanford.edu when they make a useful addition. It would be nice if significant contributions could be merged into the main distribution.
*
* A full copy of the license can be found in gpl.txt or online at
* http://www.gnu.org/licenses/gpl.txt
*
* END_HEADER
*/
package edu.stanford.genetics.treeview.applet;

import java.applet.Applet;
import java.awt.Frame;
import java.awt.TextArea;
import java.awt.event.*;
import java.io.InputStreamReader;
import java.io.Reader;

import javax.swing.*;

import edu.stanford.genetics.treeview.*;
import edu.stanford.genetics.treeview.reg.RegEngine;

public class ButtonApplet extends Applet {
  private TreeViewApp app;
  /**  start method for running as applet */
  public void start() {
    super.start();
    loadPlugins();
    final String cdtFile = getParameter("cdtFile");
    String cdtName = getParameter("cdtName");
    String styleName = getParameter("styleName");
    final int styleCode;
    if (styleName == null) {
      styleCode = FileSet.AUTO_STYLE;
    } else {
      styleCode = FileSet.getStyleByName(styleName);
    }
    if (cdtName == null) cdtName = cdtFile;
    if (cdtFile == null) {
      JOptionPane.showMessageDialog(this, "Must Provide cdtFile parameter in applet tag.");
      add(new JLabel("Must Provide cdtFile parameter in applet tag."));
    } else {
      app = new AppletApp(this, generateGlobalConfig());
      JButton openButton = new JButton("View " + cdtName);
      openButton.addActionListener(new ActionListener() {
        @SuppressWarnings("unused")
        public void actionPerformed(ActionEvent e) {
         
          try {
            if (cdtFile == null) {
              app.openNew();
            } else {
              FileSet fileSet = new FileSet(makeWellFormedURL(cdtFile),"");
              fileSet.setStyle(styleCode);
              app.openNew(fileSet).setVisible(true);
            }
          } catch (LoadException ex) {
            JPanel temp = new JPanel();
            temp.setLayout(new BoxLayout(temp, BoxLayout.Y_AXIS));
            temp.add(new JLabel("Problems opening url " + cdtFile));
            temp.add(new JLabel("" + ex));
            JOptionPane.showMessageDialog(ButtonApplet.this, temp);
          }
        }
      });
      add(openButton);
     
    }
    repaint();
  }

  /**
   * unfortunately, I cannot instantiate classloader within applet
   * so instead we assume that the plugin jar is in the classpath
   * and just ask the system classloader to instantiate.
   */
  private void loadPlugins() {
    ClassLoader cl = getClass().getClassLoader();
    if (getParameter("plugins") == null) {
      System.out.println("plugin parameter not set");
      JOptionPane.showMessageDialog(this, "plugin parameter not set");
      return;
    }
     String plugins[] = getParameter("plugins").split(",");
    int loadStatus[] = new int[plugins.length];
    boolean showPopup = false;
    for (int i = 0; i < plugins.length;i++) {
      try {
        Class c = cl.loadClass(plugins[i]);
        @SuppressWarnings("unused") // the creation of an instance registers it with the manager.
        PluginFactory pp = (PluginFactory) c.newInstance();
        loadStatus[i] = 0;
      } catch (ClassNotFoundException e) {
        loadStatus[i] = 1;
        showPopup = true;
        e.printStackTrace();
      } catch (InstantiationException e) {
        loadStatus[i] = 2;
        showPopup = true;
        e.printStackTrace();
      } catch (IllegalAccessException e) {
        loadStatus[i] = 3;
        showPopup = true;
        e.printStackTrace();
      }
    }
    if (showPopup == true) {
      String message = "";
      for (int j = 0; j < loadStatus.length; j++) {
        message += plugins[j];
        switch (loadStatus[j]) {
        case 0:
          message += " Loaded properly";
          break;
        case 1:
          message += " ClassNotFoundException";
          break;
        case 2:
          message += " InstantiationException";
          break;
        case 3:
          message += " IllegalAccessException";
          break;
        }
        message += "\n";
      }
      JOptionPane.showMessageDialog(this, message);
    }
  }

  /**
  * This subroutine generates a globalconfig to be used in applet mode.
  * <p>
  * It first tries to load getCodeBase() + "globalConfig.xml", and if that falls through for
  * any reason it defaults to a generic XmlConfig.
  */
  private XmlConfig generateGlobalConfig() {
    XmlConfig globalConfig = null;
    String url          = getParameter("globalConfig");
    if (url != null) {
      try {
        globalConfig = new XmlConfig(new java.net.URL(url), "ProgramConfig");
        RegEngine.addBogusComplete(globalConfig.getNode("Registration"));
      } catch (java.net.MalformedURLException e) {
      } catch (java.security.AccessControlException sec) {
        urlAccessViolation(url + "\n" + sec);
      } catch (Exception ex) {
        urlAccessViolation(ex.toString());
      }

    }
    if (globalConfig == null) {
      globalConfig = new XmlConfig((java.net.URL) null, "ProgramConfig");
    }
    return globalConfig;
  }
 
  /**
   *  Called when a url is improperly accessed. Pops up a window the hard way.
   *
   * @param  url  url which we do not have authorization for.
   */
  public void urlAccessViolation(String url) {
    TextArea mp      = new TextArea("Bad URL\n" +
        "There was a security exception accessing the url\n" + url +
        "\nremember, applets can only load urls from the same server");
    final Frame top  = new Frame("Bad URL");
    top.addWindowListener(
      new WindowAdapter() {

        public void windowClosing(WindowEvent windowEvent) {
          top.dispose();
        }
      });

    top.add(mp);
    top.pack();
    top.setVisible(true);
  }

  /**
   *  Pops up a window with the html source of a url.
   *
   * @param  url  url to show.
   */
  public void showText(java.net.URL url) {
    try {
      Reader st        = new InputStreamReader(url.openStream());
      int ch;
      TextArea mp      = new TextArea();
      ch = st.read();
      while (ch != -1) {
        char[] cbuf  = new char[1];
        cbuf[0] = (char) ch;
        mp.append(new String(cbuf));
        ch = st.read();
      }
      final Frame top  = new Frame("Show URL");
      top.addWindowListener(
        new WindowAdapter() {

          public void windowClosing(WindowEvent windowEvent) {
            top.dispose();
          }
        });

      top.add(mp);
      top.pack();
      top.setVisible(true);

    } catch (java.io.IOException e) {
    }
  }

  /* (non-Javadoc)
   * @see java.applet.Applet#getParameterInfo()
   */
  public String[][] getParameterInfo() {
   
     String pinfo[][] = {
         {"plugins",    "urls",    "comma separated list of plugin urls"},
         {"cdtFile", "url", "cdt file to display"},
         {"cdtName",   "String",     "name to display on button"},
         {"style", "String", "name of style with which to display this file"},
         {"globalConfig", "url", "url of global config"}
       };
    return pinfo;
  }
 
 
  /* (non-Javadoc)
   * @see java.applet.Applet#getAppletInfo()
   */
  public String getAppletInfo() {
    return "Java Treeview Applet (" +TreeViewApp.getVersionTag() +"test )";
  }

  private String makeWellFormedURL(String rawURL) {
    if (rawURL.toLowerCase().startsWith("http")) {
      return rawURL;
    } else if (rawURL.toLowerCase().startsWith("file")) {
      return rawURL;
    } else {
      return getCodeBase().toString() + rawURL;
    }
  }

}
TOP

Related Classes of edu.stanford.genetics.treeview.applet.ButtonApplet

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.