blob: 9cb88b8b86e05d49439744de30a2b53864ff528a [file] [log] [blame]
/**********************************************************************
* Copyright (c) 2017 Ericsson
*
* All rights reserved. This program and the accompanying materials are
* made available under the terms of the Eclipse Public License 2.0 which
* accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
**********************************************************************/
package org.eclipse.tracecompass.tmf.core.project.model;
import java.util.List;
import org.eclipse.core.runtime.preferences.ConfigurationScope;
import org.eclipse.core.runtime.preferences.IEclipsePreferences;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.tracecompass.internal.tmf.core.Activator;
import org.osgi.service.prefs.BackingStoreException;
import com.google.common.base.Joiner;
import com.google.common.base.Splitter;
import com.google.common.collect.Lists;
/**
* Singleton class to access the trace type preferences of Trace Compass. The
* trace type preferences is a blacklist preference of disabled trace types.
*
* @author Jean-Christian Kouame
* @since 3.0
*/
public final class TraceTypePreferences {
private static final String SEPARATOR = "::"; //$NON-NLS-1$
/**
* The key for trace type preferences
*/
public static final String TRACE_TYPE_PREFERENCE_KEY = "org.eclipse.tracecompass.tmf.core.prefs.traceType"; //$NON-NLS-1$
private static final String INITIAL_TIME_RANGE_PREFERENCE_KEY = "org.eclipse.tracecompass.tmf.core.prefs.traceType.initial.range"; //$NON-NLS-1$
/**
* Initialize the trace type preferences
*/
public static void init() {
IEclipsePreferences configurationPreferences = getEclipsePreference();
try {
configurationPreferences.put(TRACE_TYPE_PREFERENCE_KEY, configurationPreferences.get(TRACE_TYPE_PREFERENCE_KEY, getDefaultValue()));
configurationPreferences.flush();
} catch (BackingStoreException e) {
Activator.logError("Failed to initialize trace type preferences", e); //$NON-NLS-1$
}
}
private static String getDefaultValue() {
return Joiner.on(SEPARATOR).join(new @NonNull String[] {});
}
/**
* Update the trace type preference value. The value stored is the list of
* disabled trace types.
*
* @param disabled
* The list of disabled trace type ids in the preference page
*/
public static void setPreferenceValue(List<@NonNull String> disabled) {
try {
IEclipsePreferences configurationPreferences = getEclipsePreference();
TmfTraceType.getTraceTypeHelpers().forEach(helper -> {
if (!helper.isExperimentType()) {
helper.setEnabled(!disabled.contains(helper.getTraceTypeId()));
}
});
String value = Joiner.on(SEPARATOR).join(disabled);
configurationPreferences.put(TraceTypePreferences.TRACE_TYPE_PREFERENCE_KEY, value);
configurationPreferences.flush();
} catch (BackingStoreException e) {
Activator.logError("Failed to set the trace type preferences", e); //$NON-NLS-1$
}
}
private static IEclipsePreferences getEclipsePreference() {
IEclipsePreferences configurationPreferences = ConfigurationScope.INSTANCE.getNode(Activator.PLUGIN_ID);
return configurationPreferences;
}
/**
* Get the Initial time range
*
* @param traceType
* the trace type
* @param defaultValue
* the default value
* @return the time range in ns
* @since 4.2
*/
public static long getInitialTimeRange(String traceType, long defaultValue) {
IEclipsePreferences configurationPreferences = getEclipsePreference();
return configurationPreferences.getLong(getTracePreferenceKey(traceType), defaultValue);
}
/**
* Set the Initial time range
*
* @param traceType
* the trace type
* @param value
* the time range in ns
* @since 4.2
*/
public static void setInitialTimeRange(String traceType, long value) {
IEclipsePreferences configurationPreferences = getEclipsePreference();
configurationPreferences.putLong(getTracePreferenceKey(traceType), value);
}
/**
* Reset to the default value the Initial time range
*
* @param traceType
* the trace type
* @since 4.2
*/
public static void resetInitialTimeRange(String traceType) {
IEclipsePreferences configurationPreferences = getEclipsePreference();
configurationPreferences.remove(getTracePreferenceKey(traceType));
}
private static String getTracePreferenceKey(String traceType) {
return TraceTypePreferences.INITIAL_TIME_RANGE_PREFERENCE_KEY + '.' + traceType;
}
/**
* Get the preference value for the trace types
*
* @return The list of disabled trace types
*/
public static List<String> getPreferenceValue() {
IEclipsePreferences configurationPreferences = getEclipsePreference();
String joined = configurationPreferences.get(TraceTypePreferences.TRACE_TYPE_PREFERENCE_KEY, getDefaultValue());
Iterable<String> disabled = Splitter.on(SEPARATOR).split(joined);
return Lists.newArrayList(disabled);
}
}