/** * Copyright (C) 2015 Typesafe Inc. */ package docs.ddata.japi; import java.util.HashSet; import java.util.Set; import akka.cluster.ddata.AbstractReplicatedData; import akka.cluster.ddata.GSet; //#twophaseset public class TwoPhaseSet extends AbstractReplicatedData { public final GSet adds; public final GSet removals; public TwoPhaseSet(GSet adds, GSet removals) { this.adds = adds; this.removals = removals; } public static TwoPhaseSet create() { return new TwoPhaseSet(GSet.create(), GSet.create()); } public TwoPhaseSet add(String element) { return new TwoPhaseSet(adds.add(element), removals); } public TwoPhaseSet remove(String element) { return new TwoPhaseSet(adds, removals.add(element)); } public Set getElements() { Set result = new HashSet<>(adds.getElements()); result.removeAll(removals.getElements()); return result; } @Override public TwoPhaseSet mergeData(TwoPhaseSet that) { return new TwoPhaseSet(this.adds.merge(that.adds), this.removals.merge(that.removals)); } } //#twophaseset