@Override
 public boolean canUndo() {
   if (super.canUndo()) {
     final Object value = Property.get(this.object, this.propertyName);
     if (DataType.equal(value, this.newValue)) {
       return true;
     }
   }
   return false;
 }
 @Override
 public int setPreparedStatementValue(
     final PreparedStatement statement, final int parameterIndex, final Object value)
     throws SQLException {
   if (Property.isEmpty(value)) {
     final int sqlType = getSqlType();
     statement.setNull(parameterIndex, sqlType);
   } else {
     final Date date = Dates.getSqlDate(value);
     statement.setDate(parameterIndex, date);
   }
   return parameterIndex + 1;
 }
 @Override
 public void propertyChangeDo(final PropertyChangeEvent event) {
   final Object source = event.getSource();
   if (source instanceof Field) {
     final Field field = (Field) source;
     final String fieldName = field.getFieldName();
     Object fieldValue = field.getFieldValue();
     if ("lineDashOffset".equals(fieldName) && !Property.hasValue(fieldValue)) {
       fieldValue = 0;
     }
     this.geometryStyle.setProperty(fieldName, fieldValue);
   } else if (source == this.geometryStyle) {
     final String name = event.getPropertyName();
     final Object value = event.getNewValue();
     setFieldValue(name, value);
   }
   for (final Component preview : this.previews.getComponents()) {
     preview.repaint();
   }
 }
 /**
  * Set the value of the field with the specified name.
  *
  * @param index The index of the field.
  * @param value The new value.
  */
 @Override
 protected boolean setValue(final FieldDefinition fieldDefinition, Object value) {
   boolean updated = false;
   if (value instanceof String) {
     final String string = (String) value;
     if (!Property.hasValue(string)) {
       value = null;
     }
   }
   if (value instanceof SingleIdentifier) {
     final SingleIdentifier identifier = (SingleIdentifier) value;
     value = identifier.getValue(0);
   }
   final Object newValue = fieldDefinition.toFieldValue(value);
   final int index = fieldDefinition.getIndex();
   final Object oldValue = this.values[index];
   if (!fieldDefinition.equals(oldValue, newValue)) {
     updated = true;
     updateState();
     fieldDefinition.equals(oldValue, newValue);
   }
   this.values[index] = newValue;
   return updated;
 }
 @Override
 protected void undoDo() {
   Property.setSimple(this.object, this.propertyName, this.oldValue);
 }