package com.revolsys.swing.map.form; import java.lang.ref.Reference; import java.lang.ref.WeakReference; import com.revolsys.datatype.DataType; import com.revolsys.swing.action.enablecheck.AbstractEnableCheck; import com.revolsys.swing.map.layer.record.LayerRecord; import com.revolsys.util.Property; public class LayerFormRecordPropertyEnableCheck extends AbstractEnableCheck { private final Reference<LayerRecordForm> form; private boolean inverse = false; private final String propertyName; private final Object value; public LayerFormRecordPropertyEnableCheck(final LayerRecordForm form, final String propertyName) { this(form, propertyName, true); } public LayerFormRecordPropertyEnableCheck(final LayerRecordForm form, final String propertyName, final Object value) { this(form, propertyName, value, false); } public LayerFormRecordPropertyEnableCheck(final LayerRecordForm form, final String propertyName, final Object value, final boolean inverse) { this.form = new WeakReference<>(form); Property.addListener(form, propertyName, this); this.propertyName = propertyName; this.value = value; this.inverse = inverse; } protected LayerRecord getRecord() { final LayerRecordForm form = this.form.get(); if (form == null) { return null; } else { return form.getRecord(); } } @Override public boolean isEnabled() { final LayerRecord record = getRecord(); final Object value = Property.getSimple(record, this.propertyName); final boolean equal = DataType.equal(value, this.value); if (equal == !this.inverse) { return enabled(); } else { return disabled(); } } @Override public String toString() { return getRecord() + "." + this.propertyName + "=" + this.value; } }