package org.infinispan.atomic;
import java.io.Serializable;
import java.util.HashMap;
import org.infinispan.marshall.core.ExternalPojo;
/**
* @author anistor@redhat.com
* @since 5.3
*/
public class TestDeltaAware implements DeltaAware, Serializable, ExternalPojo {
private String firstComponent;
private String secondComponent;
private transient TestDelta delta;
@Override
public void commit() {
delta = null;
}
@Override
public Delta delta() {
Delta toReturn = getDelta();
delta = null;
return toReturn;
}
private TestDelta getDelta() {
if (delta == null)
delta = new TestDelta();
return delta;
}
public String getFirstComponent() {
return firstComponent;
}
public void setFirstComponent(String firstComponent) {
getDelta().registerComponentChange("firstComponent", firstComponent);
this.firstComponent = firstComponent;
}
public String getSecondComponent() {
return secondComponent;
}
public void setSecondComponent(String secondComponent) {
getDelta().registerComponentChange("secondComponent", secondComponent);
this.secondComponent = secondComponent;
}
static class TestDelta implements Delta, Serializable, ExternalPojo {
private final HashMap<String, String> changeLog = new HashMap<String, String>();
void registerComponentChange(String componentName, String componentValue) {
changeLog.put(componentName, componentValue);
}
@Override
public DeltaAware merge(DeltaAware d) {
TestDeltaAware other = d instanceof TestDeltaAware ? (TestDeltaAware) d : new TestDeltaAware();
for (String componentName : changeLog.keySet()) {
String componentValue = changeLog.get(componentName);
if (componentName.equals("firstComponent")) {
other.firstComponent = componentValue;
} else if (componentName.equals("secondComponent")) {
other.secondComponent = componentValue;
} else {
throw new RuntimeException("Unknown component: " + componentName);
}
}
return other;
}
}
}