blob: eb257f767ebe7b20bfbe7ae55e9209e284907410 [file] [log] [blame]
J. Duke319a3b92007-12-01 00:00:00 +00001/*
2 * Copyright 1995-2003 Sun Microsystems, Inc. All Rights Reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. Sun designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Sun in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
22 * CA 95054 USA or visit www.sun.com if you need additional information or
23 * have any questions.
24 */
25
26package sun.applet;
27
28import java.awt.*;
29import java.io.*;
30import java.util.Properties;
31import sun.net.www.http.HttpClient;
32import sun.net.ftp.FtpClient;
33import java.security.AccessController;
34import java.security.PrivilegedAction;
35import java.security.PrivilegedExceptionAction;
36import java.security.PrivilegedActionException;
37
38import sun.security.action.*;
39
40class AppletProps extends Frame {
41
42 TextField proxyHost;
43 TextField proxyPort;
44 Choice accessMode;
45
46 AppletProps() {
47 setTitle(amh.getMessage("title"));
48 Panel p = new Panel();
49 p.setLayout(new GridLayout(0, 2));
50
51 p.add(new Label(amh.getMessage("label.http.server", "Http proxy server:")));
52 p.add(proxyHost = new TextField());
53
54 p.add(new Label(amh.getMessage("label.http.proxy")));
55 p.add(proxyPort = new TextField());
56
57 p.add(new Label(amh.getMessage("label.class")));
58 p.add(accessMode = new Choice());
59 accessMode.addItem(amh.getMessage("choice.class.item.restricted"));
60 accessMode.addItem(amh.getMessage("choice.class.item.unrestricted"));
61
62 add("Center", p);
63 p = new Panel();
64 p.add(new Button(amh.getMessage("button.apply")));
65 p.add(new Button(amh.getMessage("button.reset")));
66 p.add(new Button(amh.getMessage("button.cancel")));
67 add("South", p);
68 move(200, 150);
69 pack();
70 reset();
71 }
72
73 void reset() {
74 AppletSecurity security = (AppletSecurity) System.getSecurityManager();
75 if (security != null)
76 security.reset();
77
78 String proxyhost = (String) AccessController.doPrivileged(
79 new GetPropertyAction("http.proxyHost"));
80 String proxyport = (String) AccessController.doPrivileged(
81 new GetPropertyAction("http.proxyPort"));
82
83 Boolean tmp = (Boolean) AccessController.doPrivileged(
84 new GetBooleanAction("package.restrict.access.sun"));
85
86 boolean packageRestrict = tmp.booleanValue();
87 if (packageRestrict) {
88 accessMode.select(amh.getMessage("choice.class.item.restricted"));
89 } else {
90 accessMode.select(amh.getMessage("choice.class.item.unrestricted"));
91 }
92
93 if (proxyhost != null) {
94 proxyHost.setText(proxyhost);
95 proxyPort.setText(proxyport);
96 } else {
97 proxyHost.setText("");
98 proxyPort.setText("");
99 }
100 }
101
102 void apply() {
103 String proxyHostValue = proxyHost.getText().trim();
104 String proxyPortValue = proxyPort.getText().trim();
105
106 // Get properties
107 final Properties props = (Properties) AccessController.doPrivileged(
108 new PrivilegedAction() {
109 public Object run() {
110 return System.getProperties();
111 }
112 });
113
114 if (proxyHostValue.length() != 0) {
115 /* 4066402 */
116 /* Check for parsable value in proxy port number field before */
117 /* applying. Display warning to user until parsable value is */
118 /* entered. */
119 int proxyPortNumber = 0;
120 try {
121 proxyPortNumber = Integer.parseInt(proxyPortValue);
122 } catch (NumberFormatException e) {}
123
124 if (proxyPortNumber <= 0) {
125 proxyPort.selectAll();
126 proxyPort.requestFocus();
127 (new AppletPropsErrorDialog(this,
128 amh.getMessage("title.invalidproxy"),
129 amh.getMessage("label.invalidproxy"),
130 amh.getMessage("button.ok"))).show();
131 return;
132 }
133 /* end 4066402 */
134
135 props.put("http.proxyHost", proxyHostValue);
136 props.put("http.proxyPort", proxyPortValue);
137 } else {
138 props.put("http.proxyHost", "");
139 }
140
141 if (amh.getMessage("choice.class.item.restricted").equals(accessMode.getSelectedItem())) {
142 props.put("package.restrict.access.sun", "true");
143 } else {
144 props.put("package.restrict.access.sun", "false");
145 }
146
147 // Save properties
148 try {
149 reset();
150 AccessController.doPrivileged(new PrivilegedExceptionAction() {
151 public Object run() throws IOException {
152 File dotAV = Main.theUserPropertiesFile;
153 FileOutputStream out = new FileOutputStream(dotAV);
154 Properties avProps = new Properties();
155 for (int i = 0; i < Main.avDefaultUserProps.length; i++) {
156 String avKey = Main.avDefaultUserProps[i][0];
157 avProps.setProperty(avKey, props.getProperty(avKey));
158 }
159 avProps.store(out, amh.getMessage("prop.store"));
160 out.close();
161 return null;
162 }
163 });
164 hide();
165 } catch (java.security.PrivilegedActionException e) {
166 System.out.println(amh.getMessage("apply.exception",
167 e.getException()));
168 // XXX what's the general feeling on stack traces to System.out?
169 e.printStackTrace();
170 reset();
171 }
172 }
173
174 public boolean action(Event evt, Object obj) {
175 if (amh.getMessage("button.apply").equals(obj)) {
176 apply();
177 return true;
178 }
179 if (amh.getMessage("button.reset").equals(obj)) {
180 reset();
181 return true;
182 }
183 if (amh.getMessage("button.cancel").equals(obj)) {
184 reset();
185 hide();
186 return true;
187 }
188 return false;
189 }
190
191 private static AppletMessageHandler amh = new AppletMessageHandler("appletprops");
192
193}
194
195/* 4066432 */
196/* Dialog class to display property-related errors to user */
197
198class AppletPropsErrorDialog extends Dialog {
199 public AppletPropsErrorDialog(Frame parent, String title, String message,
200 String buttonText) {
201 super(parent, title, true);
202 Panel p = new Panel();
203 add("Center", new Label(message));
204 p.add(new Button(buttonText));
205 add("South", p);
206 pack();
207
208 Dimension dDim = size();
209 Rectangle fRect = parent.bounds();
210 move(fRect.x + ((fRect.width - dDim.width) / 2),
211 fRect.y + ((fRect.height - dDim.height) / 2));
212 }
213
214 public boolean action(Event event, Object object) {
215 hide();
216 dispose();
217 return true;
218 }
219}
220
221/* end 4066432 */