/*******************************************************************************
* Copyright (c) 2012 Red Hat, Inc.
* 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
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Red Hat initial API and implementation
*******************************************************************************/
package org.eclipse.linuxtools.internal.profiling.launch.provider;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.Map.Entry;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.IExecutableExtension;
import org.eclipse.core.runtime.preferences.ConfigurationScope;
import org.eclipse.jface.preference.FieldEditorPreferencePage;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.preference.RadioGroupFieldEditor;
import org.eclipse.linuxtools.internal.profiling.launch.provider.launch.Messages;
import org.eclipse.linuxtools.internal.profiling.launch.provider.launch.ProviderFramework;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.preferences.ScopedPreferenceStore;
public class AbstractProviderPreferencesPage extends
FieldEditorPreferencePage implements IWorkbenchPreferencePage, IExecutableExtension {
// Launch provider extension point tool information attribute
private static final String PROVIDER_ATT_INFO = "information"; //$NON-NLS-1$
// Launch provider extension point tool description attribute
private static final String PROVIDER_ATT_DESC = "description"; //$NON-NLS-1$
// Profiling type
private String type;
@Override
public void setInitializationData(IConfigurationElement config,
String propertyName, Object data) {
@SuppressWarnings("unchecked")
Hashtable<String, String> parameters = (Hashtable<String, String>) data;
String profilingType = parameters
.get(ProviderProfileConstants.INIT_DATA_TYPE_KEY);
if (profilingType == null) {
profilingType = ""; //$NON-NLS-1$
}
setProfilingType(profilingType);
}
public AbstractProviderPreferencesPage() {
super(GRID);
}
@Override
public void init(IWorkbench workbench) {
final IPreferenceStore store = new ScopedPreferenceStore(
ConfigurationScope.INSTANCE, ProviderProfileConstants.PLUGIN_ID);
setPreferenceStore(store);
}
public void initializeDefaultPreferences() {
super.performDefaults();
String providerId = ProviderFramework
.getHighestProviderId(type);
ConfigurationScope.INSTANCE.getNode(ProviderProfileConstants.PLUGIN_ID)
.put(ProviderProfileConstants.PREFS_KEY + type, providerId);
}
@Override
protected Control createContents(Composite parent) {
PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, getHelpContextId());
return super.createContents(parent);
}
@Override
protected void createFieldEditors() {
String providerId = ProviderFramework.getHighestProviderId(type);
if (providerId != null) {
getPreferenceStore().setDefault(
ProviderProfileConstants.PREFS_KEY + type, providerId);
}
HashMap<String, String> map = ProviderFramework
.getProviderNamesForType(type);
// 2d array containing launch provider names on the first column and
// corresponding id's on the second.
String[][] providerList = new String[map.size()][2];
int i = 0;
for (Entry<String, String> entry : map.entrySet()) {
String toolId = entry.getValue();
String toolDescription = ProviderFramework.getToolInformationFromId(toolId, PROVIDER_ATT_DESC);
String toolName = entry.getKey();
// Append tool description to tool name if available.
if (toolDescription != null && !toolDescription.equals("")) { //$NON-NLS-1$
toolName = toolName + " " + "[" + toolDescription + "]"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
providerList[i][0] = toolName;
providerList[i][1] = toolId;
i++;
}
// Create basic field editor.
RadioGroupFieldEditor editor = new RadioGroupFieldEditor(
ProviderProfileConstants.PREFS_KEY + type,
Messages.ProviderPreferencesPage_1, 1, providerList,
getFieldEditorParent(), true);
editor.setPreferenceStore(getPreferenceStore());
addField(editor);
Composite radioBoxControl = editor
.getRadioBoxControl(getFieldEditorParent());
Control[] providerOptions = radioBoxControl.getChildren();
// Set tool tip text on field editors.
for (Control control : providerOptions) {
// Get tool specific information from provider id.
String curProviderId = (String) control.getData();
// Set tool tip description text.
String toolDescription = ProviderFramework.getToolInformationFromId(curProviderId,
PROVIDER_ATT_INFO);
if (toolDescription != null && !toolDescription.equals("")) { //$NON-NLS-1$
control.setToolTipText(toolDescription);
}
}
}
/**
* Return the help context id to use if the help button is pushed.
*
* @return the help context id
*/
private String getHelpContextId() {
return ProviderProfileConstants.PLUGIN_ID + ".profiling_categories"; //$NON-NLS-1$
}
/**
* Set profiling type.
*
* @param profilingType String profiling type.
*/
private void setProfilingType(String profilingType) {
type = profilingType;
}
}