/*
* 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.ArrayList;
import java.util.List;
import org.apache.directory.api.asn1.util.Oid;
import org.apache.directory.api.ldap.model.schema.AttributeType;
import org.apache.directory.api.ldap.model.schema.LdapSyntax;
import org.apache.directory.api.ldap.model.schema.MatchingRule;
import org.apache.directory.api.ldap.model.schema.MutableAttributeType;
import org.apache.directory.api.ldap.model.schema.ObjectClass;
import org.apache.directory.api.ldap.model.schema.UsageEnum;
import org.apache.directory.studio.schemaeditor.Activator;
import org.apache.directory.studio.schemaeditor.PluginConstants;
import org.apache.directory.studio.schemaeditor.controller.SchemaHandler;
import org.apache.directory.studio.schemaeditor.controller.SchemaHandlerListener;
import org.apache.directory.studio.schemaeditor.model.Schema;
import org.apache.directory.studio.schemaeditor.model.alias.Alias;
import org.apache.directory.studio.schemaeditor.model.alias.AliasWithError;
import org.apache.directory.studio.schemaeditor.model.alias.AliasesStringParser;
import org.apache.directory.studio.schemaeditor.view.ViewUtils;
import org.apache.directory.studio.schemaeditor.view.dialogs.EditAttributeTypeAliasesDialog;
import org.apache.directory.studio.schemaeditor.view.editors.NonExistingAttributeType;
import org.apache.directory.studio.schemaeditor.view.editors.NonExistingMatchingRule;
import org.apache.directory.studio.schemaeditor.view.editors.NonExistingSyntax;
import org.apache.directory.studio.schemaeditor.view.editors.schema.SchemaEditor;
import org.apache.directory.studio.schemaeditor.view.editors.schema.SchemaEditorInput;
import org.apache.log4j.Logger;
import org.eclipse.jface.viewers.ComboViewer;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
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.events.VerifyEvent;
import org.eclipse.swt.events.VerifyListener;
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.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Text;
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.events.HyperlinkAdapter;
import org.eclipse.ui.forms.events.HyperlinkEvent;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.ui.forms.widgets.Hyperlink;
import org.eclipse.ui.forms.widgets.ScrolledForm;
import org.eclipse.ui.forms.widgets.Section;
/**
* This class is the Overview Page of the Attribute Type Editor
*/
public class AttributeTypeEditorOverviewPage extends AbstractAttributeTypeEditorPage
{
/** The page ID*/
public static final String ID = AttributeTypeEditor.ID + ".overviewPage"; //$NON-NLS-1$
/** The original schema */
private Schema originalSchema;
/** The SchemaHandler */
private SchemaHandler schemaHandler;
/** The SchemaHandler Listener */
private SchemaHandlerListener schemaHandlerListener = new SchemaHandlerListener()
{
public void attributeTypeAdded( AttributeType at )
{
refreshUI();
}
public void attributeTypeModified( AttributeType at )
{
refreshUI();
}
public void attributeTypeRemoved( AttributeType at )
{
if ( !at.equals( getOriginalAttributeType() ) )
{
refreshUI();
}
}
public void matchingRuleAdded( MatchingRule mr )
{
refreshUI();
}
public void matchingRuleModified( MatchingRule mr )
{
refreshUI();
}
public void matchingRuleRemoved( MatchingRule mr )
{
refreshUI();
}
public void objectClassAdded( ObjectClass oc )
{
refreshUI();
}
public void objectClassModified( ObjectClass oc )
{
refreshUI();
}
public void objectClassRemoved( ObjectClass oc )
{
refreshUI();
}
public void schemaAdded( Schema schema )
{
refreshUI();
}
public void schemaRemoved( Schema schema )
{
if ( !schema.equals( originalSchema ) )
{
refreshUI();
}
}
public void schemaRenamed( Schema schema )
{
refreshUI();
}
public void syntaxAdded( LdapSyntax syntax )
{
refreshUI();
}
public void syntaxModified( LdapSyntax syntax )
{
refreshUI();
}
public void syntaxRemoved( LdapSyntax syntax )
{
refreshUI();
}
};
// UI Fields
private Text aliasesText;
private Button aliasesButton;
private Text oidText;
private Hyperlink schemaLink;
private Label schemaLabel;
private Text descriptionText;
private Hyperlink supLabel;
private Combo supCombo;
private ComboViewer supComboViewer;
private Combo usageCombo;
private Combo syntaxCombo;
private ComboViewer syntaxComboViewer;
private Text syntaxLengthText;
private Button obsoleteCheckbox;
private Button singleValueCheckbox;
private Button collectiveCheckbox;
private Button noUserModificationCheckbox;
private Combo equalityCombo;
private ComboViewer equalityComboViewer;
private Combo orderingCombo;
private ComboViewer orderingComboViewer;
private Combo substringCombo;
private ComboViewer substringComboViewer;
// Listeners
/** The listener for the Aliases Text Widget */
private ModifyListener aliasesTextModifyListener = new ModifyListener()
{
public void modifyText( ModifyEvent e )
{
AttributeType modifiedAttributeType = getModifiedAttributeType();
AliasesStringParser parser = new AliasesStringParser();
parser.parse( aliasesText.getText() );
List<Alias> parsedAliases = parser.getAliases();
modifiedAttributeType.setNames( new String[0] );
List<String> aliasesList = new ArrayList<String>();
for ( Alias parsedAlias : parsedAliases )
{
if ( !( parsedAlias instanceof AliasWithError ) )
{
aliasesList.add( parsedAlias.getAlias() );
}
}
modifiedAttributeType.setNames( aliasesList.toArray( new String[0] ) );
setEditorDirty();
}
};
/** The listener for the Edit Aliases Button Widget */
private SelectionAdapter aliasesButtonListener = new SelectionAdapter()
{
public void widgetSelected( SelectionEvent e )
{
AttributeType modifiedAttributeType = getModifiedAttributeType();
EditAttributeTypeAliasesDialog dialog = new EditAttributeTypeAliasesDialog(
modifiedAttributeType.getNames() );
if ( dialog.open() == EditAttributeTypeAliasesDialog.OK )
{
modifiedAttributeType.setNames( dialog.getAliases() );
if ( ( modifiedAttributeType.getNames() != null ) && ( modifiedAttributeType.getNames().size() != 0 ) )
{
aliasesText.setText( ViewUtils.concateAliases( modifiedAttributeType.getNames() ) );
}
else
{
aliasesText.setText( "" ); //$NON-NLS-1$
}
setEditorDirty();
}
}
};
/** The Modify listener for the OID Text Widget */
private ModifyListener oidTextModifyListener = new ModifyListener()
{
public void modifyText( ModifyEvent e )
{
oidText.setForeground( ViewUtils.COLOR_BLACK );
oidText.setToolTipText( "" ); //$NON-NLS-1$
String oid = oidText.getText();
if ( Oid.isOid( oid ) )
{
if ( ( getOriginalAttributeType().getOid().equals( oid ) )
|| !( schemaHandler.isOidAlreadyTaken( oid ) ) )
{
getModifiedAttributeType().setOid( oid );
setEditorDirty();
}
else
{
oidText.setForeground( ViewUtils.COLOR_RED );
oidText.setToolTipText( Messages.getString( "AttributeTypeEditorOverviewPage.ElementOIDExists" ) ); //$NON-NLS-1$
}
}
else
{
oidText.setForeground( ViewUtils.COLOR_RED );
oidText.setToolTipText( Messages.getString( "AttributeTypeEditorOverviewPage.MalformedOID" ) ); //$NON-NLS-1$
}
}
};
/** The Verify listener for the OID Text Widget */
private VerifyListener oidTextVerifyListener = new VerifyListener()
{
public void verifyText( VerifyEvent e )
{
if ( !e.text.matches( "([0-9]*\\.?)*" ) ) //$NON-NLS-1$
{
e.doit = false;
}
}
};
/** The listener for the Schema Hyperlink Widget*/
private HyperlinkAdapter schemaLinkListener = new HyperlinkAdapter()
{
public void linkActivated( HyperlinkEvent e )
{
IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
SchemaEditorInput input = new SchemaEditorInput( schemaHandler
.getSchema( getModifiedAttributeType().getSchemaName() ) );
String editorId = SchemaEditor.ID;
try
{
page.openEditor( input, editorId );
}
catch ( PartInitException exception )
{
Logger.getLogger( AttributeTypeEditorInput.class ).debug( "error when opening the editor" ); //$NON-NLS-1$
}
}
};
/** The listener for the Description Text Widget */
private ModifyListener descriptionTextListener = new ModifyListener()
{
public void modifyText( ModifyEvent e )
{
int caretPosition = descriptionText.getCaretPosition();
getModifiedAttributeType().setDescription( descriptionText.getText() );
descriptionText.setSelection( caretPosition );
setEditorDirty();
}
};
/** The listener for the Sup Label Widget*/
private HyperlinkAdapter supLabelListener = new HyperlinkAdapter()
{
public void linkActivated( HyperlinkEvent e )
{
Object selectedItem = ( ( StructuredSelection ) supComboViewer.getSelection() ).getFirstElement();
if ( selectedItem instanceof AttributeType )
{
IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
AttributeTypeEditorInput input = new AttributeTypeEditorInput( ( AttributeType ) selectedItem );
try
{
page.openEditor( input, AttributeTypeEditor.ID );
}
catch ( PartInitException exception )
{
Logger.getLogger( AttributeTypeEditorInput.class ).debug( "error when opening the editor" ); //$NON-NLS-1$
}
}
}
};
/** The listener for the Sup Combo Widget */
private ISelectionChangedListener supComboViewerListener = new ISelectionChangedListener()
{
public void selectionChanged( SelectionChangedEvent event )
{
MutableAttributeType modifiedAttributeType = getModifiedAttributeType();
Object selectedItem = ( ( StructuredSelection ) supComboViewer.getSelection() ).getFirstElement();
if ( selectedItem instanceof AttributeType )
{
AttributeType at = ( AttributeType ) selectedItem;
List<String> names = at.getNames();
if ( ( names != null ) && ( names.size() > 0 ) )
{
modifiedAttributeType.setSuperiorOid( names.get( 0 ) );
}
else
{
modifiedAttributeType.setSuperiorOid( at.getOid() );
}
}
else if ( selectedItem instanceof NonExistingAttributeType )
{
NonExistingAttributeType neat = ( NonExistingAttributeType ) selectedItem;
if ( NonExistingAttributeType.NONE.equals( neat.getName() ) )
{
modifiedAttributeType.setSuperiorOid( null );
}
else
{
modifiedAttributeType.setSuperiorOid( ( ( NonExistingAttributeType ) selectedItem ).getName() );
}
}
setEditorDirty();
}
};
/** The listener for the Usage Combo Widget */
private ModifyListener usageComboListener = new ModifyListener()
{
public void modifyText( ModifyEvent e )
{
MutableAttributeType modifiedAttributeType = getModifiedAttributeType();
if ( usageCombo.getSelectionIndex() == 0 )
{
modifiedAttributeType.setUsage( UsageEnum.DIRECTORY_OPERATION );
}
else if ( usageCombo.getSelectionIndex() == 1 )
{
modifiedAttributeType.setUsage( UsageEnum.DISTRIBUTED_OPERATION );
}
else if ( usageCombo.getSelectionIndex() == 2 )
{
modifiedAttributeType.setUsage( UsageEnum.DSA_OPERATION );
}
else if ( usageCombo.getSelectionIndex() == 3 )
{
modifiedAttributeType.setUsage( UsageEnum.USER_APPLICATIONS );
}
setEditorDirty();
}
};
/** The listener for the Syntax Combo Widget */
private ISelectionChangedListener syntaxComboViewerListener = new ISelectionChangedListener()
{
public void selectionChanged( SelectionChangedEvent event )
{
MutableAttributeType modifiedAttributeType = getModifiedAttributeType();
Object selectedItem = ( ( StructuredSelection ) syntaxComboViewer.getSelection() ).getFirstElement();
if ( selectedItem instanceof LdapSyntax )
{
modifiedAttributeType.setSyntaxOid( ( ( LdapSyntax ) selectedItem ).getOid() );
}
else if ( selectedItem instanceof NonExistingSyntax )
{
NonExistingSyntax nes = ( NonExistingSyntax ) selectedItem;
if ( NonExistingMatchingRule.NONE.equals( nes.getDescription() ) )
{
modifiedAttributeType.setSyntaxOid( null );
}
else
{
modifiedAttributeType.setSyntaxOid( ( ( NonExistingSyntax ) selectedItem ).getDescription() );
}
}
setEditorDirty();
}
};
/** The Modify listener for the Syntax Length Text Widget */
private ModifyListener syntaxLengthTextModifyListener = new ModifyListener()
{
public void modifyText( ModifyEvent e )
{
MutableAttributeType modifiedAttributeType = getModifiedAttributeType();
if ( syntaxLengthText.getText().length() <= 0 )
{
modifiedAttributeType.setSyntaxLength( -1 );
}
else
{
modifiedAttributeType.setSyntaxLength( Integer.parseInt( syntaxLengthText.getText() ) );
}
setEditorDirty();
}
};
/** The Verify listener for the Syntax Length Text Widget */
private VerifyListener syntaxLengthTextVerifyListener = new VerifyListener()
{
public void verifyText( VerifyEvent e )
{
if ( !e.text.matches( "[0-9]*" ) ) //$NON-NLS-1$
{
e.doit = false;
}
}
};
/** The listener for the Obsolete Checbox Widget */
private SelectionAdapter obsoleteCheckboxListener = new SelectionAdapter()
{
public void widgetSelected( SelectionEvent e )
{
getModifiedAttributeType().setObsolete( obsoleteCheckbox.getSelection() );
setEditorDirty();
}
};
/** The listener for the Single-Value Checkbox Widget */
private SelectionAdapter singleValueCheckboxListener = new SelectionAdapter()
{
public void widgetSelected( SelectionEvent e )
{
getModifiedAttributeType().setSingleValued( singleValueCheckbox.getSelection() );
setEditorDirty();
}
};
/** The listener for the Collective Checkbox Widget */
private SelectionAdapter collectiveCheckboxListener = new SelectionAdapter()
{
public void widgetSelected( SelectionEvent e )
{
getModifiedAttributeType().setCollective( collectiveCheckbox.getSelection() );
setEditorDirty();
}
};
/** The listener for the No-User-Modification Widget */
private SelectionAdapter noUserModificationCheckboxListener = new SelectionAdapter()
{
public void widgetSelected( SelectionEvent e )
{
getModifiedAttributeType().setUserModifiable( !noUserModificationCheckbox.getSelection() );
setEditorDirty();
}
};
/** The listener for the Equality Combo Widget */
private ISelectionChangedListener equalityComboViewerListener = new ISelectionChangedListener()
{
public void selectionChanged( SelectionChangedEvent event )
{
MutableAttributeType modifiedAttributeType = getModifiedAttributeType();
Object selectedItem = ( ( StructuredSelection ) equalityComboViewer.getSelection() ).getFirstElement();
if ( selectedItem instanceof MatchingRule )
{
modifiedAttributeType.setEqualityOid( ( ( MatchingRule ) selectedItem ).getName() );
}
else if ( selectedItem instanceof NonExistingMatchingRule )
{
NonExistingMatchingRule nemr = ( NonExistingMatchingRule ) selectedItem;
if ( NonExistingMatchingRule.NONE.equals( nemr.getName() ) )
{
modifiedAttributeType.setEqualityOid( null );
}
else
{
modifiedAttributeType.setEqualityOid( ( ( NonExistingMatchingRule ) selectedItem ).getName() );
}
}
setEditorDirty();
}
};
/** The listener for the Ordering Combo Widget */
private ISelectionChangedListener orderingComboViewerListener = new ISelectionChangedListener()
{
public void selectionChanged( SelectionChangedEvent event )
{
MutableAttributeType modifiedAttributeType = getModifiedAttributeType();
Object selectedItem = ( ( StructuredSelection ) orderingComboViewer.getSelection() ).getFirstElement();
if ( selectedItem instanceof MatchingRule )
{
modifiedAttributeType.setOrderingOid( ( ( MatchingRule ) selectedItem ).getName() );
}
else if ( selectedItem instanceof NonExistingMatchingRule )
{
NonExistingMatchingRule nemr = ( NonExistingMatchingRule ) selectedItem;
if ( NonExistingMatchingRule.NONE.equals( nemr.getName() ) )
{
modifiedAttributeType.setOrderingOid( null );
}
else
{
modifiedAttributeType.setOrderingOid( ( ( NonExistingMatchingRule ) selectedItem ).getName() );
}
}
setEditorDirty();
}
};
/** The listener for the Substring Combo Widget */
private ISelectionChangedListener substringComboViewerListener = new ISelectionChangedListener()
{
public void selectionChanged( SelectionChangedEvent event )
{
MutableAttributeType modifiedAttributeType = getModifiedAttributeType();
Object selectedItem = ( ( StructuredSelection ) substringComboViewer.getSelection() ).getFirstElement();
if ( selectedItem instanceof MatchingRule )
{
modifiedAttributeType.setSubstringOid( ( ( MatchingRule ) selectedItem ).getName() );
}
else if ( selectedItem instanceof NonExistingMatchingRule )
{
NonExistingMatchingRule nemr = ( NonExistingMatchingRule ) selectedItem;
if ( NonExistingMatchingRule.NONE.equals( nemr.getName() ) )
{
modifiedAttributeType.setSubstringOid( null );
}
else
{
modifiedAttributeType.setSubstringOid( ( ( NonExistingMatchingRule ) selectedItem ).getName() );
}
}
setEditorDirty();
}
};
/** The filter listener for Mouse Wheel events */
private Listener mouseWheelFilter = new Listener()
{
public void handleEvent( Event event )
{
// Hiding Mouse Wheel events for Combo widgets
if ( event.widget instanceof Combo )
{
event.doit = false;
}
}
};
/**
* Default constructor.
*
* @param editor
* the associated editor
*/
public AttributeTypeEditorOverviewPage( AttributeTypeEditor editor )
{
super( editor, ID, Messages.getString( "AttributeTypeEditorOverviewPage.Overview" ) ); //$NON-NLS-1$
schemaHandler = Activator.getDefault().getSchemaHandler();
schemaHandler.addListener( schemaHandlerListener );
}
/**
* {@inheritDoc}
*/
protected void createFormContent( IManagedForm managedForm )
{
super.createFormContent( managedForm );
// Creating the base UI
ScrolledForm form = managedForm.getForm();
FormToolkit toolkit = managedForm.getToolkit();
GridLayout layout = new GridLayout();
form.getBody().setLayout( layout );
// General Information Section
createGeneralInformationSection( form.getBody(), toolkit );
// Matching Rules Section
createMatchingRulesSection( 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$
}
/**
* Creates the General Information Section.
*
* @param parent
* the parent composite
* @param toolkit
* the FormToolKit to use
*/
private void createGeneralInformationSection( Composite parent, FormToolkit toolkit )
{
// General Information Section
Section section_general_information = toolkit.createSection( parent, Section.DESCRIPTION | Section.EXPANDED
| Section.TITLE_BAR );
section_general_information.setDescription( Messages
.getString( "AttributeTypeEditorOverviewPage.SpecifyGeneralInformation" ) ); //$NON-NLS-1$
section_general_information
.setText( Messages.getString( "AttributeTypeEditorOverviewPage.GeneralInformation" ) ); //$NON-NLS-1$
// Creating the layout of the section
Composite client_general_information = toolkit.createComposite( section_general_information );
client_general_information.setLayout( new GridLayout( 2, false ) );
toolkit.paintBordersFor( client_general_information );
section_general_information.setClient( client_general_information );
section_general_information.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) );
// Adding elements to the section
// ALIASES Field
toolkit
.createLabel( client_general_information, Messages.getString( "AttributeTypeEditorOverviewPage.Aliases" ) ); //$NON-NLS-1$
Composite aliasComposite = toolkit.createComposite( client_general_information );
GridLayout aliasCompositeGridLayout = new GridLayout( 2, false );
toolkit.paintBordersFor( aliasComposite );
aliasCompositeGridLayout.marginHeight = 1;
aliasCompositeGridLayout.marginWidth = 1;
aliasComposite.setLayout( aliasCompositeGridLayout );
aliasComposite.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) );
aliasesText = toolkit.createText( aliasComposite, "" ); //$NON-NLS-1$
aliasesText.setLayoutData( new GridData( SWT.FILL, SWT.CENTER, true, false ) );
aliasesButton = toolkit.createButton( aliasComposite, Messages
.getString( "AttributeTypeEditorOverviewPage.EditAliases" ), SWT.PUSH ); //$NON-NLS-1$
aliasesButton.setLayoutData( new GridData( SWT.NONE, SWT.CENTER, false, false ) );
// OID Field
toolkit.createLabel( client_general_information, Messages.getString( "AttributeTypeEditorOverviewPage.OID" ) ); //$NON-NLS-1$
oidText = toolkit.createText( client_general_information, "" ); //$NON-NLS-1$
oidText.setLayoutData( new GridData( SWT.FILL, 0, true, false ) );
// DESCRIPTION Field
toolkit.createLabel( client_general_information, Messages
.getString( "AttributeTypeEditorOverviewPage.Description" ) ); //$NON-NLS-1$
descriptionText = toolkit.createText( client_general_information, "", SWT.MULTI | SWT.V_SCROLL ); //$NON-NLS-1$
GridData descriptionGridData = new GridData( SWT.FILL, SWT.NONE, true, false );
descriptionGridData.heightHint = 42;
descriptionText.setLayoutData( descriptionGridData );
// SCHEMA Field
schemaLink = toolkit.createHyperlink( client_general_information, Messages
.getString( "AttributeTypeEditorOverviewPage.Schema" ), SWT.WRAP ); //$NON-NLS-1$
schemaLabel = toolkit.createLabel( client_general_information, "" ); //$NON-NLS-1$
schemaLabel.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) );
// SUP Combo
supLabel = toolkit.createHyperlink( client_general_information, Messages
.getString( "AttributeTypeEditorOverviewPage.SuperiorType" ), SWT.WRAP ); //$NON-NLS-1$
supCombo = new Combo( client_general_information, SWT.READ_ONLY | SWT.SINGLE );
supCombo.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) );
supComboViewer = new ComboViewer( supCombo );
supComboViewer.setContentProvider( new ATESuperiorComboContentProvider() );
supComboViewer.setLabelProvider( new ATESuperiorComboLabelProvider() );
// USAGE Combo
toolkit.createLabel( client_general_information, Messages.getString( "AttributeTypeEditorOverviewPage.Usage" ) ); //$NON-NLS-1$
usageCombo = new Combo( client_general_information, SWT.READ_ONLY | SWT.SINGLE );
usageCombo.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) );
initUsageCombo();
// SYNTAX Combo
toolkit
.createLabel( client_general_information, Messages.getString( "AttributeTypeEditorOverviewPage.Syntax" ) ); //$NON-NLS-1$
syntaxCombo = new Combo( client_general_information, SWT.READ_ONLY | SWT.SINGLE );
syntaxCombo.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) );
syntaxComboViewer = new ComboViewer( syntaxCombo );
syntaxComboViewer.setContentProvider( new ATESyntaxComboContentProvider() );
syntaxComboViewer.setLabelProvider( new ATESyntaxComboLabelProvider() );
// SYNTAX LENGTH Field
toolkit.createLabel( client_general_information, Messages
.getString( "AttributeTypeEditorOverviewPage.SyntaxLength" ) ); //$NON-NLS-1$
syntaxLengthText = toolkit.createText( client_general_information, "" ); //$NON-NLS-1$
syntaxLengthText.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) );
// PROPERTIES composite
toolkit.createLabel( client_general_information, "" ); // Filling the first column //$NON-NLS-1$
Composite propertiesComposite = toolkit.createComposite( client_general_information );
GridLayout propertiesCompositeGridLayout = new GridLayout( 2, true );
propertiesCompositeGridLayout.horizontalSpacing = 0;
propertiesCompositeGridLayout.verticalSpacing = 0;
propertiesCompositeGridLayout.marginHeight = 0;
propertiesCompositeGridLayout.marginWidth = 0;
propertiesComposite.setLayout( propertiesCompositeGridLayout );
propertiesComposite.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) );
// OBSOLETE Checkbox
obsoleteCheckbox = toolkit.createButton( propertiesComposite, Messages
.getString( "AttributeTypeEditorOverviewPage.Obsolete" ), SWT.CHECK ); //$NON-NLS-1$
obsoleteCheckbox.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) );
// SINGLE-VALUE Checkbox
singleValueCheckbox = toolkit.createButton( propertiesComposite, Messages
.getString( "AttributeTypeEditorOverviewPage.SingleValue" ), SWT.CHECK ); //$NON-NLS-1$
singleValueCheckbox.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) );
// COLLECTIVE Checkbox
toolkit.createLabel( client_general_information, "" ); // Filling the first column //$NON-NLS-1$
collectiveCheckbox = toolkit.createButton( propertiesComposite, Messages
.getString( "AttributeTypeEditorOverviewPage.Collective" ), SWT.CHECK ); //$NON-NLS-1$
collectiveCheckbox.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) );
// NO-USER-MODIFICATION Checkbox
noUserModificationCheckbox = toolkit.createButton( propertiesComposite,
Messages.getString( "AttributeTypeEditorOverviewPage.NoUserModification" ), SWT.CHECK ); //$NON-NLS-1$
noUserModificationCheckbox.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) );
}
/**
* Creates the Matching Rules Section.
*
* @param parent
* the parent composite
* @param toolkit
* the FormToolKit to use
*/
private void createMatchingRulesSection( Composite parent, FormToolkit toolkit )
{
// Matching Rules Section
Section section_matching_rules = toolkit.createSection( parent, Section.DESCRIPTION | Section.EXPANDED
| Section.TITLE_BAR );
section_matching_rules.setDescription( Messages
.getString( "AttributeTypeEditorOverviewPage.SpecifyMatchingRules" ) ); //$NON-NLS-1$
section_matching_rules.setText( Messages.getString( "AttributeTypeEditorOverviewPage.MatchingRules" ) ); //$NON-NLS-1$
// Creating the layout of the section
Composite client_matching_rules = toolkit.createComposite( section_matching_rules );
GridLayout layout_matching_rules = new GridLayout();
layout_matching_rules.numColumns = 2;
client_matching_rules.setLayout( layout_matching_rules );
toolkit.paintBordersFor( client_matching_rules );
section_matching_rules.setClient( client_matching_rules );
section_matching_rules.setLayoutData( new GridData( SWT.FILL, SWT.FILL, true, true ) );
// EQUALITY Combo
toolkit.createLabel( client_matching_rules, Messages.getString( "AttributeTypeEditorOverviewPage.Equality" ) ); //$NON-NLS-1$
equalityCombo = new Combo( client_matching_rules, SWT.READ_ONLY | SWT.SINGLE );
equalityCombo.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) );
equalityComboViewer = new ComboViewer( equalityCombo );
equalityComboViewer.setContentProvider( new ATEMatchingRulesComboContentProvider() );
equalityComboViewer.setLabelProvider( new ATEMatchingRulesComboLabelProvider() );
// ORDERING Combo
toolkit.createLabel( client_matching_rules, Messages.getString( "AttributeTypeEditorOverviewPage.Ordering" ) ); //$NON-NLS-1$
orderingCombo = new Combo( client_matching_rules, SWT.READ_ONLY | SWT.SINGLE );
orderingCombo.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) );
orderingComboViewer = new ComboViewer( orderingCombo );
orderingComboViewer.setContentProvider( new ATEMatchingRulesComboContentProvider() );
orderingComboViewer.setLabelProvider( new ATEMatchingRulesComboLabelProvider() );
// SUBSTRING Combo
toolkit.createLabel( client_matching_rules, Messages.getString( "AttributeTypeEditorOverviewPage.Substring" ) ); //$NON-NLS-1$
substringCombo = new Combo( client_matching_rules, SWT.READ_ONLY | SWT.SINGLE );
substringCombo.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) );
substringComboViewer = new ComboViewer( substringCombo );
substringComboViewer.setContentProvider( new ATEMatchingRulesComboContentProvider() );
substringComboViewer.setLabelProvider( new ATEMatchingRulesComboLabelProvider() );
}
/**
* Initializes the Usage Combo.
*/
private void initUsageCombo()
{
usageCombo.add( "Directory Operation", 0 ); //$NON-NLS-1$
usageCombo.add( "Distributed Operation", 1 ); //$NON-NLS-1$
usageCombo.add( "DSA Operation", 2 ); //$NON-NLS-1$
usageCombo.add( "User Applications", 3 ); //$NON-NLS-1$
}
/**
* {@inheritDoc}
*/
protected void fillInUiFields()
{
// Getting the modified attribute type
AttributeType modifiedAttributeType = getModifiedAttributeType();
originalSchema = schemaHandler.getSchema( getOriginalAttributeType().getSchemaName() );
// ALIASES Label
if ( ( modifiedAttributeType.getNames() != null ) && ( modifiedAttributeType.getNames().size() != 0 ) )
{
aliasesText.setText( ViewUtils.concateAliases( modifiedAttributeType.getNames() ) );
}
else
{
aliasesText.setText( "" ); //$NON-NLS-1$
}
// OID Field
if ( modifiedAttributeType.getOid() != null )
{
oidText.setText( modifiedAttributeType.getOid() );
}
// SCHEMA Field
schemaLabel.setText( modifiedAttributeType.getSchemaName() );
// DESCRIPTION Field
if ( modifiedAttributeType.getDescription() != null )
{
descriptionText.setText( modifiedAttributeType.getDescription() );
}
// SUP Combo
fillSupCombo();
// USAGE Combo
fillInUsageCombo();
// SYNTAX Combo
fillSyntaxCombo();
// SYNTAX LENGTH Field
if ( modifiedAttributeType.getSyntaxLength() > 0 )
{
syntaxLengthText.setText( modifiedAttributeType.getSyntaxLength() + "" ); //$NON-NLS-1$
}
// OBSOLETE Checkbox
obsoleteCheckbox.setSelection( modifiedAttributeType.isObsolete() );
// SINGLE-VALUE Checkbox
singleValueCheckbox.setSelection( modifiedAttributeType.isSingleValued() );
// COLLECTIVE Checkbox
collectiveCheckbox.setSelection( modifiedAttributeType.isCollective() );
// NO-USER-MODIFICATION Checkbox
noUserModificationCheckbox.setSelection( !modifiedAttributeType.isUserModifiable() );
// EQUALITY Combo
fillEqualityCombo();
// ORDERING Combo
fillOrderingCombo();
// SUBSTRING Combo
fillSubstringCombo();
}
/**
* Fills the the Sup Combo with the correct value.
*/
private void fillSupCombo()
{
supComboViewer.setInput( new ATESuperiorComboInput( getOriginalAttributeType() ) );
String supAtName = getModifiedAttributeType().getSuperiorOid();
if ( supAtName == null )
{
supComboViewer.setSelection( new StructuredSelection( new NonExistingAttributeType(
NonExistingAttributeType.NONE ) ), true );
}
else
{
AttributeType supAT = schemaHandler.getAttributeType( supAtName );
if ( supAT != null )
{
supComboViewer.setSelection( new StructuredSelection( supAT ), true );
}
else
{
ATESuperiorComboInput input = ( ATESuperiorComboInput ) supComboViewer.getInput();
NonExistingAttributeType neat = new NonExistingAttributeType( supAtName );
if ( !input.getChildren().contains( neat ) )
{
input.addChild( neat );
}
supComboViewer.refresh();
supComboViewer.setSelection( new StructuredSelection( neat ), true );
}
}
}
/**
* Fills the Usage Combo from the attribute type value
*/
private void fillInUsageCombo()
{
UsageEnum usage = getModifiedAttributeType().getUsage();
switch ( usage )
{
case DIRECTORY_OPERATION:
usageCombo.select( 0 );
return;
case DISTRIBUTED_OPERATION:
usageCombo.select( 1 );
return;
case DSA_OPERATION:
usageCombo.select( 2 );
return;
case USER_APPLICATIONS:
usageCombo.select( 3 );
return;
}
}
/**
* Fills the the Syntax Combo with the correct value.
*/
private void fillSyntaxCombo()
{
syntaxComboViewer.setInput( new ATESyntaxComboInput() );
String syntaxOID = getModifiedAttributeType().getSyntaxOid();
if ( syntaxOID == null )
{
syntaxComboViewer.setSelection( new StructuredSelection( new NonExistingSyntax( NonExistingSyntax.NONE ) ),
true );
}
else
{
LdapSyntax syntax = schemaHandler.getSyntax( syntaxOID );
if ( syntax != null )
{
syntaxComboViewer.setSelection( new StructuredSelection( syntax ), true );
}
else
{
ATESyntaxComboInput input = ( ATESyntaxComboInput ) syntaxComboViewer.getInput();
NonExistingSyntax nes = new NonExistingSyntax( syntaxOID );
if ( !input.getChildren().contains( nes ) )
{
input.addChild( nes );
}
syntaxComboViewer.refresh();
syntaxComboViewer.setSelection( new StructuredSelection( nes ), true );
}
}
}
/**
* Fills the the Equality Combo with the correct value.
*/
private void fillEqualityCombo()
{
equalityComboViewer.setInput( new ATEMatchingRulesComboInput() );
String equalityName = getModifiedAttributeType().getEqualityOid();
if ( equalityName == null )
{
equalityComboViewer.setSelection( new StructuredSelection( new NonExistingMatchingRule(
NonExistingMatchingRule.NONE ) ), true );
}
else
{
MatchingRule matchingRule = schemaHandler.getMatchingRule( equalityName );
if ( matchingRule != null )
{
equalityComboViewer.setSelection( new StructuredSelection( matchingRule ), true );
}
else
{
ATEMatchingRulesComboInput input = ( ATEMatchingRulesComboInput ) equalityComboViewer.getInput();
NonExistingMatchingRule nemr = new NonExistingMatchingRule( equalityName );
if ( !input.getChildren().contains( nemr ) )
{
input.addChild( nemr );
}
equalityComboViewer.refresh();
equalityComboViewer.setSelection( new StructuredSelection( nemr ), true );
}
}
}
/**
* Fills the the Ordering Combo with the correct value.
*/
private void fillOrderingCombo()
{
orderingComboViewer.setInput( new ATEMatchingRulesComboInput() );
String orderingName = getModifiedAttributeType().getOrderingOid();
if ( orderingName == null )
{
orderingComboViewer.setSelection( new StructuredSelection( new NonExistingMatchingRule(
NonExistingMatchingRule.NONE ) ), true );
}
else
{
MatchingRule matchingRule = schemaHandler.getMatchingRule( orderingName );
if ( matchingRule != null )
{
orderingComboViewer.setSelection( new StructuredSelection( matchingRule ), true );
}
else
{
ATEMatchingRulesComboInput input = ( ATEMatchingRulesComboInput ) orderingComboViewer.getInput();
NonExistingMatchingRule nemr = new NonExistingMatchingRule( orderingName );
if ( !input.getChildren().contains( nemr ) )
{
input.addChild( nemr );
}
orderingComboViewer.refresh();
orderingComboViewer.setSelection( new StructuredSelection( nemr ), true );
}
}
}
/**
* Fills the the Substring Combo with the correct value.
*/
private void fillSubstringCombo()
{
substringComboViewer.setInput( new ATEMatchingRulesComboInput() );
String substringName = getModifiedAttributeType().getSubstringOid();
if ( substringName == null )
{
substringComboViewer.setSelection( new StructuredSelection( new NonExistingMatchingRule(
NonExistingMatchingRule.NONE ) ), true );
}
else
{
MatchingRule matchingRule = schemaHandler.getMatchingRule( substringName );
if ( matchingRule != null )
{
substringComboViewer.setSelection( new StructuredSelection( matchingRule ), true );
}
else
{
ATEMatchingRulesComboInput input = ( ATEMatchingRulesComboInput ) substringComboViewer.getInput();
NonExistingMatchingRule nemr = new NonExistingMatchingRule( substringName );
if ( !input.getChildren().contains( nemr ) )
{
input.addChild( nemr );
}
substringComboViewer.refresh();
substringComboViewer.setSelection( new StructuredSelection( nemr ), true );
}
}
}
/**
* {@inheritDoc}
*/
protected void addListeners()
{
addModifyListener( aliasesText, aliasesTextModifyListener );
addSelectionListener( aliasesButton, aliasesButtonListener );
addModifyListener( oidText, oidTextModifyListener );
addVerifyListener( oidText, oidTextVerifyListener );
addHyperlinkListener( schemaLink, schemaLinkListener );
addModifyListener( descriptionText, descriptionTextListener );
addHyperlinkListener( supLabel, supLabelListener );
addSelectionChangedListener( supComboViewer, supComboViewerListener );
addModifyListener( usageCombo, usageComboListener );
addSelectionChangedListener( syntaxComboViewer, syntaxComboViewerListener );
addModifyListener( syntaxLengthText, syntaxLengthTextModifyListener );
addVerifyListener( syntaxLengthText, syntaxLengthTextVerifyListener );
addSelectionListener( obsoleteCheckbox, obsoleteCheckboxListener );
addSelectionListener( singleValueCheckbox, singleValueCheckboxListener );
addSelectionListener( collectiveCheckbox, collectiveCheckboxListener );
addSelectionListener( noUserModificationCheckbox, noUserModificationCheckboxListener );
addSelectionChangedListener( equalityComboViewer, equalityComboViewerListener );
addSelectionChangedListener( orderingComboViewer, orderingComboViewerListener );
addSelectionChangedListener( substringComboViewer, substringComboViewerListener );
Display.getCurrent().addFilter( SWT.MouseWheel, mouseWheelFilter );
}
/**
* {@inheritDoc}
*/
protected void removeListeners()
{
removeModifyListener( aliasesText, aliasesTextModifyListener );
removeSelectionListener( aliasesButton, aliasesButtonListener );
removeModifyListener( oidText, oidTextModifyListener );
removeVerifyListener( oidText, oidTextVerifyListener );
removeHyperlinkListener( schemaLink, schemaLinkListener );
removeModifyListener( descriptionText, descriptionTextListener );
removeHyperlinkListener( supLabel, supLabelListener );
removeSelectionChangedListener( supComboViewer, supComboViewerListener );
removeModifyListener( usageCombo, usageComboListener );
removeSelectionChangedListener( syntaxComboViewer, syntaxComboViewerListener );
removeModifyListener( syntaxLengthText, syntaxLengthTextModifyListener );
removeVerifyListener( syntaxLengthText, syntaxLengthTextVerifyListener );
removeSelectionListener( obsoleteCheckbox, obsoleteCheckboxListener );
removeSelectionListener( singleValueCheckbox, singleValueCheckboxListener );
removeSelectionListener( collectiveCheckbox, collectiveCheckboxListener );
removeSelectionListener( noUserModificationCheckbox, noUserModificationCheckboxListener );
removeSelectionChangedListener( equalityComboViewer, equalityComboViewerListener );
removeSelectionChangedListener( orderingComboViewer, orderingComboViewerListener );
removeSelectionChangedListener( substringComboViewer, substringComboViewerListener );
Display.getCurrent().removeFilter( SWT.MouseWheel, mouseWheelFilter );
}
/**
* {@inheritDoc}
*/
public void dispose()
{
schemaHandler.removeListener( schemaHandlerListener );
super.dispose();
}
}