}
private void replaceAndFireEvent(final int index, JsonArray values, String sessionId,
String userId) {
assert index + values.length() <= length();
final JsonArray oldObjects = Json.createArray();
final JsonArray newObjects = Json.createArray();
values.forEach(new ListIterator<JsonArray>() {
@Override
public void call(int idx, JsonArray newValue) {
oldObjects.push(get(index + idx));
newObjects.push(JsonSerializer.deserializeObject(newValue, model.objects));
JsonArray oldValue = snapshot.getArray(index + idx);
snapshot.remove(index + idx);
snapshot.insert(index + idx++, newValue);
model.addOrRemoveParent(oldValue, id, false);
model.addOrRemoveParent(newValue, id, true);
model.bytesUsed -= (oldValue == null ? "null" : oldValue.toJsonString()).length();
model.bytesUsed += (newValue == null ? "null" : newValue.toJsonString()).length();
}
});
ValuesSetEvent event =
new ValuesSetEventImpl(event(sessionId, userId).set("index", index).set("oldValues",