/**
* This file is protected by Copyright.
* Please refer to the COPYRIGHT file distributed with this source distribution.
*
* This file is part of REDHAWK IDE.
*
* 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.
*
*/
package gov.redhawk.sca.internal.ui.preferences;
import gov.redhawk.model.sca.IScaDataProviderServiceDescriptor;
import gov.redhawk.model.sca.ScaModelPlugin;
import gov.redhawk.sca.model.preferences.ScaModelPreferenceContants;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.eclipse.core.runtime.preferences.InstanceScope;
import org.eclipse.jface.preference.PreferencePage;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.CheckStateChangedEvent;
import org.eclipse.jface.viewers.CheckboxTableViewer;
import org.eclipse.jface.viewers.ICheckStateListener;
import org.eclipse.jface.viewers.ICheckStateProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.swt.SWT;
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.preferences.ScopedPreferenceStore;
/**
*
*/
public class DataProviderPreferencePage extends PreferencePage implements IWorkbenchPreferencePage {
private static class Descriptor {
private final IScaDataProviderServiceDescriptor desc;
private boolean enabled;
public Descriptor(final IScaDataProviderServiceDescriptor desc) {
this.desc = desc;
}
@Override
public String toString() {
return this.desc.getName();
}
}
private final List<Descriptor> dataProviders = new ArrayList<DataProviderPreferencePage.Descriptor>();
private CheckboxTableViewer viewer;
/**
*
*/
public DataProviderPreferencePage() {
}
/**
* {@inheritDoc}
*/
@Override
protected Control createContents(final Composite parent) {
final String str = getPreferenceStore().getString(ScaModelPreferenceContants.DISABLED_DATA_PROVIDERS);
final List<String> disabledProviders = Arrays.asList(str.split(","));
for (final IScaDataProviderServiceDescriptor desc : ScaModelPlugin.getDataProviderRegistry().getDataProvidersDescriptors()) {
final Descriptor d = new Descriptor(desc);
d.enabled = !disabledProviders.contains(d.desc.getId());
this.dataProviders.add(d);
}
this.viewer = CheckboxTableViewer.newCheckList(parent, SWT.BORDER);
this.viewer.setContentProvider(new ArrayContentProvider());
this.viewer.setLabelProvider(new LabelProvider());
this.viewer.setCheckStateProvider(new ICheckStateProvider() {
@Override
public boolean isGrayed(final Object element) {
return false;
}
@Override
public boolean isChecked(final Object element) {
return ((Descriptor) element).enabled;
}
});
this.viewer.addCheckStateListener(new ICheckStateListener() {
@Override
public void checkStateChanged(final CheckStateChangedEvent event) {
((Descriptor) event.getElement()).enabled = event.getChecked();
}
});
this.viewer.setInput(this.dataProviders);
return this.viewer.getControl();
}
@Override
public boolean performOk() {
final StringBuilder builder = new StringBuilder();
for (final Descriptor desc : this.dataProviders) {
if (!desc.enabled) {
builder.append(desc.desc.getId());
builder.append(",");
}
}
String value = "";
if (builder.length() > 0) {
value = builder.substring(0, builder.length() - 1);
}
getPreferenceStore().setValue(ScaModelPreferenceContants.DISABLED_DATA_PROVIDERS, value);
return super.performOk();
}
@Override
public void init(final IWorkbench workbench) {
setPreferenceStore(new ScopedPreferenceStore(InstanceScope.INSTANCE, ScaModelPlugin.ID));
}
}