@Override
public List<OpResult> multi(Iterable<Op> ops) throws KeeperException, InterruptedException {
List<OpResult> opResults = new ArrayList<>();
for (Op op : ops) {
if (Op.Check.class.isAssignableFrom(op.getClass())) {
CheckVersionRequest check = (CheckVersionRequest) op.toRequestRecord();
exists(check.getPath(), false);
opResults.add(new OpResult.CheckResult());
} else if (Op.Create.class.isAssignableFrom(op.getClass())) {
CreateRequest create = (CreateRequest) op.toRequestRecord();
String path = create(create.getPath(), create.getData(), CreateMode.fromFlag(create.getFlags()));
opResults.add(new OpResult.CreateResult(path));
} else if (Op.Delete.class.isAssignableFrom(op.getClass())) {
DeleteRequest delete = (DeleteRequest) op.toRequestRecord();
delete(delete.getPath());
opResults.add(new OpResult.DeleteResult());
} else if (Op.SetData.class.isAssignableFrom(op.getClass())) {
SetDataRequest setData = (SetDataRequest) op.toRequestRecord();
writeData(setData.getPath(), setData.getData(), setData.getVersion());
opResults.add(new OpResult.SetDataResult(null));
}
}
return opResults;
}