KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > directory > ldapstudio > proxy > view > wizards > ConnectWizardBrowserAvailablePage


1 /*
2  * Licensed to the Apache Software Foundation (ASF) under one
3  * or more contributor license agreements. See the NOTICE file
4  * distributed with this work for additional information
5  * regarding copyright ownership. The ASF licenses this file
6  * to you under the Apache License, Version 2.0 (the
7  * "License"); you may not use this file except in compliance
8  * with the License. You may obtain a copy of the License at
9  *
10  * http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing,
13  * software distributed under the License is distributed on an
14  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15  * KIND, either express or implied. See the License for the
16  * specific language governing permissions and limitations
17  * under the License.
18  *
19  */

20 package org.apache.directory.ldapstudio.proxy.view.wizards;
21
22
23 import org.apache.directory.ldapstudio.browser.common.dialogs.SelectConnectionDialog;
24 import org.apache.directory.ldapstudio.browser.core.model.IConnection;
25 import org.apache.directory.ldapstudio.proxy.Activator;
26 import org.apache.directory.ldapstudio.proxy.ProxyConstants;
27 import org.apache.directory.ldapstudio.proxy.view.BaseWidgetUtils;
28 import org.apache.directory.ldapstudio.proxy.view.HistoryUtils;
29 import org.eclipse.core.runtime.Platform;
30 import org.eclipse.jface.wizard.WizardPage;
31 import org.eclipse.swt.SWT;
32 import org.eclipse.swt.events.ModifyEvent;
33 import org.eclipse.swt.events.ModifyListener;
34 import org.eclipse.swt.events.SelectionAdapter;
35 import org.eclipse.swt.events.SelectionEvent;
36 import org.eclipse.swt.events.SelectionListener;
37 import org.eclipse.swt.events.VerifyEvent;
38 import org.eclipse.swt.events.VerifyListener;
39 import org.eclipse.swt.layout.GridData;
40 import org.eclipse.swt.layout.GridLayout;
41 import org.eclipse.swt.widgets.Button;
42 import org.eclipse.swt.widgets.Combo;
43 import org.eclipse.swt.widgets.Composite;
44 import org.eclipse.swt.widgets.Group;
45 import org.eclipse.swt.widgets.Label;
46 import org.eclipse.swt.widgets.Text;
47 import org.eclipse.ui.PlatformUI;
48 import org.eclipse.ui.internal.util.BundleUtility;
49 import org.osgi.framework.Bundle;
50 import org.osgi.framework.BundleException;
51
52
53 /**
54  * This class implements the Connect Wizard Settings Page.
55  *
56  * @author <a HREF="mailto:dev@directory.apache.org">Apache Directory Project</a>
57  * @version $Rev$, $Date$
58  */

