/******************************************************************************* * Copyright (c) Gil Barash - chookapp@yahoo.com * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Gil Barash - initial API and implementation *******************************************************************************/ package com.chookapp.org.bracketeer.commands; import java.util.Iterator; import java.util.Map; import java.util.Set; import org.eclipse.core.commands.State; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IConfigurationElement; import org.eclipse.core.runtime.IExecutableExtension; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.util.IPropertyChangeListener; import org.eclipse.jface.util.PropertyChangeEvent; import org.eclipse.ui.ISourceProvider; import org.eclipse.ui.ISourceProviderListener; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.services.ISourceProviderService; import com.chookapp.org.bracketeer.Activator; import com.chookapp.org.bracketeer.preferences.PreferencesConstants; public class BracketeerToggleState extends State implements IPropertyChangeListener, IExecutableExtension, ISourceProviderListener { private String _attrName; private String _attrSuffix; private IPreferenceStore _store; public final static String STATE_ID = "org.eclipse.ui.commands.toggleState"; //$NON-NLS-1$ public BracketeerToggleState() { _attrName = null; _store = Activator.getDefault().getPreferenceStore(); _store.addPropertyChangeListener(this); ISourceProviderService srcService = (ISourceProviderService) PlatformUI.getWorkbench().getService(ISourceProviderService.class); ISourceProvider src = srcService.getSourceProvider(SourceProvider.PLUGIN_NAME); if( src == null ) Activator.log(Messages.BracketeerToggleState_SrcProviderNotFound); else src.addSourceProviderListener(this); super.setValue(false); } @Override public void propertyChange(PropertyChangeEvent event) { if( _attrName == null ) return; if( !event.getProperty().equals(_attrName) ) return; setValue(_store.getBoolean(_attrName)); } @Override public void setValue(Object value) { if (!(value instanceof Boolean)) { throw new IllegalArgumentException( "ToggleState takes a Boolean as a value"); //$NON-NLS-1$ } if( _attrName == null ) throw new IllegalStateException(Messages.BracketeerToggleState_ErrAttrName); _store.setValue(_attrName, (Boolean) value); super.setValue(value); } @Override public void setInitializationData(IConfigurationElement config, String propertyName, Object data) throws CoreException { if( data == null || !(data instanceof String)) throw new IllegalArgumentException(Messages.BracketeerToggleState_ErrAttrSuffix); _attrSuffix = (String) data; } @SuppressWarnings("rawtypes") @Override public void sourceChanged(int sourcePriority, Map sourceValuesByName) { Set set = sourceValuesByName.entrySet(); for (Iterator it = set.iterator(); it.hasNext();) { @SuppressWarnings("unchecked") Map.Entry<String, Object> entry = (Map.Entry<String, Object>) it.next(); sourceChanged(sourcePriority, entry.getKey(), entry.getValue()); } } @Override public void sourceChanged(int sourcePriority, String sourceName, Object sourceValue) { if( !sourceName.equals(SourceProvider.PLUGIN_NAME) ) return; String processorName = (String) sourceValue; if( processorName == null || processorName.isEmpty()) { _attrName = null; } else { _attrName = PreferencesConstants.preferencePath(processorName) + _attrSuffix; super.setValue(_store.getBoolean(_attrName)); } } }