package net.jeeeyul.eclipse.themes.ui.preference.internal;
import java.lang.reflect.Field;
import net.jeeeyul.eclipse.themes.ui.preference.JTPConstants;
import net.jeeeyul.eclipse.themes.ui.preference.annotations.PresetCategory;
import net.jeeeyul.swtend.ui.Gradient;
import net.jeeeyul.swtend.ui.HSB;
/**
* Filter that accepts key files in {@link JTPConstants}.
*
* @see JTPUtil#listPreferenceKeys(IPreferenceFilter)
*
* @author Jeeeyul
*/
public interface IPreferenceFilter {
/**
* A filter that matches only categories for theme preset.
*/
public static final IPreferenceFilter FILTER_PRESET = new IPreferenceFilter() {
@Override
public boolean acceptCategory(Class<?> category) {
return category.getAnnotation(PresetCategory.class) != null;
}
@Override
public boolean acceptKey(Field field) {
return true;
}
@Override
public IPreferenceFilter chain(IPreferenceFilter other) {
return new CompoundPreferenceFilter(this, other);
}
};
/**
* A filter that matches every category and field.
*/
public static final IPreferenceFilter FILTER_ALL = new IPreferenceFilter() {
@Override
public boolean acceptCategory(Class<?> category) {
return true;
}
@Override
public boolean acceptKey(Field field) {
return true;
}
@Override
public IPreferenceFilter chain(IPreferenceFilter other) {
return new CompoundPreferenceFilter(this, other);
}
};
/**
*
*/
public static final IPreferenceFilter GRADIENT_TYPE_FILTER = new TypeFilter(Gradient.class);
/**
*
*/
public static final IPreferenceFilter HSB_TYPE_FILTER = new TypeFilter(HSB.class);
/**
* @param category
* category interface.
* @return <code>true</code> if accept category interface.
*/
public boolean acceptCategory(Class<?> category);
/**
*
* @param field
* filed that contains key to test.
* @return <code>true</code> if accept given field.
*/
public boolean acceptKey(Field field);
/**
* @param other
* @return chained {@link IPreferenceFilter}
*/
public IPreferenceFilter chain(IPreferenceFilter other);
}