package com.revolsys.swing.field;
import java.awt.Color;
import java.awt.Component;
import javax.swing.Icon;
import javax.swing.JComponent;
import javax.swing.JTextField;
import com.revolsys.swing.Icons;
import com.revolsys.swing.undo.UndoManager;
import com.revolsys.util.Property;
public interface Field extends Cloneable {
Color DEFAULT_BACKGROUND = new JTextField().getBackground();
Color DEFAULT_FOREGROUND = new JTextField().getForeground();
Color DEFAULT_SELECTED_FOREGROUND = new JTextField().getSelectedTextColor();
Icon ERROR_ICON = Icons.getIcon("exclamation");
Field clone();
void firePropertyChange(String propertyName, Object oldValue, Object newValue);
default Component getComponent() {
return (Component)this;
}
default String getFieldName() {
final FieldSupport fieldSupport = getFieldSupport();
return fieldSupport.getName();
}
default Color getFieldSelectedTextColor() {
return DEFAULT_SELECTED_FOREGROUND;
}
FieldSupport getFieldSupport();
default String getFieldValidationMessage() {
final FieldSupport fieldSupport = getFieldSupport();
return fieldSupport.getErrorMessage();
}
default <T> T getFieldValue() {
final FieldSupport fieldSupport = getFieldSupport();
return fieldSupport.getValue();
}
default UndoManager getUndoManager() {
final FieldSupport fieldSupport = getFieldSupport();
return fieldSupport.getUndoManager();
}
default boolean isFieldValid() {
final FieldSupport fieldSupport = getFieldSupport();
return fieldSupport.isFieldValid();
}
default boolean isHasValidValue() {
updateFieldValue();
final FieldSupport fieldSupport = getFieldSupport();
final Object fieldValue = getFieldValue();
return Property.hasValue(fieldValue) && fieldSupport.isFieldValid();
}
void setEditable(boolean editable);
default void setFieldBackgroundColor(Color color) {
if (color == null) {
color = DEFAULT_BACKGROUND;
}
if (this instanceof JComponent) {
final JComponent component = (JComponent)this;
component.setBackground(color);
}
}
default void setFieldForegroundColor(Color color) {
if (color == null) {
color = DEFAULT_BACKGROUND;
}
if (this instanceof JComponent) {
final JComponent component = (JComponent)this;
component.setForeground(color);
}
}
default void setFieldInvalid(final String message, final Color foregroundColor,
final Color backgroundColor) {
final FieldSupport fieldSupport = getFieldSupport();
fieldSupport.setFieldInvalid(message, foregroundColor, backgroundColor);
}
default void setFieldSelectedTextColor(final Color color) {
}
default void setFieldToolTip(final String toolTip) {
final FieldSupport fieldSupport = getFieldSupport();
fieldSupport.setFieldToolTip(toolTip);
}
default void setFieldValid() {
final FieldSupport fieldSupport = getFieldSupport();
fieldSupport.setFieldValid();
}
default boolean setFieldValue(final Object value) {
final FieldSupport fieldSupport = getFieldSupport();
return fieldSupport.setValue(value);
}
default void setShowErrorIcon(final boolean showErrorIcon) {
final FieldSupport fieldSupport = getFieldSupport();
fieldSupport.setShowErrorIcon(showErrorIcon);
}
default void setUndoManager(final UndoManager undoManager) {
final FieldSupport fieldSupport = getFieldSupport();
fieldSupport.setUndoManager(undoManager);
}
void updateFieldValue();
}