blob: d2862704e75d0ad3e8f5425d051c4c2490d8cf09 [file] [log] [blame]
/*
* 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.ldapbrowser.ui.editors.schemabrowser;
import org.apache.directory.studio.common.ui.widgets.WidgetModifyEvent;
import org.apache.directory.studio.common.ui.widgets.WidgetModifyListener;
import org.apache.directory.studio.connection.core.Connection;
import org.apache.directory.studio.connection.core.ConnectionFolder;
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.apache.directory.studio.ldapbrowser.common.widgets.search.BrowserConnectionWidget;
import org.apache.directory.studio.ldapbrowser.core.model.IBrowserConnection;
import org.eclipse.jface.action.ContributionItem;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.ToolBar;
import org.eclipse.swt.widgets.ToolItem;
/**
* A contribution item that adds a BrowserConnectionWidget with connections to the toolbar.
*
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
*/
public class BrowserConnectionWidgetContributionItem extends ContributionItem implements ConnectionUpdateListener
{
/** The schema page */
private SchemaPage schemaPage;
/** The tool item */
private ToolItem toolitem;
/** The tool item composite */
private Composite toolItemComposite;
private BrowserConnectionWidget browserConnectionWidget;
/**
* Creates a new instance of ConnectionContributionItem.
*
* @param schemaPage the schema page
*/
public BrowserConnectionWidgetContributionItem( SchemaPage schemaPage )
{
this.schemaPage = schemaPage;
}
/**
* Creates and returns the control for this contribution item
* under the given parent composite.
*
* @param parent the parent composite
* @return the new control
*/
private Control createControl( Composite parent )
{
// Creating the ToolItem Composite
toolItemComposite = new Composite( parent, SWT.NONE );
GridLayout gridLayout = new GridLayout( 2, false );
gridLayout.marginWidth = 0;
gridLayout.marginHeight = 0;
toolItemComposite.setLayout( gridLayout );
toolItemComposite.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) );
// Creating the Browser Connection Widget
browserConnectionWidget = new BrowserConnectionWidget();
browserConnectionWidget.createWidget( toolItemComposite );
browserConnectionWidget.addWidgetModifyListener( new WidgetModifyListener()
{
public void widgetModified( WidgetModifyEvent event )
{
schemaPage.getSchemaBrowser().setInput( new SchemaBrowserInput( getConnection(), null ) );
}
} );
ConnectionEventRegistry.addConnectionUpdateListener( this, ConnectionUIPlugin.getDefault().getEventRunner() );
// Initializing the width for the toolbar item
toolitem.setWidth( 250 );
return toolItemComposite;
}
/**
* @see org.eclipse.jface.action.ContributionItem#dispose()
*/
public void dispose()
{
ConnectionEventRegistry.removeConnectionUpdateListener( this );
toolItemComposite.dispose();
toolItemComposite = null;
browserConnectionWidget = null;
}
/**
* The control item implementation of this <code>IContributionItem</code>
* method calls the <code>createControl</code> method.
*
* @param parent the parent of the control to fill
*/
public final void fill( Composite parent )
{
createControl( parent );
}
/**
* The control item implementation of this <code>IContributionItem</code>
* method throws an exception since controls cannot be added to menus.
*
* @param parent the menu
* @param index menu index
*/
public final void fill( Menu parent, int index )
{
throw new UnsupportedOperationException( Messages.getString( "BrowserConnectionWidgetContributionItem.CantAddControl" ) ); //$NON-NLS-1$
}
/**
* The control item implementation of this <code>IContributionItem</code>
* method calls the <code>createControl</code> method to
* create a control under the given parent, and then creates
* a new tool item to hold it.
*
* @param parent the ToolBar to add the new control to
* @param index the index
*/
public void fill( ToolBar parent, int index )
{
toolitem = new ToolItem( parent, SWT.SEPARATOR, index );
Control control = createControl( parent );
toolitem.setControl( control );
}
/**
* Gets the connection.
*
* @return the connection
*/
public IBrowserConnection getConnection()
{
return browserConnectionWidget.getBrowserConnection();
}
/**
* Sets the connection.
*
* @param connection the connection
*/
public void setConnection( IBrowserConnection connection )
{
browserConnectionWidget.setBrowserConnection( connection );
}
/**
* Updates the enabled state.
*/
public void updateEnabledState()
{
browserConnectionWidget.setEnabled( !schemaPage.isShowDefaultSchema() );
}
/**
* @see org.apache.directory.studio.connection.core.event.ConnectionUpdateListener#connectionUpdated(org.apache.directory.studio.connection.core.Connection)
*/
public final void connectionUpdated( Connection connection )
{
if ( connection == null )
{
return;
}
IBrowserConnection selectedConnection = browserConnectionWidget.getBrowserConnection();
if ( connection.equals( selectedConnection.getConnection() ) )
{
browserConnectionWidget.setBrowserConnection( browserConnectionWidget.getBrowserConnection() );
}
}
/**
* @see org.apache.directory.studio.connection.core.event.ConnectionUpdateListener#connectionAdded(org.apache.directory.studio.connection.core.Connection)
*/
public void connectionAdded( Connection connection )
{
// Nothing to do
}
/**
* @see org.apache.directory.studio.connection.core.event.ConnectionUpdateListener#connectionRemoved(org.apache.directory.studio.connection.core.Connection)
*/
public void connectionRemoved( Connection connection )
{
if ( connection == null )
{
return;
}
IBrowserConnection selectedConnection = browserConnectionWidget.getBrowserConnection();
if ( connection.equals( selectedConnection.getConnection() ) )
{
schemaPage.getSchemaBrowser().setInput( new SchemaBrowserInput( null, null ) );
}
}
/**
* @see org.apache.directory.studio.connection.core.event.ConnectionUpdateListener#connectionOpened(org.apache.directory.studio.connection.core.Connection)
*/
public void connectionOpened( Connection connection )
{
// Nothing to do
}
/**
* @see org.apache.directory.studio.connection.core.event.ConnectionUpdateListener#connectionClosed(org.apache.directory.studio.connection.core.Connection)
*/
public void connectionClosed( Connection connection )
{
// Nothing to do
}
/**
* @see org.apache.directory.studio.connection.core.event.ConnectionUpdateListener#connectionFolderModified(org.apache.directory.studio.connection.core.ConnectionFolder)
*/
public void connectionFolderModified( ConnectionFolder connectionFolder )
{
// Nothing to do
}
/**
* @see org.apache.directory.studio.connection.core.event.ConnectionUpdateListener#connectionFolderAdded(org.apache.directory.studio.connection.core.ConnectionFolder)
*/
public void connectionFolderAdded( ConnectionFolder connectionFolder )
{
// Nothing to do
}
/**
* @see org.apache.directory.studio.connection.core.event.ConnectionUpdateListener#connectionFolderRemoved(org.apache.directory.studio.connection.core.ConnectionFolder)
*/
public void connectionFolderRemoved( ConnectionFolder connectionFolder )
{
// Nothing to do
}
}