/* | |
* 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); | |
} | |
} | |
} |