PreferencePropertyTester.java

package com.codeaffine.extras.jdt.internal.prefs;

import org.eclipse.core.expressions.PropertyTester;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.ui.services.IServiceLocator;

import com.codeaffine.extras.jdt.internal.JDTExtrasPlugin;


public class PreferencePropertyTester extends PropertyTester {

  public static final String ID = "com.codeaffine.extras.jdt.internal.PreferencePropertyTester";
  public static final String NAMESPACE = "com.codeaffine.extras.jdt.internal.PreferenceStore";
  public static final String IS_TRUE = "isTrue";
  public static final String PROP_IS_TRUE = NAMESPACE + "." + IS_TRUE;

  private final IPreferenceStore preferenceStore;

  public PreferencePropertyTester() {
    this( JDTExtrasPlugin.getInstance().getPreferenceStore() );
  }

  public PreferencePropertyTester( IPreferenceStore preferenceStore ) {
    this.preferenceStore = preferenceStore;
  }

  @Override
  public boolean test( Object receiver, String property, Object[] args, Object expectedValue ) {
    boolean result = false;
    if( argumentsValid( receiver, property, args ) ) {
      result = test( args, expectedValue );
    }
    return result;
  }

  private boolean test( Object[] args, Object expectedValue ) {
    return evaluateResult( expectedValue, getPreferenceValue( args ) );
  }

  private static boolean argumentsValid( Object receiver, String property, Object[] args ) {
    return receiver instanceof IServiceLocator
        && IS_TRUE.equals( property )
        && args.length == 1
        && args[ 0 ] instanceof String;
  }

  private boolean getPreferenceValue( Object[] args ) {
    return preferenceStore.getBoolean( ( String )args[ 0 ] );
  }

  private static boolean evaluateResult( Object expectedValue, boolean value ) {
    return expectedValue instanceof Boolean && ( ( Boolean )expectedValue ).booleanValue() == value;
  }
}