package com.revolsys.swing.map.layer.record.style.panel; import java.awt.Color; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import javax.swing.JButton; import javax.swing.JScrollPane; import org.jdesktop.swingx.VerticalLayout; import com.revolsys.record.query.Condition; import com.revolsys.swing.component.ValueField; import com.revolsys.swing.field.QueryWhereConditionField; import com.revolsys.swing.field.TextArea; import com.revolsys.swing.map.layer.record.AbstractRecordLayer; import com.revolsys.swing.toolbar.ToolBar; import com.revolsys.util.Property; public class QueryFilterField extends ValueField implements PropertyChangeListener { private static final long serialVersionUID = 1L; private final JButton clearButton; private final AbstractRecordLayer layer; private final TextArea queryField; public QueryFilterField(final AbstractRecordLayer layer, final String fieldName, final String query) { super(new VerticalLayout()); this.layer = layer; this.queryField = new TextArea(fieldName, query, 5, 30); Property.addListener(this.queryField, fieldName, this); final ToolBar toolBar = new ToolBar(); toolBar.setOpaque(false); toolBar.addButtonTitleIcon("search", "Advanced Search", "filter_edits", this::showAdvancedFilter); this.clearButton = toolBar.addButtonTitleIcon("search", "Clear Filter", "filter_delete", () -> this.queryField.setFieldValue("")); this.clearButton.setEnabled(Property.hasValue(this.queryField.getText())); add(toolBar); add(new JScrollPane(this.queryField)); } @Override public void addPropertyChangeListener(final String propertyName, final PropertyChangeListener listener) { super.addPropertyChangeListener(propertyName, listener); Property.addListener(this.queryField, propertyName, listener); } @Override public String getFieldValidationMessage() { return this.queryField.getFieldValidationMessage(); } @Override public <T> T getFieldValue() { return this.queryField.getFieldValue(); } @Override public boolean isFieldValid() { return this.queryField.isFieldValid(); } @Override public void propertyChange(final PropertyChangeEvent event) { if (event.getPropertyName().equals("filter")) { final Condition filter = (Condition)event.getNewValue(); if (filter == null) { this.queryField.setFieldValue(null); } else { this.queryField.setFieldValue(filter.toFormattedString()); } } this.clearButton.setEnabled(Property.hasValue(this.queryField.getText())); } @Override public void setFieldBackgroundColor(final Color color) { this.queryField.setFieldBackgroundColor(color); } @Override public void setFieldForegroundColor(final Color color) { this.queryField.setFieldForegroundColor(color); } @Override public void setFieldInvalid(final String message, final Color foregroundColor, final Color backgroundColor) { this.queryField.setFieldInvalid(message, foregroundColor, backgroundColor); } @Override public void setFieldToolTip(final String toolTip) { this.queryField.setFieldToolTip(toolTip); } @Override public void setFieldValid() { this.queryField.setFieldValid(); } @Override public boolean setFieldValue(final Object value) { return this.queryField.setFieldValue(value); } @Override public void setToolTipText(final String text) { this.queryField.setToolTipText(text); } public void showAdvancedFilter() { final QueryWhereConditionField advancedFilter = new QueryWhereConditionField(this.layer, this, this.queryField.getText()); advancedFilter.showDialog(this); } @Override public void updateFieldValue() { this.queryField.updateFieldValue(); } }