@Override public ParseFieldOperation decode(Parcel source, ParseParcelDecoder decoder) { return new ParseIncrementOperation((Number) decoder.decode(source)); } });
/** * Atomically increments the given key by the given number. * * @param key The key to increment. * @param amount The amount to increment by. */ public void increment(@NonNull String key, @NonNull Number amount) { ParseIncrementOperation operation = new ParseIncrementOperation(amount); performOperation(key, operation); }
@Override public ParseFieldOperation decode(JSONObject object, ParseDecoder decoder) { return new ParseIncrementOperation((Number) decoder.decode(object.opt("amount"))); }
@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."); } }
@Test public void testParseFieldOperations() throws JSONException { ParseIncrementOperation incrementOperation = new ParseIncrementOperation(2); JSONObject incrementJSON = (JSONObject) testClassObject.encode(incrementOperation); assertNotNull(incrementJSON); assertEquals("Increment", incrementJSON.getString("__op")); assertEquals(2, incrementJSON.getInt("amount")); }