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 38 import com.sun.dhcpmgr.server.*; 39 import com.sun.dhcpmgr.data.*; 40 import com.sun.dhcpmgr.ui.*; 41 import com.sun.dhcpmgr.bridge.BridgeException; 42 43 /** 44 * A dialog to remove one or more networks from the DHCP configuration. 45 */ 46 public class DeleteNetworksDialog extends MultipleOperationDialog { 47 48 class NetworkListModel extends AbstractListModel { 49 private Vector networks; 50 51 public NetworkListModel() { 52 networks = new Vector(); 53 } 54 55 public void setNetworks(Network [] nets) { 56 networks.removeAllElements(); 57 addNetworks(nets); 58 } 59 60 public void addNetworks(Object [] nets) { 61 if (nets != null) { 62 for (int i = 0; i < nets.length; ++i) { 63 networks.addElement((Network)nets[i]); 64 } 65 } 66 fireContentsChanged(this, 0, networks.size()-1); 67 } 68 69 public void deleteNetworks(Object [] nets) { 70 for (int i = 0; i < nets.length; ++i) { 71 networks.removeElement((Network)nets[i]); 72 } 73 fireContentsChanged(this, 0, networks.size()-1); 74 } 75 76 public Object getElementAt(int index) { 77 return networks.elementAt(index); 78 } 79 80 public int getSize() { 81 return networks.size(); 82 } 83 } 84 85 private JList keepNets, deleteNets; 86 private LeftButton leftButton; 87 private RightButton rightButton; 88 89 public DeleteNetworksDialog(Frame f) { 90 // We want a reset button 91 super(f, true); 92 } 93 94 public String getTitle() { 95 return ResourceStrings.getString("delete_networks_title"); 96 } 97 98 protected JPanel getMainPanel() { 99 JPanel mainPanel = new JPanel(new BorderLayout()); 100 mainPanel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); 101 102 JPanel netBox = new JPanel(new ProportionalLayout()); 103 JPanel panel = new JPanel(new BorderLayout(5, 5)); 104 105 Mnemonic mnKeep = 106 new Mnemonic(ResourceStrings.getString("delete_networks_keep")); 107 JLabel delNetsLbl = new JLabel(mnKeep.getString()); 108 panel.add(delNetsLbl, BorderLayout.NORTH); 109 delNetsLbl.setToolTipText(mnKeep.getString()); 110 keepNets = new JList(new NetworkListModel()); 111 delNetsLbl.setLabelFor(keepNets); 112 delNetsLbl.setDisplayedMnemonic(mnKeep.getMnemonic()); 113 114 keepNets.setSelectionMode( 115 ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); 116 JScrollPane scrollPane = new JScrollPane(keepNets); 117 panel.add(scrollPane, BorderLayout.CENTER); 118 netBox.add("2", panel); 119 120 panel = new JPanel(new VerticalButtonLayout()); 121 leftButton = new LeftButton(); 122 rightButton = new RightButton(); 123 rightButton.setEnabled(false); 124 leftButton.setEnabled(false); 125 panel.add(rightButton); 126 panel.add(leftButton); 127 netBox.add("1", panel); 128 129 panel = new JPanel(new BorderLayout(5, 5)); 130 131 Mnemonic mnDel = 132 new Mnemonic(ResourceStrings.getString("delete_networks_delete")); 133 JLabel delNets = new JLabel(mnDel.getString()); 134 panel.add(delNets, BorderLayout.NORTH); 135 136 deleteNets = new JList(new NetworkListModel()); 137 deleteNets.setSelectionMode( 138 ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); 139 140 delNets.setLabelFor(deleteNets); 141 delNets.setToolTipText(mnDel.getString()); 142 delNets.setDisplayedMnemonic(mnDel.getMnemonic()); 143 144 scrollPane = new JScrollPane(deleteNets); 145 panel.add(scrollPane, BorderLayout.CENTER); 146 netBox.add("2", panel); 147 148 mainPanel.add(netBox, BorderLayout.CENTER); 149 150 // Handle enable and disable of buttons based on selection state 151 keepNets.addListSelectionListener(new ListSelectionListener() { 152 public void valueChanged(ListSelectionEvent e) { 153 rightButton.setEnabled(!keepNets.isSelectionEmpty()); 154 if (!keepNets.isSelectionEmpty()) { 155 deleteNets.clearSelection(); 156 } 157 } 158 }); 159 160 deleteNets.addListSelectionListener(new ListSelectionListener() { 161 public void valueChanged(ListSelectionEvent e) { 162 leftButton.setEnabled(!deleteNets.isSelectionEmpty()); 163 if (!deleteNets.isSelectionEmpty()) { 164 keepNets.clearSelection(); 165 } 166 } 167 }); 168 169 // Handle button presses 170 rightButton.addActionListener(new ActionListener() { 171 public void actionPerformed(ActionEvent e) { 172 Object [] nets = keepNets.getSelectedValues(); 173 ((NetworkListModel)deleteNets.getModel()).addNetworks(nets); 174 ((NetworkListModel)keepNets.getModel()).deleteNetworks(nets); 175 if (deleteNets.getModel().getSize() != 0) { 176 buttonPanel.setOkEnabled(true); 177 } 178 /* 179 * Clear the selection; prevents exceptions from selection 180 * having been deleted 181 */ 182 keepNets.clearSelection(); 183 } 184 }); 185 186 leftButton.addActionListener(new ActionListener() { 187 public void actionPerformed(ActionEvent e) { 188 Object [] nets = deleteNets.getSelectedValues(); 189 ((NetworkListModel)keepNets.getModel()).addNetworks(nets); 190 ((NetworkListModel)deleteNets.getModel()).deleteNetworks(nets); 191 /* 192 * Clear the selection; prevents exceptions from selection 193 * having been deleted 194 */ 195 deleteNets.clearSelection(); 196 if (deleteNets.getModel().getSize() == 0) { 197 buttonPanel.setOkEnabled(false); 198 } 199 } 200 }); 201 202 doReset(); 203 204 return mainPanel; 205 } 206 207 protected void doReset() { 208 try { 209 buttonPanel.setOkEnabled(false); 210 ((NetworkListModel)deleteNets.getModel()).setNetworks(null); 211 ((NetworkListModel)keepNets.getModel()).setNetworks( 212 DataManager.get().getNetworks(false)); 213 } catch (Throwable e) { 214 e.printStackTrace(); 215 // Do nothing 216 } 217 } 218 219 protected String getProgressMessage() { 220 return ResourceStrings.getString("delete_networks_progress"); 221 } 222 223 protected int getProgressLength() { 224 return deleteNets.getModel().getSize(); 225 } 226 227 protected String getErrorHeading() { 228 return ResourceStrings.getString("network_column"); 229 } 230 231 protected Thread getOperationThread() { 232 return new Thread() { 233 public void run() { 234 NetworkListModel model = 235 (NetworkListModel)deleteNets.getModel(); 236 for (int i = 0; i < model.getSize(); ++i) { 237 Network net = (Network)model.getElementAt(i); 238 try { 239 DataManager.get().getDhcpNetMgr().deleteNetwork( 240 net.toString(), true); 241 updateProgress(i+1, net.toString()); 242 } catch (InterruptedException e) { 243 // User asked us to stop 244 closeDialog(); 245 return; 246 } catch (Throwable e) { 247 addError(net.toString(), e.getMessage()); 248 } 249 } 250 if (errorsOccurred()) { 251 displayErrors( 252 ResourceStrings.getString("delete_networks_error")); 253 } 254 closeDialog(); 255 } 256 }; 257 } 258 259 protected String getHelpKey() { 260 return "delete_network"; 261 } 262 263 protected void fireActionPerformed() { 264 fireActionPerformed(this, DialogActions.OK); 265 } 266 }