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 }