001 /* 002 * Licensed to the Apache Software Foundation (ASF) under one 003 * or more contributor license agreements. See the NOTICE file 004 * distributed with this work for additional information 005 * regarding copyright ownership. The ASF licenses this file 006 * to you under the Apache License, Version 2.0 (the 007 * "License"); you may not use this file except in compliance 008 * with the License. You may obtain a copy of the License at 009 * 010 * http://www.apache.org/licenses/LICENSE-2.0 011 * 012 * Unless required by applicable law or agreed to in writing, 013 * software distributed under the License is distributed on an 014 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 015 * KIND, either express or implied. See the License for the 016 * specific language governing permissions and limitations 017 * under the License. 018 * 019 */ 020 package org.apache.directory.server.ldap.gui; 021 022 023 import java.awt.BorderLayout; 024 import java.net.InetSocketAddress; 025 import java.util.Map; 026 027 import javax.swing.JFrame; 028 import javax.swing.JPanel; 029 import javax.swing.JDialog; 030 import javax.swing.JScrollPane; 031 import javax.swing.JTable; 032 import javax.swing.JButton; 033 034 import org.apache.directory.server.ldap.LdapServer; 035 import org.apache.directory.server.ldap.LdapSession; 036 import org.apache.directory.shared.ldap.message.internal.InternalAbandonableRequest; 037 038 import javax.swing.JTextArea; 039 import javax.swing.event.ListSelectionEvent; 040 import javax.swing.event.ListSelectionListener; 041 042 043 public class OutstandingRequestsDialog extends JDialog 044 { 045 private static final long serialVersionUID = -3777123348215825711L; 046 private static final InternalAbandonableRequest[] EMPTY_REQUEST_ARRAY = new InternalAbandonableRequest[0]; 047 private JPanel jContentPane; 048 private JPanel jPanel; 049 private JScrollPane jScrollPane; 050 private JTable jTable; 051 private JPanel jPanel1; 052 private JButton jButton; 053 054 final LdapSession session; 055 final LdapServer ldapServer; 056 057 private JPanel jPanel2; 058 private JTextArea jTextArea; 059 private JButton jButton1; 060 private JButton jButton2; 061 062 063 /** 064 * This is the default constructor 065 * @param owner the owning frame 066 * @param session the MINA IoSession to get outstanding requests for 067 * @param sessionRegistry the session registry 068 */ 069 public OutstandingRequestsDialog( JFrame owner, LdapSession session, LdapServer ldapServer ) 070 { 071 super( owner, true ); 072 this.session = session; 073 this.ldapServer = ldapServer; 074 075 StringBuffer buf = new StringBuffer(); 076 buf.append( "Outstanding Requests: " ); 077 buf.append( ( ( InetSocketAddress ) session.getIoSession().getRemoteAddress() ).getHostName() ); 078 buf.append( ":" ); 079 buf.append( ( ( InetSocketAddress ) session.getIoSession().getRemoteAddress() ).getPort() ); 080 setTitle( buf.toString() ); 081 initialize(); 082 } 083 084 085 /** 086 * This method initializes this 087 */ 088 private void initialize() 089 { 090 this.setSize( 549, 341 ); 091 this.setContentPane( getJContentPane() ); 092 } 093 094 095 /** 096 * This method initializes jContentPane 097 * 098 * @return javax.swing.JPanel 099 */ 100 private JPanel getJContentPane() 101 { 102 if ( jContentPane == null ) 103 { 104 jContentPane = new JPanel(); 105 jContentPane.setLayout( new BorderLayout() ); 106 jContentPane.add( getJPanel(), java.awt.BorderLayout.CENTER ); 107 } 108 return jContentPane; 109 } 110 111 112 /** 113 * This method initializes jPanel 114 * 115 * @return javax.swing.JPanel 116 */ 117 private JPanel getJPanel() 118 { 119 if ( jPanel == null ) 120 { 121 jPanel = new JPanel(); 122 jPanel.setLayout( new BorderLayout() ); 123 jPanel.add( getJScrollPane(), java.awt.BorderLayout.CENTER ); 124 jPanel.add( getJPanel1(), java.awt.BorderLayout.SOUTH ); 125 jPanel.add( getJPanel2(), java.awt.BorderLayout.NORTH ); 126 } 127 return jPanel; 128 } 129 130 131 /** 132 * This method initializes jScrollPane 133 * 134 * @return javax.swing.JScrollPane 135 */ 136 private JScrollPane getJScrollPane() 137 { 138 if ( jScrollPane == null ) 139 { 140 jScrollPane = new JScrollPane(); 141 jScrollPane.setViewportView( getJTable() ); 142 } 143 return jScrollPane; 144 } 145 146 147 /** 148 * This method initializes jTable 149 * 150 * @return javax.swing.JTable 151 */ 152 private JTable getJTable() 153 { 154 if ( jTable == null ) 155 { 156 jTable = new JTable(); 157 } 158 159 setRequestsModel(); 160 jTable.getSelectionModel().addListSelectionListener( new ListSelectionListener() 161 { 162 public void valueChanged( ListSelectionEvent e ) 163 { 164 int row = jTable.getSelectedRow(); 165 if ( row > -1 ) 166 { 167 jButton2.setEnabled( true ); 168 InternalAbandonableRequest req = ( ( OutstandingRequestsModel ) jTable.getModel() ) 169 .getAbandonableRequest( row ); 170 jTextArea.setText( req.toString() ); 171 jTextArea.setEnabled( true ); 172 } 173 else 174 { 175 jButton2.setEnabled( false ); 176 jTextArea.setText( "" ); 177 jTextArea.setEnabled( false ); 178 } 179 } 180 } ); 181 return jTable; 182 } 183 184 185 private void setRequestsModel() 186 { 187 InternalAbandonableRequest[] requests; 188 Map<Integer, InternalAbandonableRequest> reqsMap = session.getOutstandingRequests(); 189 190 if ( reqsMap != null ) 191 { 192 requests = new InternalAbandonableRequest[reqsMap.size()]; 193 //noinspection unchecked 194 requests = (org.apache.directory.shared.ldap.message.internal.InternalAbandonableRequest[] ) reqsMap.values().toArray( requests ); 195 } 196 else 197 { 198 requests = EMPTY_REQUEST_ARRAY; 199 } 200 201 jTable.setModel( new OutstandingRequestsModel( requests ) ); 202 } 203 204 205 /** 206 * This method initializes jPanel1 207 * 208 * @return javax.swing.JPanel 209 */ 210 private JPanel getJPanel1() 211 { 212 if ( jPanel1 == null ) 213 { 214 jPanel1 = new JPanel(); 215 jPanel1.add( getJButton(), null ); 216 jPanel1.add( getJButton1(), null ); 217 } 218 return jPanel1; 219 } 220 221 222 /** 223 * This method initializes jButton 224 * 225 * @return javax.swing.JButton 226 */ 227 private JButton getJButton() 228 { 229 if ( jButton == null ) 230 { 231 jButton = new JButton(); 232 jButton.setText( "Done" ); 233 jButton.addActionListener( new java.awt.event.ActionListener() 234 { 235 public void actionPerformed( java.awt.event.ActionEvent e ) 236 { 237 OutstandingRequestsDialog.this.setVisible( false ); 238 OutstandingRequestsDialog.this.dispose(); 239 } 240 } ); 241 } 242 return jButton; 243 } 244 245 246 /** 247 * This method initializes jPanel2 248 * 249 * @return javax.swing.JPanel 250 */ 251 private JPanel getJPanel2() 252 { 253 if ( jPanel2 == null ) 254 { 255 jPanel2 = new JPanel(); 256 jPanel2.setLayout( new BorderLayout() ); 257 jPanel2.setBorder( javax.swing.BorderFactory.createTitledBorder( null, "Request", 258 javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, 259 javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null ) ); 260 jPanel2.add( getJButton2(), java.awt.BorderLayout.WEST ); 261 jPanel2.add( getJTextArea(), java.awt.BorderLayout.CENTER ); 262 } 263 return jPanel2; 264 } 265 266 267 /** 268 * This method initializes jTextArea 269 * 270 * @return javax.swing.JTextArea 271 */ 272 private JTextArea getJTextArea() 273 { 274 if ( jTextArea == null ) 275 { 276 jTextArea = new JTextArea(); 277 } 278 279 jTextArea.setEnabled( false ); 280 jTextArea.setEditable( false ); 281 return jTextArea; 282 } 283 284 285 /** 286 * This method initializes jButton1 287 * 288 * @return javax.swing.JButton 289 */ 290 private JButton getJButton1() 291 { 292 if ( jButton1 == null ) 293 { 294 jButton1 = new JButton(); 295 jButton1.setText( "Refresh" ); 296 jButton1.addActionListener( new java.awt.event.ActionListener() 297 { 298 public void actionPerformed( java.awt.event.ActionEvent e ) 299 { 300 setRequestsModel(); 301 jTextArea.setText( "" ); 302 jTextArea.setEnabled( false ); 303 jButton2.setEnabled( false ); 304 } 305 } ); 306 } 307 return jButton1; 308 } 309 310 311 /** 312 * This method initializes jButton2 313 * 314 * @return javax.swing.JButton 315 */ 316 private JButton getJButton2() 317 { 318 if ( jButton2 == null ) 319 { 320 jButton2 = new JButton(); 321 jButton2.setText( "Abandon" ); 322 jButton2.setEnabled( false ); 323 jButton2.addActionListener( new java.awt.event.ActionListener() 324 { 325 public void actionPerformed( java.awt.event.ActionEvent e ) 326 { 327 int row = jTable.getSelectedRow(); 328 InternalAbandonableRequest req = ( ( OutstandingRequestsModel ) jTable.getModel() ) 329 .getAbandonableRequest( row ); 330 req.abandon(); 331 session.abandonOutstandingRequest( req.getMessageId() ); 332 setRequestsModel(); 333 } 334 } ); 335 } 336 return jButton2; 337 } 338 } // @jve:decl-index=0:visual-constraint="10,10"