@Override public ParseFieldOperation mergeWithPrevious(ParseFieldOperation previous) { if (previous == null) { return this; } else if (previous instanceof ParseDeleteOperation) { return new ParseSetOperation(objects); } else if (previous instanceof ParseSetOperation) { Object value = ((ParseSetOperation) previous).getValue(); if (value instanceof JSONArray) { ArrayList<Object> result = ParseFieldOperations.jsonArrayAsArrayList((JSONArray) value); result.addAll(objects); return new ParseSetOperation(new JSONArray(result)); } else if (value instanceof List) { ArrayList<Object> result = new ArrayList<>((List<?>) value); result.addAll(objects); return new ParseSetOperation(result); } else { throw new IllegalArgumentException("You can only add an item to a List or JSONArray."); } } else if (previous instanceof ParseAddOperation) { ArrayList<Object> result = new ArrayList<>(((ParseAddOperation) previous).objects); result.addAll(objects); return new ParseAddOperation(result); } else { throw new IllegalArgumentException("Operation is invalid after previous operation."); } }
@Override public ParseFieldOperation mergeWithPrevious(ParseFieldOperation previous) { if (previous == null) { return this; } else if (previous instanceof ParseDeleteOperation) { return new ParseSetOperation(objects); } else if (previous instanceof ParseSetOperation) { Object value = ((ParseSetOperation) previous).getValue(); if (value instanceof JSONArray || value instanceof List) { return new ParseSetOperation(this.apply(value, null)); } else { throw new IllegalArgumentException("You can only add an item to a List or JSONArray."); } } else if (previous instanceof ParseRemoveOperation) { HashSet<Object> result = new HashSet<>(((ParseRemoveOperation) previous).objects); result.addAll(objects); return new ParseRemoveOperation(result); } else { throw new IllegalArgumentException("Operation is invalid after previous operation."); } }
@Override @SuppressWarnings("unchecked") public ParseFieldOperation mergeWithPrevious(ParseFieldOperation previous) { if (previous == null) { return this; } else if (previous instanceof ParseDeleteOperation) { return new ParseSetOperation(objects); } else if (previous instanceof ParseSetOperation) { Object value = ((ParseSetOperation) previous).getValue(); if (value instanceof JSONArray || value instanceof List) { return new ParseSetOperation(this.apply(value, null)); } else { throw new IllegalArgumentException("You can only add an item to a List or JSONArray."); } } else if (previous instanceof ParseAddUniqueOperation) { List<Object> previousResult = new ArrayList<>(((ParseAddUniqueOperation) previous).objects); return new ParseAddUniqueOperation((List<Object>) this.apply(previousResult, null)); } else { throw new IllegalArgumentException("Operation is invalid after previous operation."); } }
@Override public ParseFieldOperation mergeWithPrevious(ParseFieldOperation previous) { if (previous == null) { return this; } else if (previous instanceof ParseDeleteOperation) { return new ParseSetOperation(amount); } else if (previous instanceof ParseSetOperation) { Object oldValue = ((ParseSetOperation) previous).getValue(); if (oldValue instanceof Number) { return new ParseSetOperation(Numbers.add((Number) oldValue, amount)); } else { throw new IllegalArgumentException("You cannot increment a non-number."); } } else if (previous instanceof ParseIncrementOperation) { Number oldAmount = ((ParseIncrementOperation) previous).amount; return new ParseIncrementOperation(Numbers.add(oldAmount, amount)); } else { throw new IllegalArgumentException("Operation is invalid after previous operation."); } }