package org.jbpm.gd.jpdl.properties;
import org.eclipse.swt.events.FocusEvent;
import org.eclipse.swt.events.FocusListener;
import org.eclipse.swt.layout.FormAttachment;
import org.eclipse.swt.layout.FormData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
import org.jbpm.gd.jpdl.model.Timer;
public class TimerGeneralConfigurationComposite implements FocusListener {
public static TimerGeneralConfigurationComposite create(TabbedPropertySheetWidgetFactory widgetFactory, Composite parent) {
TimerGeneralConfigurationComposite result = new TimerGeneralConfigurationComposite();
result.widgetFactory = widgetFactory;
result.parent = parent;
result.create();
return result;
}
private TabbedPropertySheetWidgetFactory widgetFactory;
private Composite parent;
private Label nameLabel;
private Text nameText;
private Label transitionLabel;
private Text transitionText;
private Label duedateLabel;
private Text duedateText;
private Label repeatLabel;
private Text repeatText;
private Timer timer;
public void setTimer(Timer timer) {
if (this.timer == timer) return;
unhookSelectionListener();
clearControls();
this.timer = timer;
if (timer != null) {
updateControls();
hookSelectionListener();
}
}
private void hookSelectionListener() {
nameText.addFocusListener(this);
transitionText.addFocusListener(this);
duedateText.addFocusListener(this);
repeatText.addFocusListener(this);
}
private void unhookSelectionListener() {
nameText.removeFocusListener(this);
transitionText.removeFocusListener(this);
duedateText.removeFocusListener(this);
repeatText.removeFocusListener(this);
}
private void clearControls() {
nameText.setText("");
transitionText.setText("");
duedateText.setText("");
repeatText.setText("");
}
private void updateControls() {
nameText.setText(timer.getName() == null ? "" : timer.getName());
transitionText.setText(timer.getTransition() == null ? "" : timer.getTransition());
duedateText.setText(timer.getDueDate() == null ? "" : timer.getDueDate());
repeatText.setText(timer.getRepeat() == null ? "" : timer.getRepeat());
}
private void create() {
nameLabel = widgetFactory.createLabel(parent, "Name");
nameText = widgetFactory.createText(parent, "");
transitionLabel = widgetFactory.createLabel(parent, "Transition");
transitionText = widgetFactory.createText(parent, "");
duedateLabel = widgetFactory.createLabel(parent, "Due Date");
duedateText = widgetFactory.createText(parent, "");
repeatLabel = widgetFactory.createLabel(parent, "Repeat");
repeatText = widgetFactory.createText(parent, "");
nameLabel.setLayoutData(createNameLabelLayoutData());
nameText.setLayoutData(createNameTextLayoutData());
transitionLabel.setLayoutData(createTransitionLabelLayoutData());
transitionText.setLayoutData(createTransitionTextLayoutData());
duedateLabel.setLayoutData(createDuedateLabelLayoutData());
duedateText.setLayoutData(createDuedateTextLayoutData());
repeatLabel.setLayoutData(createRepeatLabelLayoutData());
repeatText.setLayoutData(createRepeatTextLayoutData());
}
private FormData createNameTextLayoutData() {
FormData data = new FormData();
data.left = new FormAttachment(0, 85);
data.top = new FormAttachment(0, 5);
data.right = new FormAttachment(100, 0);
return data;
}
private FormData createNameLabelLayoutData() {
FormData data = new FormData();
data.left = new FormAttachment(0, 0);
data.top = new FormAttachment(0, 7);
return data;
}
private FormData createTransitionLabelLayoutData() {
FormData data = new FormData();
data.left = new FormAttachment(0, 0);
data.top = new FormAttachment(nameText, 2);
return data;
}
private FormData createTransitionTextLayoutData() {
FormData data = new FormData();
data.left = new FormAttachment(0, 85);
data.right = new FormAttachment(100, 0);
data.top = new FormAttachment(nameText, 0);
return data;
}
private FormData createDuedateLabelLayoutData() {
FormData data = new FormData();
data.left = new FormAttachment(0, 0);
data.top = new FormAttachment(transitionText, 2);
return data;
}
private FormData createDuedateTextLayoutData() {
FormData data = new FormData();
data.left = new FormAttachment(0, 85);
data.right = new FormAttachment(100, 0);
data.top = new FormAttachment(transitionText, 0);
return data;
}
private FormData createRepeatLabelLayoutData() {
FormData data = new FormData();
data.left = new FormAttachment(0, 0);
data.top = new FormAttachment(duedateText, 2);
return data;
}
private FormData createRepeatTextLayoutData() {
FormData data = new FormData();
data.left = new FormAttachment(0, 85);
data.right = new FormAttachment(100, 0);
data.top = new FormAttachment(duedateText, 0);
return data;
}
public void focusGained(FocusEvent e) {
}
public void focusLost(FocusEvent e) {
if (e.widget == nameText) {
timer.setName("".equals(nameText.getText()) ? null : nameText.getText());
} else if (e.widget == transitionText) {
timer.setTransition("".equals(transitionText.getText()) ? null : transitionText.getText());
} else if (e.widget == duedateText) {
timer.setDueDate("".equals(duedateText.getText()) ? null : duedateText.getText());
} else if (e.widget == repeatText) {
timer.setRepeat("".equals(repeatText.getText()) ? null : repeatText.getText());
}
}
}