59 public class ConnectWizardBrowserAvailablePage extends WizardPage implements ModifyListener, SelectionListener
60 {
61     /** The choosen Connection */
62     private IConnection selectedConnection;
63
64     // UI Fields
65
private Combo proxyPortCombo;
66     private Button useConnectionButton;
67     private Text connectionText;
68     private Button connectionButton;
69     private Button useThisSettingsButton;
70     private Combo serverHostCombo;
71     private Combo serverPortCombo;
72
73
74     /**
75      * Creates a new instance of ConnectWizardSettingsPage.
76      */

77     public ConnectWizardBrowserAvailablePage()
78     {
79         super( ConnectWizardBrowserAvailablePage.class.getName() );
80         setTitle( "Connect Wizard" );
81         setDescription( "Specify the settings for the LDAP Proxy." );
82         setPageComplete( false );
83     }
84
85
86     /* (non-Javadoc)
87      * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
88      */

89     public void createControl( Composite parent )
90     {
91         Composite composite = new Composite( parent, SWT.NONE );
92         GridLayout gl = new GridLayout( 1, false );
93         composite.setLayout( gl );
94
95         Group proxyGroup = BaseWidgetUtils.createGroup( composite, "LDAP Proxy", 1 );
96         proxyGroup.setLayoutData( new GridData( GridData.FILL_HORIZONTAL ) );
97         Composite proxyGroupComposite = BaseWidgetUtils.createColumnContainer( proxyGroup, 2, 1 );
98
99         BaseWidgetUtils.createLabel( proxyGroupComposite, "Proxy port:", 1 );
100         proxyPortCombo = BaseWidgetUtils.createCombo( proxyGroupComposite, new String JavaDoc[0], -1, 1 );
101         proxyPortCombo.addVerifyListener( new VerifyListener()
102         {
103             public void verifyText( VerifyEvent e )
104             {
105                 if ( !e.text.matches( "[0-9]*" ) )
106                 {
107                     e.doit = false;
108                 }
109                 if ( serverPortCombo.getText().length() > 4 && e.text.length() > 0 )
110                 {
111                     e.doit = false;
112                 }
113             }
114         } );
115
116         Group serverGroup = BaseWidgetUtils.createGroup( composite, "LDAP Server", 1 );
117         serverGroup.setLayoutData( new GridData( GridData.FILL_HORIZONTAL ) );
118
119         useConnectionButton = BaseWidgetUtils.createRadiobutton( serverGroup,
120             "Use settings from an existing connection:", 1 );
121
122         Composite connectionComposite = BaseWidgetUtils.createColumnContainer( serverGroup, 4, 1 );
123
124         BaseWidgetUtils.createRadioIndent( connectionComposite, 1 );
125         BaseWidgetUtils.createLabel( connectionComposite, "Connection:", 1 );
126         connectionText = BaseWidgetUtils.createReadonlyText( connectionComposite, "", 1 );
127         connectionButton = BaseWidgetUtils.createButton( connectionComposite, "B&rowse...", 1 );
128
129         Label connectionInformationLabel = BaseWidgetUtils.createLabel( connectionComposite,
130             "(Warning: This feature requires the LDAP Browser Plugin.)", 1 );
131         connectionInformationLabel.setLayoutData( new GridData( SWT.RIGHT, SWT.NONE, true, false, 4, 1 ) );
132
133         useThisSettingsButton = BaseWidgetUtils.createRadiobutton( serverGroup, "Use this settings:", 1 );
134
135         Composite settingsComposite = BaseWidgetUtils.createColumnContainer( serverGroup, 3, 1 );
136         BaseWidgetUtils.createRadioIndent( settingsComposite, 1 );
137         BaseWidgetUtils.createLabel( settingsComposite, "Hostname:", 1 );
138         serverHostCombo = BaseWidgetUtils.createCombo( settingsComposite, new String JavaDoc[0], -1, 1 );
139
140         BaseWidgetUtils.createRadioIndent( settingsComposite, 1 );
141         BaseWidgetUtils.createLabel( settingsComposite, "Port:", 1 );
142         serverPortCombo = BaseWidgetUtils.createCombo( settingsComposite, new String JavaDoc[0], -1, 1 );
143         serverPortCombo.addVerifyListener( new VerifyListener()
144         {
145             public void verifyText( VerifyEvent e )
146             {
147                 if ( !e.text.matches( "[0-9]*" ) )
148                 {
149                     e.doit = false;
150                 }
151                 if ( serverPortCombo.getText().length() > 4 && e.text.length() > 0 )
152                 {
153                     e.doit = false;
154                 }
155             }
156         } );
157
158         setControl( parent );
159
160         checkBrowserPluginAvailability();
161         loadDialogHistory();
162         initListeners();
163         setUiEnableState();
164     }
165
166
167     private void checkBrowserPluginAvailability()
168     {
169         if ( !isPluginAvailable( "org.apache.directory.ldapstudio.browser.core" )
170             || !isPluginAvailable( "org.apache.directory.ldapstudio.browser.common" ) )
171         {
172             useConnectionButton.setEnabled( false );
173             connectionButton.setEnabled( false );
174             connectionText.setEnabled( false );
175         }
176     }
177
178
179     /**
180      * Loads the last values entered by the user from the Dialog History.
181      */

182     private void loadDialogHistory()
183     {
184         proxyPortCombo.setItems( HistoryUtils.load( ProxyConstants.DIALOGSETTING_KEY_PROXY_PORT_HISTORY ) );
185         serverHostCombo.setItems( HistoryUtils.load( ProxyConstants.DIALOGSETTING_KEY_SERVER_HOST_HISTORY ) );
186         serverPortCombo.setItems( HistoryUtils.load( ProxyConstants.DIALOGSETTING_KEY_SERVER_PORT_HISTORY ) );
187
188         boolean useConnection = Activator.getDefault().getDialogSettings().getBoolean(
189             ProxyConstants.DIALOGSETTING_KEY_SERVER_USE_CONNECTION );
190         useConnectionButton.setSelection( useConnection );
191         useThisSettingsButton.setSelection( !useConnection );
192     }
193
194
195     /**
196      * Saves the values entered by the user in the Dialog History.
197      */

198     public void saveDialogHistory()
199     {
200         HistoryUtils.save( ProxyConstants.DIALOGSETTING_KEY_PROXY_PORT_HISTORY, proxyPortCombo.getText() );
201         HistoryUtils.save( ProxyConstants.DIALOGSETTING_KEY_SERVER_HOST_HISTORY, serverHostCombo.getText() );
202         HistoryUtils.save( ProxyConstants.DIALOGSETTING_KEY_SERVER_PORT_HISTORY, serverPortCombo.getText() );
203
204         Activator.getDefault().getDialogSettings().put( ProxyConstants.DIALOGSETTING_KEY_SERVER_USE_CONNECTION,
205             useConnectionButton.getSelection() );
206     }
207
208
209     /**
210      * Initializes the listeners.
211      */

212     private void initListeners()
213     {
214         proxyPortCombo.addModifyListener( this );
215         useConnectionButton.addSelectionListener( new SelectionAdapter()
216         {
217             public void widgetSelected( SelectionEvent e )
218             {
219                 validate();
220                 setUiEnableState();
221             }
222         } );
223         connectionButton.addSelectionListener( new SelectionAdapter()
224         {
225             public void widgetSelected( SelectionEvent e )
226             {
227                 SelectConnectionDialog dialog = new SelectConnectionDialog( PlatformUI.getWorkbench()
228                     .getActiveWorkbenchWindow().getShell(), "Select Connection", null );
229                 dialog.open();
230                 IConnection connection = dialog.getSelectedConnection();
231                 setConnection( connection );
232                 validate();
233             }
234         } );
235         useThisSettingsButton.addSelectionListener( new SelectionAdapter()
236         {
237             public void widgetSelected( SelectionEvent e )
238             {
239                 validate();
240                 setUiEnableState();
241             }
242         } );
243         serverHostCombo.addModifyListener( this );
244         serverPortCombo.addModifyListener( this );
245     }
246
247
248     /**
249      * Enables the UI fields.
250      */

251     private void setUiEnableState()
252     {
253         if ( ( useConnectionButton.isEnabled() ) && ( useConnectionButton.getSelection() ) )
254         {
255             connectionText.setEnabled( true );
256             connectionButton.setEnabled( true );
257             serverHostCombo.setEnabled( false );
258             serverPortCombo.setEnabled( false );
259         }
260         else
261         {
262             connectionText.setEnabled( false );
263             connectionButton.setEnabled( false );
264             serverHostCombo.setEnabled( true );
265             serverPortCombo.setEnabled( true );
266         }
267     }
268
269
270     /**
271      * Checks if the given plugin is available (installed and active).
272      * The plugin is actived if it's not already active.
273      *
274      * @param bundleId
275      * the id of the plugin
276      * @return
277      * true if the given plugin is available, false if not.
278      */

279     public boolean isPluginAvailable( String JavaDoc bundleId )
280     {
281         Bundle pluginBundle = Platform.getBundle( bundleId );
282
283         if ( pluginBundle == null )
284         {
285             return false;
286         }
287
288         if ( BundleUtility.isActive( pluginBundle ) )
289         {
290             return true;
291         }
292         else
293         {
294             try
295             {
296                 pluginBundle.start();
297             }
298             catch ( BundleException e )
299             {
300                 return false;
301             }
302
303             return BundleUtility.isActive( pluginBundle );
304         }
305     }
306
307
308     public void setConnection( IConnection connection )
309     {
310         this.selectedConnection = connection;
311         connectionText.setText( this.selectedConnection != null ? this.selectedConnection.getName() : "" );
312     }
313
314
315     /**
316      * Gets the local port defined by the user.
317      *
318      * @return
319      * the local port defined by the user
320      */

321     public int getLocalPort()
322     {
323         int port = 0;
324
325         try
326         {
327             port = Integer.parseInt( proxyPortCombo.getText() );
328         }
329         catch ( NumberFormatException JavaDoc e )
330         {
331         }
332
333         return port;
334     }
335
336
337     /**
338      * Gets the remote host defined by the user.
339      *
340      * @return
341      * the remote host defined by the user
342      */

343     public String JavaDoc getRemoteHost()
344     {
345         if ( useConnectionButton.getSelection() )
346         {
347             return selectedConnection.getHost();
348         }
349         else
350         {
351             return serverHostCombo.getText();
352         }
353     }
354
355
356     /**
357      * Gets the remote port defined by the user.
358      *
359      * @return
360      * the remote port defined by the user
361      */

362     public int getRemotePort()
363     {
364         int port = 0;
365
366         if ( useConnectionButton.getSelection() )
367         {
368             port = selectedConnection.getPort();
369         }
370         else
371         {
372             try
373             {
374                 port = Integer.parseInt( serverPortCombo.getText() );
375             }
376             catch ( NumberFormatException JavaDoc e )
377             {
378             }
379         }
380
381         return port;
382     }
383
384
385     /* (non-Javadoc)
386      * @see org.eclipse.swt.events.ModifyListener#modifyText(org.eclipse.swt.events.ModifyEvent)
387      */

388     public void modifyText( ModifyEvent e )
389     {
390         validate();
391     }
392
393
394     /* (non-Javadoc)
395      * @see org.eclipse.swt.events.SelectionListener#widgetDefaultSelected(org.eclipse.swt.events.SelectionEvent)
396      */

397     public void widgetDefaultSelected( SelectionEvent e )
398     {
399         validate();
400     }
401
402
403     /* (non-Javadoc)
404      * @see org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt.events.SelectionEvent)
405      */

406     public void widgetSelected( SelectionEvent e )
407     {
408         validate();
409     }
410
411
412     /**
413      * Validates the page.
414      */

415     private void validate()
416     {
417         String JavaDoc errorMessage = null;
418
419         if ( useConnectionButton.getSelection() )
420         {
421             if ( selectedConnection == null )
422             {
423                 errorMessage = "Please select a connection.";
424             }
425         }
426         else
427         {
428             if ( "".equals( serverPortCombo.getText() ) )
429             {
430                 errorMessage = "Please enter a port for the LDAP Server. The default LDAP port is 389.";
431             }
432             if ( "".equals( serverHostCombo.getText() ) )
433             {
434                 errorMessage = "Please enter a hostname for the LDAP Server.";
435             }
436         }
437
438         if ( "".equals( proxyPortCombo.getText() ) )
439         {
440             errorMessage = "Please enter a port for the LDAP Proxy.";
441         }
442
443         setErrorMessage( errorMessage );
444         setPageComplete( getErrorMessage() == null );
445     }
446 }
447
Popular Tags