@Override
  protected Control createDialogArea(Composite parent) {
    IValueController valueController = getValueController();
    Object value = valueController.getValue();

    Composite dialogGroup = (Composite) super.createDialogArea(parent);
    Composite panel = UIUtils.createPlaceholder(dialogGroup, 3);
    panel.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));

    int style = SWT.BORDER;
    if (valueController.isReadOnly()) {
      style |= SWT.READ_ONLY;
    }

    UIUtils.createControlLabel(panel, "Time")
        .setLayoutData(new GridData(GridData.VERTICAL_ALIGN_BEGINNING));
    DBDDataFormatter formatter =
        helper.getFormatter(valueController, valueController.getValueType());
    timeEditor = new CustomTimeEditor(panel, style, formatter);

    GridData gd = new GridData(GridData.FILL_HORIZONTAL);
    gd.horizontalAlignment = GridData.CENTER;
    timeEditor.getControl().setLayoutData(gd);

    primeEditorValue(value);

    Button button = UIUtils.createPushButton(panel, "Set Current", null);
    button.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_END));

    button.setEnabled(!valueController.isReadOnly());
    button.addSelectionListener(
        new SelectionAdapter() {
          @Override
          public void widgetSelected(SelectionEvent e) {
            primeEditorValue(new Date());
          }
        });

    return dialogGroup;
  }
 @Override
 public Object extractEditorValue() throws DBException {
   return timeEditor.getValue();
 }
 @Override
 public void primeEditorValue(@Nullable Object value) {
   timeEditor.setValue(value);
 }