org.jsimpledb.change.MapFieldReplace Maven / Gradle / Ivy
/*
* Copyright (C) 2015 Archie L. Cobbs. All rights reserved.
*/
package org.jsimpledb.change;
import java.util.Map;
import org.jsimpledb.JObject;
import org.jsimpledb.JTransaction;
/**
* Notification object that gets passed to {@link org.jsimpledb.annotation.OnChange @OnChange}-annotated methods
* when the value in a key/value pair is replaced with a new value.
*
* @param the type of the object containing the changed field
* @param the type of the changed map's key
* @param the type of the changed map's value
*/
public class MapFieldReplace extends MapFieldChange {
private final K key;
private final V oldValue;
private final V newValue;
/**
* Constructor.
*
* @param jobj Java object containing the map field that changed
* @param storageId the storage ID of the affected field
* @param fieldName the name of the field that changed
* @param key the key whose value was changed
* @param oldValue the old value associated with {@code key}
* @param newValue the new value associated with {@code key}
* @throws IllegalArgumentException if {@code jobj} or {@code fieldName} is null
*/
public MapFieldReplace(T jobj, int storageId, String fieldName, K key, V oldValue, V newValue) {
super(jobj, storageId, fieldName);
this.key = key;
this.oldValue = oldValue;
this.newValue = newValue;
}
@Override
public R visit(ChangeSwitch target) {
return target.caseMapFieldReplace(this);
}
@Override
@SuppressWarnings("unchecked")
public void apply(JTransaction jtx, JObject jobj) {
((Map)jtx.readMapField(jobj.getObjId(), this.getStorageId(), false)).put(this.key, this.newValue);
}
/**
* Get the key of the key/value pair whose value was replaced.
*
* @return the key of the replaced value
*/
public K getKey() {
return this.key;
}
/**
* Get the value of the key/value pair before the change.
*
* @return the replaced value
*/
public V getOldValue() {
return this.oldValue;
}
/**
* Get the value of the key/value pair after the change.
*
* @return the replacing value
*/
public V getNewValue() {
return this.newValue;
}
// Object
@Override
public boolean equals(Object obj) {
if (obj == this)
return true;
if (!super.equals(obj))
return false;
final MapFieldReplace, ?, ?> that = (MapFieldReplace, ?, ?>)obj;
return (this.key != null ? this.key.equals(that.key) : that.key == null)
&& (this.oldValue != null ? this.oldValue.equals(that.oldValue) : that.oldValue == null)
&& (this.newValue != null ? this.newValue.equals(that.newValue) : that.newValue == null);
}
@Override
public int hashCode() {
return super.hashCode()
^ (this.key != null ? this.key.hashCode() : 0)
^ (this.oldValue != null ? this.oldValue.hashCode() : 0)
^ (this.newValue != null ? this.newValue.hashCode() : 0);
}
@Override
public String toString() {
return "MapFieldReplace[object=" + this.getObject() + ",field=\"" + this.getFieldName() + "\",key=" + this.key
+ ",oldValue=" + this.oldValue + ",newValue=" + this.newValue + "]";
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy