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 java.awt.*;
29 import java.awt.event.*;
30 import java.text.MessageFormat;
31 import java.util.*;
32 import javax.swing.*;
33 import javax.swing.table.*;
34
35 import com.sun.dhcpmgr.server.*;
36 import com.sun.dhcpmgr.data.*;
37 import com.sun.dhcpmgr.ui.*;
38 import com.sun.dhcpmgr.bridge.BridgeException;
39
40 /**
41 * This dialog is used to delete one or more addresses from a network
42 */
43
44 public class DeleteAddressDialog extends MultipleOperationDialog {
45 private DhcpClientRecord [] recs;
46 private String table;
47
48 // Model for the list of addresses to be deleted
49 class AddressTableModel extends AbstractTableModel {
50 public int getRowCount() {
51 if (recs == null) {
52 return 0;
53 } else {
54 return recs.length;
55 }
56 }
57
58 public int getColumnCount() {
59 return 2;
60 }
61
62 public Object getValueAt(int row, int column) {
63 if (column == 0) {
64 return recs[row].getClientIP();
65 } else {
66 if (recs[row].getClientName().equals(
67 recs[row].getClientIPAddress())) {
68 // Name returned is IP address, so there is no name
69 return "";
70 } else {
71 return recs[row].getClientName();
72 }
73 }
74 }
75
76 public Class getColumnClass(int column) {
77 if (column == 0) {
78 return IPAddress.class;
79 } else {
80 return String.class;
81 }
82 }
83
84 public String getColumnName(int column) {
85 if (column == 0) {
86 return ResourceStrings.getString("address_column");
87 } else {
88 return ResourceStrings.getString("client_name_column");
89 }
90 }
91 }
92
93 public DeleteAddressDialog(Frame f, DhcpClientRecord [] clients,
94 String table) {
95 // Create the dialog without a reset button
96 super(f, false);
97 recs = clients;
98 this.table = table;
99 }
100
101 public String getTitle() {
102 return ResourceStrings.getString("delete_address_title");
103 }
104
105 protected JPanel getMainPanel() {
106 JPanel mainPanel = new JPanel(new BorderLayout(10, 10));
107 mainPanel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
108
109 // Place a message at the top of the display
110 JLabel message = new JLabel(
111 ResourceStrings.getString("delete_address_confirm"));
112
113 message.setLabelFor(mainPanel);
114 message.setToolTipText(
115 ResourceStrings.getString("delete_address_confirm"));
116
117 mainPanel.add(message, BorderLayout.NORTH);
118
119 // Now show the list of addresses to be deleted in a table in the middle
120 JTable addressTable = new JTable(new AddressTableModel());
121 JScrollPane scrollPane = new JScrollPane(addressTable);
122 Dimension d = addressTable.getPreferredScrollableViewportSize();
123 d.height = 100;
124 addressTable.setPreferredScrollableViewportSize(d);
125 addressTable.setDefaultRenderer(IPAddress.class,
126 new ExtendedCellRenderer());
127 mainPanel.add(scrollPane, BorderLayout.CENTER);
128
129 buttonPanel.setOkEnabled(true);
130 return mainPanel;
131 }
132
133 protected String getProgressMessage() {
134 return ResourceStrings.getString("delete_addr_progress");
135 }
136
137 protected int getProgressLength() {
138 return recs.length;
139 }
140
141 protected String getErrorHeading() {
142 return ResourceStrings.getString("address_column");
143 }
144
145 protected Class getErrorClass() {
146 return IPAddress.class;
147 }
148
149 protected Thread getOperationThread() {
150 // Create the thread we'll use
151 return new Thread() {
152 public void run() {
153 DhcpNetMgr server = DataManager.get().getDhcpNetMgr();
154 for (int i = 0; i < recs.length; ++i) {
155 try {
156 server.deleteClient(recs[i], table);
157 updateProgress(i+1, recs[i].getClientIPAddress());
158 } catch (InterruptedException e) {
159 // User asked us to stop
160 closeDialog();
161 return;
162 } catch (Throwable e) {
163 addError(recs[i].getClientIP(), e.getMessage());
164 }
165 }
166 // Errors occurred, display them
167 if (errorsOccurred()) {
168 displayErrors(
169 ResourceStrings.getString("delete_address_error"));
170 }
171 closeDialog();
172 }
173 };
174 }
175
176 protected String getHelpKey() {
177 return "delete_address";
178 }
179
180 protected void fireActionPerformed() {
181 fireActionPerformed(this, DialogActions.DELETE);
182 }
183 }