package com.tibco.as.spacebar.ui.wizards.transfer;
import org.eclipse.core.databinding.DataBindingContext;
import org.eclipse.core.databinding.beans.PojoObservables;
import org.eclipse.core.databinding.observable.value.IObservableValue;
import org.eclipse.core.databinding.observable.value.IValueChangeListener;
import org.eclipse.core.databinding.observable.value.ValueChangeEvent;
import org.eclipse.jface.databinding.swt.SWTObservables;
import org.eclipse.jface.databinding.viewers.ViewersObservables;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.ComboViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import com.tibco.as.io.AbstractExport;
import com.tibco.as.space.browser.BrowserDef.BrowserType;
import com.tibco.as.space.browser.BrowserDef.TimeScope;
import com.tibco.as.spacebar.ui.preferences.Preferences;
public class ExportEditor extends Composite {
private DataBindingContext m_bindingContext;
private AbstractExport export;
protected ComboViewer timeScopeCombo;
protected ComboViewer browserTypeCombo;
protected Text timeoutText;
protected Text prefetchText;
protected Text queryLimitText;
protected Text filterText;
public ExportEditor(Composite parent, int style, AbstractExport export) {
super(parent, style);
this.export = export;
setLayout(new GridLayout(2, false));
new Label(this, SWT.NONE).setText("Browser type:");
browserTypeCombo = new ComboViewer(this, SWT.READ_ONLY);
browserTypeCombo.getCombo().setLayoutData(
new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
browserTypeCombo.setContentProvider(ArrayContentProvider.getInstance());
browserTypeCombo.setInput(BrowserType.values());
new Label(this, SWT.NONE).setText("Time scope:");
timeScopeCombo = new ComboViewer(this, SWT.READ_ONLY);
timeScopeCombo.getCombo().setLayoutData(
new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
timeScopeCombo.setContentProvider(ArrayContentProvider.getInstance());
timeScopeCombo.setInput(TimeScope.values());
new Label(this, SWT.NONE).setText("Timeout:");
timeoutText = new Text(this, SWT.BORDER | SWT.SINGLE);
timeoutText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true,
false));
new Label(this, SWT.NONE).setText("Prefetch:");
prefetchText = new Text(this, SWT.BORDER | SWT.SINGLE);
prefetchText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true,
false));
new Label(this, SWT.NONE).setText("Query limit:");
queryLimitText = new Text(this, SWT.BORDER | SWT.SINGLE);
queryLimitText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true,
false));
Label filterLabel = new Label(this, SWT.NONE);
GridData filterLabelGridData = new GridData();
filterLabelGridData.verticalIndent = 3;
filterLabelGridData.verticalAlignment = SWT.TOP;
filterLabel.setLayoutData(filterLabelGridData);
filterLabel.setText("Filter:");
filterText = new Text(this, SWT.WRAP | SWT.MULTI);
GridData gridData = new GridData(SWT.FILL, SWT.CENTER, true, false);
gridData.heightHint = 5 * filterText.getLineHeight();
filterText.setLayoutData(gridData);
if (this.export != null) {
m_bindingContext = initDataBindings();
}
timeScopeUpdate();
}
@Override
protected void checkSubclass() {
// Disable the check that prevents subclassing of SWT components
}
private DataBindingContext initDataBindings() {
IObservableValue browserTypeObserveWidget = ViewersObservables
.observeSingleSelection(browserTypeCombo);
IObservableValue browserTypeObserveValue = PojoObservables
.observeValue(export, "browserType");
browserTypeObserveValue
.addValueChangeListener(new IValueChangeListener() {
@Override
public void handleValueChange(ValueChangeEvent event) {
browseTypeUpdate();
}
});
IObservableValue timeScopeObserveWidget = ViewersObservables
.observeSingleSelection(timeScopeCombo);
IObservableValue timeScopeObserveValue = PojoObservables.observeValue(
export, "timeScope");
timeScopeObserveValue
.addValueChangeListener(new IValueChangeListener() {
@Override
public void handleValueChange(ValueChangeEvent event) {
timeScopeUpdate();
}
});
IObservableValue timeoutObserveWidget = SWTObservables.observeText(
timeoutText, SWT.Modify);
IObservableValue timeoutObserveValue = PojoObservables.observeValue(
export, "timeout");
IObservableValue prefetchObserveWidget = SWTObservables.observeText(
prefetchText, SWT.Modify);
IObservableValue prefetchObserveValue = PojoObservables.observeValue(
export, "prefetch");
IObservableValue queryLimitObserveWidget = SWTObservables.observeText(
queryLimitText, SWT.Modify);
IObservableValue queryLimitObserveValue = PojoObservables.observeValue(
export, "queryLimit");
IObservableValue filterObserveWidget = SWTObservables.observeText(
filterText, SWT.Modify);
IObservableValue filterObserveValue = PojoObservables.observeValue(
export, "filter");
//
DataBindingContext bindingContext = new DataBindingContext();
//
bindingContext.bindValue(browserTypeObserveWidget,
browserTypeObserveValue, null, null);
bindingContext.bindValue(timeScopeObserveWidget, timeScopeObserveValue,
null, null);
bindingContext.bindValue(timeoutObserveWidget, timeoutObserveValue,
null, null);
bindingContext.bindValue(prefetchObserveWidget, prefetchObserveValue,
null, null);
bindingContext.bindValue(queryLimitObserveWidget,
queryLimitObserveValue, null, null);
bindingContext.bindValue(filterObserveWidget, filterObserveValue, null,
null);
//
return bindingContext;
}
protected void browseTypeUpdate() {
BrowserType browseType = export.getBrowserType();
if (browseType == BrowserType.TAKE) {
timeScopeCombo.getCombo().setEnabled(false);
} else {
timeScopeCombo.getCombo().setEnabled(true);
}
}
protected void timeScopeUpdate() {
TimeScope timeScope = export.getTimeScope();
if (timeScope == null) {
return;
}
String name = timeScope.name();
if (Preferences.TIMESCOPE_ALL.equals(name)) {
timeoutText.setEnabled(true);
queryLimitText.setEnabled(true);
prefetchText.setEnabled(true);
} else if (Preferences.TIMESCOPE_NEW.equals(name)) {
timeoutText.setEnabled(true);
queryLimitText.setEnabled(false);
prefetchText.setEnabled(false);
} else if (Preferences.TIMESCOPE_CURRENT.equals(name)) {
prefetchText.setEnabled(true);
timeoutText.setEnabled(false);
queryLimitText.setEnabled(false);
} else if (Preferences.TIMESCOPE_SNAPSHOT.equals(name)) {
prefetchText.setEnabled(true);
queryLimitText.setEnabled(true);
timeoutText.setEnabled(false);
}
}
public AbstractExport getExport() {
return export;
}
public void setExportBean(AbstractExport newExportBean) {
setExportBean(newExportBean, true);
}
public void setExportBean(AbstractExport newExportBean, boolean update) {
export = newExportBean;
if (update) {
if (m_bindingContext != null) {
m_bindingContext.dispose();
m_bindingContext = null;
}
if (export != null) {
m_bindingContext = initDataBindings();
}
}
}
}