Milán Major

netscape-revival

1 branch
Code

sun-java/classsrc/sun/applet/AppletProps.java

/*
 * @(#)AppletProps.java	1.6 95/12/01
 *
 * Copyright (c) 1994-1995 Sun Microsystems, Inc. All Rights Reserved.
 *
 * Permission to use, copy, modify, and distribute this software
 * and its documentation for NON-COMMERCIAL purposes and without
 * fee is hereby granted provided that this copyright notice
 * appears in all copies. Please refer to the file "copyright.html"
 * for further important copyright and licensing information.
 *
 * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF
 * THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
 * TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
 * PARTICULAR PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR
 * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
 * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
 */

package sun.applet;

import java.awt.*;
import java.io.*;
import java.util.Properties;
import java.lang.SecurityManager;

import sun.net.www.http.HttpClient;
import sun.net.ftp.FtpClient;

class AppletProps extends Frame {
    
    TextField proxyHost;
    TextField proxyPort;
    TextField firewallHost;
    TextField firewallPort;
    Choice networkMode;
    Choice accessMode;

    AppletProps() {
	setTitle("AppletViewer Properties");
	Panel p = new Panel();
	p.setLayout(new GridLayout(0, 2));

	p.add(new Label("Http proxy server:"));
	p.add(proxyHost = new TextField());

	p.add(new Label("Http proxy port:"));
	p.add(proxyPort = new TextField());

	p.add(new Label("Firewall proxy server:"));
	p.add(firewallHost = new TextField());

	p.add(new Label("Firewall proxy port:"));
	p.add(firewallPort = new TextField());

	p.add(new Label("Network access:"));
	p.add(networkMode = new Choice());
	networkMode.addItem("None");
	networkMode.addItem("Applet Host");
	networkMode.addItem("Unrestricted");

	p.add(new Label("Class access:"));
	p.add(accessMode = new Choice());
	accessMode.addItem("Restricted");
	accessMode.addItem("Unrestricted");

	add("Center", p);
	p = new Panel();
	p.add(new Button("Apply"));
	p.add(new Button("Reset"));
	p.add(new Button("Cancel"));
	add("South", p);
	move(200, 150);
	pack();
	reset();
    }

    void reset() {
	((AppletSecurity)System.getSecurityManager()).reset();

	switch (((AppletSecurity)System.getSecurityManager()).networkMode) {
	  case AppletSecurity.NETWORK_UNRESTRICTED:
	    networkMode.select("Unrestricted");
	    break;
	  case AppletSecurity.NETWORK_NONE:
	    networkMode.select("None");
	    break;
	  default:
	    networkMode.select("Applet Host");
	    break;
	}

        // XXX: cleanup setScopePermission
	SecurityManager.setScopePermission();
	if (Boolean.getBoolean("package.restrict.access.sun")) {
	    accessMode.select("Restricted");
	} else {
	    accessMode.select("Unrestricted");
	}

	if (Boolean.getBoolean("proxySet")) {
	    proxyHost.setText(System.getProperty("proxyHost"));
	    proxyPort.setText(System.getProperty("proxyPort"));
	    HttpClient.useProxyForCaching = true;
	    HttpClient.cachingProxyHost = System.getProperty("proxyHost");;
	    HttpClient.cachingProxyPort = 
		Integer.valueOf(System.getProperty("proxyPort")).intValue();
	} else {
	    proxyHost.setText("");
	    proxyPort.setText("");
	    HttpClient.useProxyForCaching = false;
	}
	if (Boolean.getBoolean("firewallSet")) {
	    firewallHost.setText(System.getProperty("firewallHost"));
	    firewallPort.setText(System.getProperty("firewallPort"));
	    HttpClient.useProxyForFirewall = true;
	    HttpClient.firewallProxyHost = System.getProperty("firewallHost");;
	    HttpClient.firewallProxyPort = 
		Integer.valueOf(System.getProperty("firewallPort")).intValue();
	} else {
	    firewallHost.setText("");
	    firewallPort.setText("");
	    HttpClient.useProxyForFirewall = false;
	}
    }

    void apply() {
	// Get properties, set version
	SecurityManager.setScopePermission();
	Properties props = System.getProperties();
	SecurityManager.resetScopePermission();
	props.put("appletviewer.version", "beta2");
	if (proxyHost.getText().length() > 0) {
	    props.put("proxySet", "true");
	    props.put("proxyHost", proxyHost.getText().trim());
	    props.put("proxyPort", proxyPort.getText().trim());
	} else {
	    props.put("proxySet", "false");
	}
	if (firewallHost.getText().length() > 0) {
	    props.put("firewallSet", "true");
	    props.put("firewallHost", firewallHost.getText().trim());
	    props.put("firewallPort", firewallPort.getText().trim());
	} else {
	    props.put("firewallSet", "false");
	}
	if ("None".equals(networkMode.getSelectedItem())) {
	    props.put("appletviewer.security.mode", "none");
	} else if ("Unrestricted".equals(networkMode.getSelectedItem())) {
	    props.put("appletviewer.security.mode", "unrestricted");
	} else {
	    props.put("appletviewer.security.mode", "host");
	}

	if ("Restricted".equals(accessMode.getSelectedItem())) {
	    props.put("package.restrict.access.sun", "true");
	    props.put("package.restrict.access.netscape", "true");
	} else {
	    props.put("package.restrict.access.sun", "false");
	    props.put("package.restrict.access.netscape", "false");
	}

	// Save properties
	try {
	    reset();

	    SecurityManager.setScopePermission();
	    FileOutputStream out = new FileOutputStream(System.getProperty("user.home") + 
							File.separator + ".hotjava" +
							File.separator + "properties");
	    SecurityManager.resetScopePermission();
	    props.save(out, "AppletViewer");
	    out.close();
	    hide();
	} catch (IOException e) {
	    System.out.println("Failed to save properties: " + e);
	    e.printStackTrace();
	    reset();
	}
    }

    public boolean action(Event evt, Object obj) {
	if ("Apply".equals(obj)) {
	    apply();
	    return true;
	}
	if ("Reset".equals(obj)) {
	    reset();
	    return true;
	}
	if ("Cancel".equals(obj)) {
	    hide();
	    return true;
	}
	return false;
    }
}