public void setCell(DatasetEditorModelCell cell) {
    if (this.cell != null) updateUserValue(false);
    this.cell = cell;

    DatasetEditorModelRow row = cell.getRow();
    boolean editable = !row.isDeleted() && row.getModel().isEditable();
    editorComponent.setEnabled(editable);
    editorComponent.setUserValueHolder(cell);

    Formatter formatter = regionalSettings.getFormatter();
    if (cell.getUserValue() instanceof String) {
      String userValue = (String) cell.getUserValue();
      if (userValue.indexOf('\n') > -1) {
        userValue = userValue.replace('\n', ' ');
        editorComponent.setEditable(false);
      } else {
        editorComponent.setEditable(editable);
      }
      editorComponent.setText(userValue);
    } else {
      editable = editable && !(cell.getUserValue() instanceof LazyLoadedValue);
      editorComponent.setEditable(editable);
      String formattedUserValue = formatter.formatObject(cell.getUserValue());
      editorComponent.setText(formattedUserValue);
    }
    JTextField valueTextField = editorComponent.getTextField();
    valueTextField.setBackground(UIUtil.getTextFieldBackground());
  }
        @Override
        public void focusGained(FocusEvent e) {
          if (e.getOppositeComponent() != null) {
            JTextField valueTextField = editorComponent.getTextField();
            DataEditorSettings settings = cell.getRow().getModel().getSettings();
            if (settings.getGeneralSettings().getSelectContentOnCellEdit().value()) {
              valueTextField.selectAll();
            }

            Rectangle rectangle = new Rectangle(mainPanel.getLocation(), mainPanel.getSize());
            parentForm.getColumnsPanel().scrollRectToVisible(rectangle);
          }
        }
  public DatasetRecordEditorColumnForm(
      DatasetRecordEditorForm parentForm, DatasetEditorModelCell cell) {
    this.parentForm = parentForm;
    final DatasetEditorColumnInfo columnInfo = cell.getColumnInfo();
    DBColumn column = columnInfo.getColumn();
    DBDataType dataType = column.getDataType();
    Project project = column.getProject();
    regionalSettings = RegionalSettings.getInstance(project);

    columnLabel.setIcon(column.getIcon());
    columnLabel.setText(column.getName());
    dataTypeLabel.setText(dataType.getQualifiedName());
    dataTypeLabel.setForeground(UIUtil.getInactiveTextColor());

    DBNativeDataType nativeDataType = dataType.getNativeDataType();
    if (nativeDataType != null) {
      DataTypeDefinition dataTypeDefinition = nativeDataType.getDataTypeDefinition();
      GenericDataType genericDataType = dataTypeDefinition.getGenericDataType();

      DataEditorSettings dataEditorSettings = DataEditorSettings.getInstance(project);

      long dataLength = dataType.getLength();

      if (genericDataType.is(GenericDataType.DATE_TIME, GenericDataType.LITERAL)) {
        TextFieldWithPopup textFieldWithPopup = new TextFieldWithPopup(project);

        textFieldWithPopup.setPreferredSize(new Dimension(200, -1));
        JTextField valueTextField = textFieldWithPopup.getTextField();
        valueTextField.getDocument().addDocumentListener(documentListener);
        valueTextField.addKeyListener(keyAdapter);
        valueTextField.addFocusListener(focusListener);

        if (cell.getRow().getModel().isEditable()) {
          if (genericDataType == GenericDataType.DATE_TIME) {
            textFieldWithPopup.createCalendarPopup(false);
          }

          if (genericDataType == GenericDataType.LITERAL) {
            if (dataLength > 20 && !column.isPrimaryKey() && !column.isForeignKey())
              textFieldWithPopup.createTextAreaPopup(false);
            DataEditorValueListPopupSettings valueListPopupSettings =
                dataEditorSettings.getValueListPopupSettings();

            if (column.isForeignKey()
                || (dataLength <= valueListPopupSettings.getDataLengthThreshold()
                    && (!column.isSinglePrimaryKey()
                        || valueListPopupSettings.isActiveForPrimaryKeyColumns()))) {
              ListPopupValuesProvider valuesProvider =
                  new ListPopupValuesProvider() {
                    public List<String> getValues() {
                      return columnInfo.getPossibleValues();
                    }
                  };
              textFieldWithPopup.createValuesListPopup(valuesProvider, false);
            }
          }
        }
        editorComponent = textFieldWithPopup;
      } else if (genericDataType.is(GenericDataType.BLOB, GenericDataType.CLOB)) {
        editorComponent = new TextFieldWithTextEditor(project);
      } else {
        editorComponent = new BasicDataEditorComponent();
      }
    } else {
      editorComponent = new BasicDataEditorComponent();
      editorComponent.setEnabled(false);
      editorComponent.setEditable(false);
    }

    valueFieldPanel.add((Component) editorComponent, BorderLayout.CENTER);
    editorComponent.getTextField().setCursor(Cursor.getPredefinedCursor(Cursor.TEXT_CURSOR));
    setCell(cell);
  }
 private Formatter getFormatter() {
   Project project = cell.getRow().getModel().getDataset().getProject();
   return Formatter.getInstance(project);
 }