// Copyright (c) 2006 Dustin Sallings <dustin@spy.net> package net.spy.memcached.protocol.ascii; import java.nio.ByteBuffer; import net.spy.memcached.KeyUtil; import net.spy.memcached.ops.MutatatorOperation; import net.spy.memcached.ops.Mutator; import net.spy.memcached.ops.OperationCallback; import net.spy.memcached.ops.OperationState; import net.spy.memcached.ops.OperationStatus; /** * Operation for mutating integers inside of memcached. */ final class MutatorOperationImpl extends OperationImpl implements MutatatorOperation { public static final int OVERHEAD=32; private static final OperationStatus NOT_FOUND= new OperationStatus(false, "NOT_FOUND"); private final Mutator mutator; private final String key; private final int amount; public MutatorOperationImpl(Mutator m, String k, int amt, OperationCallback c) { super(c); mutator=m; key=k; amount=amt; } @Override public void handleLine(String line) { getLogger().debug("Result: %s", line); OperationStatus found=null; if(line.equals("NOT_FOUND")) { found=NOT_FOUND; } else { found=new OperationStatus(true, line); } getCallback().receivedStatus(found); transitionState(OperationState.COMPLETE); } @Override public void initialize() { int size=KeyUtil.getKeyBytes(key).length + OVERHEAD; ByteBuffer b=ByteBuffer.allocate(size); setArguments(b, mutator.name(), key, amount); b.flip(); setBuffer(b); } @Override protected void wasCancelled() { // XXX: Replace this comment with why the hell I did this. getCallback().receivedStatus(CANCELLED); } }