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"