Package org.apache.directory.studio.schemaeditor.view.search

Source Code of org.apache.directory.studio.schemaeditor.view.search.SearchPage

/*
*  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.search;


import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

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.view.ViewUtils;
import org.apache.directory.studio.schemaeditor.view.views.SearchView;
import org.eclipse.jface.dialogs.DialogPage;
import org.eclipse.jface.dialogs.IDialogSettings;
import org.eclipse.search.ui.ISearchPage;
import org.eclipse.search.ui.ISearchPageContainer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
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.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.ui.PartInitException;


/**
* This class implements the Search Page.
*
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
* @version $Rev$, $Date$
*/
public class SearchPage extends DialogPage implements ISearchPage
{
    /** The SearchPageContainer */
    private ISearchPageContainer container;

    // UI Fields
    private Combo searchCombo;
    private Button aliasesButton;
    private Button oidButton;
    private Button descriptionButon;
    private Button superiorButton;
    private Button syntaxButton;
    private Button matchingRulesButton;
    private Button superiorsButton;
    private Button mandatoryAttributes;
    private Button optionalAttributes;

    /**
     * This enums represents the different possible scopes for a Schema Search.
     *
     * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
     * @version $Rev$, $Date$
     */
    public enum SearchScopeEnum
    {
        ALIASES, OID, DESCRIPTION, SUPERIOR, SYNTAX, MATCHING_RULES, SUPERIORS, MANDATORY_ATTRIBUTES, OPTIONAL_ATTRIBUTES
    }


