/*
* 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.controller;
import java.util.ArrayList;
import java.util.List;
import org.apache.directory.studio.schemaeditor.Activator;
import org.apache.directory.studio.schemaeditor.PluginConstants;
import org.apache.directory.studio.schemaeditor.controller.actions.OpenSearchViewPreferenceAction;
import org.apache.directory.studio.schemaeditor.controller.actions.OpenSearchViewSortingDialogAction;
import org.apache.directory.studio.schemaeditor.controller.actions.RunCurrentSearchAgainAction;
import org.apache.directory.studio.schemaeditor.controller.actions.ShowSearchFieldAction;
import org.apache.directory.studio.schemaeditor.controller.actions.ShowSearchHistoryAction;
import org.apache.directory.studio.schemaeditor.view.views.SearchView;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.action.Separator;
import org.eclipse.jface.util.IPropertyChangeListener;
import org.eclipse.jface.util.PropertyChangeEvent;
/**
* This class implements the Controller for the SearchView.
*
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
*/
public class SearchViewController
{
/** The associated view */
private SearchView view;
/** The authorized Preferences keys*/
private List<String> authorizedPrefs;
// The Actions
private ShowSearchFieldAction showSearchField;
private RunCurrentSearchAgainAction runCurrentSearchAgain;
private ShowSearchHistoryAction searchHistory;
private OpenSearchViewSortingDialogAction openSearchViewSortingDialog;
private OpenSearchViewPreferenceAction openSearchViewPreference;
/**
* Creates a new instance of SearchViewController.
*
* @param view
* the associated view
*/
public SearchViewController( SearchView view )
{
this.view = view;
initActions();
initToolbar();
initMenu();
initAuthorizedPrefs();
initPreferencesListener();
}
/**
* Initializes the Actions.
*/
private void initActions()
{
showSearchField = new ShowSearchFieldAction( view );
runCurrentSearchAgain = new RunCurrentSearchAgainAction( view );
searchHistory = new ShowSearchHistoryAction( view );
openSearchViewSortingDialog = new OpenSearchViewSortingDialogAction();
openSearchViewPreference = new OpenSearchViewPreferenceAction();
}
/**
* Initializes the Toolbar.
*/
private void initToolbar()
{
IToolBarManager toolbar = view.getViewSite().getActionBars().getToolBarManager();
toolbar.add( showSearchField );
toolbar.add( new Separator() );
toolbar.add( runCurrentSearchAgain );
toolbar.add( searchHistory );
}
/**
* Initializes the Menu.
*/
private void initMenu()
{
IMenuManager menu = view.getViewSite().getActionBars().getMenuManager();
menu.add( openSearchViewSortingDialog );
menu.add( new Separator() );
menu.add( openSearchViewPreference );
}
/**
* Initializes the Authorized Prefs IDs.
*/
private void initAuthorizedPrefs()
{
authorizedPrefs = new ArrayList<String>();
authorizedPrefs.add( PluginConstants.PREFS_SEARCH_VIEW_LABEL );
authorizedPrefs.add( PluginConstants.PREFS_SEARCH_VIEW_ABBREVIATE );
authorizedPrefs.add( PluginConstants.PREFS_SEARCH_VIEW_ABBREVIATE_MAX_LENGTH );
authorizedPrefs.add( PluginConstants.PREFS_SEARCH_VIEW_SECONDARY_LABEL_DISPLAY );
authorizedPrefs.add( PluginConstants.PREFS_SEARCH_VIEW_SECONDARY_LABEL );
authorizedPrefs.add( PluginConstants.PREFS_SEARCH_VIEW_SECONDARY_LABEL_ABBREVIATE );
authorizedPrefs.add( PluginConstants.PREFS_SEARCH_VIEW_SECONDARY_LABEL_ABBREVIATE_MAX_LENGTH );
authorizedPrefs.add( PluginConstants.PREFS_SEARCH_VIEW_SCHEMA_LABEL_DISPLAY );
authorizedPrefs.add( PluginConstants.PREFS_SEARCH_VIEW_GROUPING );
authorizedPrefs.add( PluginConstants.PREFS_SEARCH_VIEW_SORTING_BY );
authorizedPrefs.add( PluginConstants.PREFS_SEARCH_VIEW_SORTING_ORDER );
}
/**
* Initializes the listener on the preferences store
*/
private void initPreferencesListener()
{
Activator.getDefault().getPreferenceStore().addPropertyChangeListener( new IPropertyChangeListener()
{
/**
* {@inheritDoc}
*/
public void propertyChange( PropertyChangeEvent event )
{
if ( authorizedPrefs.contains( event.getProperty() ) )
{
view.refresh();
}
}
} );
}
}