blob: d94dd33b24a4f7c5bee1ce49cb1c74c83fd33c89 [file] [log] [blame]
/*
* Copyright (c) Robert Bosch GmbH. All rights reserved.
*/
package org.eclipse.blockchain.ui.preference;
import org.eclipse.blockchain.core.BlockchainCore;
import org.eclipse.blockchain.core.SecoBlocksPreferenceConstants;
import org.eclipse.blockchain.core.events.BlockchainEnvironmentChangedTrigger;
import org.eclipse.blockchain.ui.Activator;
import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.preferences.InstanceScope;
import org.eclipse.jface.preference.PreferencePage;
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.Group;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;
import org.osgi.service.prefs.BackingStoreException;
/**
* @author ADG5COB
*/
public class EnvironmentPreferencePage extends PreferencePage implements IWorkbenchPreferencePage {
private String selectedOption;
/**
* {@inheritDoc}
*/
@Override
public void init(final IWorkbench workbench) {
this.selectedOption = Platform.getPreferencesService().getString(SecoBlocksPreferenceConstants.SECOBLOCKS_PREF_NODE,
SecoBlocksPreferenceConstants.ENVIRONMENT_PREF_KEY,
SecoBlocksPreferenceConstants.EnvironmentType.EMBEDDED_EVM.toString(), null);
}
/**
* {@inheritDoc}
*/
@Override
protected Control createContents(final Composite parent) {
Composite container = new Composite(parent, SWT.NONE);
container.setLayout(new GridLayout(1, true));
container.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
Group environmentGroup = new Group(container, SWT.NONE);
environmentGroup.setText("Choose The Environment");
environmentGroup.setLayout(new GridLayout(1, true));
environmentGroup.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false));
Button embeddedEVM = new Button(environmentGroup, SWT.RADIO);
embeddedEVM.setText(SecoBlocksPreferenceConstants.EnvironmentType.EMBEDDED_EVM.toString());
embeddedEVM.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false));
Button gethClient = new Button(environmentGroup, SWT.RADIO);
gethClient.setText(SecoBlocksPreferenceConstants.EnvironmentType.GETH_CLIENT.toString());
gethClient.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false));
if (this.selectedOption.equals(SecoBlocksPreferenceConstants.EnvironmentType.EMBEDDED_EVM.toString())) {
embeddedEVM.setSelection(true);
}
else if (this.selectedOption.equals(SecoBlocksPreferenceConstants.EnvironmentType.GETH_CLIENT.toString())) {
gethClient.setSelection(true);
}
/**
* Radio Button Listeneres
*/
embeddedEVM.addSelectionListener(new SelectionAdapter() {
/**
* {@inheritDoc}
*/
@Override
public void widgetSelected(final SelectionEvent e) {
EnvironmentPreferencePage.this.selectedOption =
SecoBlocksPreferenceConstants.EnvironmentType.EMBEDDED_EVM.toString();
embeddedEVM.setSelection(true);
gethClient.setSelection(false);
}
});
gethClient.addSelectionListener(new SelectionAdapter() {
/**
* {@inheritDoc}
*/
@Override
public void widgetSelected(final SelectionEvent e) {
EnvironmentPreferencePage.this.selectedOption =
SecoBlocksPreferenceConstants.EnvironmentType.GETH_CLIENT.toString();
embeddedEVM.setSelection(false);
gethClient.setSelection(true);
}
});
return container;
}
/**
* {@inheritDoc}
*/
@Override
public boolean performOk() {
InstanceScope.INSTANCE.getNode(SecoBlocksPreferenceConstants.SECOBLOCKS_PREF_NODE)
.put(SecoBlocksPreferenceConstants.ENVIRONMENT_PREF_KEY, this.selectedOption);
new BlockchainEnvironmentChangedTriggerChild().triggerEnvChange(this.selectedOption);
try {
InstanceScope.INSTANCE.getNode(SecoBlocksPreferenceConstants.SECOBLOCKS_PREF_NODE).flush();
}
catch (BackingStoreException e) {
BlockchainCore.getInstance().logException(Activator.PLUGIN_ID, e.getMessage(), e);
}
return super.performOk();
}
class BlockchainEnvironmentChangedTriggerChild extends BlockchainEnvironmentChangedTrigger {
public void triggerEnvChange(final String newEnvironment) {
triggerEnvironmentChange(newEnvironment);
}
}
}