    /* (non-Javadoc)
     * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
     */
    public void createControl( Composite parent )
    {
        parent.setLayout( new GridLayout() );

        // Search String Label
        Label searchStringLabel = new Label( parent, SWT.NONE );
        searchStringLabel.setText( "Search string (*=any string, ?=any character):" );
        searchStringLabel.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) );

        // Search Combo
        searchCombo = new Combo( parent, SWT.DROP_DOWN | SWT.BORDER );
        searchCombo.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) );
        searchCombo.addModifyListener( new ModifyListener()
        {
            public void modifyText( ModifyEvent arg0 )
            {
                validate();
            }
        } );

        // Seach In Group
        Group searchIn = new Group( parent, SWT.NONE );
        searchIn.setLayout( new GridLayout() );
        searchIn.setText( "Search in" );
        searchIn.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) );

        // Aliases Button
        aliasesButton = new Button( searchIn, SWT.CHECK );
        aliasesButton.setText( "Aliases" );

        // OID Button
        oidButton = new Button( searchIn, SWT.CHECK );
        oidButton.setText( "OID" );

        // Description Button
        descriptionButon = new Button( searchIn, SWT.CHECK );
        descriptionButon.setText( "Description" );

        // Specific Scope Composite
        Composite specificScopeComposite = new Composite( parent, SWT.NONE );
        GridLayout specificScopeLayout = new GridLayout( 2, true );
        specificScopeLayout.marginBottom = 0;
        specificScopeLayout.marginHeight = 0;
        specificScopeLayout.marginLeft = 0;
        specificScopeLayout.marginRight = 0;
        specificScopeLayout.marginTop = 0;
        specificScopeLayout.marginWidth = 0;
        specificScopeComposite.setLayout( specificScopeLayout );
        specificScopeComposite.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false, 3, 1 ) );

        // Attribute Types Group
        Group attributeTypesGroup = new Group( specificScopeComposite, SWT.NONE );
        attributeTypesGroup.setText( "Seach in (for attribute types)" );
        attributeTypesGroup.setLayout( new GridLayout() );
        attributeTypesGroup.setLayoutData( new GridData( SWT.FILL, SWT.FILL, true, true ) );

        // Superior Button
        superiorButton = new Button( attributeTypesGroup, SWT.CHECK );
        superiorButton.setText( "Superior" );

        // Syntax Button
        syntaxButton = new Button( attributeTypesGroup, SWT.CHECK );
        syntaxButton.setText( "Syntax" );

        // Matching Rules Button
        matchingRulesButton = new Button( attributeTypesGroup, SWT.CHECK );
        matchingRulesButton.setText( "Matching Rules" );

        // Object Classes Group
        Group objectClassesGroup = new Group( specificScopeComposite, SWT.NONE );
        objectClassesGroup.setText( "Search in (for object classes)" );
        objectClassesGroup.setLayout( new GridLayout() );
        objectClassesGroup.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) );

        // Superiors Button
        superiorsButton = new Button( objectClassesGroup, SWT.CHECK );
        superiorsButton.setText( "Superiors" );

        // Mandatory Attributes Button
        mandatoryAttributes = new Button( objectClassesGroup, SWT.CHECK );
        mandatoryAttributes.setText( "Mandatory Attributes" );

        // Optional Attributes Button
        optionalAttributes = new Button( objectClassesGroup, SWT.CHECK );
        optionalAttributes.setText( "Optional Attributes" );

        initSearchStringHistory();

        initSearchScope();

        searchCombo.setFocus();

        super.setControl( parent );
    }


    /**
     * Initializes the Search String History.
     */
    private void initSearchStringHistory()
    {
        searchCombo.setItems( loadSearchStringHistory() );
    }


    /**
     * Initializes the Search Scope
     */
    private void initSearchScope()
    {
        IDialogSettings settings = Activator.getDefault().getDialogSettings();

        if ( settings.get( PluginConstants.PREFS_SEARCH_PAGE_SCOPE_ALIASES ) == null )
        {
            aliasesButton.setSelection( true );
        }
        else
        {
            aliasesButton.setSelection( settings.getBoolean( PluginConstants.PREFS_SEARCH_PAGE_SCOPE_ALIASES ) );
        }

        if ( settings.get( PluginConstants.PREFS_SEARCH_PAGE_SCOPE_OID ) == null )
        {
            oidButton.setSelection( true );
        }
        else
        {
            oidButton.setSelection( settings.getBoolean( PluginConstants.PREFS_SEARCH_PAGE_SCOPE_OID ) );
        }

        if ( settings.get( PluginConstants.PREFS_SEARCH_PAGE_SCOPE_DESCRIPTION ) == null )
        {
            descriptionButon.setSelection( true );
        }
        else
        {
            descriptionButon.setSelection( settings.getBoolean( PluginConstants.PREFS_SEARCH_PAGE_SCOPE_DESCRIPTION ) );
        }
        superiorButton.setSelection( settings.getBoolean( PluginConstants.PREFS_SEARCH_PAGE_SCOPE_SUPERIOR ) );
        syntaxButton.setSelection( settings.getBoolean( PluginConstants.PREFS_SEARCH_PAGE_SCOPE_SYNTAX ) );
        matchingRulesButton
            .setSelection( settings.getBoolean( PluginConstants.PREFS_SEARCH_PAGE_SCOPE_MATCHING_RULES ) );
        superiorsButton.setSelection( settings.getBoolean( PluginConstants.PREFS_SEARCH_PAGE_SCOPE_SUPERIORS ) );
        mandatoryAttributes.setSelection( settings
            .getBoolean( PluginConstants.PREFS_SEARCH_PAGE_SCOPE_MANDATORY_ATTRIBUTES ) );
        optionalAttributes.setSelection( settings
            .getBoolean( PluginConstants.PREFS_SEARCH_PAGE_SCOPE_OPTIONAL_ATTRIBUTES ) );
    }


    /* (non-Javadoc)
     * @see org.eclipse.search.ui.ISearchPage#performAction()
     */
    public boolean performAction()
    {
        List<SearchScopeEnum> searchScope = new ArrayList<SearchScopeEnum>();
        if ( aliasesButton.getSelection() )
        {
            searchScope.add( SearchScopeEnum.ALIASES );
        }
        if ( oidButton.getSelection() )
        {
            searchScope.add( SearchScopeEnum.OID );
        }
        if ( descriptionButon.getSelection() )
        {
            searchScope.add( SearchScopeEnum.DESCRIPTION );
        }
        if ( superiorButton.getSelection() )
        {
            searchScope.add( SearchScopeEnum.SUPERIOR );
        }
        if ( syntaxButton.getSelection() )
        {
            searchScope.add( SearchScopeEnum.SYNTAX );
        }
        if ( matchingRulesButton.getSelection() )
        {
            searchScope.add( SearchScopeEnum.MATCHING_RULES );
        }
        if ( superiorsButton.getSelection() )
        {
            searchScope.add( SearchScopeEnum.SUPERIORS );
        }
        if ( mandatoryAttributes.getSelection() )
        {
            searchScope.add( SearchScopeEnum.MANDATORY_ATTRIBUTES );
        }
        if ( optionalAttributes.getSelection() )
        {
            searchScope.add( SearchScopeEnum.OPTIONAL_ATTRIBUTES );
        }

        // Opening the SearchView and displaying the results
        try
        {
            SearchView searchView = ( SearchView ) Activator.getDefault().getWorkbench().getActiveWorkbenchWindow()
                .getActivePage().showView( SearchView.ID );
            searchView.setSearchInput( searchCombo.getText(), searchScope.toArray( new SearchScopeEnum[0] ) );
        }
        catch ( PartInitException e )
        {
            PluginUtils.logError( "An error occured when opening the view.", e );
            ViewUtils.displayErrorMessageBox( "Error", "An error occured when opening the view." );
        }

        return true;
    }


    /* (non-Javadoc)
     * @see org.eclipse.search.ui.ISearchPage#setContainer(org.eclipse.search.ui.ISearchPageContainer)
     */
    public void setContainer( ISearchPageContainer container )
    {
        this.container = container;
    }


    /* (non-Javadoc)
     * @see org.eclipse.jface.dialogs.DialogPage#setVisible(boolean)
     */
    public void setVisible( boolean visible )
    {
        validate();
        super.setVisible( visible );
    }


    /**
     * Verifies if the page is valid.
     *
     * @return
     *      true if the page is valid
     */
    private boolean isValid()
    {
        return ( ( searchCombo.getText() != null ) && ( !"".equals( searchCombo.getText() ) ) ); //$NON-NLS-1$
    }


    /**
     * Validates the page.
     */
    private void validate()
    {
        container.setPerformActionEnabled( isValid() );
    }


    /**
     * Adds a new Search String to the History.
     *
     * @param value
     *      the value to save
     */
    public static void addSearchStringHistory( String value )
    {
        // get current history
        String[] history = loadSearchStringHistory();
        List<String> list = new ArrayList<String>( Arrays.asList( history ) );

        // add new value or move to first position
        if ( list.contains( value ) )
        {
            list.remove( value );
        }
        list.add( 0, value );

        // check history size
        while ( list.size() > 10 )
        {
            list.remove( list.size() - 1 );
        }

        // save
        history = ( String[] ) list.toArray( new String[list.size()] );
        Activator.getDefault().getDialogSettings().put( PluginConstants.PREFS_SEARCH_PAGE_SEARCH_HISTORY, history );
    }


    /**
     * Removes the given value from the History.
     *
     * @param value
     *      the value to remove
     */
    public static void removeSearchStringHistory( String value )
    {
        // get current history
        String[] history = loadSearchStringHistory();
        List<String> list = new ArrayList<String>( Arrays.asList( history ) );

        // add new value or move to first position
        if ( list.contains( value ) )
        {
            list.remove( value );
        }

        // save
        history = ( String[] ) list.toArray( new String[list.size()] );
        Activator.getDefault().getDialogSettings().put( PluginConstants.PREFS_SEARCH_PAGE_SEARCH_HISTORY, history );
    }


    /**
     * Loads the Search History
     *
     * @return
     *      an array of String containing the Search History
     */
    public static String[] loadSearchStringHistory()
    {
        String[] history = Activator.getDefault().getDialogSettings().getArray(
            PluginConstants.PREFS_SEARCH_PAGE_SEARCH_HISTORY );
        if ( history == null )
        {
            history = new String[0];
        }
        return history;
    }


    /**
     * Loads the Search scope.
     *
     * @return
     *      the search scope
     */
    public static List<SearchScopeEnum> loadSearchScope()
    {
        List<SearchScopeEnum> searchScope = new ArrayList<SearchScopeEnum>();
        IDialogSettings settings = Activator.getDefault().getDialogSettings();

        if ( settings.get( PluginConstants.PREFS_SEARCH_PAGE_SCOPE_ALIASES ) == null )
        {
            searchScope.add( SearchScopeEnum.ALIASES );
        }
        else
        {
            if ( settings.getBoolean( PluginConstants.PREFS_SEARCH_PAGE_SCOPE_ALIASES ) )
            {
                searchScope.add( SearchScopeEnum.ALIASES );
            }
        }

        if ( settings.get( PluginConstants.PREFS_SEARCH_PAGE_SCOPE_OID ) == null )
        {
            searchScope.add( SearchScopeEnum.OID );
        }
        else
        {
            if ( settings.getBoolean( PluginConstants.PREFS_SEARCH_PAGE_SCOPE_OID ) )
            {
                searchScope.add( SearchScopeEnum.OID );
            }
        }

        if ( settings.get( PluginConstants.PREFS_SEARCH_PAGE_SCOPE_DESCRIPTION ) == null )
        {
            searchScope.add( SearchScopeEnum.DESCRIPTION );
        }
        else
        {
            if ( settings.getBoolean( PluginConstants.PREFS_SEARCH_PAGE_SCOPE_DESCRIPTION ) )
            {
                searchScope.add( SearchScopeEnum.DESCRIPTION );
            }
        }
        if ( settings.getBoolean( PluginConstants.PREFS_SEARCH_PAGE_SCOPE_SUPERIOR ) )
        {
            searchScope.add( SearchScopeEnum.SUPERIOR );
        }
        if ( settings.getBoolean( PluginConstants.PREFS_SEARCH_PAGE_SCOPE_SYNTAX ) )
        {
            searchScope.add( SearchScopeEnum.SYNTAX );
        }
        if ( settings.getBoolean( PluginConstants.PREFS_SEARCH_PAGE_SCOPE_MATCHING_RULES ) )
        {
            searchScope.add( SearchScopeEnum.MATCHING_RULES );
        }
        if ( settings.getBoolean( PluginConstants.PREFS_SEARCH_PAGE_SCOPE_SUPERIORS ) )
        {
            searchScope.add( SearchScopeEnum.SUPERIORS );
        }
        if ( settings.getBoolean( PluginConstants.PREFS_SEARCH_PAGE_SCOPE_MANDATORY_ATTRIBUTES ) )
        {
            searchScope.add( SearchScopeEnum.MANDATORY_ATTRIBUTES );
        }
        if ( settings.getBoolean( PluginConstants.PREFS_SEARCH_PAGE_SCOPE_OPTIONAL_ATTRIBUTES ) )
        {
            searchScope.add( SearchScopeEnum.OPTIONAL_ATTRIBUTES );
        }

        return searchScope;
    }


    /**
     * Saves the Search scope.
     *
     * @param scope
     *      the Search scope
     */
    public static void saveSearchScope( List<SearchScopeEnum> scope )
    {
        if ( ( scope != null ) && ( scope.size() > 0 ) )
        {
            IDialogSettings settings = Activator.getDefault().getDialogSettings();

            settings.put( PluginConstants.PREFS_SEARCH_PAGE_SCOPE_ALIASES, scope.contains( SearchScopeEnum.ALIASES ) );
            settings.put( PluginConstants.PREFS_SEARCH_PAGE_SCOPE_OID, scope.contains( SearchScopeEnum.OID ) );
            settings.put( PluginConstants.PREFS_SEARCH_PAGE_SCOPE_DESCRIPTION, scope
                .contains( SearchScopeEnum.DESCRIPTION ) );
            settings.put( PluginConstants.PREFS_SEARCH_PAGE_SCOPE_SUPERIOR, scope.contains( SearchScopeEnum.SUPERIOR ) );
            settings.put( PluginConstants.PREFS_SEARCH_PAGE_SCOPE_SYNTAX, scope.contains( SearchScopeEnum.SYNTAX ) );
            settings.put( PluginConstants.PREFS_SEARCH_PAGE_SCOPE_MATCHING_RULES, scope
                .contains( SearchScopeEnum.MATCHING_RULES ) );
            settings
                .put( PluginConstants.PREFS_SEARCH_PAGE_SCOPE_SUPERIORS, scope.contains( SearchScopeEnum.SUPERIORS ) );
            settings.put( PluginConstants.PREFS_SEARCH_PAGE_SCOPE_MANDATORY_ATTRIBUTES, scope
                .contains( SearchScopeEnum.MANDATORY_ATTRIBUTES ) );
            settings.put( PluginConstants.PREFS_SEARCH_PAGE_SCOPE_OPTIONAL_ATTRIBUTES, scope
                .contains( SearchScopeEnum.OPTIONAL_ATTRIBUTES ) );
        }
    }


    /**
     * Clears the Search History.
     */
    public static void clearSearchHistory()
    {
        Activator.getDefault().getDialogSettings()
            .put( PluginConstants.PREFS_SEARCH_PAGE_SEARCH_HISTORY, new String[0] );
    }
}
TOP

Related Classes of org.apache.directory.studio.schemaeditor.view.search.SearchPage

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.