package com.revolsys.swing.map.layer.record.component; import java.awt.Component; import javax.swing.JPanel; import com.revolsys.awt.WebColors; import com.revolsys.record.schema.FieldDefinition; import com.revolsys.swing.action.enablecheck.EnableCheck; import com.revolsys.swing.field.Field; import com.revolsys.swing.layout.GroupLayouts; import com.revolsys.swing.map.layer.record.AbstractRecordLayer; import com.revolsys.swing.map.layer.record.LayerRecord; import com.revolsys.swing.menu.MenuFactory; import com.revolsys.util.Property; public class SetRecordsFieldValue extends AbstractUpdateField { private static final long serialVersionUID = 1L; public static void addMenuItem(final MenuFactory headerMenu) { final EnableCheck enableCheck = newEnableCheck(); headerMenu.addMenuItem("field", "Set Field Value", "table_fill_down", enableCheck, SetRecordsFieldValue::showDialog); } private static void showDialog() { final AbstractUpdateField dialog = new SetRecordsFieldValue(); dialog.setVisible(true); } private Field editField; private SetRecordsFieldValue() { super("Set Field Value"); } @Override protected String getProgressMonitorTitle() { return "Set " + this.getFieldDefinition().getName() + "=" + this.editField.getFieldValue(); } @Override protected JPanel initFieldPanel() { final FieldDefinition fieldDefinition = this.getFieldDefinition(); final JPanel fieldPanel = new JPanel(); final String fieldName = fieldDefinition.getName(); final AbstractRecordLayer layer = getLayer(); this.editField = RecordLayerFields.newFormField(layer, fieldName, true); Property.addListenerNewValue(this.editField, fieldName, (newValue) -> { validateField(this.editField, fieldDefinition); }); Property.addListenerNewValue(this.editField, "text", (newValue) -> { validateField(this.editField, fieldDefinition); }); fieldPanel.add((Component)this.editField); GroupLayouts.makeColumns(fieldPanel, 3, true); return fieldPanel; } @Override protected void updateRecord(final LayerRecord record) { final String fieldName = this.getFieldDefinition().getName(); final Object value = this.editField.getFieldValue(); record.setValue(fieldName, value); } public void validateField(final Field field, final FieldDefinition fieldDefinition) { boolean valid = true; field.setFieldValid(); final Object value = field.getFieldValue(); try { fieldDefinition.validate(value); } catch (final IllegalArgumentException e) { field.setFieldInvalid(e.getMessage(), WebColors.Red, WebColors.Pink); valid = false; } setFormValid(valid); } }