All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.biojava.nbio.structure.align.gui.SystemInfo Maven / Gradle / Ivy

There is a newer version: 7.1.3
Show newest version
/*
 *                    BioJava development code
 *
 * This code may be freely distributed and modified under the
 * terms of the GNU Lesser General Public Licence.  This should
 * be distributed with the code.  If you do not have a copy,
 * see:
 *
 *      http://www.gnu.org/copyleft/lesser.html
 *
 * Copyright for this code is held jointly by the individual
 * authors.  These should be listed in @author doc comments.
 *
 * For more information on the BioJava project and its aims,
 * or to join the biojava-l mailing list, visit the home page
 * at:
 *
 *      http://www.biojava.org/
 *
 * Created on Mar 18, 2010
 * Author: Andreas Prlic
 *
 */

package org.biojava.nbio.structure.align.gui;

import org.biojava.nbio.structure.align.webstart.BrowserOpener;

import javax.swing.*;
import javax.swing.border.EtchedBorder;
import javax.swing.event.HyperlinkEvent;
import javax.swing.event.HyperlinkListener;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Enumeration;
import java.util.Properties;
import java.util.StringTokenizer;

public class SystemInfo
{

	Box vBox;
	String msg;

	/*
	 * This is a default list of system properties that we will use
	 * if the Security Manager doesn't let us extract the "real" list.
	 */
	public static final String defaultProperties =
		""
		+ "browser "
		+ "file.separator "
		+ "java.class.version "
		+ "java.vendor "
		+ "java.vendor.url "
		+ "java.version "
		+ "line.separator "
		+ "os.arch "
		+ "os.name "
		+ "os.version "
		+ "path.separator ";

	public static final String hexPropertyNames =
		" file.separator "
		+ "line.separator "
		+ "path.separator ";
	public static final String urlPropertyNames =
		" browser.vendor.url "
		+ " java.class.path "
		+ "java.home "
		+ "user.dir "
		+ "user.home "
		+ "user.name ";
	EtchedBorder        border;

	public SystemInfo()
	{
		border = new EtchedBorder();
		msg = "";
		try {
			Properties props = System.getProperties();
			/*
			 * Unfortunately, enumerating System.getProperties() returns
			 * them in an unsatisfactory order. To make the display
			 * esthetically pleasing, we'll extract the property names
			 * (i.e. the keys) into a vector, then sort the vector, then
			 * use the vector as an enumeration. props.size() is not
			 * trustworthy (bug in MRJ?)
			 */
			//border.setLabelText ("System Properties");
			/*
			 * Count the actual size of the System property list.
			 */
			int size = 0;
			Enumeration enumo = props.propertyNames();
			while (enumo.hasMoreElements()) {
				++size;
				enumo.nextElement();
			}
			String[] names = new String[size];
			enumo = props.propertyNames();
			for (int i = 0; enumo.hasMoreElements(); i++) {
				names[i] = (String) enumo.nextElement();
			}
			if (size < 1) {
				msg = "No System Properties";
			}
			else {
				quickSort(names, 0, names.length - 1);
				for (int i = 0; i < size; i++) {
					addOneSystemProperty(names[i]);
				}
			}
		}
		catch (SecurityException e) {
		  // border.setLabelText ("Default Applet Properties");
			StringTokenizer t = new StringTokenizer(defaultProperties, " ");
			while (t.hasMoreElements()) {
				addOneSystemProperty(t.nextToken());
			}
		}
		catch (Exception e) {
			append("Strange Exception getting system properties: " + e);
		}
	}

	private void append(String txt){
		msg += txt;
	}

