package org.kie.eclipse.navigator.view.actions.dialogs;
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.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import com.eclipsesource.json.JsonObject;
import com.eclipsesource.json.JsonValue;
public abstract class KieRequestDialogField<TYPE extends Object> {
JsonObject object;
String name;
int numColumns;
IKieRequestChangeListener changeListener;
public KieRequestDialogField(final Composite parent, final JsonObject object, final String name) {
this.object = object;
this.name = name;
numColumns = ((GridLayout)parent.getLayout()).numColumns;
}
public void setChangeListener(IKieRequestChangeListener changeListener) {
this.changeListener = changeListener;
}
protected void updateObject(TYPE value) {
JsonValue oldValue = object.get(name);
JsonValue newValue = JsonValue.valueOf(value);
if (newValue!=null && !newValue.equals(oldValue)) {
object.set(name, (TYPE)value);
if (changeListener!=null)
changeListener.objectChanged(object);
}
}
protected GridData createLabelGridData() {
return new GridData(SWT.END, SWT.CENTER, false, true, 1, 1);
}
protected GridData createControlGridData() {
return new GridData(SWT.FILL, SWT.CENTER, true, true, numColumns-1, 1);
}
protected Label createLabel(Composite parent, String labelValue) {
Label label = new Label(parent, SWT.NONE);
label.setLayoutData(createLabelGridData());
label.setFont(parent.getFont());
label.setText(labelValue);
return label;
}
protected Text createText(Composite parent, int style, String textValue) {
Text text = new Text(parent,style);
text.setLayoutData(createControlGridData());
text.setFont(parent.getFont());
text.setText(textValue);
return text;
}
public abstract Control getControl();
}