/*
* 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.objectclass;
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.MutableObjectClass;
import org.apache.directory.api.ldap.model.schema.ObjectClass;
import org.apache.directory.api.ldap.model.schema.ObjectClassTypeEnum;
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.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.AttributeTypeSelectionDialog;
import org.apache.directory.studio.schemaeditor.view.dialogs.EditObjectClassAliasesDialog;
import org.apache.directory.studio.schemaeditor.view.dialogs.ObjectClassSelectionDialog;
import org.apache.directory.studio.schemaeditor.view.editors.NonExistingAttributeType;
import org.apache.directory.studio.schemaeditor.view.editors.NonExistingObjectClass;
import org.apache.directory.studio.schemaeditor.view.editors.attributetype.AttributeTypeEditor;
import org.apache.directory.studio.schemaeditor.view.editors.attributetype.AttributeTypeEditorInput;
import org.apache.directory.studio.schemaeditor.view.editors.schema.SchemaEditor;
import org.apache.directory.studio.schemaeditor.view.editors.schema.SchemaEditorInput;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.MouseListener;
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.Table;
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 Object Class Editor
*/
public class ObjectClassEditorOverviewPage extends AbstractObjectClassEditorPage
{
/** The page ID */
public static final String ID = ObjectClassEditor.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 )
{
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 )
{
if ( !oc.equals( getOriginalObjectClass() ) )
{
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 Table superiorsTable;
private TableViewer superiorsTableViewer;
private Button addButtonSuperiorsTable;
private Button removeButtonSuperiorsTable;
private Combo classTypeCombo;
private Button obsoleteCheckbox;
private Table mandatoryAttributesTable;
private TableViewer mandatoryAttributesTableViewer;
private Button addButtonMandatoryTable;
private Button removeButtonMandatoryTable;
private Table optionalAttributesTable;
private TableViewer optionalAttributesTableViewer;
private Button addButtonOptionalTable;
private Button removeButtonOptionalTable;
// Listeners
/** The listener for the Aliases Text Widget */
private ModifyListener aliasesTextModifyListener = new ModifyListener()
{
public void modifyText( ModifyEvent e )
{
ObjectClass modifiedObjectClass = getModifiedObjectClass();
AliasesStringParser parser = new AliasesStringParser();
parser.parse( aliasesText.getText() );
List<Alias> parsedAliases = parser.getAliases();
modifiedObjectClass.setNames( new String[0] );
List<String> aliasesList = new ArrayList<String>();
for ( Alias parsedAlias : parsedAliases )
{
if ( !( parsedAlias instanceof AliasWithError ) )
{
aliasesList.add( parsedAlias.getAlias() );
}
}
modifiedObjectClass.setNames( aliasesList.toArray( new String[0] ) );
setEditorDirty();
}
};
/** The listener for Aliases Button Widget */
private SelectionAdapter aliasesButtonListener = new SelectionAdapter()
{
public void widgetSelected( SelectionEvent e )
{
ObjectClass modifiedObjectClass = getModifiedObjectClass();
EditObjectClassAliasesDialog dialog = new EditObjectClassAliasesDialog( modifiedObjectClass.getNames() );
if ( dialog.open() == EditObjectClassAliasesDialog.OK )
{
modifiedObjectClass.setNames( dialog.getAliases() );
if ( ( modifiedObjectClass.getNames() != null ) && ( modifiedObjectClass.getNames().size() != 0 ) )
{
aliasesText.setText( ViewUtils.concateAliases( modifiedObjectClass.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$
ObjectClass modifiedObjectClass = getModifiedObjectClass();
String oid = oidText.getText();
if ( Oid.isOid( oid ) )
{
if ( ( getOriginalObjectClass().getOid().equals( oid ) )
|| !( schemaHandler.isOidAlreadyTaken( oid ) ) )
{
modifiedObjectClass.setOid( oid );
setEditorDirty();
}
else
{
oidText.setForeground( ViewUtils.COLOR_RED );
oidText.setToolTipText( Messages.getString( "ObjectClassEditorOverviewPage.ElementOIDExists" ) ); //$NON-NLS-1$
}
}
else
{
oidText.setForeground( ViewUtils.COLOR_RED );
oidText.setToolTipText( Messages.getString( "ObjectClassEditorOverviewPage.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( getModifiedObjectClass()
.getSchemaName() ) );
String editorId = SchemaEditor.ID;
try
{
page.openEditor( input, editorId );
}
catch ( PartInitException exception )
{
PluginUtils.logError( "error when opening the editor", exception ); //$NON-NLS-1$
}
}
};
/** The listener for Description Text Widget */
private ModifyListener descriptionTextListener = new ModifyListener()
{
public void modifyText( ModifyEvent e )
{
int caretPosition = descriptionText.getCaretPosition();
getModifiedObjectClass().setDescription( descriptionText.getText() );
descriptionText.setSelection( caretPosition );
setEditorDirty();
}
};
/** The listener for Class Type Widget */
private ModifyListener classTypeListener = new ModifyListener()
{
public void modifyText( ModifyEvent e )
{
MutableObjectClass modifiedObjectClass = getModifiedObjectClass();
if ( classTypeCombo.getSelectionIndex() == 0 )
{
modifiedObjectClass.setType( ObjectClassTypeEnum.ABSTRACT );
}
else if ( classTypeCombo.getSelectionIndex() == 1 )
{
modifiedObjectClass.setType( ObjectClassTypeEnum.AUXILIARY );
}
else if ( classTypeCombo.getSelectionIndex() == 2 )
{
modifiedObjectClass.setType( ObjectClassTypeEnum.STRUCTURAL );
}
setEditorDirty();
}
};
/** The listener for Obsolete Widget */
private SelectionAdapter obsoleteListener = new SelectionAdapter()
{
public void widgetSelected( SelectionEvent e )
{
getModifiedObjectClass().setObsolete( obsoleteCheckbox.getSelection() );
setEditorDirty();
}
};
/** The listener for Mandatory Attributes Table Widget */
private MouseListener mandatoryAttributesTableListener = new MouseListener()
{
public void mouseDoubleClick( MouseEvent e )
{
StructuredSelection selection = ( StructuredSelection ) mandatoryAttributesTableViewer.getSelection();
if ( selection.isEmpty() )
{
return;
}
Object selectedElement = selection.getFirstElement();
if ( selectedElement != null )
{
if ( selectedElement instanceof AttributeType )
{
IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
try
{
page.openEditor( new AttributeTypeEditorInput( ( AttributeType ) selectedElement ),
AttributeTypeEditor.ID );
}
catch ( PartInitException exception )
{
PluginUtils.logError( "error when opening the editor", exception ); //$NON-NLS-1$
}
}
}
}
public void mouseDown( MouseEvent e )
{
}
public void mouseUp( MouseEvent e )
{
removeButtonMandatoryTable.setEnabled( mandatoryAttributesTable.getSelection().length != 0 );
}
};
/** The listener for Add Button Widget of the Mandatory Attributes section */
private SelectionAdapter addButtonMandatoryTableListener = new SelectionAdapter()
{
public void widgetSelected( SelectionEvent e )
{
MutableObjectClass modifiedObjectClass = getModifiedObjectClass();
AttributeTypeSelectionDialog dialog = new AttributeTypeSelectionDialog();
List<AttributeType> hiddenATs = new ArrayList<AttributeType>();
List<String> mustsHidden = modifiedObjectClass.getMustAttributeTypeOids();
if ( mustsHidden != null )
{
for ( String must : mustsHidden )
{
AttributeType at = schemaHandler.getAttributeType( must );
if ( at != null )
{
hiddenATs.add( at );
}
}
}
dialog.setHiddenAttributeTypes( hiddenATs.toArray( new AttributeType[0] ) );
if ( dialog.open() != AttributeTypeSelectionDialog.OK )
{
return;
}
AttributeType at = dialog.getSelectedAttributeType();
if ( at == null )
{
return;
}
List<String> newMusts = new ArrayList<String>();
List<String> musts = modifiedObjectClass.getMustAttributeTypeOids();
if ( musts != null )
{
for ( String must : musts )
{
newMusts.add( must );
}
}
List<String> names = at.getNames();
if ( ( names != null ) && ( names.size() > 0 ) )
{
newMusts.add( names.get( 0 ) );
}
else
{
newMusts.add( at.getOid() );
}
modifiedObjectClass.setMustAttributeTypeOids( newMusts );
fillInMandatoryAttributesTable();
setEditorDirty();
}
};
/** The listener for Remove Button Widget of the Mandatory Attributes section */
private SelectionAdapter removeButtonMandatoryTableListener = new SelectionAdapter()
{
public void widgetSelected( SelectionEvent e )
{
StructuredSelection selection = ( StructuredSelection ) mandatoryAttributesTableViewer.getSelection();
if ( selection.isEmpty() )
{
return;
}
MutableObjectClass modifiedObjectClass = getModifiedObjectClass();
Object selectedElement = selection.getFirstElement();
if ( selectedElement != null )
{
List<String> newMusts = new ArrayList<String>();
List<String> musts = modifiedObjectClass.getMustAttributeTypeOids();
for ( String must : musts )
{
newMusts.add( must );
}
if ( selectedElement instanceof AttributeType )
{
for ( String name : ( ( AttributeType ) selectedElement ).getNames() )
{
newMusts.remove( name );
}
}
else if ( selectedElement instanceof NonExistingAttributeType )
{
newMusts.remove( ( ( NonExistingAttributeType ) selectedElement ).getName() );
}
modifiedObjectClass.setMustAttributeTypeOids( newMusts );
fillInMandatoryAttributesTable();
addButtonMandatoryTable.setFocus();
removeButtonMandatoryTable.setEnabled( mandatoryAttributesTable.getSelection().length != 0 );
setEditorDirty();
}
}
};
/** The listener for Optional Attributes Table Widget */
private MouseListener optionalAttributesTableListener = new MouseAdapter()
{
public void mouseDoubleClick( MouseEvent e )
{
StructuredSelection selection = ( StructuredSelection ) optionalAttributesTableViewer.getSelection();
if ( selection.isEmpty() )
{
return;
}
Object selectedElement = selection.getFirstElement();
if ( selectedElement != null )
{
if ( selectedElement instanceof AttributeType )
{
IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
try
{
page.openEditor( new AttributeTypeEditorInput( ( AttributeType ) selectedElement ),
AttributeTypeEditor.ID );
}
catch ( PartInitException exception )
{
PluginUtils.logError( "error when opening the editor", exception ); //$NON-NLS-1$
}
}
}
}
public void mouseUp( MouseEvent e )
{
removeButtonOptionalTable.setEnabled( optionalAttributesTable.getSelection().length != 0 );
}
};
/** The listener for Add Button Widget of the Optional Attributes section */
private SelectionAdapter addButtonOptionalTableListener = new SelectionAdapter()
{
public void widgetSelected( SelectionEvent e )
{
MutableObjectClass modifiedObjectClass = getModifiedObjectClass();
AttributeTypeSelectionDialog dialog = new AttributeTypeSelectionDialog();
List<AttributeType> hiddenATs = new ArrayList<AttributeType>();
List<String> maysHidden = modifiedObjectClass.getMayAttributeTypeOids();
if ( maysHidden != null )
{
for ( String may : maysHidden )
{
AttributeType at = schemaHandler.getAttributeType( may );
if ( at != null )
{
hiddenATs.add( at );
}
}
}
dialog.setHiddenAttributeTypes( hiddenATs.toArray( new AttributeType[0] ) );
if ( dialog.open() != AttributeTypeSelectionDialog.OK )
{
return;
}
AttributeType at = dialog.getSelectedAttributeType();
if ( at == null )
{
return;
}
List<String> newMays = new ArrayList<String>();
List<String> mays = modifiedObjectClass.getMayAttributeTypeOids();
if ( mays != null )
{
for ( String may : mays )
{
newMays.add( may );
}
}
List<String> names = at.getNames();
if ( ( names != null ) && ( names.size() > 0 ) )
{
newMays.add( names.get( 0 ) );
}
else
{
newMays.add( at.getOid() );
}
modifiedObjectClass.setMayAttributeTypeOids( newMays );
fillInOptionalAttributesTable();
setEditorDirty();
}
};
/** The listener for Remove Button Widget of the Optional Attributes section */
private SelectionAdapter removeButtonOptionalTableListener = new SelectionAdapter()
{
public void widgetSelected( SelectionEvent e )
{
StructuredSelection selection = ( StructuredSelection ) optionalAttributesTableViewer.getSelection();
if ( selection.isEmpty() )
{
return;
}
MutableObjectClass modifiedObjectClass = getModifiedObjectClass();
Object selectedElement = selection.getFirstElement();
if ( selectedElement != null )
{
List<String> newMays = new ArrayList<String>();
List<String> mays = modifiedObjectClass.getMayAttributeTypeOids();
for ( String may : mays )
{
newMays.add( may );
}
if ( selectedElement instanceof AttributeType )
{
for ( String name : ( ( AttributeType ) selectedElement ).getNames() )
{
newMays.remove( name );
}
}
else if ( selectedElement instanceof NonExistingAttributeType )
{
newMays.remove( ( ( NonExistingAttributeType ) selectedElement ).getName() );
}
modifiedObjectClass.setMayAttributeTypeOids( newMays );
fillInOptionalAttributesTable();
addButtonOptionalTable.setFocus();
removeButtonOptionalTable.setEnabled( optionalAttributesTable.getSelection().length != 0 );
setEditorDirty();
}
}
};
/** The listener for Superiors Table Widget */
private MouseListener superiorsTableListener = new MouseAdapter()
{
public void mouseDoubleClick( MouseEvent e )
{
StructuredSelection selection = ( StructuredSelection ) superiorsTableViewer.getSelection();
if ( selection.isEmpty() )
{
return;
}
Object selectedElement = selection.getFirstElement();
if ( selectedElement != null )
{
if ( selectedElement instanceof ObjectClass )
{
IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
try
{
page.openEditor( new ObjectClassEditorInput( ( MutableObjectClass ) selectedElement ),
ObjectClassEditor.ID );
}
catch ( PartInitException exception )
{
PluginUtils.logError( "error when opening the editor", exception ); //$NON-NLS-1$
}
}
}
}
public void mouseUp( MouseEvent e )
{
removeButtonSuperiorsTable.setEnabled( superiorsTable.getSelection().length != 0 );
}
};
/** The listener for Add Button Widget of the Superiors Table */
private SelectionAdapter addButtonSuperiorsTableListener = new SelectionAdapter()
{
public void widgetSelected( SelectionEvent e )
{
MutableObjectClass modifiedObjectClass = getModifiedObjectClass();
ObjectClassSelectionDialog dialog = new ObjectClassSelectionDialog();
List<ObjectClass> hiddenOCs = new ArrayList<ObjectClass>();
for ( String sup : modifiedObjectClass.getSuperiorOids() )
{
ObjectClass oc = schemaHandler.getObjectClass( sup );
if ( oc != null )
{
hiddenOCs.add( oc );
}
}
hiddenOCs.add( getOriginalObjectClass() );
dialog.setHiddenObjectClasses( hiddenOCs.toArray( new ObjectClass[0] ) );
if ( dialog.open() != ObjectClassSelectionDialog.OK )
{
return;
}
ObjectClass oc = dialog.getSelectedObjectClass();
if ( oc == null )
{
return;
}
List<String> superiors = new ArrayList<String>();
List<String> sups = modifiedObjectClass.getSuperiorOids();
for ( String sup : sups )
{
superiors.add( sup );
}
List<String> names = oc.getNames();
if ( ( names != null ) && ( names.size() > 0 ) )
{
superiors.add( names.get( 0 ) );
}
else
{
superiors.add( oc.getOid() );
}
modifiedObjectClass.setSuperiorOids( superiors );
fillInSuperiorsTable();
setEditorDirty();
}
};
/** The listener for Remove Button Widget of the Superiors Table */
private SelectionAdapter removeButtonSuperiorsTableListener = new SelectionAdapter()
{
public void widgetSelected( SelectionEvent e )
{
StructuredSelection selection = ( StructuredSelection ) superiorsTableViewer.getSelection();
if ( selection.isEmpty() )
{
return;
}
MutableObjectClass modifiedObjectClass = getModifiedObjectClass();
Object selectedElement = selection.getFirstElement();
if ( selectedElement != null )
{
List<String> superiors = new ArrayList<String>();
List<String> sups = modifiedObjectClass.getSuperiorOids();
for ( String sup : sups )
{
superiors.add( sup );
}
if ( selectedElement instanceof ObjectClass )
{
for ( String name : ( ( ObjectClass ) selectedElement ).getNames() )
{
superiors.remove( name );
}
}
else if ( selectedElement instanceof NonExistingObjectClass )
{
superiors.remove( ( ( NonExistingObjectClass ) selectedElement ).getName() );
}
modifiedObjectClass.setSuperiorOids( superiors );
fillInSuperiorsTable();
addButtonSuperiorsTable.setFocus();
removeButtonSuperiorsTable.setEnabled( superiorsTable.getSelection().length != 0 );
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 ObjectClassEditorOverviewPage( ObjectClassEditor editor )
{
super( editor, ID, Messages.getString( "ObjectClassEditorOverviewPage.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();
form.getBody().setLayout( new GridLayout() );
// General Information Section
createGeneralInformationSection( form.getBody(), toolkit );
Composite bottomComposite = toolkit.createComposite( form.getBody() );
bottomComposite.setLayout( new GridLayout( 2, true ) );
bottomComposite.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) );
// Mandatory Attributes Section
createMandatoryAttributesSection( bottomComposite, toolkit );
// Optionnal Attributes Section
createOptionalAttributesSection( bottomComposite, toolkit );
// Filling the UI with values from the object class
fillInUiFields();
// Listeners initialization
addListeners();
// Help Context for Dynamic Help
PlatformUI.getWorkbench().getHelpSystem().setHelp( form,
PluginConstants.PLUGIN_ID + "." + "object_class_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( "ObjectClassEditorOverviewPage.SpecifyGeneralInformation" ) ); //$NON-NLS-1$
section_general_information.setText( Messages.getString( "ObjectClassEditorOverviewPage.GeneralInformation" ) ); //$NON-NLS-1$
section_general_information.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) );
// 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 Button
toolkit.createLabel( client_general_information, Messages.getString( "ObjectClassEditorOverviewPage.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( "ObjectClassEditorOverviewPage.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( "ObjectClassEditorOverviewPage.OID" ) ); //$NON-NLS-1$
oidText = toolkit.createText( client_general_information, "" ); //$NON-NLS-1$
oidText.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) );
// SCHEMA Field
schemaLink = toolkit.createHyperlink( client_general_information, Messages
.getString( "ObjectClassEditorOverviewPage.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 ) );
// DESCRIPTION Field
toolkit.createLabel( client_general_information, Messages
.getString( "ObjectClassEditorOverviewPage.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 );
// SUPERIORS Table
toolkit.createLabel( client_general_information, Messages
.getString( "ObjectClassEditorOverviewPage.SuperiorClasses" ) ); //$NON-NLS-1$
Composite superiorsComposite = toolkit.createComposite( client_general_information );
GridLayout superiorsCompositeGridLayout = new GridLayout( 2, false );
toolkit.paintBordersFor( superiorsComposite );
superiorsCompositeGridLayout.marginHeight = 1;
superiorsCompositeGridLayout.marginWidth = 1;
superiorsComposite.setLayout( superiorsCompositeGridLayout );
superiorsComposite.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) );
superiorsTable = toolkit.createTable( superiorsComposite, SWT.SINGLE | SWT.FULL_SELECTION | SWT.H_SCROLL
| SWT.V_SCROLL );
toolkit.paintBordersFor( superiorsTable );
GridData gridData = new GridData( SWT.FILL, SWT.NONE, true, false, 1, 2 );
gridData.heightHint = 45;
gridData.minimumHeight = 45;
superiorsTable.setLayoutData( gridData );
superiorsTableViewer = new TableViewer( superiorsTable );
superiorsTableViewer.setContentProvider( new ObjectClassEditorSuperiorsTableContentProvider() );
superiorsTableViewer.setLabelProvider( new ObjectClassEditorSuperiorsTableLabelProvider() );
addButtonSuperiorsTable = toolkit.createButton( superiorsComposite, Messages
.getString( "ObjectClassEditorOverviewPage.Add" ), SWT.PUSH ); //$NON-NLS-1$
addButtonSuperiorsTable.setLayoutData( new GridData( SWT.FILL, SWT.NONE, false, false ) );
removeButtonSuperiorsTable = toolkit.createButton( superiorsComposite, Messages
.getString( "ObjectClassEditorOverviewPage.Remove" ), SWT.PUSH ); //$NON-NLS-1$
removeButtonSuperiorsTable.setLayoutData( new GridData( SWT.FILL, SWT.NONE, false, false ) );
// CLASS TYPE Combo
toolkit
.createLabel( client_general_information, Messages.getString( "ObjectClassEditorOverviewPage.ClassType" ) ); //$NON-NLS-1$
classTypeCombo = new Combo( client_general_information, SWT.READ_ONLY | SWT.SINGLE );
classTypeCombo.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) );
initClassTypeCombo();
// OBSOLETE Checkbox
toolkit.createLabel( client_general_information, "" ); //$NON-NLS-1$
obsoleteCheckbox = toolkit.createButton( client_general_information, Messages
.getString( "ObjectClassEditorOverviewPage.Obsolete" ), SWT.CHECK ); //$NON-NLS-1$
obsoleteCheckbox.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) );
}
/**
* Creates the Mandatory Attributes Section.
*
* @param parent
* the parent composite
* @param toolkit
* the FormToolKit to use
*/
private void createMandatoryAttributesSection( Composite parent, FormToolkit toolkit )
{
// MANDATORY ATTRIBUTES Section
Section section = toolkit.createSection( parent, Section.DESCRIPTION | Section.TITLE_BAR );
section.setText( Messages.getString( "ObjectClassEditorOverviewPage.MandatoryAttributes" ) ); //$NON-NLS-1$
section.setDescription( Messages.getString( "ObjectClassEditorOverviewPage.SpecifyMandatoryAttributes" ) ); //$NON-NLS-1$
section.setExpanded( true );
Composite client = toolkit.createComposite( section );
section.setClient( client );
GridData gd = new GridData( SWT.FILL, SWT.NONE, true, false );
section.setLayoutData( gd );
toolkit.paintBordersFor( client );
GridLayout layout = new GridLayout();
layout.numColumns = 2;
client.setLayout( layout );
mandatoryAttributesTable = toolkit.createTable( client, SWT.SINGLE | SWT.FULL_SELECTION | SWT.H_SCROLL
| SWT.V_SCROLL );
gd = new GridData( SWT.FILL, SWT.NONE, true, false );
gd.verticalSpan = 2;
gd.heightHint = 108;
mandatoryAttributesTable.setLayoutData( gd );
mandatoryAttributesTableViewer = new TableViewer( mandatoryAttributesTable );
mandatoryAttributesTableViewer.setContentProvider( new ObjectClassEditorAttributesTableContentProvider() );
mandatoryAttributesTableViewer.setLabelProvider( new ObjectClassEditorAttributesTableLabelProvider() );
addButtonMandatoryTable = toolkit.createButton( client, Messages
.getString( "ObjectClassEditorOverviewPage.Add" ), SWT.PUSH ); //$NON-NLS-1$
removeButtonMandatoryTable = toolkit.createButton( client, Messages
.getString( "ObjectClassEditorOverviewPage.Remove" ), SWT.PUSH ); //$NON-NLS-1$
gd = new GridData( GridData.VERTICAL_ALIGN_BEGINNING );
addButtonMandatoryTable.setLayoutData( gd );
removeButtonMandatoryTable.setLayoutData( gd );
// By default, no element is selected
removeButtonMandatoryTable.setEnabled( false );
}
/**
* Creates the Optional Attributes Section.
*
* @param parent
* the parent composite
* @param toolkit
* the FormToolKit to use
*/
private void createOptionalAttributesSection( Composite parent, FormToolkit toolkit )
{
// OPTIONAL ATTRIBUTES Section
Section section = toolkit.createSection( parent, Section.DESCRIPTION | Section.TITLE_BAR );
section.setText( Messages.getString( "ObjectClassEditorOverviewPage.OptionalAttributes" ) ); //$NON-NLS-1$
section.setDescription( Messages.getString( "ObjectClassEditorOverviewPage.SpecifyOptionalAttributes" ) ); //$NON-NLS-1$
section.setExpanded( true );
Composite client = toolkit.createComposite( section );
section.setClient( client );
GridData gd = new GridData( SWT.FILL, SWT.NONE, true, false );
section.setLayoutData( gd );
toolkit.paintBordersFor( client );
GridLayout layout = new GridLayout();
layout.numColumns = 2;
client.setLayout( layout );
optionalAttributesTable = toolkit.createTable( client, SWT.SINGLE | SWT.FULL_SELECTION | SWT.H_SCROLL
| SWT.V_SCROLL );
gd = new GridData( SWT.FILL, SWT.NONE, true, false );
gd.verticalSpan = 2;
gd.heightHint = 108;
optionalAttributesTable.setLayoutData( gd );
optionalAttributesTableViewer = new TableViewer( optionalAttributesTable );
optionalAttributesTableViewer.setContentProvider( new ObjectClassEditorAttributesTableContentProvider() );
optionalAttributesTableViewer.setLabelProvider( new ObjectClassEditorAttributesTableLabelProvider() );
addButtonOptionalTable = toolkit.createButton( client,
Messages.getString( "ObjectClassEditorOverviewPage.Add" ), SWT.PUSH ); //$NON-NLS-1$
removeButtonOptionalTable = toolkit.createButton( client, Messages
.getString( "ObjectClassEditorOverviewPage.Remove" ), SWT.PUSH ); //$NON-NLS-1$
gd = new GridData( GridData.VERTICAL_ALIGN_BEGINNING );
addButtonOptionalTable.setLayoutData( gd );
removeButtonOptionalTable.setLayoutData( gd );
// By default, no element is selected
removeButtonOptionalTable.setEnabled( false );
}
/**
* {@inheritDoc}
*/
protected void fillInUiFields()
{
// Getting the original and modified object classes
ObjectClass modifiedObjectClass = getModifiedObjectClass();
originalSchema = schemaHandler.getSchema( getOriginalObjectClass().getSchemaName() );
// ALIASES Label
if ( ( modifiedObjectClass.getNames() != null ) && ( modifiedObjectClass.getNames().size() != 0 ) )
{
aliasesText.setText( ViewUtils.concateAliases( modifiedObjectClass.getNames() ) );
}
else
{
aliasesText.setText( "" ); //$NON-NLS-1$
}
// OID Field
if ( modifiedObjectClass.getOid() != null )
{
oidText.setText( modifiedObjectClass.getOid() );
}
schemaLabel.setText( modifiedObjectClass.getSchemaName() );
// DESCRIPTION Field
if ( modifiedObjectClass.getDescription() != null )
{
descriptionText.setText( modifiedObjectClass.getDescription() );
}
// SUPERIORS Table
fillInSuperiorsTable();
// CLASS TYPE Combo
fillInClassType();
// OBSOLETE Checkbox
obsoleteCheckbox.setSelection( modifiedObjectClass.isObsolete() );
// MANDATORY ATTRIBUTES Table
fillInMandatoryAttributesTable();
// OPTIONNAL ATTRIBUTES Table
fillInOptionalAttributesTable();
}
/**
* Fills in the Superiors Table.
*/
private void fillInSuperiorsTable()
{
if ( getModifiedObjectClass().getSuperiorOids() != null )
{
superiorsTableViewer.setInput( getModifiedObjectClass().getSuperiorOids() );
}
}
/**
* Initializes the Class Type Combo
*/
private void initClassTypeCombo()
{
classTypeCombo.add( Messages.getString( "ObjectClassEditorOverviewPage.Abstract" ), 0 ); //$NON-NLS-1$
classTypeCombo.add( Messages.getString( "ObjectClassEditorOverviewPage.Auxiliary" ), 1 ); //$NON-NLS-1$
classTypeCombo.add( Messages.getString( "ObjectClassEditorOverviewPage.Structural" ), 2 ); //$NON-NLS-1$
}
/**
* Fills in the Class Type Combo
*/
private void fillInClassType()
{
ObjectClassTypeEnum type = getModifiedObjectClass().getType();
switch ( type )
{
case ABSTRACT:
classTypeCombo.select( 0 );
return;
case AUXILIARY:
classTypeCombo.select( 1 );
return;
case STRUCTURAL:
classTypeCombo.select( 2 );
return;
}
}
/**
* Initializes the Mandatory Attributes Table
*/
private void fillInMandatoryAttributesTable()
{
if ( getModifiedObjectClass().getMustAttributeTypeOids() != null )
{
mandatoryAttributesTableViewer.setInput( getModifiedObjectClass().getMustAttributeTypeOids() );
}
}
/**
* Initializes the Optional Attributes Table
*/
private void fillInOptionalAttributesTable()
{
if ( getModifiedObjectClass().getMayAttributeTypeOids() != null )
{
optionalAttributesTableViewer.setInput( getModifiedObjectClass().getMayAttributeTypeOids() );
}
}
/**
* {@inheritDoc}
*/
protected void addListeners()
{
addModifyListener( aliasesText, aliasesTextModifyListener );
addSelectionListener( aliasesButton, aliasesButtonListener );
addModifyListener( oidText, oidTextModifyListener );
addVerifyListener( oidText, oidTextVerifyListener );
addHyperlinkListener( schemaLink, schemaLinkListener );
addModifyListener( descriptionText, descriptionTextListener );
addMouseListener( superiorsTable, superiorsTableListener );
addSelectionListener( addButtonSuperiorsTable, addButtonSuperiorsTableListener );
addSelectionListener( removeButtonSuperiorsTable, removeButtonSuperiorsTableListener );
addModifyListener( classTypeCombo, classTypeListener );
addSelectionListener( obsoleteCheckbox, obsoleteListener );
addMouseListener( mandatoryAttributesTable, mandatoryAttributesTableListener );
addSelectionListener( addButtonMandatoryTable, addButtonMandatoryTableListener );
addSelectionListener( removeButtonMandatoryTable, removeButtonMandatoryTableListener );
addMouseListener( optionalAttributesTable, optionalAttributesTableListener );
addSelectionListener( addButtonOptionalTable, addButtonOptionalTableListener );
addSelectionListener( removeButtonOptionalTable, removeButtonOptionalTableListener );
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 );
removeMouseListener( superiorsTable, superiorsTableListener );
removeSelectionListener( addButtonSuperiorsTable, addButtonSuperiorsTableListener );
removeSelectionListener( removeButtonSuperiorsTable, removeButtonSuperiorsTableListener );
removeModifyListener( classTypeCombo, classTypeListener );
removeSelectionListener( obsoleteCheckbox, obsoleteListener );
removeMouseListener( mandatoryAttributesTable, mandatoryAttributesTableListener );
removeSelectionListener( addButtonMandatoryTable, addButtonMandatoryTableListener );
removeSelectionListener( removeButtonMandatoryTable, removeButtonMandatoryTableListener );
removeMouseListener( optionalAttributesTable, optionalAttributesTableListener );
removeSelectionListener( addButtonOptionalTable, addButtonOptionalTableListener );
removeSelectionListener( removeButtonOptionalTable, removeButtonOptionalTableListener );
Display.getCurrent().removeFilter( SWT.MouseWheel, mouseWheelFilter );
}
/**
* {@inheritDoc}
*/
public void dispose()
{
schemaHandler.removeListener( schemaHandlerListener );
super.dispose();
}
}