	/**
	 * Stripped-down QuickSort.
	 * @param   vector      The vector of strings to sort
	 * @param   startIndex  The first element to sort
	 * @param   endIndex    The last element to sort
	 *
	 * example use:
	 * 
	 *    JavaInfo.quickSort(vector, 0, vector.length - 1);
	 *  
*/ public static void quickSort( String[] vector, int startIndex, int endIndex ) { int i = startIndex; int j = endIndex; String pivot = vector[(i + j) / 2]; do { while (i < endIndex && pivot.compareTo(vector[i]) > 0) { ++i; } while (j > startIndex && pivot.compareTo(vector[j]) < 0) { --j; } if (i < j) { String temp = vector[i]; vector[i] = vector[j]; vector[j] = temp; } if (i <= j) { ++i; --j; } } while (i <= j); if (startIndex < j) { quickSort(vector, startIndex, j); } if (i < endIndex) { quickSort(vector, i, endIndex); } } public void addOneSystemProperty( String name ) { try { String propValue = System.getProperty(name); /* * On the Macintosh (under MRJ), a bunch of font names * are loaded into the property list. We toss them * to avoid confusion. */ if (propValue != null && !name.equals(propValue)) { append(""+name + ":"); boolean isReadable = true; for (int i = 0; i < propValue.length(); i++) { char c = propValue.charAt(i); if (isControlCharacter(c)) { isReadable = false; break; } } if (!isReadable) { for (int i = 0; i < propValue.length(); i++) { char c = propValue.charAt(i); if (Character.isLetterOrDigit(c)) { append(" '" + c + "'"); } else { append(" 0x"); if (c < 0x10) { append("0"); } append(Integer.toHexString(c)); } } } else if (isURLProperty(name)) { StringBuffer fixed = new StringBuffer(); int start = 0; int hit = 0; while ((hit = propValue.indexOf('%', start)) >= 0) { fixed.append(propValue.substring(start, hit)); int value = Integer.parseInt(propValue.substring(hit + 1, hit + 3), 16); fixed.append(((char) value)); start = hit + 3; } append(" \"" + fixed + "\""); } else { append(" " + propValue); } append("
"); } /* If the property name was found */ } /* Try to fetch the property name */ catch (SecurityException e) { append(name + ": Security Exception\n" ); } catch (Exception e) { append(name + ": " + e + "\n"); } } protected boolean isHexProperty( String thisName ) { int index = hexPropertyNames.indexOf(" " + thisName + " "); return (index >= 0); } protected boolean isURLProperty( String thisName ) { int index = urlPropertyNames.indexOf(" " + thisName + " "); return (index >= 0); } /** * Replicate the Java 1.1 isISOControl method (for Java 1.0.2 compatibility) */ private boolean isControlCharacter( char c ) { return ((c >= '\u0000' && c <= '\u001f') || (c >= '\u007f' && c <= '\u009f')); } public String getMessage(){ return msg; } public void showDialog(){ JDialog dialog = new JDialog(); dialog.setSize(new Dimension(500,650)); String msg = getMessage(); JEditorPane txt = new JEditorPane("text/html", msg); txt.setEditable(false); JScrollPane scroll = new JScrollPane(txt); scroll.setSize(new Dimension(300,500)); vBox= Box.createVerticalBox(); vBox.add(scroll); txt.addHyperlinkListener(new HyperlinkListener(){ @Override public void hyperlinkUpdate(HyperlinkEvent e) { if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) { String href = e.getDescription(); BrowserOpener.showDocument(href); } if ( e.getEventType() == HyperlinkEvent.EventType.ENTERED) { // change the mouse curor vBox.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); } if (e.getEventType() == HyperlinkEvent.EventType.EXITED) { vBox.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); } } }); JButton close = new JButton("Close"); close.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent event) { Object source = event.getSource(); JButton but = (JButton)source; Container parent = but.getParent().getParent().getParent().getParent().getParent().getParent() ; JDialog dia = (JDialog) parent; dia.dispose(); } }); Box hBoxb = Box.createHorizontalBox(); hBoxb.add(Box.createGlue()); hBoxb.add(close,BorderLayout.EAST); vBox.add(hBoxb); dialog.getContentPane().add(vBox); dialog.setVisible(true); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy