package copyto.target.http.ui.internal;
import org.eclipse.core.databinding.observable.value.IObservableValue;
import org.eclipse.jface.databinding.swt.SWTObservables;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.jface.layout.GridLayoutFactory;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import copyto.target.http.core.HttpTarget;
import copyto.target.http.core.internal.ResponseHandlers;
import eclipseutils.jface.databinding.Builder;
import eclipseutils.jface.databinding.BuilderAdapter;
import eclipseutils.jface.databinding.ControlCreator;
import eclipseutils.jface.databinding.FieldOptions;
import eclipseutils.jface.databinding.FieldOptions.ControlCustomizer;
import eclipseutils.jface.databinding.validators.URLValidator;
final class HttpBuilderAdapter implements BuilderAdapter {
public Builder create(Object bean, Builder parentBuilder) {
final HttpTarget target = (HttpTarget) bean;
final IObservableValue hostText[] = new IObservableValue[1];
return parentBuilder.field("host",
new FieldOptions(new FieldOptions.ControlCustomizer() {
public void customizeControl(Control control,
IObservableValue observableValue,
FieldOptions options) {
hostText[0] = SWTObservables.observeText(control);
}
}).setValidator(URLValidator.getInstance())).selection(
"responseHandlerDescriptor",
new FieldOptions(ResponseHandlers.getInstance().findAll())
.setControlCustomizer(new ControlCustomizer() {
public void customizeControl(Control control,
final IObservableValue observableValue,
FieldOptions options) {
/*final Composite client = new Composite(control
.getParent(), SWT.NULL);
final StackLayout layout = new StackLayout();
client.setLayout(layout);
final Composite emptyComposite = new Composite(
client, SWT.NULL);
IAdapterManager adapterManager = Platform
.getAdapterManager();
for (Object o : options.getItems()) {
try {
ResponseHandler handler = ((ResponseHandlerDescriptor) o)
.createResponseHandler();
Composite contentClient = new Composite(
client, SWT.NULL);
contentClient.setData("handler",
o);
BuilderAdapter builder = (BuilderAdapter) adapterManager
.loadAdapter(handler,
BuilderAdapter.class
.getName());
if (builder != null) {
builder.create(
handler,
new GridLayoutBuilder(
contentClient,
handler,
UpdateValueStrategy.POLICY_UPDATE));
}
} catch (CoreException e) {
}
}
observableValue.addChangeListener(new IChangeListener() {
public void handleChange(ChangeEvent event) {
event.getObservable().getRealm().exec(new Runnable() {
public void run() {
for (Control c : client.getChildren()) {
if (observableValue.getValue().equals(c.getData("handler"))) {
layout.topControl = c;
client.layout();
return;
}
}
layout.topControl = emptyComposite;
client.layout();
}
});
}
});*/
}
})).control(new ControlCreator() {
public Control create(Composite parent, Object bean) {
Composite client = new Composite(parent, SWT.NULL);
GridLayoutFactory.fillDefaults().applyTo(client);
Label label = new Label(client, SWT.LEFT);
label.setText("Parameters" + ":");
final ParamsViewer viewer = new ParamsViewer(target,
hostText[0], client);
GridDataFactory.fillDefaults().grab(true, true).applyTo(
viewer.getControl());
return client;
}
});
}
}