package net.sourceforge.pmd.eclipse.ui.priority; import java.io.PrintStream; import java.util.HashMap; import java.util.Map; import net.sourceforge.pmd.RulePriority; import net.sourceforge.pmd.eclipse.plugin.PMDPlugin; import net.sourceforge.pmd.eclipse.plugin.UISettings; import net.sourceforge.pmd.eclipse.runtime.preferences.IPreferences; import net.sourceforge.pmd.eclipse.runtime.preferences.IPreferencesManager; /** * * @author Brian Remedios */ public class PriorityDescriptorCache { private Map <RulePriority, PriorityDescriptor> uiDescriptorsByPriority; public static final PriorityDescriptorCache instance = new PriorityDescriptorCache(); private PriorityDescriptorCache() { uiDescriptorsByPriority = new HashMap<RulePriority, PriorityDescriptor>(5); loadFromPreferences(); } private IPreferencesManager preferencesManager() { return PMDPlugin.getDefault().getPreferencesManager(); } public void dumpTo(PrintStream out) { for (Map.Entry<RulePriority, PriorityDescriptor> entry : uiDescriptorsByPriority.entrySet()) { out.println(entry.getKey() +" : " + entry.getValue()); } } public void loadFromPreferences() { IPreferences preferences = preferencesManager().loadPreferences(); for (RulePriority rp : UISettings.currentPriorities(true)) { uiDescriptorsByPriority.put(rp, preferences.getPriorityDescriptor(rp).clone()); } } public void storeInPreferences() { IPreferencesManager mgr = preferencesManager(); IPreferences prefs = mgr.loadPreferences(); for (Map.Entry<RulePriority, PriorityDescriptor> entry : uiDescriptorsByPriority.entrySet()) { prefs.setPriorityDescriptor(entry.getKey(), entry.getValue()); } mgr.storePreferences(prefs); } public PriorityDescriptor descriptorFor(RulePriority priority) { return uiDescriptorsByPriority.get(priority); } public boolean hasChanges() { IPreferences preferences = preferencesManager().reloadPreferences(); for (RulePriority rp : UISettings.currentPriorities(true)) { PriorityDescriptor newOne = uiDescriptorsByPriority.get(rp); PriorityDescriptor currentOne = preferences.getPriorityDescriptor(rp); if (newOne.equals(currentOne)) continue; return true; } return false; } }