package org.testng.eclipse.maven;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.ProjectScope;
import org.eclipse.core.runtime.preferences.DefaultScope;
import org.eclipse.core.runtime.preferences.IEclipsePreferences;
import org.eclipse.core.runtime.preferences.IScopeContext;
import org.eclipse.core.runtime.preferences.InstanceScope;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.osgi.service.prefs.BackingStoreException;
public abstract class OptionsConfigurationBlock {
public static final class Key {
private String fQualifier;
private String fKey;
public Key(String qualifier, String key) {
fQualifier = qualifier;
fKey = key;
}
public String getName() {
return fKey;
}
private IEclipsePreferences getNode(IScopeContext context) {
return context.getNode(fQualifier);
}
public String getStoredValue(IScopeContext context) {
return getNode(context).get(fKey, null);
}
public String getStoredValue(IScopeContext[] lookupOrder, boolean ignoreTopScope) {
for (int i = ignoreTopScope ? 1 : 0; i < lookupOrder.length; i++) {
String value = getStoredValue(lookupOrder[i]);
if (value != null) {
return value;
}
}
return null;
}
public void setStoredValue(IScopeContext context, String value) {
IEclipsePreferences preference = getNode(context);
if (value != null) {
preference.put(fKey, value);
} else {
preference.remove(fKey);
}
// Dump changes
try {
preference.flush();
} catch (BackingStoreException e) {
// problem with pref store - quietly ignore
}
}
public String toString() {
return fQualifier + '/' + fKey;
}
public String getQualifier() {
return fQualifier;
}
}
private IScopeContext[] fLookupOrder;
protected final IProject fProject;
protected OptionsConfigurationBlock(IProject project) {
fProject = project;
if (fProject != null) {
fLookupOrder = new IScopeContext[] { new ProjectScope(fProject), InstanceScope.INSTANCE, DefaultScope.INSTANCE };
} else {
fLookupOrder = new IScopeContext[] { InstanceScope.INSTANCE, DefaultScope.INSTANCE };
}
}
protected String getValue(Key key) {
return key.getStoredValue(fLookupOrder, false);
}
protected boolean getBooleanValue(Key key) {
return Boolean.valueOf(getValue(key)).booleanValue();
}
protected String setValue(Key key, String value) {
String oldValue = getValue(key);
key.setStoredValue(fLookupOrder[0], value);
return oldValue;
}
protected String setValue(Key key, boolean value) {
return setValue(key, String.valueOf(value));
}
public static Key getKey(String key) {
return new Key(Activator.PLUGIN_ID, key);
}
public boolean hasProjectSpecificOptions(IProject project) {
if (project != null) {
String val = getValue(getKey(Activator.PREF_USE_PROJECT_SETTINGS));
if (val != null) {
return Boolean.parseBoolean(val);
}
return false;
}
return false;
}
public void useProjectSpecificSettings(boolean useProjectSpecificSettings) {
if (fProject != null) {
setValue(getKey(Activator.PREF_USE_PROJECT_SETTINGS), useProjectSpecificSettings);
}
}
protected abstract Control createContents(Composite parent);
public boolean performOk() {
return true;
}
public boolean performDefaults() {
return true;
}
public boolean performApply() {
return performOk();
}
}