/* * Copyright (c) 2004-2011 Marco Maccaferri and others. * 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: * Marco Maccaferri - initial API and implementation */ package org.eclipsetrader.ui.internal.preferences; import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util.HashSet; import java.util.List; import java.util.Set; import org.eclipse.core.runtime.IConfigurationElement; import org.eclipse.core.runtime.IExtensionPoint; import org.eclipse.core.runtime.Platform; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.preference.PreferencePage; import org.eclipse.jface.viewers.ArrayContentProvider; import org.eclipse.jface.viewers.CheckboxTableViewer; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Label; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPreferencePage; import org.eclipsetrader.ui.internal.UIActivator; public class LaunchersPreferences extends PreferencePage implements IWorkbenchPreferencePage { public static final String LAUNCHERS_EXTENSION_ID = "org.eclipsetrader.core.launchers"; CheckboxTableViewer startupLaunchers; Button startAllLaunchers; Button startSelectedLaunchers; CheckboxTableViewer runLaunchers; public LaunchersPreferences() { super("Launchers"); } /* (non-Javadoc) * @see org.eclipse.ui.IWorkbenchPreferencePage#init(org.eclipse.ui.IWorkbench) */ @Override public void init(IWorkbench workbench) { } /* (non-Javadoc) * @see org.eclipse.jface.preference.PreferencePage#createContents(org.eclipse.swt.widgets.Composite) */ @Override protected Control createContents(Composite parent) { Composite content = new Composite(parent, SWT.NONE); GridLayout gridLayout = new GridLayout(); gridLayout.numColumns = 2; gridLayout.marginWidth = gridLayout.marginHeight = 0; content.setLayout(gridLayout); startAllLaunchers = new Button(content, SWT.RADIO); startAllLaunchers.setText("Start All Services"); startAllLaunchers.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false, false, 2, 1)); startAllLaunchers.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { runLaunchers.getControl().setEnabled(startSelectedLaunchers.getSelection()); } }); startSelectedLaunchers = new Button(content, SWT.RADIO); startSelectedLaunchers.setText("Start Services Selected Below"); startSelectedLaunchers.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false, false, 2, 1)); startSelectedLaunchers.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { runLaunchers.getControl().setEnabled(startSelectedLaunchers.getSelection()); } }); runLaunchers = CheckboxTableViewer.newCheckList(content, SWT.BORDER); runLaunchers.getControl().setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false, 2, 1)); ((GridData) runLaunchers.getControl().getLayoutData()).heightHint = convertHeightInCharsToPixels(6); runLaunchers.setContentProvider(new ArrayContentProvider()); runLaunchers.setLabelProvider(new LabelProvider() { @Override public String getText(Object element) { return ((IConfigurationElement) element).getAttribute("name"); } }); Label label = new Label(content, SWT.NONE); label.setText("Services Launched at Startup"); label.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false, false, 2, 1)); startupLaunchers = CheckboxTableViewer.newCheckList(content, SWT.BORDER); startupLaunchers.getControl().setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false, 2, 1)); ((GridData) startupLaunchers.getControl().getLayoutData()).heightHint = convertHeightInCharsToPixels(6); startupLaunchers.setContentProvider(new ArrayContentProvider()); startupLaunchers.setLabelProvider(new LabelProvider() { @Override public String getText(Object element) { return ((IConfigurationElement) element).getAttribute("name"); } }); IExtensionPoint extensionPoint = Platform.getExtensionRegistry().getExtensionPoint(LAUNCHERS_EXTENSION_ID); if (extensionPoint != null) { List<IConfigurationElement> configElements = Arrays.asList(extensionPoint.getConfigurationElements()); Collections.sort(configElements, new Comparator<IConfigurationElement>() { @Override public int compare(IConfigurationElement o1, IConfigurationElement o2) { return o1.getAttribute("name").compareToIgnoreCase(o2.getAttribute("name")); } }); startupLaunchers.setInput(configElements); runLaunchers.setInput(configElements); } performDefaults(); return content; } /* (non-Javadoc) * @see org.eclipse.jface.preference.PreferencePage#performDefaults() */ @Override protected void performDefaults() { IPreferenceStore preferenceStore = getPreferenceStore(); IExtensionPoint extensionPoint = Platform.getExtensionRegistry().getExtensionPoint(LAUNCHERS_EXTENSION_ID); if (extensionPoint != null) { IConfigurationElement[] configElements = extensionPoint.getConfigurationElements(); startupLaunchers.setAllChecked(false); runLaunchers.setAllChecked(false); Set<String> startupSet = new HashSet<String>(Arrays.asList(preferenceStore.getString("STARTUP_LAUNCHERS").split(";"))); Set<String> runSet = new HashSet<String>(Arrays.asList(preferenceStore.getString("RUN_LAUNCHERS").split(";"))); for (int i = 0; i < configElements.length; i++) { String id = configElements[i].getAttribute("id"); if (startupSet.contains(id)) { startupLaunchers.setChecked(configElements[i], true); } if (runSet.contains(id)) { runLaunchers.setChecked(configElements[i], true); } } } startAllLaunchers.setSelection(preferenceStore.getBoolean("RUN_ALL_LAUNCHERS")); startSelectedLaunchers.setSelection(!startAllLaunchers.getSelection()); runLaunchers.getControl().setEnabled(startSelectedLaunchers.getSelection()); super.performDefaults(); } /* (non-Javadoc) * @see org.eclipse.jface.preference.PreferencePage#performOk() */ @Override public boolean performOk() { IPreferenceStore preferenceStore = getPreferenceStore(); StringBuffer sb = new StringBuffer(); Object[] o = startupLaunchers.getCheckedElements(); for (int i = 0; i < o.length; i++) { String id = ((IConfigurationElement) o[i]).getAttribute("id"); if (i != 0) { sb.append(";"); } sb.append(id); } preferenceStore.setValue("STARTUP_LAUNCHERS", sb.toString()); sb = new StringBuffer(); o = runLaunchers.getCheckedElements(); for (int i = 0; i < o.length; i++) { String id = ((IConfigurationElement) o[i]).getAttribute("id"); if (i != 0) { sb.append(";"); } sb.append(id); } preferenceStore.setValue("RUN_LAUNCHERS", sb.toString()); preferenceStore.setValue("RUN_ALL_LAUNCHERS", startAllLaunchers.getSelection()); return super.performOk(); } /* (non-Javadoc) * @see org.eclipse.jface.preference.PreferencePage#doGetPreferenceStore() */ @Override protected IPreferenceStore doGetPreferenceStore() { return UIActivator.getDefault().getPreferenceStore(); } }