| /* |
| * 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.common.wizards; |
| |
| |
| import java.util.Arrays; |
| import java.util.Collection; |
| import java.util.HashSet; |
| import java.util.Set; |
| |
| import org.apache.directory.api.ldap.model.schema.AttributeType; |
| import org.apache.directory.studio.common.ui.widgets.BaseWidgetUtils; |
| import org.apache.directory.studio.connection.ui.widgets.ExtendedContentAssistCommandAdapter; |
| import org.apache.directory.studio.ldapbrowser.common.widgets.ListContentProposalProvider; |
| import org.apache.directory.studio.ldapbrowser.core.model.IAttribute; |
| import org.apache.directory.studio.ldapbrowser.core.model.IEntry; |
| import org.apache.directory.studio.ldapbrowser.core.model.schema.SchemaUtils; |
| import org.eclipse.jface.fieldassist.ComboContentAdapter; |
| import org.eclipse.jface.wizard.WizardPage; |
| import org.eclipse.swt.SWT; |
| import org.eclipse.swt.events.ModifyEvent; |
| import org.eclipse.swt.events.ModifyListener; |
| import org.eclipse.swt.events.SelectionAdapter; |
| import org.eclipse.swt.events.SelectionEvent; |
| import org.eclipse.swt.layout.GridData; |
| import org.eclipse.swt.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.Label; |
| import org.eclipse.swt.widgets.Text; |
| |
| |
| /** |
| * The AttributeTypeWizardPage provides a combo to select the attribute type, |
| * some filter and a preview field. |
| * |
| * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a> |
| */ |
| public class AttributeTypeWizardPage extends WizardPage |
| { |
| |
| /** The parent wizard. */ |
| private AttributeWizard wizard; |
| |
| /** The initial show subschema attributes only. */ |
| private boolean initialShowSubschemaAttributesOnly; |
| |
| /** The initial hide existing attributes. */ |
| private boolean initialHideExistingAttributes; |
| |
| /** The parsed attribute type. */ |
| private String parsedAttributeType; |
| |
| /** The possible attribute types. */ |
| private String[] possibleAttributeTypes; |
| |
| /** The possible attribute types applicable to the entry's schema only. */ |
| private String[] possibleAttributeTypesSubschemaOnly; |
| |
| /** The possible attribute types applicable to the entry's schema only, existing attributes are hidden. */ |
| private String[] possibleAttributeTypesSubschemaOnlyAndExistingHidden; |
| |
| /** The attribute type combo. */ |
| private Combo attributeTypeCombo; |
| |
| /** The show subschem attributes only button. */ |
| private Button showSubschemAttributesOnlyButton; |
| |
| /** The hide existing attributes button. */ |
| private Button hideExistingAttributesButton; |
| |
| /** The preview text. */ |
| private Text previewText; |
| |
| |
| /** |
| * Creates a new instance of AttributeTypeWizardPage. |
| * |
| * @param pageName the page name |
| * @param initialEntry the initial entry |
| * @param initialAttributeDescription the initial attribute description |
| * @param initialShowSubschemaAttributesOnly the initial show subschema attributes only |
| * @param initialHideExistingAttributes the initial hide existing attributes |
| * @param wizard the wizard |
| */ |
| public AttributeTypeWizardPage( String pageName, IEntry initialEntry, String initialAttributeDescription, |
| boolean initialShowSubschemaAttributesOnly, boolean initialHideExistingAttributes, AttributeWizard wizard ) |
| { |
| super( pageName ); |
| super.setTitle( Messages.getString( "AttributeTypeWizardPage.AttributeType" ) ); //$NON-NLS-1$ |
| super.setDescription( Messages.getString( "AttributeTypeWizardPage.AttributeTypeDescription" ) ); //$NON-NLS-1$ |
| super.setPageComplete( false ); |
| |
| this.wizard = wizard; |
| this.initialShowSubschemaAttributesOnly = initialShowSubschemaAttributesOnly; |
| this.initialHideExistingAttributes = initialHideExistingAttributes; |
| |
| Collection<AttributeType> atds = initialEntry.getBrowserConnection().getSchema() |
| .getAttributeTypeDescriptions(); |
| Collection<String> atdNames = SchemaUtils.getNames( atds ); |
| possibleAttributeTypes = atdNames.toArray( new String[atdNames.size()] ); |
| Arrays.sort( possibleAttributeTypes ); |
| |
| Collection<AttributeType> allAtds = SchemaUtils.getAllAttributeTypeDescriptions( initialEntry ); |
| Collection<String> names = SchemaUtils.getNames( allAtds ); |
| possibleAttributeTypesSubschemaOnly = names.toArray( new String[0] ); |
| Arrays.sort( possibleAttributeTypesSubschemaOnly ); |
| |
| Set<String> set = new HashSet<>( Arrays.asList( possibleAttributeTypesSubschemaOnly ) ); |
| IAttribute[] existingAttributes = initialEntry.getAttributes(); |
| for ( int i = 0; existingAttributes != null && i < existingAttributes.length; i++ ) |
| { |
| set.remove( existingAttributes[i].getDescription() ); |
| } |
| possibleAttributeTypesSubschemaOnlyAndExistingHidden = set.toArray( new String[set.size()] ); |
| Arrays.sort( possibleAttributeTypesSubschemaOnlyAndExistingHidden ); |
| |
| String attributeDescription = initialAttributeDescription; |
| if ( attributeDescription == null ) |
| { |
| attributeDescription = ""; //$NON-NLS-1$ |
| } |
| String[] attributeDescriptionComponents = attributeDescription.split( ";" ); //$NON-NLS-1$ |
| parsedAttributeType = attributeDescriptionComponents[0]; |
| } |
| |
| |
| /** |
| * Validates this page. |
| */ |
| private void validate() |
| { |
| previewText.setText( wizard.getAttributeDescription() ); |
| setPageComplete( !"".equals( attributeTypeCombo.getText() ) ); //$NON-NLS-1$ |
| } |
| |
| |
| /** |
| * {@inheritDoc} |
| */ |
| @Override |
| public void setVisible( boolean visible ) |
| { |
| super.setVisible( visible ); |
| |
| if ( visible ) |
| { |
| validate(); |
| } |
| } |
| |
| |
| /** |
| * {@inheritDoc} |
| */ |
| @Override |
| public void createControl( Composite parent ) |
| { |
| Composite composite = new Composite( parent, SWT.NONE ); |
| GridLayout gl = new GridLayout( 2, false ); |
| composite.setLayout( gl ); |
| composite.setLayoutData( new GridData( GridData.FILL_BOTH ) ); |
| |
| BaseWidgetUtils.createLabel( composite, Messages.getString( "AttributeTypeWizardPage.AttributeTypeLabel" ), 1 ); //$NON-NLS-1$ |
| |
| // attribute combo with field decoration and content proposal |
| attributeTypeCombo = BaseWidgetUtils.createCombo( composite, possibleAttributeTypes, -1, 1 ); |
| attributeTypeCombo.setText( parsedAttributeType ); |
| new ExtendedContentAssistCommandAdapter( attributeTypeCombo, new ComboContentAdapter(), |
| new ListContentProposalProvider( possibleAttributeTypes ), null, null, true ); |
| |
| BaseWidgetUtils.createSpacer( composite, 1 ); |
| showSubschemAttributesOnlyButton = BaseWidgetUtils.createCheckbox( composite, Messages |
| .getString( "AttributeTypeWizardPage.ShowSubschemaAttributesOnly" ), //$NON-NLS-1$ |
| 1 ); |
| showSubschemAttributesOnlyButton.setSelection( initialShowSubschemaAttributesOnly ); |
| |
| BaseWidgetUtils.createSpacer( composite, 1 ); |
| hideExistingAttributesButton = BaseWidgetUtils.createCheckbox( composite, Messages |
| .getString( "AttributeTypeWizardPage.HideExistingAttributes" ), 1 ); //$NON-NLS-1$ |
| hideExistingAttributesButton.setSelection( initialHideExistingAttributes ); |
| |
| Label l = new Label( composite, SWT.NONE ); |
| GridData gd = new GridData( GridData.FILL_BOTH ); |
| gd.horizontalSpan = 2; |
| l.setLayoutData( gd ); |
| |
| BaseWidgetUtils.createLabel( composite, Messages.getString( "AttributeTypeWizardPage.PreviewLabel" ), 1 ); //$NON-NLS-1$ |
| previewText = BaseWidgetUtils.createReadonlyText( composite, "", 1 ); //$NON-NLS-1$ |
| |
| // attribute type listener |
| attributeTypeCombo.addModifyListener( new ModifyListener() |
| { |
| @Override |
| public void modifyText( ModifyEvent e ) |
| { |
| validate(); |
| } |
| } ); |
| |
| // filter listener |
| showSubschemAttributesOnlyButton.addSelectionListener( new SelectionAdapter() |
| { |
| @Override |
| public void widgetSelected( SelectionEvent e ) |
| { |
| updateFilter(); |
| validate(); |
| } |
| } ); |
| hideExistingAttributesButton.addSelectionListener( new SelectionAdapter() |
| { |
| @Override |
| public void widgetSelected( SelectionEvent e ) |
| { |
| updateFilter(); |
| validate(); |
| } |
| } ); |
| updateFilter(); |
| |
| setControl( composite ); |
| } |
| |
| |
| /** |
| * Updates the filter. |
| */ |
| private void updateFilter() |
| { |
| // enable/disable filter buttons |
| hideExistingAttributesButton.setEnabled( showSubschemAttributesOnlyButton.getSelection() ); |
| if ( possibleAttributeTypesSubschemaOnly.length == 0 ) |
| { |
| showSubschemAttributesOnlyButton.setSelection( false ); |
| showSubschemAttributesOnlyButton.setEnabled( false ); |
| } |
| if ( possibleAttributeTypesSubschemaOnlyAndExistingHidden.length == 0 ) |
| { |
| hideExistingAttributesButton.setEnabled( false ); |
| hideExistingAttributesButton.setSelection( false ); |
| } |
| |
| // update combo items and proposals |
| String value = attributeTypeCombo.getText(); |
| if ( hideExistingAttributesButton.getSelection() && showSubschemAttributesOnlyButton.getSelection() ) |
| { |
| attributeTypeCombo.setItems( possibleAttributeTypesSubschemaOnlyAndExistingHidden ); |
| } |
| else if ( showSubschemAttributesOnlyButton.getSelection() ) |
| { |
| attributeTypeCombo.setItems( possibleAttributeTypesSubschemaOnly ); |
| } |
| else |
| { |
| attributeTypeCombo.setItems( possibleAttributeTypes ); |
| } |
| attributeTypeCombo.setText( value ); |
| } |
| |
| |
| /** |
| * Gets the attribute type. |
| * |
| * @return the attribute type |
| */ |
| String getAttributeType() |
| { |
| if ( attributeTypeCombo == null || attributeTypeCombo.isDisposed() ) |
| { |
| return ""; //$NON-NLS-1$ |
| } |
| |
| return attributeTypeCombo.getText(); |
| } |
| |
| } |