/*
* JBoss, Home of Professional Open Source.
*
* See the LEGAL.txt file distributed with this work for information regarding copyright ownership and licensing.
*
* See the AUTHORS.txt file distributed with this work for a full listing of individual contributors.
*/
package org.teiid.designer.ui.actions;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.dialogs.MessageDialogWithToggle;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.viewers.ContentViewer;
import org.teiid.core.designer.util.CoreStringUtil;
import org.teiid.core.designer.util.I18nUtil;
import org.teiid.designer.ui.PluginConstants;
import org.teiid.designer.ui.UiConstants;
import org.teiid.designer.ui.UiPlugin;
import org.teiid.designer.ui.explorer.ModelExplorerContentProvider;
/**
* An action that sorts {@link org.eclipse.jface.viewers.ContentViewer}s that use
* a {@link org.teiid.designer.ui.explorer.ModelExplorerContentProvider}.
* @since 8.0
*/
public final class SortModelContentsAction extends Action
implements UiConstants {
///////////////////////////////////////////////////////////////////////////////////////////////
// FIELDS
///////////////////////////////////////////////////////////////////////////////////////////////
private ContentViewer viewer;
///////////////////////////////////////////////////////////////////////////////////////////////
// CONSTRUCTORS
///////////////////////////////////////////////////////////////////////////////////////////////
/**
* Constructs a <code>SortModelContentsAction</code>.
* @param theViewer the viewer being sorted
*/
public SortModelContentsAction(ContentViewer theViewer) {
this.viewer = theViewer;
final String PREFIX = I18nUtil.getPropertyPrefix(getClass());
setImageDescriptor(UiPlugin.getDefault().getImageDescriptor(PluginConstants.Images.ALPHA_SORT_ICON));
setToolTipText(Util.getString(PREFIX + "tooltip")); //$NON-NLS-1$
setText(Util.getString(PREFIX + "text")); //$NON-NLS-1$
setId("modelExplorerResourceNavigator.sortModelContentsAction"); //$NON-NLS-1$
setInitialState();
}
///////////////////////////////////////////////////////////////////////////////////////////////
// METHODS
///////////////////////////////////////////////////////////////////////////////////////////////
/**
* Sets initial checked state by using the preference value.
*/
private void setInitialState() {
boolean sorting = false;
String pref = getPreferenceStore().getString(PluginConstants.Prefs.General.SORT_MODEL_CONTENTS);
if (!CoreStringUtil.isEmpty(pref) && pref.equals(MessageDialogWithToggle.ALWAYS)) {
sorting = true;
}
setChecked(sorting);
}
/**
* Obtains the <code>IPreferenceStore</code> used to store the backing preference.
* @return the preference store
* @since 4.4
*/
private IPreferenceStore getPreferenceStore() {
return UiPlugin.getDefault().getPreferenceStore();
}
/**
* @see org.eclipse.jface.action.Action#setChecked(boolean)
* @since 4.4
*/
@Override
public void setChecked(boolean theCheckedFlag) {
super.setChecked(theCheckedFlag);
// set preference
getPreferenceStore().setValue(PluginConstants.Prefs.General.SORT_MODEL_CONTENTS,
(theCheckedFlag ? MessageDialogWithToggle.ALWAYS : MessageDialogWithToggle.NEVER));
if (this.viewer.getContentProvider() instanceof ModelExplorerContentProvider) {
((ModelExplorerContentProvider)this.viewer.getContentProvider()).setEnableModelSorting(theCheckedFlag);
// refresh viewer so that it will sort/unsort
this.viewer.refresh();
}
}
}