You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by se...@apache.org on 2007/08/23 15:47:13 UTC
svn commit: r568990 [2/3] - in /directory/studio/trunk/studio-connection-ui:
./ META-INF/ src/ src/main/ src/main/java/ src/main/java/org/
src/main/java/org/apache/ src/main/java/org/apache/directory/
src/main/java/org/apache/directory/studio/ src/main...
Added: directory/studio/trunk/studio-connection-ui/src/main/java/org/apache/directory/studio/connection/ui/actions/SelectionUtils.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/studio-connection-ui/src/main/java/org/apache/directory/studio/connection/ui/actions/SelectionUtils.java?rev=568990&view=auto
==============================================================================
--- directory/studio/trunk/studio-connection-ui/src/main/java/org/apache/directory/studio/connection/ui/actions/SelectionUtils.java (added)
+++ directory/studio/trunk/studio-connection-ui/src/main/java/org/apache/directory/studio/connection/ui/actions/SelectionUtils.java Thu Aug 23 06:47:09 2007
@@ -0,0 +1,107 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+
+package org.apache.directory.studio.connection.ui.actions;
+
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.directory.studio.connection.core.Connection;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+
+
+/**
+ * The SelectionUtils are used to extract specific beans from the current
+ * selection (org.eclipse.jface.viewers.ISelection).
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$, $Date$
+ */
+public abstract class SelectionUtils
+{
+
+ /**
+ * Gets the Strings contained in the given selection.
+ *
+ * @param selection the selection
+ * @return an array with Strings, may be empty.
+ */
+ public static String[] getProperties( ISelection selection )
+ {
+ List<Object> list = getTypes( selection, String.class );
+ return list.toArray( new String[list.size()] );
+ }
+
+
+ /**
+ * Gets all beans of the requested type contained in the given selection.
+ *
+ * @param selection the selection
+ * @param type the requested type
+ * @return a list containg beans of the requesten type
+ */
+ private static List<Object> getTypes( ISelection selection, Class type )
+ {
+ List<Object> list = new ArrayList<Object>();
+ if ( selection instanceof IStructuredSelection )
+ {
+ IStructuredSelection structuredSelection = ( IStructuredSelection ) selection;
+ Iterator it = structuredSelection.iterator();
+ while ( it.hasNext() )
+ {
+ Object o = it.next();
+ if ( type.isInstance( o ) )
+ {
+ list.add( o );
+ }
+ }
+ }
+ return list;
+ }
+
+
+ /**
+ * Gets the Connection beans contained in the given selection.
+ *
+ * @param selection the selection
+ * @return an array with Connection beans, may be empty.
+ */
+ public static Connection[] getConnections( ISelection selection )
+ {
+ List<Object> list = getTypes( selection, Connection.class );
+ return list.toArray( new Connection[list.size()] );
+ }
+
+
+ /**
+ * Gets the objects contained in the given selection.
+ *
+ * @param selection the selection
+ * @return an array with object, may be empty.
+ */
+ public static Object[] getObjects( ISelection selection )
+ {
+ List<Object> list = getTypes( selection, Object.class );
+ return list.toArray( new Object[list.size()] );
+ }
+}
Added: directory/studio/trunk/studio-connection-ui/src/main/java/org/apache/directory/studio/connection/ui/actions/StudioAction.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/studio-connection-ui/src/main/java/org/apache/directory/studio/connection/ui/actions/StudioAction.java?rev=568990&view=auto
==============================================================================
--- directory/studio/trunk/studio-connection-ui/src/main/java/org/apache/directory/studio/connection/ui/actions/StudioAction.java (added)
+++ directory/studio/trunk/studio-connection-ui/src/main/java/org/apache/directory/studio/connection/ui/actions/StudioAction.java Thu Aug 23 06:47:09 2007
@@ -0,0 +1,236 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+
+package org.apache.directory.studio.connection.ui.actions;
+
+
+import org.apache.directory.studio.connection.core.Connection;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.IWorkbenchWindowActionDelegate;
+import org.eclipse.ui.PlatformUI;
+
+
+/**
+ * This abstract class must be extended by each Action related to the Browser.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$, $Date$
+ */
+public abstract class StudioAction implements IWorkbenchWindowActionDelegate
+{
+ /** The selected Connections */
+ private Connection[] selectedConnections;
+
+ /** The input */
+ private Object input;
+
+
+ /**
+ * Creates a new instance of BrowserAction.
+ */
+ protected StudioAction()
+ {
+ this.init();
+ }
+
+
+ /**
+ * @see org.eclipse.ui.IWorkbenchWindowActionDelegate#init(org.eclipse.ui.IWorkbenchWindow)
+ */
+ public void init( IWorkbenchWindow window )
+ {
+ this.init();
+ }
+
+
+ /**
+ * @see org.eclipse.ui.IActionDelegate#run(org.eclipse.jface.action.IAction)
+ */
+ public void run( IAction action )
+ {
+ this.run();
+ }
+
+
+ /**
+ * @see org.eclipse.ui.IActionDelegate#selectionChanged(org.eclipse.jface.action.IAction, org.eclipse.jface.viewers.ISelection)
+ */
+ public void selectionChanged( IAction action, ISelection selection )
+ {
+ setSelectedConnections( SelectionUtils.getConnections( selection ) );
+
+ action.setEnabled( this.isEnabled() );
+ action.setText( this.getText() );
+ action.setToolTipText( this.getText() );
+ }
+
+
+ /**
+ * Returns the text for this action.
+ * <p>
+ * This method is associated with the <code>TEXT</code> property;
+ * property change events are reported when its value changes.
+ * </p>
+ *
+ * @return the text, or <code>null</code> if none
+ */
+ public abstract String getText();
+
+
+ /**
+ * Returns the image for this action as an image descriptor.
+ * <p>
+ * This method is associated with the <code>IMAGE</code> property;
+ * property change events are reported when its value changes.
+ * </p>
+ *
+ * @return the image, or <code>null</code> if this action has no image
+ */
+ public abstract ImageDescriptor getImageDescriptor();
+
+
+ /**
+ * Returns the command identifier.
+ *
+ * @return
+ * the command identifier
+ */
+ public abstract String getCommandId();
+
+
+ /**
+ * Returns whether this action is enabled.
+ * <p>
+ * This method is associated with the <code>ENABLED</code> property;
+ * property change events are reported when its value changes.
+ * </p>
+ *
+ * @return <code>true</code> if enabled, and
+ * <code>false</code> if disabled
+ */
+ public abstract boolean isEnabled();
+
+
+ /**
+ * Runs this action.
+ * Each action implementation must define the steps needed to carry out this action.
+ * The default implementation of this method in <code>Action</code>
+ * does nothing.
+ */
+ public abstract void run();
+
+
+ /**
+ * Initializes this action
+ */
+ private void init()
+ {
+ this.selectedConnections = new Connection[0];
+
+ this.input = null;
+ }
+
+
+ /**
+ * {@inheritDoc}
+ */
+ public void dispose()
+ {
+ this.selectedConnections = new Connection[0];
+
+ this.input = null;
+ }
+
+
+ /**
+ * Returns the current active shell
+ *
+ * @return
+ * the current active shell
+ */
+ protected Shell getShell()
+ {
+ return PlatformUI.getWorkbench().getDisplay().getActiveShell();
+ }
+
+
+ /**
+ * This method is fired when a Connection is updated.
+ *
+ * @param connection
+ * the connection
+ */
+ public void connectionUpdated( Connection connection )
+ {
+ }
+
+
+ /**
+ * Gets the selected Connections.
+ *
+ * @return
+ * the selected Connections
+ */
+ public Connection[] getSelectedConnections()
+ {
+ return selectedConnections;
+ }
+
+
+ /**
+ * Sets the selected Connections.
+ *
+ * @param selectedConnections
+ * the selected Connections to set
+ */
+ public void setSelectedConnections( Connection[] selectedConnections )
+ {
+ this.selectedConnections = selectedConnections;
+ }
+
+
+ /**
+ * Gets the input.
+ *
+ * @return
+ * the input
+ */
+ public Object getInput()
+ {
+ return input;
+ }
+
+
+ /**
+ * Sets the input.
+ *
+ * @param input
+ * the input to set
+ */
+ public void setInput( Object input )
+ {
+ this.input = input;
+ }
+
+}
Added: directory/studio/trunk/studio-connection-ui/src/main/java/org/apache/directory/studio/connection/ui/actions/StudioActionProxy.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/studio-connection-ui/src/main/java/org/apache/directory/studio/connection/ui/actions/StudioActionProxy.java?rev=568990&view=auto
==============================================================================
--- directory/studio/trunk/studio-connection-ui/src/main/java/org/apache/directory/studio/connection/ui/actions/StudioActionProxy.java (added)
+++ directory/studio/trunk/studio-connection-ui/src/main/java/org/apache/directory/studio/connection/ui/actions/StudioActionProxy.java Thu Aug 23 06:47:09 2007
@@ -0,0 +1,258 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+
+package org.apache.directory.studio.connection.ui.actions;
+
+
+import org.apache.directory.studio.connection.core.Connection;
+import org.apache.directory.studio.connection.core.event.ConnectionEventRegistry;
+import org.apache.directory.studio.connection.core.event.ConnectionUpdateListener;
+import org.apache.directory.studio.connection.ui.ConnectionUIPlugin;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+
+
+/**
+ * Proxy class for actions. The proxy class registers for modification events and
+ * updates the real actions on every modificaton.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$, $Date$
+ */
+public abstract class StudioActionProxy extends Action implements ISelectionChangedListener, ConnectionUpdateListener
+{
+
+ /** The action handler manager, used to deactivate and activate the action handlers and key bindings. */
+ private ActionHandlerManager actionHandlerManager;
+
+ /** The real action. */
+ protected StudioAction action;
+
+ /** The selection provider. */
+ protected ISelectionProvider selectionProvider;
+
+
+ /**
+ * Creates a new instance of StudioActionProxy.
+ *
+ * @param selectionProvider the selection provider
+ * @param actionHandlerManager the action handler manager
+ * @param action the action
+ * @param style the style
+ */
+ protected StudioActionProxy( ISelectionProvider selectionProvider, ActionHandlerManager actionHandlerManager,
+ StudioAction action, int style )
+ {
+ super( action.getText(), style );
+ this.selectionProvider = selectionProvider;
+ this.actionHandlerManager = actionHandlerManager;
+ this.action = action;
+
+ super.setImageDescriptor( action.getImageDescriptor() );
+ super.setActionDefinitionId( action.getCommandId() );
+
+ selectionProvider.addSelectionChangedListener( this );
+
+ ConnectionEventRegistry.addConnectionUpdateListener( this, ConnectionUIPlugin.getDefault().getEventRunner() );
+
+ updateAction();
+ }
+
+
+ /**
+ * Creates a new instance of StudioActionProxy.
+ *
+ * @param selectionProvider the selection provider
+ * @param actionHandlerManager the action handler manager
+ * @param action the action
+ */
+ protected StudioActionProxy( ISelectionProvider selectionProvider, ActionHandlerManager actionHandlerManager,
+ StudioAction action )
+ {
+ this( selectionProvider, actionHandlerManager, action, Action.AS_PUSH_BUTTON );
+ }
+
+
+ /**
+ * Disposes this action proxy.
+ */
+ public void dispose()
+ {
+ ConnectionEventRegistry.removeConnectionUpdateListener( this );
+ selectionProvider.removeSelectionChangedListener( this );
+
+ action.dispose();
+ action = null;
+ }
+
+
+ /**
+ * Checks if is disposed.
+ *
+ * @return true, if is disposed
+ */
+ public boolean isDisposed()
+ {
+ return action == null;
+ }
+
+
+ /**
+ * @see org.apache.directory.studio.connection.core.event.ConnectionUpdateListener#connectionUpdated(org.apache.directory.studio.connection.core.Connection)
+ */
+ public final void connectionUpdated( Connection connection )
+ {
+ if ( !isDisposed() )
+ {
+ action.connectionUpdated( connection );
+ updateAction();
+ }
+ }
+
+
+ /**
+ * @see org.apache.directory.studio.connection.core.event.ConnectionUpdateListener#connectionAdded(org.apache.directory.studio.connection.core.Connection)
+ */
+ public void connectionAdded( Connection connection )
+ {
+ connectionUpdated( connection );
+ }
+
+
+ /**
+ * @see org.apache.directory.studio.connection.core.event.ConnectionUpdateListener#connectionRemoved(org.apache.directory.studio.connection.core.Connection)
+ */
+ public void connectionRemoved( Connection connection )
+ {
+ connectionUpdated( connection );
+ }
+
+
+ /**
+ * @see org.apache.directory.studio.connection.core.event.ConnectionUpdateListener#connectionRenamed(org.apache.directory.studio.connection.core.Connection, java.lang.String)
+ */
+ public void connectionRenamed( Connection connection, String oldName )
+ {
+ connectionUpdated( connection );
+ }
+
+
+ /**
+ * @see org.apache.directory.studio.connection.core.event.ConnectionUpdateListener#connectionOpened(org.apache.directory.studio.connection.core.Connection)
+ */
+ public void connectionOpened( Connection connection )
+ {
+ connectionUpdated( connection );
+ }
+
+
+ /**
+ * @see org.apache.directory.studio.connection.core.event.ConnectionUpdateListener#connectionClosed(org.apache.directory.studio.connection.core.Connection)
+ */
+ public void connectionClosed( Connection connection )
+ {
+ connectionUpdated( connection );
+ }
+
+
+ /**
+ * Input changed.
+ *
+ * @param input the input
+ */
+ public void inputChanged( Object input )
+ {
+ if ( !isDisposed() )
+ {
+ action.setInput( input );
+ selectionChanged( new SelectionChangedEvent( this.selectionProvider, new StructuredSelection() ) );
+ // updateAction();
+ }
+ }
+
+
+ /**
+ * @see org.eclipse.jface.viewers.ISelectionChangedListener#selectionChanged(org.eclipse.jface.viewers.SelectionChangedEvent)
+ */
+ public void selectionChanged( SelectionChangedEvent event )
+ {
+ if ( !isDisposed() )
+ {
+ ISelection selection = event.getSelection();
+ action.setSelectedConnections( SelectionUtils.getConnections( selection ) );
+ updateAction();
+ }
+ }
+
+
+ /**
+ * Updates the action.
+ */
+ public void updateAction()
+ {
+ if ( !isDisposed() )
+ {
+ setText( action.getText() );
+ setToolTipText( action.getText() );
+ setEnabled( action.isEnabled() );
+ setImageDescriptor( action.getImageDescriptor() );
+ }
+ }
+
+
+ /**
+ * @see org.eclipse.jface.action.Action#run()
+ */
+ public void run()
+ {
+ if ( !isDisposed() )
+ {
+ // deactivate global actions
+ if ( actionHandlerManager != null )
+ {
+ actionHandlerManager.deactivateGlobalActionHandlers();
+ }
+
+ action.run();
+
+ // activate global actions
+ if ( actionHandlerManager != null )
+ {
+ actionHandlerManager.activateGlobalActionHandlers();
+ }
+ }
+ }
+
+
+ /**
+ * Gets the real action.
+ *
+ * @return the real action
+ */
+ public StudioAction getAction()
+ {
+ return action;
+ }
+
+}
Added: directory/studio/trunk/studio-connection-ui/src/main/java/org/apache/directory/studio/connection/ui/dialogs/CredentialsDialog.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/studio-connection-ui/src/main/java/org/apache/directory/studio/connection/ui/dialogs/CredentialsDialog.java?rev=568990&view=auto
==============================================================================
--- directory/studio/trunk/studio-connection-ui/src/main/java/org/apache/directory/studio/connection/ui/dialogs/CredentialsDialog.java (added)
+++ directory/studio/trunk/studio-connection-ui/src/main/java/org/apache/directory/studio/connection/ui/dialogs/CredentialsDialog.java Thu Aug 23 06:47:09 2007
@@ -0,0 +1,66 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+
+package org.apache.directory.studio.connection.ui.dialogs;
+
+
+import org.eclipse.jface.dialogs.IInputValidator;
+import org.eclipse.jface.dialogs.InputDialog;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Shell;
+
+
+/**
+ * The CredentialsDialog is used to ask the user for credentials (paasword).
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$, $Date$
+ */
+public class CredentialsDialog extends InputDialog
+{
+
+ /**
+ * Creates a new instance of CredentialsDialog.
+ *
+ * @param parentShell the parent shell
+ * @param dialogTitle the dialog title
+ * @param dialogMessage the dialog message
+ * @param initialValue the initial value
+ * @param validator the validator
+ */
+ public CredentialsDialog( Shell parentShell, String dialogTitle, String dialogMessage, String initialValue,
+ IInputValidator validator )
+ {
+ super( parentShell, dialogTitle, dialogMessage, initialValue, validator );
+ }
+
+
+ /**
+ * @see org.eclipse.jface.dialogs.InputDialog#createDialogArea(org.eclipse.swt.widgets.Composite)
+ */
+ protected Control createDialogArea( Composite parent )
+ {
+ Composite composite = ( Composite ) super.createDialogArea( parent );
+ super.getText().setEchoChar( '*' );
+ return composite;
+ }
+
+}
Added: directory/studio/trunk/studio-connection-ui/src/main/java/org/apache/directory/studio/connection/ui/dnd/ConnectionTransfer.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/studio-connection-ui/src/main/java/org/apache/directory/studio/connection/ui/dnd/ConnectionTransfer.java?rev=568990&view=auto
==============================================================================
--- directory/studio/trunk/studio-connection-ui/src/main/java/org/apache/directory/studio/connection/ui/dnd/ConnectionTransfer.java (added)
+++ directory/studio/trunk/studio-connection-ui/src/main/java/org/apache/directory/studio/connection/ui/dnd/ConnectionTransfer.java Thu Aug 23 06:47:09 2007
@@ -0,0 +1,194 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+
+package org.apache.directory.studio.connection.ui.dnd;
+
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.directory.studio.connection.core.Connection;
+import org.apache.directory.studio.connection.core.ConnectionCorePlugin;
+import org.apache.directory.studio.connection.core.ConnectionManager;
+import org.eclipse.swt.dnd.ByteArrayTransfer;
+import org.eclipse.swt.dnd.Transfer;
+import org.eclipse.swt.dnd.TransferData;
+
+
+/**
+ * A {@link Transfer} that could be used to transfer {@link Connection} objects.
+ * Note that only the connection name is converted to a platform specific
+ * representation, not the complete object. To convert it back to an {@link Connection}
+ * object the {@link ConnectionManager#getConnection(String)} method is invoked.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$, $Date$
+ */
+public class ConnectionTransfer extends ByteArrayTransfer
+{
+
+ /** The Constant TYPENAME. */
+ private static final String TYPENAME = "org.apache.directory.studio.ldapbrowser.connection";
+
+ /** The Constant TYPEID. */
+ private static final int TYPEID = registerType( TYPENAME );
+
+ /** The instance. */
+ private static ConnectionTransfer instance = new ConnectionTransfer();
+
+
+ /**
+ * Creates a new instance of ConnectionTransfer.
+ */
+ private ConnectionTransfer()
+ {
+ }
+
+
+ /**
+ * Gets the instance.
+ *
+ * @return the instance
+ */
+ public static ConnectionTransfer getInstance()
+ {
+ return instance;
+ }
+
+
+ /**
+ * {@inheritDoc}
+ *
+ * This implementation only accepts {@link Connection} objects.
+ * It just converts the name of the connection to the platform
+ * specific representation.
+ */
+ public void javaToNative( Object object, TransferData transferData )
+ {
+ if ( object == null || !( object instanceof Connection[] ) )
+ {
+ return;
+ }
+
+ if ( isSupportedType( transferData ) )
+ {
+ Connection[] connections = ( Connection[] ) object;
+ try
+ {
+ ByteArrayOutputStream out = new ByteArrayOutputStream();
+ DataOutputStream writeOut = new DataOutputStream( out );
+
+ for ( int i = 0; i < connections.length; i++ )
+ {
+ byte[] name = connections[i].getName().getBytes();
+ writeOut.writeInt( name.length );
+ writeOut.write( name );
+ }
+
+ byte[] buffer = out.toByteArray();
+ writeOut.close();
+
+ super.javaToNative( buffer, transferData );
+
+ }
+ catch ( IOException e )
+ {
+ }
+ }
+ }
+
+
+ /**
+ * {@inheritDoc}
+ *
+ * This implementation just converts the platform specific representation
+ * to the connection name and invokes
+ * {@link ConnectionManager#getConnection(String)} to get the
+ * {@link Connection} object.
+ */
+ public Object nativeToJava( TransferData transferData )
+ {
+ if ( isSupportedType( transferData ) )
+ {
+ byte[] buffer = ( byte[] ) super.nativeToJava( transferData );
+ if ( buffer == null )
+ {
+ return null;
+ }
+
+ List<Connection> connectionList = new ArrayList<Connection>();
+ try
+ {
+ ByteArrayInputStream in = new ByteArrayInputStream( buffer );
+ DataInputStream readIn = new DataInputStream( in );
+
+ do
+ {
+ if ( readIn.available() > 1 )
+ {
+ int size = readIn.readInt();
+ byte[] connectionName = new byte[size];
+ readIn.read( connectionName );
+ Connection connection = ConnectionCorePlugin.getDefault().getConnectionManager().getConnection(
+ new String( connectionName ) );
+ connectionList.add( connection );
+ }
+ }
+ while ( readIn.available() > 1 );
+
+ readIn.close();
+ }
+ catch ( IOException ex )
+ {
+ return null;
+ }
+
+ return connectionList.toArray( new Connection[0] );
+ }
+
+ return null;
+ }
+
+
+ /**
+ * {@inheritDoc}
+ */
+ protected String[] getTypeNames()
+ {
+ return new String[]
+ { TYPENAME };
+ }
+
+
+ /**
+ * {@inheritDoc}
+ */
+ protected int[] getTypeIds()
+ {
+ return new int[]
+ { TYPEID };
+ }
+
+}
\ No newline at end of file
Added: directory/studio/trunk/studio-connection-ui/src/main/java/org/apache/directory/studio/connection/ui/properties/ConnectionPropertyPage.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/studio-connection-ui/src/main/java/org/apache/directory/studio/connection/ui/properties/ConnectionPropertyPage.java?rev=568990&view=auto
==============================================================================
--- directory/studio/trunk/studio-connection-ui/src/main/java/org/apache/directory/studio/connection/ui/properties/ConnectionPropertyPage.java (added)
+++ directory/studio/trunk/studio-connection-ui/src/main/java/org/apache/directory/studio/connection/ui/properties/ConnectionPropertyPage.java Thu Aug 23 06:47:09 2007
@@ -0,0 +1,219 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+
+package org.apache.directory.studio.connection.ui.properties;
+
+
+import org.apache.directory.studio.connection.core.Connection;
+import org.apache.directory.studio.connection.core.ConnectionParameter;
+import org.apache.directory.studio.connection.core.Utils;
+import org.apache.directory.studio.connection.core.jobs.CloseConnectionsJob;
+import org.apache.directory.studio.connection.ui.ConnectionParameterPage;
+import org.apache.directory.studio.connection.ui.ConnectionParameterPageManager;
+import org.apache.directory.studio.connection.ui.ConnectionParameterPageModifyListener;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.TabFolder;
+import org.eclipse.swt.widgets.TabItem;
+import org.eclipse.ui.dialogs.PropertyPage;
+
+
+/**
+ * The ConnectionPropertyPage displays the properties of a {@link Connection}.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$, $Date$
+ */
+public class ConnectionPropertyPage extends PropertyPage implements ConnectionParameterPageModifyListener
+{
+
+ /** The tab folder. */
+ private TabFolder tabFolder;
+
+ /** The tabs. */
+ private TabItem[] tabs;
+
+ /** The connection property pages. */
+ private ConnectionParameterPage[] pages;
+
+
+ /**
+ * Creates a new instance of ConnectionPropertyPage.
+ */
+ public ConnectionPropertyPage()
+ {
+ super();
+ super.noDefaultAndApplyButton();
+ }
+
+
+ /**
+ * @see org.apache.directory.studio.connection.ui.ConnectionParameterPageModifyListener#connectionParameterPageModified()
+ */
+ public void connectionParameterPageModified()
+ {
+ validate();
+ }
+
+
+ /**
+ * @see org.apache.directory.studio.connection.ui.ConnectionParameterPageModifyListener#getTestConnectionParameters()
+ */
+ public ConnectionParameter getTestConnectionParameters()
+ {
+ ConnectionParameter connectionParameter = new ConnectionParameter();
+ for ( int i = 0; i < pages.length; i++ )
+ {
+ pages[i].saveParameters( connectionParameter );
+ }
+ return connectionParameter;
+ }
+
+
+ /**
+ * @see org.eclipse.jface.dialogs.DialogPage#setMessage(java.lang.String)
+ */
+ public void setMessage( String message )
+ {
+ super.setMessage( message, PropertyPage.WARNING );
+ }
+
+
+ /**
+ * @see org.eclipse.jface.preference.PreferencePage#setErrorMessage(java.lang.String)
+ */
+ public void setErrorMessage( String errorMessage )
+ {
+ super.setErrorMessage( errorMessage );
+ }
+
+
+ /**
+ * Validates the dialog.
+ */
+ private void validate()
+ {
+ int index = tabFolder.getSelectionIndex();
+ ConnectionParameterPage page = index >= 0 ? pages[tabFolder.getSelectionIndex()] : null;
+ if( page != null && !page.isValid() )
+ {
+ setMessage( page.getMessage() );
+ setErrorMessage( page.getErrorMessage() );
+ setValid( false );
+ }
+ else
+ {
+ for ( int i = 0; i < pages.length; i++ )
+ {
+ if ( !pages[i].isValid() )
+ {
+ setMessage( pages[i].getMessage() );
+ setErrorMessage( pages[i].getErrorMessage() );
+ setValid( false );
+ return;
+ }
+ }
+
+ setMessage( null );
+ setErrorMessage( null );
+ setValid( true );
+
+ }
+ }
+
+
+ static Connection getConnection( Object element )
+ {
+ Connection connection = null;
+ if ( element instanceof IAdaptable )
+ {
+ connection = ( Connection ) ( ( IAdaptable ) element ).getAdapter( Connection.class );
+ }
+ return connection;
+ }
+
+
+ /**
+ * @see org.eclipse.jface.preference.PreferencePage#createContents(org.eclipse.swt.widgets.Composite)
+ */
+ protected Control createContents( Composite parent )
+ {
+ Connection connection = getConnection( getElement() );
+ if ( connection != null )
+ {
+ super.setMessage( "Connection " + Utils.shorten( connection.getName(), 30 ) );
+ }
+
+ pages = ConnectionParameterPageManager.getConnectionParameterPages();
+
+ tabFolder = new TabFolder( parent, SWT.TOP );
+
+ tabs = new TabItem[pages.length];
+ for ( int i = 0; i < pages.length; i++ )
+ {
+ Composite composite = new Composite( tabFolder, SWT.NONE );
+ GridLayout gl = new GridLayout( 1, false );
+ composite.setLayout( gl );
+
+ pages[i].createComposite( composite );
+ pages[i].setRunnableContext( null );
+ pages[i].setConnectionParameterPageModifyListener( this );
+ pages[i].loadParameters( connection.getConnectionParameter() );
+
+ tabs[i] = new TabItem( tabFolder, SWT.NONE );
+ tabs[i].setText( pages[i].getPageName() );
+ tabs[i].setControl( composite );
+ }
+
+ return tabFolder;
+ }
+
+
+ /**
+ * @see org.eclipse.jface.preference.PreferencePage#performOk()
+ */
+ public boolean performOk()
+ {
+ // get current connection parameters
+ Connection connection = ( Connection ) getConnection( getElement() );
+ ConnectionParameter connectionParameter = connection.getConnectionParameter();
+
+ // save modified parameters
+ for ( int i = 0; i < pages.length; i++ )
+ {
+ pages[i].saveParameters( connectionParameter );
+ pages[i].saveDialogSettings();
+ }
+
+ // update persistent connection
+ connection.setConnectionParameter( connectionParameter );
+ connection.setName( connection.getName() );
+ connection.setHost( connection.getHost() );
+
+ // close connection
+ new CloseConnectionsJob( connection ).execute();
+
+ return true;
+ }
+
+}
Added: directory/studio/trunk/studio-connection-ui/src/main/java/org/apache/directory/studio/connection/ui/widgets/AuthenticationParameterPage.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/studio-connection-ui/src/main/java/org/apache/directory/studio/connection/ui/widgets/AuthenticationParameterPage.java?rev=568990&view=auto
==============================================================================
--- directory/studio/trunk/studio-connection-ui/src/main/java/org/apache/directory/studio/connection/ui/widgets/AuthenticationParameterPage.java (added)
+++ directory/studio/trunk/studio-connection-ui/src/main/java/org/apache/directory/studio/connection/ui/widgets/AuthenticationParameterPage.java Thu Aug 23 06:47:09 2007
@@ -0,0 +1,329 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+
+package org.apache.directory.studio.connection.ui.widgets;
+
+
+import org.apache.directory.studio.connection.core.Connection;
+import org.apache.directory.studio.connection.core.ConnectionParameter;
+import org.apache.directory.studio.connection.core.ConnectionParameter.AuthenticationMethod;
+import org.apache.directory.studio.connection.core.jobs.CheckBindJob;
+import org.apache.directory.studio.connection.ui.AbstractConnectionParameterPage;
+import org.apache.directory.studio.connection.ui.ConnectionUIConstants;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Text;
+
+
+/**
+ * The AuthenticationParameterPage is used the edit the authentication parameters of a
+ * connection.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$, $Date$
+ */
+public class AuthenticationParameterPage extends AbstractConnectionParameterPage
+{
+
+ /** The combo to select the authentication method */
+ private Combo authenticationMethodCombo;
+
+ /** The bind user combo with the history of recently used bind users */
+ private Combo bindPrincipalCombo;
+
+ /** The text widget to input bind password */
+ private Text bindPasswordText;
+
+ /** The checkbox to choose if the bind password should be saved on disk */
+ private Button saveBindPasswordButton;
+
+ /** The button to check the authentication parameters */
+ private Button checkPrincipalPasswordAuthButton;;
+
+
+ /**
+ * Creates a new instance of AuthenticationParameterPage.
+ */
+ public AuthenticationParameterPage()
+ {
+ }
+
+
+ /**
+ * Gets the authentication method.
+ *
+ * @return the authentication method
+ */
+ private ConnectionParameter.AuthenticationMethod getAuthenticationMethod()
+ {
+ switch ( authenticationMethodCombo.getSelectionIndex() )
+ {
+ case 1:
+ return ConnectionParameter.AuthenticationMethod.SIMPLE;
+ case 2:
+ return ConnectionParameter.AuthenticationMethod.SASL_DIGEST_MD5;
+ case 3:
+ return ConnectionParameter.AuthenticationMethod.SASL_CRAM_MD5;
+ default:
+ return ConnectionParameter.AuthenticationMethod.NONE;
+ }
+ }
+
+
+ /**
+ * Gets the bind principal.
+ *
+ * @return the bind principal
+ */
+ private String getBindPrincipal()
+ {
+ return bindPrincipalCombo.getText();
+ }
+
+
+ /**
+ * Gets the bind password.
+ *
+ * @return the bind password
+ */
+ private String getBindPassword()
+ {
+ return isSaveBindPassword() ? bindPasswordText.getText() : null;
+ }
+
+
+ /**
+ * Returns true if the bind password should be saved on disk.
+ *
+ * @return true, if the bind password should be saved on disk
+ */
+ public boolean isSaveBindPassword()
+ {
+ return saveBindPasswordButton.getSelection();
+ }
+
+
+ /**
+ * Gets a temporary connection with all conection parameter
+ * entered in this page.
+ *
+ * @return a test connection
+ */
+ private Connection getTestConnection()
+ {
+ ConnectionParameter cp = connectionParameterPageModifyListener.getTestConnectionParameters();
+ Connection conn = new Connection( cp );
+ return conn;
+ }
+
+
+ /**
+ * @see org.apache.directory.studio.connection.ui.ConnectionParameterPage#createComposite(org.eclipse.swt.widgets.Composite)
+ */
+ public void createComposite( Composite parent )
+ {
+ Composite composite1 = BaseWidgetUtils.createColumnContainer( parent, 1, 1 );
+
+ Group group1 = BaseWidgetUtils.createGroup( composite1, "Authentication Method", 1 );
+ Composite groupComposite = BaseWidgetUtils.createColumnContainer( group1, 1, 1 );
+
+ String[] authMethods = new String[]
+ { "Anonymous Authentication", "Simple Authentication", "DIGEST-MD5 (SASL)", "CRAM-MD5 (SASL)" };
+ authenticationMethodCombo = BaseWidgetUtils.createReadonlyCombo( groupComposite, authMethods, 1, 2 );
+ authenticationMethodCombo.addSelectionListener( new SelectionAdapter()
+ {
+ public void widgetSelected( SelectionEvent event )
+ {
+ connectionPageModified();
+ }
+ } );
+
+ Composite composite2 = BaseWidgetUtils.createColumnContainer( parent, 1, 1 );
+
+ Group group2 = BaseWidgetUtils.createGroup( composite2, "Authentication Parameter", 1 );
+ Composite composite = BaseWidgetUtils.createColumnContainer( group2, 3, 1 );
+
+ BaseWidgetUtils.createLabel( composite, "Bind DN or user:", 1 );
+ String[] dnHistory = HistoryUtils.load( ConnectionUIConstants.DIALOGSETTING_KEY_PRINCIPAL_HISTORY );
+ bindPrincipalCombo = BaseWidgetUtils.createCombo( composite, dnHistory, -1, 2 );
+ bindPrincipalCombo.addModifyListener( new ModifyListener()
+ {
+ public void modifyText( ModifyEvent event )
+ {
+ connectionPageModified();
+ }
+ } );
+
+ BaseWidgetUtils.createLabel( composite, "Bind password:", 1 );
+ bindPasswordText = BaseWidgetUtils.createPasswordText( composite, "", 2 );
+ bindPasswordText.addModifyListener( new ModifyListener()
+ {
+ public void modifyText( ModifyEvent event )
+ {
+ connectionPageModified();
+ }
+ } );
+
+ BaseWidgetUtils.createSpacer( composite, 1 );
+ saveBindPasswordButton = BaseWidgetUtils.createCheckbox( composite, "Save password", 1 );
+ saveBindPasswordButton.setSelection( true );
+ saveBindPasswordButton.addSelectionListener( new SelectionAdapter()
+ {
+ public void widgetSelected( SelectionEvent event )
+ {
+ connectionPageModified();
+ }
+ } );
+
+ checkPrincipalPasswordAuthButton = new Button( composite, SWT.PUSH );
+ GridData gd = new GridData( GridData.FILL_HORIZONTAL );
+ gd.horizontalAlignment = SWT.RIGHT;
+ checkPrincipalPasswordAuthButton.setLayoutData( gd );
+ checkPrincipalPasswordAuthButton.setText( "Check Authentication" );
+ checkPrincipalPasswordAuthButton.setEnabled( false );
+ checkPrincipalPasswordAuthButton.addSelectionListener( new SelectionAdapter()
+ {
+ public void widgetSelected( SelectionEvent e )
+ {
+ Connection connection = getTestConnection();
+ CheckBindJob job = new CheckBindJob( connection );
+ RunnableContextJobAdapter.execute( job, runnableContext );
+ if ( job.getExternalResult().isOK() )
+ {
+ MessageDialog.openInformation( Display.getDefault().getActiveShell(), "Check Authentication",
+ "The authentication was successful." );
+ }
+ }
+ } );
+
+ validate();
+ }
+
+
+ /**
+ * Called when an input field was modified.
+ */
+ private void connectionPageModified()
+ {
+ validate();
+ fireConnectionPageModified();
+ }
+
+
+ /**
+ * Validates the input fields after each modification.
+ */
+ private void validate()
+ {
+ // set enabled/disabled state of fields and buttons
+ bindPrincipalCombo.setEnabled( isPrincipalPasswordEnabled() );
+ bindPasswordText.setEnabled( isPrincipalPasswordEnabled() && isSaveBindPassword() );
+ saveBindPasswordButton.setEnabled( isPrincipalPasswordEnabled() );
+ checkPrincipalPasswordAuthButton.setEnabled( isPrincipalPasswordEnabled() && isSaveBindPassword()
+ && !bindPrincipalCombo.getText().equals( "" ) && !bindPasswordText.getText().equals( "" ) );
+
+ // validate input fields
+ message = null;
+ errorMessage = null;
+ if ( isPrincipalPasswordEnabled() )
+ {
+ if ( isSaveBindPassword() && "".equals( bindPasswordText.getText() ) )
+ {
+ message = "Please enter a bind password.";
+ }
+ if ( "".equals( bindPrincipalCombo.getText() ) )
+ {
+ message = "Please enter a bind DN or user.";
+ }
+ }
+ }
+
+
+ /**
+ * Checks if is principal password enabled.
+ *
+ * @return true, if is principal password enabled
+ */
+ private boolean isPrincipalPasswordEnabled()
+ {
+ return ( getAuthenticationMethod() == AuthenticationMethod.SIMPLE )
+ || ( getAuthenticationMethod() == AuthenticationMethod.SASL_DIGEST_MD5 )
+ || ( getAuthenticationMethod() == AuthenticationMethod.SASL_CRAM_MD5 );
+ }
+
+
+ /**
+ * @see org.apache.directory.studio.connection.ui.ConnectionParameterPage#loadParameters(org.apache.directory.studio.connection.core.ConnectionParameter)
+ */
+ public void loadParameters( ConnectionParameter parameter )
+ {
+ this.connectionParameter = parameter;
+
+ int index = parameter.getAuthMethod() == AuthenticationMethod.SIMPLE ? 1
+ : parameter.getAuthMethod() == AuthenticationMethod.SASL_DIGEST_MD5 ? 2
+ : parameter.getAuthMethod() == AuthenticationMethod.SASL_CRAM_MD5 ? 3 : 0;
+ authenticationMethodCombo.select( index );
+ bindPrincipalCombo.setText( parameter.getBindPrincipal() );
+ bindPasswordText.setText( parameter.getBindPassword() != null ? parameter.getBindPassword() : "" );
+ saveBindPasswordButton.setSelection( parameter.getBindPassword() != null );
+
+ connectionPageModified();
+ }
+
+
+ /**
+ * @see org.apache.directory.studio.connection.ui.ConnectionParameterPage#saveParameters(org.apache.directory.studio.connection.core.ConnectionParameter)
+ */
+ public void saveParameters( ConnectionParameter parameter )
+ {
+ parameter.setAuthMethod( getAuthenticationMethod() );
+ parameter.setBindPrincipal( getBindPrincipal() );
+ parameter.setBindPassword( getBindPassword() );
+ }
+
+
+ /**
+ * @see org.apache.directory.studio.connection.ui.ConnectionParameterPage#saveDialogSettings()
+ */
+ public void saveDialogSettings()
+ {
+ HistoryUtils.save( ConnectionUIConstants.DIALOGSETTING_KEY_PRINCIPAL_HISTORY, bindPrincipalCombo.getText() );
+ }
+
+
+ /**
+ * @see org.apache.directory.studio.connection.ui.ConnectionParameterPage#setFocus()
+ */
+ public void setFocus()
+ {
+ bindPrincipalCombo.setFocus();
+ }
+
+}
Added: directory/studio/trunk/studio-connection-ui/src/main/java/org/apache/directory/studio/connection/ui/widgets/BaseWidgetUtils.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/studio-connection-ui/src/main/java/org/apache/directory/studio/connection/ui/widgets/BaseWidgetUtils.java?rev=568990&view=auto
==============================================================================
--- directory/studio/trunk/studio-connection-ui/src/main/java/org/apache/directory/studio/connection/ui/widgets/BaseWidgetUtils.java (added)
+++ directory/studio/trunk/studio-connection-ui/src/main/java/org/apache/directory/studio/connection/ui/widgets/BaseWidgetUtils.java Thu Aug 23 06:47:09 2007
@@ -0,0 +1,474 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+
+package org.apache.directory.studio.connection.ui.widgets;
+
+
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.resource.JFaceResources;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.FontMetrics;
+import org.eclipse.swt.graphics.GC;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Link;
+import org.eclipse.swt.widgets.Text;
+
+
+/**
+ * This class provides utility methods to create SWT widgets.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$, $Date$
+ */
+public class BaseWidgetUtils
+{
+
+ /**
+ * Creates a SWT {@link Group} under the given parent.
+ *
+ * @param parent the parent
+ * @param label the label of the group
+ * @param span the horizontal span
+ * @return the created group
+ */
+ public static Group createGroup( Composite parent, String label, int span )
+ {
+ Group group = new Group( parent, SWT.NONE );
+ GridData gd = new GridData( GridData.FILL_BOTH );
+ gd.horizontalSpan = span;
+ group.setLayoutData( gd );
+ group.setText( label );
+ group.setLayout( new GridLayout() );
+ return group;
+ }
+
+
+ /**
+ * Creates a SWT {@link Composite} under the given parent.
+ * A GridLayout with the given number of columns is used.
+ *
+ * @param parent the parent
+ * @param columnCount the number of columns
+ * @param span the horizontal span
+ * @return the created composite
+ */
+ public static Composite createColumnContainer( Composite parent, int columnCount, int span )
+ {
+ Composite container = new Composite( parent, SWT.NONE );
+ GridLayout gl = new GridLayout( columnCount, false );
+ gl.marginHeight = gl.marginWidth = 0;
+ container.setLayout( gl );
+ GridData gd = new GridData( GridData.FILL_HORIZONTAL );
+ gd.horizontalSpan = span;
+ container.setLayoutData( gd );
+ return container;
+ }
+
+
+ /**
+ * Creates a SWT {@link Label} under the given parent.
+ *
+ * @param parent the parent
+ * @param text the label's text
+ * @param span the horizontal span
+ * @return the created label
+ */
+ public static Label createLabel( Composite parent, String text, int span )
+ {
+ Label l = new Label( parent, SWT.NONE );
+ GridData gd = new GridData();
+ gd.horizontalSpan = span;
+ // gd.verticalAlignment = SWT.BEGINNING;
+ l.setLayoutData( gd );
+ l.setText( text );
+ return l;
+ }
+
+
+ /**
+ * Creates a SWT {@link Label} under the given parent.
+ * The label is created with the SWT.WRAP style to enable line wrapping.
+ *
+ * @param parent the parent
+ * @param text the label's text
+ * @param span the horizontal span
+ * @return the created label
+ */
+ public static Label createWrappedLabel( Composite parent, String text, int span )
+ {
+ Label l = new Label( parent, SWT.WRAP );
+ GridData gd = new GridData();
+ gd.horizontalSpan = span;
+ // gd.verticalAlignment = SWT.BEGINNING;
+ l.setLayoutData( gd );
+ l.setText( text );
+ return l;
+ }
+
+
+ /**
+ * Creates a SWT {@link Text} under the given parent.
+ * The created text control is modifyable.
+ *
+ * @param parent the parent
+ * @param text the initial text
+ * @param span the horizontal span
+ * @return the created text
+ */
+ public static Text createText( Composite parent, String text, int span )
+ {
+ Text t = new Text( parent, SWT.NONE | SWT.BORDER );
+ GridData gd = new GridData( GridData.FILL_HORIZONTAL );
+ gd.horizontalSpan = span;
+ t.setLayoutData( gd );
+ t.setText( text );
+ return t;
+ }
+
+
+ /**
+ * Creates a SWT {@link Text} under the given parent.
+ * The created text control is modifyable.
+ *
+ * @param parent the parent
+ * @param text the initial text
+ * @param textWidth the width of the text control
+ * @param span the horizontal span
+ * @return the created text
+ */
+ public static Text createText( Composite parent, String text, int textWidth, int span )
+ {
+ Text t = new Text( parent, SWT.NONE | SWT.BORDER );
+ GridData gd = new GridData();
+ gd.horizontalSpan = span;
+ gd.widthHint = 9 * textWidth;
+ t.setLayoutData( gd );
+ t.setText( text );
+ t.setTextLimit( textWidth );
+ return t;
+ }
+
+
+ /**
+ * Creates a SWT {@link Text} under the given parent.
+ * The created text control is created with the SWT.PASSWORD style.
+ *
+ * @param parent the parent
+ * @param text the initial text
+ * @param span the horizontal span
+ * @return the created text
+ */
+ public static Text createPasswordText( Composite parent, String text, int span )
+ {
+ Text t = new Text( parent, SWT.NONE | SWT.BORDER | SWT.PASSWORD );
+ GridData gd = new GridData( GridData.FILL_HORIZONTAL );
+ gd.horizontalSpan = span;
+ t.setLayoutData( gd );
+ t.setText( text );
+ return t;
+ }
+
+
+ /**
+ * Creates a SWT {@link Text} under the given parent.
+ * The created text control is created with the SWT.PASSWORD and
+ * SWT.READ_ONLY style. So the created controls is not modifyable.
+ *
+ * @param parent the parent
+ * @param text the initial text
+ * @param span the horizontal span
+ * @return the created text
+ */
+ public static Text createReadonlyPasswordText( Composite parent, String text, int span )
+ {
+ Text t = new Text( parent, SWT.NONE | SWT.BORDER | SWT.PASSWORD | SWT.READ_ONLY );
+ GridData gd = new GridData( GridData.FILL_HORIZONTAL );
+ gd.horizontalSpan = span;
+ t.setLayoutData( gd );
+ t.setEditable( false );
+ t.setBackground( parent.getBackground() );
+ t.setText( text );
+ return t;
+ }
+
+
+ /**
+ * Creates a SWT {@link Text} under the given parent.
+ * The created text control behaves like a label: it has no border,
+ * a grayed background and is not modifyable.
+ * But the text is selectable and could be copied.
+ *
+ * @param parent the parent
+ * @param text the initial text
+ * @param span the horizontal span
+ * @return the created text
+ */
+ public static Text createLabeledText( Composite parent, String text, int span )
+ {
+ Text t = new Text( parent, SWT.NONE );
+ GridData gd = new GridData( GridData.FILL_HORIZONTAL );
+ gd.horizontalSpan = span;
+ t.setLayoutData( gd );
+ t.setEditable( false );
+ t.setBackground( parent.getBackground() );
+ t.setText( text );
+ return t;
+ }
+
+
+ /**
+ * Creates a SWT {@link Text} under the given parent.
+ * The created text control behaves like a label: it has no border,
+ * a grayed background and is not modifyable.
+ * But the text is selectable and could be copied.
+ * The label is created with the SWT.WRAP style to enable line wrapping.
+ *
+ * @param parent the parent
+ * @param text the initial text
+ * @param span the horizontal span
+ * @return the created text
+ */
+ public static Text createWrappedLabeledText( Composite parent, String text, int span )
+ {
+ Text t = new Text( parent, SWT.WRAP );
+ GridData gd = new GridData( GridData.FILL_HORIZONTAL );
+ gd.horizontalSpan = span;
+ gd.widthHint = 10;
+ gd.grabExcessHorizontalSpace = true;
+ gd.horizontalAlignment = GridData.FILL;
+ t.setLayoutData( gd );
+ t.setEditable( false );
+ t.setBackground( parent.getBackground() );
+ t.setText( text );
+ return t;
+ }
+
+
+ /**
+ * Creates a SWT {@link Text} under the given parent.
+ * The text is not modifyable, but the text is selectable
+ * and could be copied.
+ *
+ * @param parent the parent
+ * @param text the initial text
+ * @param span the horizontal span
+ * @return the created text
+ */
+ public static Text createReadonlyText( Composite parent, String text, int span )
+ {
+ Text t = new Text( parent, SWT.NONE | SWT.BORDER | SWT.READ_ONLY );
+ GridData gd = new GridData( GridData.FILL_HORIZONTAL );
+ gd.horizontalSpan = span;
+ t.setLayoutData( gd );
+ t.setEditable( false );
+ t.setBackground( parent.getBackground() );
+ t.setText( text );
+ return t;
+ }
+
+
+ /**
+ * Creates a SWT {@link Combo} under the given parent.
+ * Beside the selection of an item it is also possible to type
+ * free text into the combo.
+ *
+ * @param parent the parent
+ * @param items the initial visible items
+ * @param selectedIndex the initial selected item, zero-based
+ * @param span the horizontal span
+ * @return the created combo
+ */
+ public static Combo createCombo( Composite parent, String[] items, int selectedIndex, int span )
+ {
+ Combo c = new Combo( parent, SWT.DROP_DOWN | SWT.BORDER );
+ GridData gd = new GridData( GridData.FILL_HORIZONTAL );
+ gd.horizontalSpan = span;
+ c.setLayoutData( gd );
+ c.setItems( items );
+ c.select( selectedIndex );
+ c.setVisibleItemCount( 20 );
+ return c;
+ }
+
+
+ /**
+ * Creates a SWT {@link Combo} under the given parent.
+ * It is not possible to type free text into the combo, only
+ * selection of predefined items is possible.
+ *
+ * @param parent the parent
+ * @param items the initial visible items
+ * @param selectedIndex the initial selected item, zero-based
+ * @param span the horizontal span
+ * @return the created combo
+ */
+ public static Combo createReadonlyCombo( Composite parent, String[] items, int selectedIndex, int span )
+ {
+ Combo c = new Combo( parent, SWT.DROP_DOWN | SWT.READ_ONLY | SWT.BORDER );
+ GridData gd = new GridData( GridData.FILL_HORIZONTAL );
+ gd.horizontalSpan = span;
+ c.setLayoutData( gd );
+ // c.setBackground(parent.getBackground());
+ c.setItems( items );
+ c.select( selectedIndex );
+ c.setVisibleItemCount( 20 );
+ return c;
+ }
+
+
+ /**
+ * Creates a checkbox under the given parent.
+ *
+ * @param parent the parent
+ * @param text the label of the checkbox
+ * @param span the horizontal span
+ * @return the created checkbox
+ */
+ public static Button createCheckbox( Composite parent, String text, int span )
+ {
+ Button checkbox = new Button( parent, SWT.CHECK );
+ checkbox.setText( text );
+ GridData gd = new GridData();
+ gd.horizontalSpan = span;
+ checkbox.setLayoutData( gd );
+ return checkbox;
+ }
+
+
+ /**
+ * Creates a radio button under the given parent.
+ *
+ * @param parent the parent
+ * @param text the label of the radio button
+ * @param span the horizontal span
+ * @return the created radio button
+ */
+ public static Button createRadiobutton( Composite parent, String text, int span )
+ {
+ Button radio = new Button( parent, SWT.RADIO );
+ radio.setText( text );
+ GridData gd = new GridData();
+ gd.horizontalSpan = span;
+ radio.setLayoutData( gd );
+ return radio;
+ }
+
+
+ /**
+ * Creates a button under the given parent.
+ * The button width is set to the default width.
+ *
+ * @param parent the parent
+ * @param text the label of the button
+ * @param span the horizontal span
+ * @return the created button
+ */
+ public static Button createButton( Composite parent, String text, int span )
+ {
+ GC gc = new GC( parent );
+ gc.setFont( JFaceResources.getDialogFont() );
+ FontMetrics fontMetrics = gc.getFontMetrics();
+ gc.dispose();
+
+ Button button = new Button( parent, SWT.PUSH );
+ GridData gd = new GridData();
+ gd.widthHint = Dialog.convertHorizontalDLUsToPixels( fontMetrics, IDialogConstants.BUTTON_WIDTH );
+ button.setLayoutData( gd );
+ button.setText( text );
+ return button;
+ }
+
+
+ /**
+ * Adds some space to indent radio buttons.
+ *
+ * @param parent the parent
+ * @param span the horizontal span
+ */
+ public static void createRadioIndent( Composite parent, int span )
+ {
+ Label l = new Label( parent, SWT.NONE );
+ GridData gd = new GridData();
+ gd.horizontalSpan = span;
+ gd.horizontalIndent = 22;
+ l.setLayoutData( gd );
+ }
+
+
+ /**
+ * Creates a spacer.
+ *
+ * @param parent the parent
+ * @param span the horizontal span
+ */
+ public static void createSpacer( Composite parent, int span )
+ {
+ Label l = new Label( parent, SWT.NONE );
+ // GridData gd = new GridData(GridData.FILL_HORIZONTAL);
+ GridData gd = new GridData();
+ gd.horizontalSpan = span;
+ gd.heightHint = 1;
+ l.setLayoutData( gd );
+ }
+
+
+ /**
+ * Creates a separator line.
+ *
+ * @param parent the parent
+ * @param span the horizontal span
+ */
+ public static void createSeparator( Composite parent, int span )
+ {
+ Label l = new Label( parent, SWT.SEPARATOR | SWT.HORIZONTAL );
+ GridData gd = new GridData( GridData.FILL_HORIZONTAL );
+ gd.horizontalSpan = span;
+ // gd.heightHint = 1;
+ l.setLayoutData( gd );
+ }
+
+
+ /**
+ * Creates a SWT {@link Link} under the given parent.
+ *
+ * @param parent the parent
+ * @param text the initial text
+ * @param span the horizontal span
+ * @return the created text
+ */
+ public static Link createLink( Composite parent, String text, int span )
+ {
+ Link link = new Link( parent, SWT.NONE );
+ link.setText( text );
+ GridData gd = new GridData( SWT.FILL, SWT.BEGINNING, true, false );
+ gd.horizontalSpan = span;
+ gd.widthHint = 150;
+ link.setLayoutData( gd );
+ return link;
+ }
+
+}
Added: directory/studio/trunk/studio-connection-ui/src/main/java/org/apache/directory/studio/connection/ui/widgets/ConnectionActionGroup.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/studio-connection-ui/src/main/java/org/apache/directory/studio/connection/ui/widgets/ConnectionActionGroup.java?rev=568990&view=auto
==============================================================================
--- directory/studio/trunk/studio-connection-ui/src/main/java/org/apache/directory/studio/connection/ui/widgets/ConnectionActionGroup.java (added)
+++ directory/studio/trunk/studio-connection-ui/src/main/java/org/apache/directory/studio/connection/ui/widgets/ConnectionActionGroup.java Thu Aug 23 06:47:09 2007
@@ -0,0 +1,325 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+
+package org.apache.directory.studio.connection.ui.widgets;
+
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+import org.apache.directory.studio.connection.ui.actions.ActionHandlerManager;
+import org.apache.directory.studio.connection.ui.actions.StudioActionProxy;
+import org.apache.directory.studio.connection.ui.actions.CloseConnectionAction;
+import org.apache.directory.studio.connection.ui.actions.ConnectionViewActionProxy;
+import org.apache.directory.studio.connection.ui.actions.CopyAction;
+import org.apache.directory.studio.connection.ui.actions.DeleteAction;
+import org.apache.directory.studio.connection.ui.actions.NewConnectionAction;
+import org.apache.directory.studio.connection.ui.actions.OpenConnectionAction;
+import org.apache.directory.studio.connection.ui.actions.PasteAction;
+import org.apache.directory.studio.connection.ui.actions.PropertiesAction;
+import org.apache.directory.studio.connection.ui.actions.RenameAction;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.commands.ActionHandler;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.ui.IActionBars;
+import org.eclipse.ui.IWorkbenchActionConstants;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.actions.ActionFactory;
+import org.eclipse.ui.commands.ICommandService;
+
+
+/**
+ * This class manages all the actions of the connection widget.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$, $Date$
+ */
+public class ConnectionActionGroup implements ActionHandlerManager, IMenuListener
+{
+
+ /** The Constant newConnectionAction. */
+ protected static final String newConnectionAction = "newConnectionAction";
+
+ /** The Constant openConnectionAction. */
+ protected static final String openConnectionAction = "openConnectionAction";
+
+ /** The Constant closeConnectionAction. */
+ protected static final String closeConnectionAction = "closeConnectionAction";
+
+ /** The Constant copyConnectionAction. */
+ protected static final String copyConnectionAction = "copyConnectionAction";
+
+ /** The Constant pasteConnectionAction. */
+ protected static final String pasteConnectionAction = "pasteConnectionAction";
+
+ /** The Constant deleteConnectionAction. */
+ protected static final String deleteConnectionAction = "deleteConnectionAction";
+
+ /** The Constant renameConnectionAction. */
+ protected static final String renameConnectionAction = "renameConnectionAction";
+
+ /** The Constant propertyDialogAction. */
+ protected static final String propertyDialogAction = "propertyDialogAction";
+
+ /** The action map. */
+ protected Map<String, ConnectionViewActionProxy> connectionActionMap;
+
+ /** The action bars. */
+ protected IActionBars actionBars;
+
+ /** The connection main widget. */
+ protected ConnectionWidget mainWidget;
+
+
+ /**
+ * Creates a new instance of ConnectionActionGroup.
+ *
+ * @param mainWidget the connection main widget
+ * @param configuration the connection widget configuration
+ */
+ public ConnectionActionGroup( ConnectionWidget mainWidget, ConnectionConfiguration configuration )
+ {
+ this.mainWidget = mainWidget;
+ this.connectionActionMap = new HashMap<String, ConnectionViewActionProxy>();
+
+ TableViewer viewer = mainWidget.getViewer();
+ connectionActionMap.put( newConnectionAction, new ConnectionViewActionProxy( viewer, this,
+ new NewConnectionAction() ) );
+ connectionActionMap.put( openConnectionAction, new ConnectionViewActionProxy( viewer, this,
+ new OpenConnectionAction() ) );
+ connectionActionMap.put( closeConnectionAction, new ConnectionViewActionProxy( viewer, this,
+ new CloseConnectionAction() ) );
+ connectionActionMap
+ .put( pasteConnectionAction, new ConnectionViewActionProxy( viewer, this, new PasteAction() ) );
+ connectionActionMap.put( copyConnectionAction, new ConnectionViewActionProxy( viewer, this, new CopyAction(
+ ( StudioActionProxy ) connectionActionMap.get( pasteConnectionAction ) ) ) );
+ connectionActionMap.put( deleteConnectionAction, new ConnectionViewActionProxy( viewer, this,
+ new DeleteAction() ) );
+ connectionActionMap.put( renameConnectionAction, new ConnectionViewActionProxy( viewer, this,
+ new RenameAction() ) );
+ connectionActionMap.put( propertyDialogAction, new ConnectionViewActionProxy( viewer, this,
+ new PropertiesAction() ) );
+ }
+
+
+ /**
+ * Disposes this action group.
+ */
+ public void dispose()
+ {
+ if ( mainWidget != null )
+ {
+ for ( Iterator it = connectionActionMap.keySet().iterator(); it.hasNext(); )
+ {
+ String key = ( String ) it.next();
+ ConnectionViewActionProxy action = ( ConnectionViewActionProxy ) this.connectionActionMap.get( key );
+ action.dispose();
+ action = null;
+ it.remove();
+ }
+ connectionActionMap.clear();
+ connectionActionMap = null;
+
+ actionBars = null;
+ mainWidget = null;
+ }
+ }
+
+
+ /**
+ * Enables the action handlers.
+ *
+ * @param actionBars the action bars
+ */
+ public void enableGlobalActionHandlers( IActionBars actionBars )
+ {
+ this.actionBars = actionBars;
+ activateGlobalActionHandlers();
+ }
+
+
+ /**
+ * Fills the tool bar.
+ *
+ * @param toolBarManager the tool bar manager
+ */
+ public void fillToolBar( IToolBarManager toolBarManager )
+ {
+ toolBarManager.add( ( IAction ) this.connectionActionMap.get( newConnectionAction ) );
+ toolBarManager.add( new Separator() );
+ toolBarManager.add( ( IAction ) this.connectionActionMap.get( openConnectionAction ) );
+ toolBarManager.add( ( IAction ) this.connectionActionMap.get( closeConnectionAction ) );
+
+ toolBarManager.update( true );
+ }
+
+
+ /**
+ * Fills the local menu.
+ *
+ * @param menuManager the local menu manager
+ */
+ public void fillMenu( IMenuManager menuManager )
+ {
+ // menuManager.add(this.openSortDialogAction);
+ // menuManager.add(new Separator());
+ // menuManager.update(true);
+ }
+
+
+ /**
+ * Fills the context menu.
+ *
+ * @param menuManager the context menu manager
+ */
+ public void fillContextMenu( IMenuManager menuManager )
+ {
+ menuManager.setRemoveAllWhenShown( true );
+ menuManager.addMenuListener( this );
+ }
+
+
+ /**
+ * {@inheritDoc}
+ *
+ * This implementation fills the context menu.
+ */
+ public void menuAboutToShow( IMenuManager menuManager )
+ {
+ // add
+ menuManager.add( ( IAction ) connectionActionMap.get( newConnectionAction ) );
+ menuManager.add( new Separator() );
+
+ // open/close
+ if ( ( ( IAction ) connectionActionMap.get( closeConnectionAction ) ).isEnabled() )
+ {
+ menuManager.add( ( IAction ) connectionActionMap.get( closeConnectionAction ) );
+ }
+ else if ( ( ( IAction ) connectionActionMap.get( openConnectionAction ) ).isEnabled() )
+ {
+ menuManager.add( ( IAction ) connectionActionMap.get( openConnectionAction ) );
+ }
+ menuManager.add( new Separator() );
+
+ // copy/paste/...
+ menuManager.add( ( IAction ) connectionActionMap.get( copyConnectionAction ) );
+ menuManager.add( ( IAction ) connectionActionMap.get( pasteConnectionAction ) );
+ menuManager.add( ( IAction ) connectionActionMap.get( deleteConnectionAction ) );
+ menuManager.add( ( IAction ) connectionActionMap.get( renameConnectionAction ) );
+ menuManager.add( new Separator() );
+
+ // additions
+ menuManager.add( new Separator( IWorkbenchActionConstants.MB_ADDITIONS ) );
+
+ // properties
+ menuManager.add( ( IAction ) connectionActionMap.get( propertyDialogAction ) );
+ }
+
+
+ /**
+ * Activates the action handlers.
+ */
+ public void activateGlobalActionHandlers()
+ {
+ ICommandService commandService = ( ICommandService ) PlatformUI.getWorkbench().getAdapter(
+ ICommandService.class );
+
+ if ( actionBars != null )
+ {
+ actionBars.setGlobalActionHandler( ActionFactory.COPY.getId(), ( IAction ) connectionActionMap
+ .get( copyConnectionAction ) );
+ actionBars.setGlobalActionHandler( ActionFactory.PASTE.getId(), ( IAction ) connectionActionMap
+ .get( pasteConnectionAction ) );
+ actionBars.setGlobalActionHandler( ActionFactory.DELETE.getId(), ( IAction ) connectionActionMap
+ .get( deleteConnectionAction ) );
+ actionBars.setGlobalActionHandler( ActionFactory.RENAME.getId(), ( IAction ) connectionActionMap
+ .get( renameConnectionAction ) );
+ actionBars.setGlobalActionHandler( ActionFactory.PROPERTIES.getId(), ( IAction ) connectionActionMap
+ .get( propertyDialogAction ) );
+ actionBars.updateActionBars();
+ }
+ else
+ {
+ if ( commandService != null )
+ {
+ IAction ca = ( IAction ) connectionActionMap.get( copyConnectionAction );
+ ca.setActionDefinitionId( "org.apache.directory.studio.ldapbrowser.action.copy" );
+ commandService.getCommand( ca.getActionDefinitionId() ).setHandler( new ActionHandler( ca ) );
+
+ IAction pa = ( IAction ) connectionActionMap.get( pasteConnectionAction );
+ pa.setActionDefinitionId( "org.apache.directory.studio.ldapbrowser.action.paste" );
+ commandService.getCommand( pa.getActionDefinitionId() ).setHandler( new ActionHandler( pa ) );
+
+ IAction da = ( IAction ) connectionActionMap.get( deleteConnectionAction );
+ da.setActionDefinitionId( "org.apache.directory.studio.ldapbrowser.action.delete" );
+ commandService.getCommand( da.getActionDefinitionId() ).setHandler( new ActionHandler( da ) );
+
+ IAction pda = ( IAction ) connectionActionMap.get( propertyDialogAction );
+ pda.setActionDefinitionId( "org.apache.directory.studio.ldapbrowser.action.properties" );
+ commandService.getCommand( pda.getActionDefinitionId() ).setHandler( new ActionHandler( pda ) );
+
+ }
+ }
+ }
+
+
+ /**
+ * Deactivates the action handlers.
+ */
+ public void deactivateGlobalActionHandlers()
+ {
+ ICommandService commandService = ( ICommandService ) PlatformUI.getWorkbench().getAdapter(
+ ICommandService.class );
+
+ if ( actionBars != null )
+ {
+ actionBars.setGlobalActionHandler( ActionFactory.COPY.getId(), null );
+ actionBars.setGlobalActionHandler( ActionFactory.PASTE.getId(), null );
+ actionBars.setGlobalActionHandler( ActionFactory.DELETE.getId(), null );
+ actionBars.setGlobalActionHandler( ActionFactory.RENAME.getId(), null );
+ actionBars.setGlobalActionHandler( ActionFactory.PROPERTIES.getId(), null );
+ actionBars.updateActionBars();
+ }
+ else
+ {
+ if ( commandService != null )
+ {
+ IAction ca = ( IAction ) connectionActionMap.get( copyConnectionAction );
+ commandService.getCommand( ca.getActionDefinitionId() ).setHandler( null );
+
+ IAction pa = ( IAction ) connectionActionMap.get( pasteConnectionAction );
+ commandService.getCommand( pa.getActionDefinitionId() ).setHandler( null );
+
+ IAction da = ( IAction ) connectionActionMap.get( deleteConnectionAction );
+ commandService.getCommand( da.getActionDefinitionId() ).setHandler( null );
+
+ IAction pda = ( IAction ) connectionActionMap.get( propertyDialogAction );
+ commandService.getCommand( pda.getActionDefinitionId() ).setHandler( null );
+
+ }
+ }
+ }
+
+}
Added: directory/studio/trunk/studio-connection-ui/src/main/java/org/apache/directory/studio/connection/ui/widgets/ConnectionConfiguration.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/studio-connection-ui/src/main/java/org/apache/directory/studio/connection/ui/widgets/ConnectionConfiguration.java?rev=568990&view=auto
==============================================================================
--- directory/studio/trunk/studio-connection-ui/src/main/java/org/apache/directory/studio/connection/ui/widgets/ConnectionConfiguration.java (added)
+++ directory/studio/trunk/studio-connection-ui/src/main/java/org/apache/directory/studio/connection/ui/widgets/ConnectionConfiguration.java Thu Aug 23 06:47:09 2007
@@ -0,0 +1,147 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+
+package org.apache.directory.studio.connection.ui.widgets;
+
+
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.swt.widgets.Menu;
+
+
+/**
+ * The ConnectionConfiguration contains the content provider, the
+ * label provider and the context menu manager for the
+ * connection widget.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$, $Date$
+ */
+public class ConnectionConfiguration
+{
+
+ /** The disposed flag */
+ private boolean disposed = false;
+
+ /** The content provider. */
+ private ConnectionContentProvider contentProvider;
+
+ /** The label provider. */
+ private ConnectionLabelProvider labelProvider;
+
+ /** The context menu manager. */
+ private MenuManager contextMenuManager;
+
+
+ /**
+ * Creates a new instance of ConnectionConfiguration.
+ */
+ public ConnectionConfiguration()
+ {
+ }
+
+
+ /**
+ * Disposes this configuration.
+ */
+ public void dispose()
+ {
+ if ( !disposed )
+ {
+
+ if ( contentProvider != null )
+ {
+ contentProvider.dispose();
+ contentProvider = null;
+ }
+
+ if ( labelProvider != null )
+ {
+ labelProvider.dispose();
+ labelProvider = null;
+ }
+
+ if ( contextMenuManager != null )
+ {
+ contextMenuManager.dispose();
+ contextMenuManager = null;
+ }
+
+ disposed = true;
+ }
+ }
+
+
+ /**
+ * Gets the context menu manager.
+ *
+ * @param viewer the connection widget's table viewer
+ *
+ * @return the context menu manager
+ */
+ public IMenuManager getContextMenuManager( TableViewer viewer )
+ {
+ if ( this.contextMenuManager == null )
+ {
+ this.contextMenuManager = new MenuManager();
+ Menu menu = this.contextMenuManager.createContextMenu( viewer.getControl() );
+ viewer.getControl().setMenu( menu );
+ }
+ return this.contextMenuManager;
+ }
+
+
+ /**
+ * Gets the content provider.
+ *
+ * @param viewer the connection widget's table viewer
+ *
+ * @return the content provider
+ */
+ public ConnectionContentProvider getContentProvider( TableViewer viewer )
+ {
+ if ( contentProvider == null )
+ {
+ contentProvider = new ConnectionContentProvider();
+ }
+
+ return contentProvider;
+ }
+
+
+ /**
+ * Gets the label provider.
+ *
+ * @param viewer the connection widget's table viewer
+ *
+ * @return the label provider
+ */
+ public ConnectionLabelProvider getLabelProvider( TableViewer viewer )
+ {
+ if ( labelProvider == null )
+ {
+ labelProvider = new ConnectionLabelProvider();
+ }
+
+ return labelProvider;
+ }
+
+}
Added: directory/studio/trunk/studio-connection-ui/src/main/java/org/apache/directory/studio/connection/ui/widgets/ConnectionContentProvider.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/studio-connection-ui/src/main/java/org/apache/directory/studio/connection/ui/widgets/ConnectionContentProvider.java?rev=568990&view=auto
==============================================================================
--- directory/studio/trunk/studio-connection-ui/src/main/java/org/apache/directory/studio/connection/ui/widgets/ConnectionContentProvider.java (added)
+++ directory/studio/trunk/studio-connection-ui/src/main/java/org/apache/directory/studio/connection/ui/widgets/ConnectionContentProvider.java Thu Aug 23 06:47:09 2007
@@ -0,0 +1,79 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+
+package org.apache.directory.studio.connection.ui.widgets;
+
+
+import org.apache.directory.studio.connection.core.ConnectionManager;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.Viewer;
+
+
+/**
+ * The ConnectionContentProvider represents the content provider for
+ * the connection widget. It accepts the ConnectionManager as input
+ * and returns its connections as elements.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$, $Date$
+ */
+public class ConnectionContentProvider implements IStructuredContentProvider
+{
+
+ /**
+ * {@inheritDoc}
+ *
+ * This implementation does nothing.
+ */
+ public void inputChanged( Viewer viewer, Object oldInput, Object newInput )
+ {
+ }
+
+
+ /**
+ * {@inheritDoc}
+ *
+ * This implementation does nothing.
+ */
+ public void dispose()
+ {
+ }
+
+
+ /**
+ * {@inheritDoc}
+ *
+ * This implementation accepts the ConnectionManager and returns its connections.
+ */
+ public Object[] getElements( Object inputElement )
+ {
+ if ( inputElement != null && inputElement instanceof ConnectionManager )
+ {
+ ConnectionManager cm = ( ConnectionManager ) inputElement;
+ return cm.getConnections();
+ }
+ else
+ {
+ return new Object[]
+ {};
+ }
+ }
+
+}
\ No newline at end of file