/** {@inheritDoc} */
    @Override
    public TestValue process(MutableEntry<TestKey, TestValue> e, Object... args) {
      TestValue old = e.getValue();

      if (val != null) e.setValue(new TestValue(val));

      return old;
    }
 @Override
 public Object process(MutableEntry<Integer, Long> entry, Object... arguments) {
   if (delayMs > 0) {
     sleepMillis(delayMs);
   }
   long newValue = entry.getValue() + increment;
   entry.setValue(newValue);
   return null;
 }
    /** {@inheritDoc} */
    @Override
    public BinaryObjectException process(
        MutableEntry<PortableMetadataKey, BinaryMetadata> entry, Object... args) {
      try {
        BinaryMetadata oldMeta = entry.getValue();

        BinaryMetadata mergedMeta = PortableUtils.mergeMetadata(oldMeta, newMeta);

        if (mergedMeta != oldMeta) entry.setValue(mergedMeta);

        return null;
      } catch (BinaryObjectException e) {
        return e;
      }
    }
    @Override
    public Void process(MutableEntry<Integer, String> entry, Object... arguments)
        throws EntryProcessorException {

      entry.setValue("Foo");
      return null;
    }
  @Override
  public Integer process(MutableEntry<String, Integer> mutableEntry, Object... objects)
      throws EntryProcessorException {
    try {
      String finalScript = "function run(value, log) {" + script + "}";

      engine.eval(finalScript);
      Double outputValue =
          (Double)
              ((Invocable) engine)
                  .invokeFunction("run", new Object[] {mutableEntry.getValue(), log});
      int newValue = outputValue.intValue();
      mutableEntry.setValue(newValue);
      return newValue;

    } catch (Exception e) {
      throw new EntryProcessorException("Error executing script", e);
    }
  }