package com.thingtrack.konekti.view.web.form;
import org.osgi.framework.BundleContext;
import org.osgi.framework.FrameworkUtil;
import org.osgi.framework.ServiceReference;
import com.thingtrack.konekti.domain.Area;
import com.thingtrack.konekti.domain.Job;
import com.thingtrack.konekti.domain.JobIntervalType;
import com.thingtrack.konekti.domain.JobTriggerType;
import com.thingtrack.konekti.service.api.AreaService;
import com.thingtrack.konekti.service.api.JobIntervalTypeService;
import com.thingtrack.konekti.service.api.JobTriggerTypeService;
import com.thingtrack.konekti.view.addon.data.BindingSource;
import com.thingtrack.konekti.view.addon.ui.AbstractViewForm;
import com.thingtrack.konekti.view.web.form.field.JobTriggerCalendarField;
import com.vaadin.annotations.AutoGenerated;
import com.vaadin.data.Property.ValueChangeEvent;
import com.vaadin.data.Property.ValueChangeListener;
import com.vaadin.data.util.BeanItemContainer;
import com.vaadin.ui.AbsoluteLayout;
import com.vaadin.ui.CheckBox;
import com.vaadin.ui.ComboBox;
import com.vaadin.ui.DateField;
import com.vaadin.ui.Select;
import com.vaadin.ui.TextField;
@SuppressWarnings("serial")
public class JobViewForm extends AbstractViewForm {
@AutoGenerated
private AbsoluteLayout mainLayout;
@AutoGenerated
private ComboBox jobIntervalTypeField;
@AutoGenerated
private JobTriggerCalendarField jobCalendarField;
@AutoGenerated
private ComboBox areaField;
@AutoGenerated
private DateField startTimeField;
@AutoGenerated
private TextField repeatCountField;
@AutoGenerated
private TextField future_timeField;
@AutoGenerated
private CheckBox futureField;
@AutoGenerated
private DateField endTimeField;
@AutoGenerated
private TextField descriptionField;
@AutoGenerated
private TextField cronExpressionField;
@AutoGenerated
private ComboBox jobTriggerTypeField;
@AutoGenerated
private TextField jobTriggerPriorityField;
@AutoGenerated
private TextField jobNameField;
@AutoGenerated
private TextField jobIntervalField;
@AutoGenerated
private TextField jobGroupField;
/*- VaadinEditorProperties={"grid":"RegularGrid,20","showGrid":true,"snapToGrid":true,"snapToObject":true,"movingGuides":false,"snappingDistance":10} */
// form services
private AreaService areaService;
private JobTriggerTypeService jobTriggerTypeService;
private JobIntervalTypeService jobIntervalTypeService;
// client type datasource
private BeanItemContainer<Area> bcArea = new BindingSource<Area>(Area.class);
private BeanItemContainer<JobTriggerType> bcJobTriggerType = new BindingSource<JobTriggerType>(JobTriggerType.class);
private BeanItemContainer<JobIntervalType> bcJobIntervalType = new BindingSource<JobIntervalType>(JobIntervalType.class);
/**
* The constructor should first build the main layout, set the composition
* root and then do any custom initialization.
*
* The constructor will not be automatically regenerated by the visual
* editor.
* @throws Exception
* @throws IllegalArgumentException
*/
public JobViewForm() throws IllegalArgumentException, Exception {
buildMainLayout();
setCompositionRoot(mainLayout);
// TODO add user code here
initComponents();
cronExpressionField.setVisible(false);
future_timeField.setEnabled(false);
startTimeField.setResolution(DateField.RESOLUTION_SEC);
endTimeField.setResolution(DateField.RESOLUTION_SEC);
// configure Type data
areaField.setItemCaptionMode(Select.ITEM_CAPTION_MODE_PROPERTY);
areaField.setItemCaptionPropertyId("name");
jobTriggerTypeField.setItemCaptionMode(Select.ITEM_CAPTION_MODE_PROPERTY);
jobTriggerTypeField.setItemCaptionPropertyId("description");
jobIntervalTypeField.setItemCaptionMode(Select.ITEM_CAPTION_MODE_PROPERTY);
jobIntervalTypeField.setItemCaptionPropertyId("description");
// get form services from OSGi Service Registry
getServices();
// load data sources
loadData();
futureField.setImmediate(true);
futureField.addListener(new ValueChangeListener() {
@Override
public void valueChange(ValueChangeEvent event) {
if (event.getProperty().getValue() == null)
return;
if ((Boolean)event.getProperty().getValue())
future_timeField.setEnabled(true);
else {
future_timeField.setValue(null);
future_timeField.setEnabled(false);
}
}
});
jobTriggerTypeField.setImmediate(true);
jobTriggerTypeField.setNullSelectionAllowed(false);
jobTriggerTypeField.addListener(new ValueChangeListener() {
@Override
public void valueChange(ValueChangeEvent event) {
if (event.getProperty().getValue() == null)
return;
if (((JobTriggerType)event.getProperty().getValue()).getCode().equals(Job.JOB_TRIGGER_TYPE.SIMPLE.name())) {
jobIntervalField.setVisible(true);
jobIntervalTypeField.setVisible(true);
repeatCountField.setVisible(true);
cronExpressionField.setVisible(false);
}
else {
jobIntervalField.setVisible(false);
jobIntervalTypeField.setVisible(false);
repeatCountField.setVisible(false);
cronExpressionField.setVisible(true);
}
}
});
}
private void initComponents() {
repeatCountField.setNullRepresentation("");
descriptionField.setNullRepresentation("");
cronExpressionField.setNullRepresentation("");
jobTriggerPriorityField.setNullRepresentation("");
jobNameField.setNullRepresentation("");
jobIntervalField.setNullRepresentation("");
jobGroupField.setNullRepresentation("");
future_timeField.setNullRepresentation("");
areaField.setNullSelectionAllowed(false);
jobTriggerTypeField.setNullSelectionAllowed(false);
jobIntervalTypeField.setNullSelectionAllowed(false);
jobNameField.focus();
}
@SuppressWarnings({ "unchecked", "rawtypes" })
private void getServices() {
try {
BundleContext bundleContext = FrameworkUtil.getBundle(JobViewForm.class).getBundleContext();
ServiceReference jobTriggerTypeServiceReference = bundleContext.getServiceReference(JobTriggerTypeService.class.getName());
jobTriggerTypeService = JobTriggerTypeService.class.cast(bundleContext.getService(jobTriggerTypeServiceReference));
ServiceReference jobIntervalTypeServiceReference = bundleContext.getServiceReference(JobIntervalTypeService.class.getName());
jobIntervalTypeService = JobIntervalTypeService.class.cast(bundleContext.getService(jobIntervalTypeServiceReference));
ServiceReference areaReference = bundleContext.getServiceReference(AreaService.class.getName());
areaService = AreaService.class.cast(bundleContext.getService(areaReference));
}
catch (Exception e) {
e.getMessage();
}
}
private void loadData() throws IllegalArgumentException, Exception {
bcJobTriggerType.removeAllItems();
bcJobTriggerType.addAll(jobTriggerTypeService.getAll());
jobTriggerTypeField.setContainerDataSource(bcJobTriggerType);
bcJobIntervalType.removeAllItems();
bcJobIntervalType.addAll(jobIntervalTypeService.getAll());
jobIntervalTypeField.setContainerDataSource(bcJobIntervalType);
bcArea.removeAllItems();
bcArea.addAll(areaService.getAll());
areaField.setContainerDataSource(bcArea);
}
@Override
protected void updateLabels() {
jobNameField.setCaption(getI18N().getMessage("com.thingtrack.konekti.view.web.form.JobViewForm.jobNameField.caption"));
jobGroupField.setCaption(getI18N().getMessage("com.thingtrack.konekti.view.web.form.JobViewForm.jobGroupField.caption"));
startTimeField.setCaption(getI18N().getMessage("com.thingtrack.konekti.view.web.form.JobViewForm.startTimeField.caption"));
endTimeField.setCaption(getI18N().getMessage("com.thingtrack.konekti.view.web.form.JobViewForm.endTimeField.caption"));
areaField.setCaption(getI18N().getMessage("com.thingtrack.konekti.view.web.form.JobViewForm.areaField.caption"));
descriptionField.setCaption(getI18N().getMessage("com.thingtrack.konekti.view.web.form.JobViewForm.descriptionField.caption"));
jobTriggerTypeField.setCaption(getI18N().getMessage("com.thingtrack.konekti.view.web.form.JobViewForm.jobTriggerTypeField.caption"));
jobTriggerPriorityField.setCaption(getI18N().getMessage("com.thingtrack.konekti.view.web.form.JobViewForm.jobTriggerPriorityField.caption"));
future_timeField.setCaption(getI18N().getMessage("com.thingtrack.konekti.view.web.form.JobViewForm.future_timeField.caption"));
futureField.setCaption(getI18N().getMessage("com.thingtrack.konekti.view.web.form.JobViewForm.futureField.caption"));
jobIntervalField.setCaption(getI18N().getMessage("com.thingtrack.konekti.view.web.form.JobViewForm.jobIntervalField.caption"));
repeatCountField.setCaption(getI18N().getMessage("com.thingtrack.konekti.view.web.form.JobViewForm.repeatCountField.caption"));
//jobCalendarField.setCaption(getI18N().getMessage("com.thingtrack.konekti.view.web.form.JobViewForm.jobCalendarField.caption"));
}
@AutoGenerated
private AbsoluteLayout buildMainLayout() {
// common part: create layout
mainLayout = new AbsoluteLayout();
mainLayout.setImmediate(false);
mainLayout.setWidth("650px");
mainLayout.setHeight("220px");
mainLayout.setMargin(true);
// top-level component properties
setWidth("650px");
setHeight("220px");
// jobGroupField
jobGroupField = new TextField();
jobGroupField.setCaption("Grupo");
jobGroupField.setImmediate(false);
jobGroupField.setWidth("140px");
jobGroupField.setHeight("-1px");
jobGroupField.setRequired(true);
mainLayout.addComponent(jobGroupField, "top:20.0px;left:180.0px;");
// jobIntervalField
jobIntervalField = new TextField();
jobIntervalField.setCaption("Intervalo");
jobIntervalField.setImmediate(false);
jobIntervalField.setWidth("60px");
jobIntervalField.setHeight("-1px");
mainLayout.addComponent(jobIntervalField, "top:180.0px;left:20.0px;");
// jobNameField
jobNameField = new TextField();
jobNameField.setCaption("Nombre");
jobNameField.setImmediate(false);
jobNameField.setWidth("140px");
jobNameField.setHeight("-1px");
jobNameField.setRequired(true);
mainLayout.addComponent(jobNameField, "top:20.0px;left:20.0px;");
// jobTriggerPriorityField
jobTriggerPriorityField = new TextField();
jobTriggerPriorityField.setCaption("Job Trigger Priority");
jobTriggerPriorityField.setImmediate(false);
jobTriggerPriorityField.setWidth("160px");
jobTriggerPriorityField.setHeight("-1px");
mainLayout.addComponent(jobTriggerPriorityField,
"top:140.0px;left:200.0px;");
// jobTriggerTypeField
jobTriggerTypeField = new ComboBox();
jobTriggerTypeField.setCaption("Tipo Disparador");
jobTriggerTypeField.setImmediate(true);
jobTriggerTypeField.setWidth("160px");
jobTriggerTypeField.setHeight("-1px");
jobTriggerTypeField.setRequired(true);
mainLayout
.addComponent(jobTriggerTypeField, "top:140.0px;left:20.0px;");
// cronExpressionField
cronExpressionField = new TextField();
cronExpressionField.setCaption("Expresión Cron ");
cronExpressionField.setImmediate(false);
cronExpressionField.setWidth("340px");
cronExpressionField.setHeight("-1px");
mainLayout
.addComponent(cronExpressionField, "top:180.0px;left:20.0px;");
// descriptionField
descriptionField = new TextField();
descriptionField.setCaption("Descripción");
descriptionField.setImmediate(false);
descriptionField.setWidth("620px");
descriptionField.setHeight("-1px");
mainLayout.addComponent(descriptionField, "top:100.0px;left:20.0px;");
// endTimeField
endTimeField = new DateField();
endTimeField.setCaption("Fecha Finalización");
endTimeField.setImmediate(false);
endTimeField.setWidth("-1px");
endTimeField.setHeight("-1px");
endTimeField.setInvalidAllowed(false);
mainLayout.addComponent(endTimeField, "top:60.0px;left:225.0px;");
// futureField
futureField = new CheckBox();
futureField.setCaption("Futuro");
futureField.setImmediate(false);
futureField.setWidth("-1px");
futureField.setHeight("-1px");
mainLayout.addComponent(futureField, "top:140.0px;left:585.0px;");
// future_timeField
future_timeField = new TextField();
future_timeField.setCaption("Future_time");
future_timeField.setImmediate(false);
future_timeField.setWidth("160px");
future_timeField.setHeight("-1px");
mainLayout.addComponent(future_timeField, "top:140.0px;left:400.0px;");
// repeatCountField
repeatCountField = new TextField();
repeatCountField.setCaption("Repeticiones");
repeatCountField.setImmediate(false);
repeatCountField.setWidth("60px");
repeatCountField.setHeight("24px");
mainLayout.addComponent(repeatCountField, "top:180.0px;right:290.0px;");
// startTimeField
startTimeField = new DateField();
startTimeField.setCaption("Fecha Comienzo");
startTimeField.setImmediate(false);
startTimeField.setWidth("-1px");
startTimeField.setHeight("-1px");
startTimeField.setInvalidAllowed(false);
mainLayout.addComponent(startTimeField, "top:60.0px;left:20.0px;");
// areaField
areaField = new ComboBox();
areaField.setCaption("Area Trabajo");
areaField.setImmediate(false);
areaField.setWidth("-1px");
areaField.setHeight("-1px");
areaField.setRequired(true);
mainLayout.addComponent(areaField, "top:60.0px;left:420.0px;");
// jobCalendarField
jobCalendarField = new JobTriggerCalendarField();
jobCalendarField.setImmediate(false);
jobCalendarField.setWidth("-1px");
jobCalendarField.setHeight("-1px");
mainLayout.addComponent(jobCalendarField, "top:167.0px;left:397.0px;");
// jobIntervalTypeField
jobIntervalTypeField = new ComboBox();
jobIntervalTypeField.setCaption("Tipo Intervalo");
jobIntervalTypeField.setImmediate(false);
jobIntervalTypeField.setWidth("175px");
jobIntervalTypeField.setHeight("-1px");
mainLayout.addComponent(jobIntervalTypeField,
"top:180.0px;left:100.0px;");
return mainLayout;
}
}