package net.sourceforge.pmd.eclipse.runtime.preferences.impl;
import java.io.IOException;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;
import net.sourceforge.pmd.eclipse.plugin.PMDPlugin;
import net.sourceforge.pmd.eclipse.ui.preferences.br.RuleColumnDescriptor;
import net.sourceforge.pmd.eclipse.ui.preferences.br.RuleTableColumns;
import net.sourceforge.pmd.eclipse.ui.preferences.editors.SWTUtil;
import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.IPath;
import org.eclipse.jface.preference.PreferenceStore;
/**
*
*
* @author Brian Remedios
*/
public class PreferenceUIStore {
private PreferenceStore preferenceStore;
private static final String tableFraction = PMDPlugin.PLUGIN_ID + ".ruletable.fraction";
private static final String tableHiddenCols = PMDPlugin.PLUGIN_ID + ".ruletable.hiddenColumns";
private static final String tableColumnSortUp = PMDPlugin.PLUGIN_ID + ".ruletable.sortUp";
private static final String groupingColumn = PMDPlugin.PLUGIN_ID + ".ruletable.groupingColumn";
private static final String selectedRuleNames = PMDPlugin.PLUGIN_ID + ".ruletable.selectedRules";
private static final String selectedPropertyTab = PMDPlugin.PLUGIN_ID + ".ruletable.selectedPropertyTab";
private static final String globalRuleManagement = PMDPlugin.PLUGIN_ID + ".globalRuleManagement";
private static final int tableFractionDefault = 55;
private static final char stringSeparator = ',';
private static final RuleColumnDescriptor[] defaultHiddenColumns = new RuleColumnDescriptor[] {
RuleTableColumns.externalURL, RuleTableColumns.minLangVers, RuleTableColumns.fixCount,
RuleTableColumns.exampleCount, RuleTableColumns.maxLangVers, RuleTableColumns.since,
RuleTableColumns.modCount
};
private static final boolean defaultSortUp = false;
public static final PreferenceUIStore instance = new PreferenceUIStore();
private PreferenceUIStore() {
initialize();
}
private static String defaultHiddenColumnIds() {
Set<String> colNames = new HashSet<String>(defaultHiddenColumns.length);
for (RuleColumnDescriptor rcDesc : defaultHiddenColumns) {
colNames.add(rcDesc.id());
}
return SWTUtil.asString(colNames, stringSeparator);
}
private void initialize() {
IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
IPath path = root.getLocation();
String fileName = path.append(PreferencesManagerImpl.NEW_PREFERENCE_LOCATION).toString();
// TODO - replace this with the existing ViewMemento
preferenceStore = new PreferenceStore(fileName);
preferenceStore.setDefault(globalRuleManagement, false);
try {
preferenceStore.load();
} catch (IOException e) {
createNewStore();
}
}
private void createNewStore() {
preferenceStore.setValue(tableFraction, tableFractionDefault);
preferenceStore.setValue(tableHiddenCols, defaultHiddenColumnIds());
preferenceStore.setValue(tableColumnSortUp, defaultSortUp);
preferenceStore.setValue(groupingColumn, "");
preferenceStore.setValue(selectedRuleNames, "");
preferenceStore.setValue(selectedPropertyTab, 0);
preferenceStore.setValue(globalRuleManagement, false);
save();
}
public void save() {
try {
preferenceStore.save();
} catch (IOException e) {
e.printStackTrace();
}
}
public int tableFraction() {
return preferenceStore.getInt(tableFraction);
}
public void tableFraction(int aFraction) {
preferenceStore.setValue(tableFraction, aFraction);
}
public Set<String> hiddenColumnIds() {
String names = preferenceStore.getString(tableHiddenCols);
return SWTUtil.asStringSet(names, stringSeparator);
}
public void hiddenColumnIds(Set<String> names) {
String nameStr = SWTUtil.asString(names, stringSeparator);
preferenceStore.setValue(tableHiddenCols, nameStr);
}
public int selectedPropertyTab() {
return preferenceStore.getInt(selectedPropertyTab);
}
public void selectedPropertyTab(int anIndex) {
preferenceStore.setValue(selectedPropertyTab, anIndex);
}
public boolean globalRuleManagement() {
return preferenceStore.getBoolean(globalRuleManagement);
}
public void globalRuleManagement(boolean b) {
preferenceStore.setValue(globalRuleManagement, b);
}
public Set<String> selectedRuleNames() {
String names = preferenceStore.getString(selectedRuleNames);
return SWTUtil.asStringSet(names, stringSeparator);
}
public void selectedRuleNames(Collection<String> ruleNames) {
String nameStr = SWTUtil.asString(ruleNames, stringSeparator);
preferenceStore.setValue(selectedRuleNames, nameStr);
}
public boolean sortDirectionUp() {
return preferenceStore.getBoolean(tableColumnSortUp);
}
public void sortDirectionUp(boolean isUp) {
preferenceStore.setValue(tableColumnSortUp, isUp);
}
public String groupingColumnName() {
return preferenceStore.getString(groupingColumn);
}
public void groupingColumnName(String columnName) {
preferenceStore.setValue(groupingColumn, columnName);
}
}