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.awt.Component;
025 import java.awt.Dimension;
026 import java.awt.Point;
027 import java.awt.Toolkit;
028 import java.awt.event.WindowAdapter;
029 import java.awt.event.WindowEvent;
030 import java.io.IOException;
031 import java.util.ArrayList;
032 import java.util.List;
033
034 import javax.swing.JOptionPane;
035 import javax.swing.JPanel;
036 import javax.swing.JFrame;
037 import javax.swing.JScrollPane;
038 import javax.swing.JTable;
039 import javax.swing.JButton;
040 import javax.swing.BoxLayout;
041 import javax.swing.JTextField;
042 import javax.swing.JMenuBar;
043 import javax.swing.JMenu;
044 import javax.swing.JMenuItem;
045 import javax.swing.event.ListSelectionEvent;
046 import javax.swing.event.ListSelectionListener;
047
048 import org.apache.directory.server.ldap.LdapServer;
049 import org.apache.directory.server.ldap.LdapSession;
050 import org.apache.directory.server.ldap.handlers.extended.GracefulShutdownHandler;
051 import org.apache.directory.shared.ldap.message.extended.GracefulDisconnect;
052 import org.apache.directory.shared.ldap.message.extended.NoticeOfDisconnect;
053 import org.apache.mina.core.future.CloseFuture;
054 import org.apache.mina.core.future.WriteFuture;
055 import org.apache.mina.core.service.IoAcceptor;
056 import org.apache.mina.core.service.IoHandler;
057 import org.apache.mina.core.session.IoSession;
058
059 import org.slf4j.Logger;
060 import org.slf4j.LoggerFactory;
061
062
063 public class SessionsFrame extends JFrame
064 {
065 private static final Logger LOG = LoggerFactory.getLogger( SessionsFrame.class );
066 private static final long serialVersionUID = -863445561454536133L;
067 private static final String REFRESH_COMMAND = "Refresh";
068
069 boolean isServiceBound = true;
070 private IoSession requestor;
071 private IoHandler ldapProvider;
072 private JPanel jContentPane;
073 private JPanel mainPanel;
074 private JScrollPane sessionsPane;
075 private JTable sessionsTable;
076 private JPanel filterPanel;
077 private JButton filterButton;
078 private JTextField filterText;
079 private JMenuBar menuBar;
080 private JMenu menuFile;
081 private JMenuItem exitItem;
082 private JMenu menuSession;
083 private JMenuItem closeItem;
084 private JMenu menuSendNoD;
085 private JMenuItem unavailableItem;
086 private JMenuItem protocolErrorItem;
087 private JMenuItem strongAuthRequiredItem;
088 private JPanel southPanel;
089 private JMenuItem showRequests;
090 private JButton refreshButton;
091
092 private LdapSession selected;
093 private JMenuItem unbindItem;
094 private JMenuItem bindItem;
095 private LdapServer ldapServer;
096
097
098 /**
099 * This is the default constructor
100 * @param ldapServer the session registry
101 */
102 public SessionsFrame( LdapServer ldapServer )
103 {
104 super();
105 this.ldapServer = ldapServer;
106 initialize();
107 }
108
109
110 /**
111 * This method initializes this
112 */
113 private void initialize()
114 {
115 this.setSize( 789, 436 );
116 this.setJMenuBar( getMainMenuBar() );
117 this.setContentPane( getJContentPane() );
118 this.setTitle( "Sessions" );
119 this.addWindowListener( new java.awt.event.WindowAdapter()
120 {
121 public void windowClosing( java.awt.event.WindowEvent e )
122 {
123 SessionsFrame.this.setVisible( false );
124 SessionsFrame.this.dispose();
125 }
126 } );
127 }
128
129
130 /**
131 * This method initializes jContentPane
132 *
133 * @return javax.swing.JPanel
134 */
135 private JPanel getJContentPane()
136 {
137 if ( jContentPane == null )
138 {
139 jContentPane = new JPanel();
140 jContentPane.setLayout( new BorderLayout() );
141 jContentPane.add( getMainPanel(), java.awt.BorderLayout.CENTER );
142 }
143 return jContentPane;
144 }
145
146
147 /**
148 * This method initializes jPanel
149 *
150 * @return javax.swing.JPanel
151 */
152 private JPanel getMainPanel()
153 {
154 if ( mainPanel == null )
155 {
156 mainPanel = new JPanel();
157 mainPanel.setLayout( new BorderLayout() );
158 mainPanel.add( getFilterPanel(), java.awt.BorderLayout.NORTH );
159 mainPanel.add( getSessionsPane(), java.awt.BorderLayout.CENTER );
160 mainPanel.add( getSouthPanel(), java.awt.BorderLayout.SOUTH );
161 }
162 return mainPanel;
163 }
164
165
166 /**
167 * This method initializes jScrollPane
168 *
169 * @return javax.swing.JScrollPane
170 */
171 private JScrollPane getSessionsPane()
172 {
173 if ( sessionsPane == null )
174 {
175 sessionsPane = new JScrollPane();
176 sessionsPane.setName( "jScrollPane" );
177 sessionsPane.setViewportView( getSessionsTable() );
178 }
179 return sessionsPane;
180 }
181
182
183 /**
184 * This method initializes jTable
185 *
186 * @return javax.swing.JTable
187 */
188 private JTable getSessionsTable()
189 {
190 if ( sessionsTable == null )
191 {
192 sessionsTable = new JTable();
193 sessionsTable.setSelectionMode( javax.swing.ListSelectionModel.SINGLE_SELECTION );
194 sessionsTable.setModel( new SessionsModel( ldapServer.getLdapSessionManager().getSessions() ) );
195 sessionsTable.getSelectionModel().addListSelectionListener( new ListSelectionListener()
196 {
197 public void valueChanged( ListSelectionEvent e )
198 {
199 int row = sessionsTable.getSelectedRow();
200 if ( row == -1 )
201 {
202 selected = null;
203 }
204 else
205 {
206 selected = ( ( SessionsModel ) sessionsTable.getModel() ).getLdapSession( row );
207 closeItem.setEnabled( true );
208 menuSendNoD.setEnabled( true );
209 showRequests.setEnabled( true );
210 }
211 }
212 } );
213 }
214 return sessionsTable;
215 }
216
217
218 /**
219 * This method initializes jPanel
220 *
221 * @return javax.swing.JPanel
222 */
223 private JPanel getFilterPanel()
224 {
225 if ( filterPanel == null )
226 {
227 filterPanel = new JPanel();
228 filterPanel.setLayout( new BoxLayout( getFilterPanel(), BoxLayout.X_AXIS ) );
229 filterPanel.setBorder( javax.swing.BorderFactory
230 .createEtchedBorder( javax.swing.border.EtchedBorder.RAISED ) );
231 filterPanel.add( getFilterButton(), null );
232 filterPanel.add( getFilterText(), null );
233 }
234 return filterPanel;
235 }
236
237
238 /**
239 * This method initializes jButton
240 *
241 * @return javax.swing.JButton
242 */
243 private JButton getFilterButton()
244 {
245 if ( filterButton == null )
246 {
247 filterButton = new JButton();
248 filterButton.setText( "Filter" );
249 }
250 return filterButton;
251 }
252
253
254 /**
255 * This method initializes jTextField
256 *
257 * @return javax.swing.JTextField
258 */
259 private JTextField getFilterText()
260 {
261 if ( filterText == null )
262 {
263 filterText = new JTextField();
264 }
265 return filterText;
266 }
267
268
269 /**
270 * This method initializes jJMenuBar
271 *
272 * @return javax.swing.JMenuBar
273 */
274 private JMenuBar getMainMenuBar()
275 {
276 if ( menuBar == null )
277 {
278 menuBar = new JMenuBar();
279 menuBar.add( getMenuFile() );
280 menuBar.add( getMenuSession() );
281 }
282 return menuBar;
283 }
284
285
286 /**
287 * This method initializes jMenu
288 *
289 * @return javax.swing.JMenu
290 */
291 private JMenu getMenuFile()
292 {
293 if ( menuFile == null )
294 {
295 menuFile = new JMenu();
296 menuFile.setText( "File" );
297 menuFile.add( getExitItem() );
298 }
299 return menuFile;
300 }
301
302
303 /**
304 * This method initializes jMenuItem
305 *
306 * @return javax.swing.JMenuItem
307 */
308 private JMenuItem getExitItem()
309 {
310 if ( exitItem == null )
311 {
312 exitItem = new JMenuItem();
313 exitItem.setText( "exit" );
314 exitItem.addActionListener( new java.awt.event.ActionListener()
315 {
316 public void actionPerformed( java.awt.event.ActionEvent e )
317 {
318 SessionsFrame.this.setVisible( false );
319 SessionsFrame.this.dispose();
320 }
321 } );
322 }
323 return exitItem;
324 }
325
326
327 /**
328 * This method initializes jMenu
329 *
330 * @return javax.swing.JMenu
331 */
332 private JMenu getMenuSession()
333 {
334 if ( menuSession == null )
335 {
336 menuSession = new JMenu();
337 menuSession.setText( "Session" );
338 menuSession.add( getCloseItem() );
339 closeItem.setEnabled( false );
340 menuSession.add( getMenuSendNoD() );
341 menuSendNoD.setEnabled( false );
342 menuSession.add( getShowRequests() );
343 menuSession.add( getUnbindItem() );
344 menuSession.add( getBindItem() );
345 showRequests.setEnabled( false );
346 }
347 return menuSession;
348 }
349
350
351 /**
352 * This method initializes jMenuItem
353 *
354 * @return javax.swing.JMenuItem
355 */
356 private JMenuItem getCloseItem()
357 {
358 if ( closeItem == null )
359 {
360 closeItem = new JMenuItem();
361 closeItem.setText( "close" );
362 closeItem.addActionListener( new java.awt.event.ActionListener()
363 {
364 public void actionPerformed( java.awt.event.ActionEvent e )
365 {
366 ldapServer.getLdapSessionManager().removeLdapSession( selected.getIoSession() );
367 try
368 {
369 Thread.sleep( 250 );
370 }
371 catch ( InterruptedException e1 )
372 {
373 LOG.error( "", e1 );
374 }
375 refresh();
376 }
377 } );
378 }
379 return closeItem;
380 }
381
382
383 /**
384 * This method initializes jMenu
385 *
386 * @return javax.swing.JMenu
387 */
388 private JMenu getMenuSendNoD()
389 {
390 if ( menuSendNoD == null )
391 {
392 menuSendNoD = new JMenu();
393 menuSendNoD.setText( "Send NoD" );
394 menuSendNoD.add( getUnavailableItem() );
395 menuSendNoD.add( getProtocolErrorItem() );
396 menuSendNoD.add( getStrongAuthRequiredItem() );
397 }
398 return menuSendNoD;
399 }
400
401
402 /**
403 * This method initializes jMenuItem
404 *
405 * @return javax.swing.JMenuItem
406 */
407 private JMenuItem getUnavailableItem()
408 {
409 if ( unavailableItem == null )
410 {
411 unavailableItem = new JMenuItem();
412 unavailableItem.setText( "unavailable" );
413 unavailableItem.addActionListener( new java.awt.event.ActionListener()
414 {
415 public void actionPerformed( java.awt.event.ActionEvent e )
416 {
417 selected.getIoSession().write( NoticeOfDisconnect.UNAVAILABLE );
418 try
419 {
420 Thread.sleep( 250 );
421 }
422 catch ( InterruptedException e1 )
423 {
424 LOG.error( "", e1 );
425 }
426 refresh();
427 }
428 } );
429 }
430 return unavailableItem;
431 }
432
433
434 /**
435 * This method initializes jMenuItem
436 *
437 * @return javax.swing.JMenuItem
438 */
439 private JMenuItem getProtocolErrorItem()
440 {
441 if ( protocolErrorItem == null )
442 {
443 protocolErrorItem = new JMenuItem();
444 protocolErrorItem.setText( "protocolError" );
445 protocolErrorItem.addActionListener( new java.awt.event.ActionListener()
446 {
447 public void actionPerformed( java.awt.event.ActionEvent e )
448 {
449 selected.getIoSession().write( NoticeOfDisconnect.PROTOCOLERROR );
450 try
451 {
452 Thread.sleep( 250 );
453 }
454 catch ( InterruptedException e1 )
455 {
456 LOG.error( "", e1 );
457 }
458 refresh();
459 }
460 } );
461 }
462 return protocolErrorItem;
463 }
464
465
466 /**
467 * This method initializes jMenuItem
468 *
469 * @return javax.swing.JMenuItem
470 */
471 private JMenuItem getStrongAuthRequiredItem()
472 {
473 if ( strongAuthRequiredItem == null )
474 {
475 strongAuthRequiredItem = new JMenuItem();
476 strongAuthRequiredItem.setText( "strongAuthRequired" );
477 strongAuthRequiredItem.addActionListener( new java.awt.event.ActionListener()
478 {
479 public void actionPerformed( java.awt.event.ActionEvent e )
480 {
481 WriteFuture future = selected.getIoSession().write( NoticeOfDisconnect.STRONGAUTHREQUIRED );
482 try
483 {
484 future.awaitUninterruptibly( 1000L );
485 CloseFuture cfuture = selected.getIoSession().close( true );
486 cfuture.awaitUninterruptibly( 1000L );
487 }
488 catch ( Exception e1 )
489 {
490 LOG.error( "", e1 );
491 }
492 refresh();
493 }
494 } );
495 }
496 return strongAuthRequiredItem;
497 }
498
499
500 // /**
501 // * This method initializes jPopupMenu
502 // *
503 // * @return javax.swing.JPopupMenu
504 // */
505 // private JPopupMenu getSessionsPopupMenu()
506 // {
507 // if ( popupMenu == null )
508 // {
509 // popupMenu = new JPopupMenu();
510 // popupMenu.add(getJMenuItem());
511 // popupMenu.add(getJMenu());
512 // popupMenu.add(getJMenuItem4());
513 // }
514 // return popupMenu;
515 // }
516
517 /**
518 * This method initializes jPanel
519 *
520 * @return javax.swing.JPanel
521 */
522 private JPanel getSouthPanel()
523 {
524 if ( southPanel == null )
525 {
526 southPanel = new JPanel();
527 southPanel
528 .setBorder( javax.swing.BorderFactory.createEtchedBorder( javax.swing.border.EtchedBorder.RAISED ) );
529 southPanel.add( getRefreshButton(), null );
530 }
531 return southPanel;
532 }
533
534
535 /**
536 * This method initializes jMenuItem
537 *
538 * @return javax.swing.JMenuItem
539 */
540 private JMenuItem getShowRequests()
541 {
542 if ( showRequests == null )
543 {
544 showRequests = new JMenuItem();
545 showRequests.setText( "show requests" );
546 showRequests.addActionListener( new java.awt.event.ActionListener()
547 {
548 public void actionPerformed( java.awt.event.ActionEvent e )
549 {
550 OutstandingRequestsDialog dialog =
551 new OutstandingRequestsDialog( SessionsFrame.this, selected, ldapServer );
552 dialog.addWindowListener( new WindowAdapter()
553 {
554 public void windowClosed( WindowEvent e )
555 {
556 e.getWindow().dispose();
557 }
558 } );
559 dialog.setVisible( true );
560 }
561 } );
562 }
563 return showRequests;
564 }
565
566
567 // /**
568 // * This method initializes jMenuItem
569 // *
570 // * @return javax.swing.JMenuItem
571 // */
572 // private JMenuItem getJMenuItem()
573 // {
574 // if ( jMenuItem == null )
575 // {
576 // jMenuItem = new JMenuItem();
577 // jMenuItem.setText("close");
578 // }
579 // return jMenuItem;
580 // }
581 //
582 //
583 // /**
584 // * This method initializes jMenu
585 // *
586 // * @return javax.swing.JMenu
587 // */
588 // private JMenu getJMenu()
589 // {
590 // if ( jMenu == null )
591 // {
592 // jMenu = new JMenu();
593 // jMenu.setText("Send NoD");
594 // jMenu.add(getJMenuItem1());
595 // jMenu.add(getJMenuItem2());
596 // jMenu.add(getJMenuItem3());
597 // }
598 // return jMenu;
599 // }
600 //
601 //
602 // /**
603 // * This method initializes jMenuItem1
604 // *
605 // * @return javax.swing.JMenuItem
606 // */
607 // private JMenuItem getJMenuItem1()
608 // {
609 // if ( jMenuItem1 == null )
610 // {
611 // jMenuItem1 = new JMenuItem();
612 // jMenuItem1.setText("unavailable");
613 // }
614 // return jMenuItem1;
615 // }
616 //
617 //
618 // /**
619 // * This method initializes jMenuItem2
620 // *
621 // * @return javax.swing.JMenuItem
622 // */
623 // private JMenuItem getJMenuItem2()
624 // {
625 // if ( jMenuItem2 == null )
626 // {
627 // jMenuItem2 = new JMenuItem();
628 // jMenuItem2.setText("protocolError");
629 // }
630 // return jMenuItem2;
631 // }
632 //
633 //
634 // /**
635 // * This method initializes jMenuItem3
636 // *
637 // * @return javax.swing.JMenuItem
638 // */
639 // private JMenuItem getJMenuItem3()
640 // {
641 // if ( jMenuItem3 == null )
642 // {
643 // jMenuItem3 = new JMenuItem();
644 // jMenuItem3.setText("strongAuthRequired");
645 // }
646 // return jMenuItem3;
647 // }
648 //
649 //
650 // /**
651 // * This method initializes jMenuItem4
652 // *
653 // * @return javax.swing.JMenuItem
654 // */
655 // private JMenuItem getJMenuItem4()
656 // {
657 // if ( jMenuItem4 == null )
658 // {
659 // jMenuItem4 = new JMenuItem();
660 // jMenuItem4.setText("show requests");
661 // }
662 // return jMenuItem4;
663 // }
664
665 /**
666 * This method initializes jButton2
667 *
668 * @return javax.swing.JButton
669 */
670 private JButton getRefreshButton()
671 {
672 if ( refreshButton == null )
673 {
674 refreshButton = new JButton();
675 refreshButton.setText( REFRESH_COMMAND );
676 refreshButton.addActionListener( new java.awt.event.ActionListener()
677 {
678 public void actionPerformed( java.awt.event.ActionEvent e )
679 {
680 if ( e.getActionCommand().equals( REFRESH_COMMAND ) )
681 {
682 refresh();
683 }
684 }
685 } );
686 }
687 return refreshButton;
688 }
689
690
691 private void refresh()
692 {
693 LOG.info( "Refreshing Sessions UI" );
694 sessionsTable.setModel( new SessionsModel( ldapServer.getLdapSessionManager().getSessions() ) );
695 closeItem.setEnabled( false );
696 menuSendNoD.setEnabled( false );
697 showRequests.setEnabled( false );
698 unbindItem.setEnabled( isServiceBound );
699 bindItem.setEnabled( !isServiceBound );
700 }
701
702 public void setRequestor( IoSession requestor )
703 {
704 this.requestor = requestor;
705 }
706
707 /**
708 * This method initializes jMenuItem
709 *
710 * @return javax.swing.JMenuItem
711 */
712 private JMenuItem getUnbindItem()
713 {
714 if ( unbindItem == null )
715 {
716 unbindItem = new JMenuItem();
717 unbindItem.setText( "Unbind Service" );
718 unbindItem.setEnabled( isServiceBound );
719 unbindItem.addActionListener( new java.awt.event.ActionListener()
720 {
721 public void actionPerformed( java.awt.event.ActionEvent e )
722 {
723 int input = JOptionPane.showConfirmDialog( SessionsFrame.this,
724 "Selecting no will send a notice of disconnect ONLY. "
725 + "\nSelecting yes will send both. Cancel will abort unbind.",
726 "Send graceful disconnect before disconnect notice?", JOptionPane.YES_NO_CANCEL_OPTION );
727 IoAcceptor acceptor = ( IoAcceptor ) requestor.getService();
728 List<IoSession> sessions = new ArrayList<IoSession>(
729 acceptor.getManagedSessions().values() );
730
731 if ( input == JOptionPane.CANCEL_OPTION )
732 {
733 }
734 else if ( input == JOptionPane.NO_OPTION )
735 {
736 GracefulShutdownHandler.sendNoticeOfDisconnect( sessions, requestor );
737 acceptor.unbind( requestor.getServiceAddress() );
738 isServiceBound = false;
739 unbindItem.setEnabled( isServiceBound );
740 bindItem.setEnabled( !isServiceBound );
741 JOptionPane.showMessageDialog( SessionsFrame.this, "Ldap service for "
742 + requestor.getLocalAddress() + " has been successfully unbound.", "Success!",
743 JOptionPane.INFORMATION_MESSAGE );
744 refresh();
745 }
746 else
747 {
748 ShutdownDialog dialog = new ShutdownDialog();
749 setCenteredPosition( SessionsFrame.this, dialog );
750 dialog.setModal( true );
751 dialog.setVisible( true );
752
753 if ( dialog.isSendCanceled() )
754 {
755 LOG.debug( "GracefulShutdown was canceled." );
756 JOptionPane.showMessageDialog( SessionsFrame.this, "Shutdown has been canceled.",
757 "Graceful Shutdown Aborted", JOptionPane.OK_OPTION );
758 return;
759 }
760
761 LOG.debug( "GracefulShutdown parameters captured." );
762 int timeOffline = dialog.getTimeOffline();
763 int delay = dialog.getDelay();
764 GracefulDisconnect graceful = new GracefulDisconnect( timeOffline, delay );
765 GracefulShutdownHandler.sendGracefulDisconnect( sessions, graceful, requestor );
766 acceptor.unbind( requestor.getServiceAddress() );
767 isServiceBound = false;
768 unbindItem.setEnabled( isServiceBound );
769 bindItem.setEnabled( !isServiceBound );
770
771 // do progress dialog with bypass button to wait for delay time
772 if ( delay > 0 )
773 {
774 ShutdownProgress progress = new ShutdownProgress();
775 setCenteredPosition( SessionsFrame.this, progress );
776 progress.setModal( true );
777 progress.setTime( delay * 1000 );
778 Thread t = new Thread( progress );
779 t.start();
780 progress.setVisible( true );
781 }
782
783 // now send the notice of disconnect
784 GracefulShutdownHandler.sendNoticeOfDisconnect( sessions, requestor );
785 JOptionPane.showMessageDialog( SessionsFrame.this, "Ldap service for "
786 + requestor.getLocalAddress() + " has been successfully unbound.", "Success!",
787 JOptionPane.OK_OPTION );
788 refresh();
789 }
790 }
791 } );
792 }
793 return unbindItem;
794 }
795
796
797 private void setCenteredPosition( JFrame frame, Component comp )
798 {
799 Point pt = new Point();
800 Toolkit tk = Toolkit.getDefaultToolkit();
801 Dimension screenSize = tk.getScreenSize();
802 pt.x = ( screenSize.width - frame.getWidth() ) / 2;
803 pt.y = ( screenSize.height - frame.getHeight() ) / 2;
804
805 pt.x += ( frame.getWidth() - comp.getWidth() ) / 2;
806 pt.y += ( frame.getHeight() - comp.getHeight() ) / 2;
807 comp.setLocation( pt );
808 }
809
810
811 /**
812 * This method initializes jMenuItem
813 *
814 * @return javax.swing.JMenuItem
815 */
816 private JMenuItem getBindItem()
817 {
818 if ( bindItem == null )
819 {
820 bindItem = new JMenuItem();
821 bindItem.setText( "Bind Service" );
822 unbindItem.setEnabled( !isServiceBound );
823 bindItem.addActionListener( new java.awt.event.ActionListener()
824 {
825 public void actionPerformed( java.awt.event.ActionEvent e )
826 {
827 try
828 {
829 ( ( IoAcceptor ) requestor.getService() ).setHandler( getLdapProvider() );
830 ( ( IoAcceptor ) requestor.getService() ).bind( requestor.getServiceAddress() );
831 JOptionPane.showMessageDialog( SessionsFrame.this, "Ldap service " + requestor.getServiceAddress()
832 + " has been successfully bound.\n" + " Clients may now connect to the server once again.",
833 "Success!", JOptionPane.INFORMATION_MESSAGE );
834 isServiceBound = true;
835 unbindItem.setEnabled( isServiceBound );
836 bindItem.setEnabled( !isServiceBound );
837 }
838 catch ( IOException e1 )
839 {
840 LOG.error( "failed to rebind ldap service", e1 );
841 JOptionPane.showMessageDialog( SessionsFrame.this, e1.getMessage(), "Error encountered!",
842 JOptionPane.ERROR_MESSAGE );
843 }
844 }
845 } );
846 }
847 return bindItem;
848 }
849
850
851 public void setLdapProvider( IoHandler ldapProvider )
852 {
853 this.ldapProvider = ldapProvider;
854 }
855
856
857 public IoHandler getLdapProvider()
858 {
859 return ldapProvider;
860 }
861 } // @jve:decl-index=0:visual-constraint="10,10"