/*
* 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.schemaeditor.view.editors.attributetype;
import java.util.List;
import org.apache.directory.api.ldap.model.schema.AttributeType;
import org.apache.directory.api.ldap.model.schema.MutableObjectClass;
import org.apache.directory.api.ldap.model.schema.ObjectClass;
import org.apache.directory.studio.schemaeditor.Activator;
import org.apache.directory.studio.schemaeditor.PluginConstants;
import org.apache.directory.studio.schemaeditor.PluginUtils;
import org.apache.directory.studio.schemaeditor.controller.SchemaHandlerAdapter;
import org.apache.directory.studio.schemaeditor.controller.SchemaHandlerListener;
import org.apache.directory.studio.schemaeditor.model.Schema;
import org.apache.directory.studio.schemaeditor.view.ViewUtils;
import org.apache.directory.studio.schemaeditor.view.editors.objectclass.ObjectClassEditor;
import org.apache.directory.studio.schemaeditor.view.editors.objectclass.ObjectClassEditorInput;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.osgi.util.NLS;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Table;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.forms.IManagedForm;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.ui.forms.widgets.ScrolledForm;
import org.eclipse.ui.forms.widgets.Section;
/**
* This class is the Used By Page of the Attribute Type Editor
*/
public class AttributeTypeEditorUsedByPage extends AbstractAttributeTypeEditorPage
{
/** The page ID */
public static final String ID = AttributeTypeEditor.ID + "usedByPage"; //$NON-NLS-1$
/** The Schema listener */
private SchemaHandlerListener schemaHandlerListener = new SchemaHandlerAdapter()
{
/**
* {@inheritDoc}
*/
public void attributeTypeAdded( AttributeType at )
{
refreshTableViewers();
}
/**
* {@inheritDoc}
*/
public void attributeTypeModified( AttributeType at )
{
refreshTableViewers();
}
/**
* {@inheritDoc}
*/
public void attributeTypeRemoved( AttributeType at )
{
refreshTableViewers();
}
/**
* {@inheritDoc}
*/
public void objectClassAdded( ObjectClass oc )
{
refreshTableViewers();
}
/**
* {@inheritDoc}
*/
public void objectClassModified( ObjectClass oc )
{
refreshTableViewers();
}
/**
* {@inheritDoc}
*/
public void objectClassRemoved( ObjectClass oc )
{
refreshTableViewers();
}
/**
* {@inheritDoc}
*/
public void schemaAdded( Schema schema )
{
refreshTableViewers();
}
/**
* {@inheritDoc}
*/
public void schemaRemoved( Schema schema )
{
refreshTableViewers();
}
};
// UI Widgets
private Table mandatoryAttributeTable;
private TableViewer mandatoryAttributeTableViewer;
private Table optionalAttibuteTable;
private TableViewer optionalAttibuteTableViewer;
// Listeners
/** The listener of the Mandatory Attribute Type Table*/
private MouseAdapter mandatoryAttributeTableListener = new MouseAdapter()
{
public void mouseDoubleClick( MouseEvent e )
{
Object selectedItem = ( ( StructuredSelection ) mandatoryAttributeTableViewer.getSelection() )
.getFirstElement();
if ( selectedItem instanceof ObjectClass )
{
IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
try
{
page.openEditor( new ObjectClassEditorInput( ( MutableObjectClass ) selectedItem ),
ObjectClassEditor.ID );
}
catch ( PartInitException exception )
{
PluginUtils.logError( "error when opening the editor", exception ); //$NON-NLS-1$
}
}
}
};
/** The listener of the Optional Attribute Type Table*/
private MouseAdapter optionalAttibuteTableListener = new MouseAdapter()
{
public void mouseDoubleClick( MouseEvent e )
{
Object selectedItem = ( ( StructuredSelection ) optionalAttibuteTableViewer.getSelection() )
.getFirstElement();
if ( selectedItem instanceof ObjectClass )
{
IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
try
{
page.openEditor( new ObjectClassEditorInput( ( MutableObjectClass ) selectedItem ),
ObjectClassEditor.ID );
}
catch ( PartInitException exception )
{
PluginUtils.logError( "error when opening the editor", exception ); //$NON-NLS-1$
}
}
}
};
/**
* Default constructor.
*
* @param editor
* the associated editor
*/
public AttributeTypeEditorUsedByPage( AttributeTypeEditor editor )
{
super( editor, ID, Messages.getString( "AttributeTypeEditorUsedByPage.UsedBy" ) ); //$NON-NLS-1$
Activator.getDefault().getSchemaHandler().addListener( schemaHandlerListener );
}
/**
* {@inheritDoc}
*/
protected void createFormContent( IManagedForm managedForm )
{
// Creating the base UI
ScrolledForm form = managedForm.getForm();
FormToolkit toolkit = managedForm.getToolkit();
GridLayout layout = new GridLayout( 2, true );
form.getBody().setLayout( layout );
// As Mandatory Attribute Section
createAsMandatoryAttributeSection( form.getBody(), toolkit );
// As Optional Attribute Section
createAsOptionalAttributeSection( form.getBody(), toolkit );
// Filling the UI with values from the attribute type
fillInUiFields();
// Listeners initialization
addListeners();
// Help Context for Dynamic Help
PlatformUI.getWorkbench().getHelpSystem().setHelp( form,
PluginConstants.PLUGIN_ID + "." + "attribute_type_editor" ); //$NON-NLS-1$ //$NON-NLS-2$
initialized = true;
}
/**
* Creates the As Mandatory Attribute Section.
*
* @param parent
* the parent composite
* @param toolkit
* the FormToolKit to use
*/
private void createAsMandatoryAttributeSection( Composite parent, FormToolkit toolkit )
{
AttributeType modifiedAttributeType = getModifiedAttributeType();
// As Mandatory Attribute Section
Section mandatoryAttributeSection = toolkit.createSection( parent, Section.DESCRIPTION | Section.EXPANDED
| Section.TITLE_BAR );
List<String> names = modifiedAttributeType.getNames();
if ( ( names != null ) && ( names.size() > 0 ) )
{
mandatoryAttributeSection
.setDescription( NLS
.bind(
Messages.getString( "AttributeTypeEditorUsedByPage.AttributeTypeMandatory" ), new String[] { ViewUtils.concateAliases( names ) } ) ); //$NON-NLS-1$
}
else
{
mandatoryAttributeSection
.setDescription( NLS
.bind(
Messages.getString( "AttributeTypeEditorUsedByPage.AttributeTypeMandatory" ), new String[] { modifiedAttributeType.getOid() } ) ); //$NON-NLS-1$
}
mandatoryAttributeSection.setText( Messages.getString( "AttributeTypeEditorUsedByPage.AsMandatoryAttribute" ) ); //$NON-NLS-1$
// Creating the layout of the section
Composite mandatoryAttributeSectionClient = toolkit.createComposite( mandatoryAttributeSection );
mandatoryAttributeSectionClient.setLayout( new GridLayout() );
toolkit.paintBordersFor( mandatoryAttributeSectionClient );
mandatoryAttributeSection.setClient( mandatoryAttributeSectionClient );
mandatoryAttributeSection.setLayoutData( new GridData( SWT.FILL, SWT.FILL, true, true ) );
mandatoryAttributeTable = toolkit.createTable( mandatoryAttributeSectionClient, SWT.NONE );
GridData gridData = new GridData( SWT.FILL, SWT.FILL, true, true );
gridData.heightHint = 1;
mandatoryAttributeTable.setLayoutData( gridData );
mandatoryAttributeTableViewer = new TableViewer( mandatoryAttributeTable );
mandatoryAttributeTableViewer.setContentProvider( new ATEUsedByMandatoryTableContentProvider() );
mandatoryAttributeTableViewer.setLabelProvider( new ATEUsedByTablesLabelProvider() );
}
/**
* Creates the As Optional Attribute Section.
*
* @param parent
* the parent composite
* @param toolkit
* the FormToolKit to use
*/
private void createAsOptionalAttributeSection( Composite parent, FormToolkit toolkit )
{
AttributeType modifiedAttributeType = getModifiedAttributeType();
// Matching Rules Section
Section optionalAttributeSection = toolkit.createSection( parent, Section.DESCRIPTION | Section.EXPANDED
| Section.TITLE_BAR );
List<String> names = modifiedAttributeType.getNames();
if ( ( names != null ) && ( names.size() > 0 ) )
{
optionalAttributeSection
.setDescription( NLS
.bind(
Messages.getString( "AttributeTypeEditorUsedByPage.AttributeTypeOptional" ), new String[] { ViewUtils.concateAliases( names ) } ) ); //$NON-NLS-1$
}
else
{
optionalAttributeSection
.setDescription( NLS
.bind(
Messages.getString( "AttributeTypeEditorUsedByPage.AttributeTypeOptional" ), new String[] { modifiedAttributeType.getOid() } ) ); //$NON-NLS-1$
}
optionalAttributeSection.setText( Messages.getString( "AttributeTypeEditorUsedByPage.AsOptionalAttribute" ) ); //$NON-NLS-1$
// Creating the layout of the section
Composite optionalAttributeSectionClient = toolkit.createComposite( optionalAttributeSection );
optionalAttributeSectionClient.setLayout( new GridLayout() );
toolkit.paintBordersFor( optionalAttributeSectionClient );
optionalAttributeSection.setClient( optionalAttributeSectionClient );
optionalAttributeSection.setLayoutData( new GridData( SWT.FILL, SWT.FILL, true, true ) );
optionalAttibuteTable = toolkit.createTable( optionalAttributeSectionClient, SWT.NONE );
GridData gridData = new GridData( SWT.FILL, SWT.FILL, true, true );
gridData.heightHint = 1;
optionalAttibuteTable.setLayoutData( gridData );
optionalAttibuteTableViewer = new TableViewer( optionalAttibuteTable );
optionalAttibuteTableViewer.setContentProvider( new ATEUsedByOptionalTableContentProvider() );
optionalAttibuteTableViewer.setLabelProvider( new ATEUsedByTablesLabelProvider() );
}
/**
* {@inheritDoc}
*/
protected void fillInUiFields()
{
AttributeType modifiedAttributeType = getModifiedAttributeType();
mandatoryAttributeTableViewer.setInput( modifiedAttributeType );
optionalAttibuteTableViewer.setInput( modifiedAttributeType );
}
/**
* {@inheritDoc}
*/
protected void addListeners()
{
addMouseListener( mandatoryAttributeTable, mandatoryAttributeTableListener );
addMouseListener( optionalAttibuteTable, optionalAttibuteTableListener );
}
/**
* {@inheritDoc}
*/
protected void removeListeners()
{
removeMouseListener( mandatoryAttributeTable, mandatoryAttributeTableListener );
removeMouseListener( optionalAttibuteTable, optionalAttibuteTableListener );
}
/**
* Refreshes the Table Viewers
*/
public void refreshTableViewers()
{
if ( mandatoryAttributeTableViewer != null )
{
mandatoryAttributeTableViewer.refresh();
}
if ( optionalAttibuteTableViewer != null )
{
optionalAttibuteTableViewer.refresh();
}
}
/**
* {@inheritDoc}
*/
public void dispose()
{
Activator.getDefault().getSchemaHandler().removeListener( schemaHandlerListener );
super.dispose();
}
}