summaryrefslogtreecommitdiffstats
path: root/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/internal/core/CodanPreferencesLoader.java
diff options
context:
space:
mode:
Diffstat (limited to 'org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/internal/core/CodanPreferencesLoader.java')
-rw-r--r--org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/internal/core/CodanPreferencesLoader.java140
1 files changed, 115 insertions, 25 deletions
diff --git a/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/internal/core/CodanPreferencesLoader.java b/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/internal/core/CodanPreferencesLoader.java
index bafff9a..38af027 100644
--- a/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/internal/core/CodanPreferencesLoader.java
+++ b/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/internal/core/CodanPreferencesLoader.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2009 Alena Laskavaia
+ * Copyright (c) 2009, 2010 Alena Laskavaia
* 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
@@ -10,38 +10,50 @@
*******************************************************************************/
package org.eclipse.cdt.codan.internal.core;
+import org.eclipse.cdt.codan.core.CodanCorePlugin;
import org.eclipse.cdt.codan.core.model.CodanSeverity;
import org.eclipse.cdt.codan.core.model.IProblem;
import org.eclipse.cdt.codan.core.model.IProblemProfile;
-import org.eclipse.cdt.codan.internal.core.model.CodanProblem;
-import org.eclipse.core.runtime.preferences.IEclipsePreferences;
+import org.eclipse.cdt.codan.core.model.IProblemWorkingCopy;
+import org.eclipse.cdt.codan.core.param.IProblemPreference;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.ProjectScope;
+import org.eclipse.core.runtime.preferences.InstanceScope;
+import org.osgi.service.prefs.Preferences;
/**
- * @author Alena
+ * Helper class to load/save problem profile settings in persistent storage
*
*/
public class CodanPreferencesLoader {
private IProblemProfile baseModel;
/**
- * @param workspaceProfile
+ * Constructor
+ *
+ * @param profile - problem profile to work with
*/
public CodanPreferencesLoader(IProblemProfile profile) {
setInput(profile);
}
/**
- *
+ * Default constructor
*/
public CodanPreferencesLoader() {
}
- public void setInput(Object model) {
- baseModel = (IProblemProfile) model;
+ /**
+ * Sets the profile for this class
+ *
+ * @param profile
+ */
+ public void setInput(IProblemProfile profile) {
+ baseModel = profile;
}
/**
- * @return
+ * @return problems array from the profile
*/
public IProblem[] getProblems() {
IProblem[] problems = baseModel.getProblems();
@@ -54,66 +66,144 @@ public class CodanPreferencesLoader {
*/
public void setProperty(String id, String s) {
IProblem prob = baseModel.findProblem(id);
- if (!(prob instanceof CodanProblem))
+ if (!(prob instanceof IProblemWorkingCopy))
return;
String sevs = s;
boolean enabled = true;
- if (sevs.startsWith("-")) {
+ if (sevs.startsWith("-")) { //$NON-NLS-1$
sevs = sevs.substring(1);
enabled = false;
}
- ((CodanProblem) prob).setEnabled(enabled);
+ ((IProblemWorkingCopy) prob).setEnabled(enabled);
CodanSeverity sev;
try {
sev = CodanSeverity.valueOf(sevs);
} catch (RuntimeException e) {
sev = CodanSeverity.Warning;
}
- ((CodanProblem) prob).setSeverity(sev);
+ ((IProblemWorkingCopy) prob).setSeverity(sev);
}
- /*
- * (non-Javadoc)
- *
- * @see java.lang.Object#toString()
- */
@Override
public String toString() {
return getInput().toString();
}
/**
- * @return
+ * @return problem profile set for this class
*/
public IProblemProfile getInput() {
return baseModel;
}
/**
- * @param id
- * @return
+ * @param id - property id, which is the same as problem id
+ * @return get text representation of a "property" value for the given id,
+ * which is severity name, with "-" in front of it it problem is
+ * disabled.
*/
public String getProperty(String id) {
IProblem prob = baseModel.findProblem(id);
- if (!(prob instanceof CodanProblem))
- return null;
- String enabled = prob.isEnabled() ? "" : "-";
+ String enabled = prob.isEnabled() ? "" : "-"; //$NON-NLS-1$ //$NON-NLS-2$
String severity = prob.getSeverity().toString();
String res = enabled + severity;
return res;
}
/**
+ * Takes string values from storePreferences and applies them to the problem
+ * profile
+ *
* @param storePreferences
*/
- public void load(IEclipsePreferences storePreferences) {
+ public void load(Preferences storePreferences) {
IProblem[] probs = getProblems();
for (int i = 0; i < probs.length; i++) {
String id = probs[i].getId();
String s = storePreferences.get(id, null);
if (s != null) {
setProperty(id, s);
+ setProblemPreferenceValues(id, storePreferences);
}
}
}
+
+ /**
+ * Takes string values of the problem preferences from storePreferences
+ * and applies them to the problem profile
+ *
+ * @param problemId
+ * @param storePreferences
+ */
+ private void setProblemPreferenceValues(String problemId,
+ Preferences storePreferences) {
+ IProblem prob = baseModel.findProblem(problemId);
+ String prefKey = getPreferencesKey(problemId);
+ if (prefKey == null)
+ return;
+ String exported = storePreferences.get(prefKey, null);
+ if (exported != null) {
+ //System.err.println(prefKey + " import " + exported);
+ prob.getPreference().importValue(exported);
+ }
+ }
+
+ /**
+ * Return preference node (osgi preferences) for the project
+ *
+ * @param project
+ * @return project preferences node
+ */
+ public static Preferences getProjectNode(IProject project) {
+ if (!project.exists())
+ return null;
+ Preferences prefNode = new ProjectScope(project)
+ .getNode(CodanCorePlugin.PLUGIN_ID);
+ if (prefNode == null)
+ return null;
+ return prefNode;
+ }
+
+ /**
+ * Return preference node (osgi preferences) for the workspace
+ *
+ * @return project preferences node
+ */
+ public static Preferences getWorkspaceNode() {
+ Preferences prefNode = new InstanceScope()
+ .getNode(CodanCorePlugin.PLUGIN_ID);
+ if (prefNode == null)
+ return null;
+ return prefNode;
+ }
+
+ /**
+ * Name of the preference key for the root problem preference in the osgi
+ * preferences
+ *
+ * @param id - problem id
+ * @return top level preference id
+ */
+ public String getPreferencesKey(String id) {
+ IProblem prob = baseModel.findProblem(id);
+ IProblemPreference pref = prob.getPreference();
+ if (pref == null)
+ return null;
+ return id + "." + pref.getKey(); //$NON-NLS-1$
+ }
+
+ /**
+ * @param id - problem id
+ * @return - export value of root problem preference (to be saved in eclipse
+ * preferences)
+ */
+ public String getPreferencesString(String id) {
+ IProblem prob = baseModel.findProblem(id);
+ IProblemPreference pref = prob.getPreference();
+ if (pref == null)
+ return null;
+ String str = pref.exportValue();
+ //System.err.println(id + " set " + str);
+ return str;
+ }
}