package com.revolsys.swing.undo;
import java.util.LinkedHashMap;
import java.util.Map;
import com.revolsys.datatype.DataType;
import com.revolsys.swing.map.layer.record.LayerRecord;
public class SwitchRecordFields extends AbstractUndoableEdit {
private static final long serialVersionUID = 1L;
private final String fieldName1;
private final String fieldName2;
private final LayerRecord record;
private final Object value1;
private final Object value2;
public SwitchRecordFields(final LayerRecord record, final String fieldName1, final Object value1,
final String fieldName2, final Object value2) {
this.record = record;
this.fieldName1 = fieldName1;
this.value1 = value1;
this.fieldName2 = fieldName2;
this.value2 = value2;
}
public SwitchRecordFields(final LayerRecord record, final String fieldName1,
final String fieldName2) {
this.record = record;
this.fieldName1 = fieldName1;
this.fieldName2 = fieldName2;
this.value1 = record.getValue(fieldName1);
this.value2 = record.getValue(fieldName2);
}
@Override
public boolean canRedo() {
if (super.canRedo()) {
final Object value1 = this.record.getValue(this.fieldName1);
final Object value2 = this.record.getValue(this.fieldName2);
if (!DataType.equal(value1, value2)) {
if (DataType.equal(this.value1, value1)) {
if (DataType.equal(this.value2, value2)) {
return true;
}
}
}
}
return false;
}
@Override
public boolean canUndo() {
if (super.canUndo()) {
final Object value1 = this.record.getValue(this.fieldName1);
final Object value2 = this.record.getValue(this.fieldName2);
if (DataType.equal(this.value1, value2)) {
if (DataType.equal(this.value2, value1)) {
return true;
}
}
}
return false;
}
@Override
protected void redoDo() {
final Map<String, Object> newValues = new LinkedHashMap<>();
newValues.put(this.fieldName1, this.value2);
newValues.put(this.fieldName2, this.value1);
this.record.setValues(newValues);
}
@Override
public String toString() {
return "switch " + this.fieldName1 + "=" + this.value1 + " and " + this.fieldName2 + "="
+ this.value2;
}
@Override
protected void undoDo() {
final Map<String, Object> newValues = new LinkedHashMap<>();
newValues.put(this.fieldName1, this.value1);
newValues.put(this.fieldName2, this.value2);
this.record.setValues(newValues);
}
}