/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.components.optimizer.gui.view;
import java.util.LinkedList;
import java.util.List;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.ISelectionProvider;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.TabFolder;
import org.eclipse.swt.widgets.TabItem;
import org.eclipse.swt.widgets.Widget;
import org.eclipse.ui.part.ViewPart;
import de.rcenvironment.components.optimizer.common.OptimizerResultService;
import de.rcenvironment.components.optimizer.gui.properties.Messages;
import de.rcenvironment.core.component.execution.api.ComponentExecutionInformation;
import de.rcenvironment.core.gui.workflow.view.ComponentRuntimeView;
import de.rcenvironment.core.utils.incubator.ServiceRegistry;
import de.rcenvironment.core.utils.incubator.ServiceRegistryAccess;
/**
* Runtime view of the {@link ParametricStudyComponent}.
*
* @author Sascha Zur
*/
public class OptimizerView extends ViewPart implements ComponentRuntimeView, ISelectionProvider {
private ComponentExecutionInformation componentExecutionInformation;
private TabFolder tabFolder;
private ChartDataComposite dataComposite;
private ChartConfigurationComposite configurationComposite;
private boolean initialized = false;
private final List<ISelectionChangedListener> selectionChangedListeners = new LinkedList<ISelectionChangedListener>();
private ISelectionProvider selectionProvider;
private OptimizerDatastore study;
@Override
public void createPartControl(Composite parent) {
// create the tab folder
tabFolder = new TabFolder(parent, SWT.BOTTOM);
// update the selection provider upon tab changes
tabFolder.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent event) {
final TabItem tabItem = (TabItem) event.item;
final Widget widget = tabItem.getControl();
ISelectionProvider provider = null;
if (widget instanceof ISelectionProvider) {
provider = (ISelectionProvider) widget;
}
setSelectionProvider(provider);
}
});
dataComposite = new ChartDataComposite(tabFolder, SWT.NONE, componentExecutionInformation);
dataComposite.createControls();
// create the chart tab item
final TabItem chartTabItem = new TabItem(tabFolder, SWT.NONE, 0);
chartTabItem.setText(Messages.chartTabText);
final TabItem dataTabItem = new TabItem(tabFolder, SWT.NONE, 1);
dataTabItem.setText(Messages.dataTabText);
//
configurationComposite = new ChartConfigurationComposite(tabFolder,
SWT.NONE);
configurationComposite.createControls();
chartTabItem.setControl(configurationComposite);
// create the data tab item
dataTabItem.setControl(dataComposite);
setSelectionProvider(dataComposite);
getSite().setSelectionProvider(this);
}
@Override
public void dispose() {
super.dispose();
// why doesn't it get disposed automatically???
tabFolder.dispose();
// dataComposite.dispose();
// configurationComposite.dispose();
}
@Override
public void setFocus() {
if (!initialized) {
initialized = true;
refresh();
}
}
private void refresh() {
if (componentExecutionInformation == null) {
return;
}
}
@Override
public void initializeData(final ComponentExecutionInformation compInstanceDescr) {
this.componentExecutionInformation = compInstanceDescr;
ServiceRegistryAccess serviceRegistryAccess = ServiceRegistry.createAccessFor(this);
OptimizerResultService optimizerResultService = serviceRegistryAccess.getService(OptimizerResultService.class);
study = OptimizerDatastore.connect(componentExecutionInformation.getExecutionIdentifier(),
componentExecutionInformation.getNodeId(), optimizerResultService);
}
@Override
public void addSelectionChangedListener(ISelectionChangedListener listener) {
synchronized (selectionChangedListeners) {
selectionChangedListeners.add(listener);
}
}
@Override
public void removeSelectionChangedListener(
ISelectionChangedListener listener) {
synchronized (selectionChangedListeners) {
selectionChangedListeners.remove(listener);
}
}
@Override
public ISelection getSelection() {
ISelection selection = null;
if (selectionProvider != null) {
selection = selectionProvider.getSelection();
}
return selection;
}
@Override
public void setSelection(ISelection selection) {
throw new UnsupportedOperationException();
}
private void setSelectionProvider(final ISelectionProvider selectionProvider) {
synchronized (selectionChangedListeners) {
// remove listeners from old provider
for (final ISelectionChangedListener listener : selectionChangedListeners) {
this.selectionProvider.removeSelectionChangedListener(listener);
}
this.selectionProvider = selectionProvider;
// add listeners from new provider
for (final ISelectionChangedListener listener : selectionChangedListeners) {
this.selectionProvider.addSelectionChangedListener(listener);
}
}
}
@Override
public void initializeView() {
if (study != null && !dataComposite.isDisposed()) {
dataComposite.setStudyDatastore(study);
configurationComposite.setStudyDatastore(study);
}
}
}