1 /*
2 * CDDL HEADER START
3 *
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License, Version 1.0 only
6 * (the "License"). You may not use this file except in compliance
7 * with the License.
8 *
9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10 * or http://www.opensolaris.org/os/licensing.
11 * See the License for the specific language governing permissions
12 * and limitations under the License.
13 *
14 * When distributing Covered Code, include this CDDL HEADER in each
15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16 * If applicable, add the following below this CDDL HEADER, with the
17 * fields enclosed by brackets "[]" replaced with your own identifying
18 * information: Portions Copyright [yyyy] [name of copyright owner]
19 *
20 * CDDL HEADER END
21 */
22 /*
23 * Copyright 1998-2002 by Sun Microsystems, Inc. All rights reserved.
24 * Use is subject to license terms.
25 */
26 package com.sun.dhcpmgr.client;
27
28 import javax.swing.*;
29 import javax.swing.border.*;
30 import javax.swing.event.*;
31 import javax.swing.table.*;
32
33 import java.awt.*;
34 import java.awt.event.*;
35 import java.text.*;
36 import java.util.*;
37 import java.net.*;
38
39 import com.sun.dhcpmgr.bridge.*;
40 import com.sun.dhcpmgr.server.*;
41 import com.sun.dhcpmgr.data.*;
42 import com.sun.dhcpmgr.ui.*;
43
44 /**
45 * A dialog to confirm the user's request to unconfigure the service.
46 */
47 public class UnconfigureDialog extends MultipleOperationDialog {
48 private JCheckBox deleteTables;
49 private int networkCount = 0;
50 private Network [] nets = new Network[0];
51
52 public UnconfigureDialog(Frame f) {
53 // No reset button for us
54 super(f, false);
55 }
56
57 public String getTitle() {
58 return ResourceStrings.getString("unconfigure_title");
59 }
60
61 protected JPanel getMainPanel() {
62
63 JPanel mainPanel = new JPanel();
64 mainPanel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
65
66 Box box = Box.createVerticalBox();
67
68 if (!DhcpmgrApplet.modeIsRelay) {
69 JComponent c = Wizard.createTextArea(
70 ResourceStrings.getString("unconfigure_dhcp"), 4, 30);
71 c.setAlignmentX(Component.LEFT_ALIGNMENT);
72 box.add(c);
73 box.add(Box.createVerticalStrut(10));
74 deleteTables = new JCheckBox(
75 ResourceStrings.getString("unconfigure_delete_tables"), false);
76 deleteTables.setToolTipText(
77 ResourceStrings.getString("unconfigure_delete_tables"));
78 deleteTables.setAlignmentX(Component.LEFT_ALIGNMENT);
79 box.add(deleteTables);
80 box.add(Box.createVerticalStrut(10));
81 } else {
82 JComponent c = Wizard.createTextArea(
83 ResourceStrings.getString("unconfigure_bootp"), 4, 30);
84 c.setAlignmentX(Component.LEFT_ALIGNMENT);
85 box.add(c);
86 }
87 box.add(Box.createVerticalStrut(10));
88 JComponent c = Wizard.createTextArea(
89 ResourceStrings.getString("unconfigure_shutdown"), 2, 30);
90 c.setAlignmentX(Component.LEFT_ALIGNMENT);
91 box.add(c);
92 mainPanel.add(box);
93 buttonPanel.setOkEnabled(true);
94 return mainPanel;
95 }
96
97 protected String getProgressMessage() {
98 return ResourceStrings.getString("unconfigure_progress");
99 }
100
101 protected int getProgressLength() {
102 // Initialize to number of ops required even if only a relay
103 int length = 2;
104 if (!DhcpmgrApplet.modeIsRelay) {
105 // Add one for deleting defaults file, and one for deleting macro
106 length += 2;
107 if (deleteTables.isSelected()) {
108 try {
109 nets = DataManager.get().getNetworks(false);
110 } catch (Throwable t) {
111 // Ignore
112 }
113 length += nets.length + 1; // Add one for dhcptab
114 }
115 }
116 return length;
117 }
118
119 protected String getErrorHeading() {
120 return ResourceStrings.getString("unconfigure_error_heading");
121 }
122
123 protected Thread getOperationThread() {
124 return new Thread() {
125 public void run() {
126 int checkpoint = 0;
127 DhcpServiceMgr serviceMgr =
128 DataManager.get().getDhcpServiceMgr();
129 // Shut down the server
130 try {
131 serviceMgr.shutdown();
132 } catch (Throwable e) {
133 addError(
134 ResourceStrings.getString("unconfigure_error_shutdown"),
135 e.getMessage());
136 }
137 try {
138 updateProgress(++checkpoint, ResourceStrings.getString(
139 "unconfigure_server_shutdown"));
140 } catch (InterruptedException e) {
141 closeDialog();
142 return;
143 }
144
145 // If this was a relay we're done
146 if (!DhcpmgrApplet.modeIsRelay) {
147 // Remove the server macro
148 try {
149 DataManager.get().getDhcptabMgr().deleteRecord(
150 new Macro(DataManager.get().getShortServerName()),
151 false);
152 } catch (Throwable e) {
153 addError(ResourceStrings.getString(
154 "unconfigure_error_macro"),
155 e.getMessage());
156 }
157 try {
158 updateProgress(++checkpoint, ResourceStrings.getString(
159 "unconfigure_macro_deleted"));
160 } catch (InterruptedException e) {
161 closeDialog();
162 return;
163 }
164
165 // Delete all the network tables and the dhcptab
166 if (deleteTables.isSelected()) {
167 if (nets != null && nets.length != 0) {
168 MessageFormat errForm = new MessageFormat(
169 ResourceStrings.getString(
170 "unconfigure_error_network"));
171 MessageFormat progForm = new MessageFormat(
172 ResourceStrings.getString(
173 "unconfigure_network_progress"));
174 Object [] args = new Object[1];
175 for (int i = 0; i < nets.length; ++i) {
176 String netString = nets[i].toString();
177 args[0] = netString;
178 try {
179 DataManager.get().getDhcpNetMgr().
180 deleteNetwork(netString, true);
181 } catch (Throwable e) {
182 addError(errForm.format(args),
183 e.getMessage());
184 }
185 try {
186 updateProgress(++checkpoint,
187 progForm.format(args));
188 } catch (InterruptedException e) {
189 closeDialog();
190 return;
191 }
192 }
193 }
194 try {
195 DataManager.get().getDhcptabMgr().deleteDhcptab();
196 } catch (Throwable e) {
197 addError(ResourceStrings.getString(
198 "unconfigure_error_dhcptab"),
199 e.getMessage());
200 }
201 try {
202 updateProgress(++checkpoint,
203 ResourceStrings.getString(
204 "unconfigure_dhcptab_deleted"));
205 } catch (InterruptedException e) {
206 closeDialog();
207 return;
208 }
209 }
210 }
211
212 // Remove the defaults file last, else stuff above may fail.
213 try {
214 serviceMgr.removeDefaults();
215 } catch (Throwable e) {
216 addError(ResourceStrings.getString(
217 "unconfigure_error_defaults"), e.getMessage());
218 }
219 try {
220 updateProgress(++checkpoint, ResourceStrings.getString(
221 "unconfigure_defaults_deleted"));
222 } catch (InterruptedException e) {
223 closeDialog();
224 return;
225 }
226
227 if (errorsOccurred()) {
228 displayErrors(ResourceStrings.getString(
229 "unconfigure_error_messages"));
230 }
231 closeDialog();
232 }
233 };
234 }
235
236 protected String getHelpKey() {
237 if (DhcpmgrApplet.modeIsRelay) {
238 return "unconfigure_relay";
239 } else {
240 return "unconfigure_server";
241 }
242 }
243
244 protected void fireActionPerformed() {
245 fireActionPerformed(this, DialogActions.OK);
246 }
247
248 }