*/
public T execute() throws RiakRetryFailedException, UnresolvedConflictException, ConversionException {
final T resolved = fetchObject.execute();
final T mutated = mutation.apply(resolved);
final IRiakObject o = converter.fromDomain(mutated, fetchObject.getVClock());
final StoreMeta storeMeta = storeMetaBuilder.returnBody(returnBody).build();
// if non match and if not modified require extra data for the HTTP API
// pull that from the riak object if possible
if(storeMeta.hasIfNoneMatch() && storeMeta.getIfNoneMatch() && o != null) {
storeMeta.etags(new String[] {o.getVtag()});
}
if(storeMeta.hasIfNotModified() && storeMeta.getIfNotModified() && o != null) {
storeMeta.lastModified(o.getLastModified());
}
final RiakResponse stored = retrier.attempt(new Callable<RiakResponse>() {
public RiakResponse call() throws Exception {
return client.store(o, storeMeta);