@Override
    public Path move(final Path file, final Path renamed, final TransferStatus status, final Delete.Callback delete, final ConnectionCallback callback) throws BackgroundException {
        try {
            final StoregateApiClient client = session.getClient();
            final MoveFileRequest move = new MoveFileRequest()
                .name(renamed.getName())
                .parentID(fileid.getFileId(renamed.getParent()))
                .mode(1); // Overwrite
            final HttpEntityEnclosingRequestBase request;
            request = new HttpPost(String.format("%s/v4.2/files/%s/move", client.getBasePath(), fileid.getFileId(file)));
            if(status.getLockId() != null) {
                request.addHeader("X-Lock-Id", status.getLockId().toString());
            }
            request.setEntity(new StringEntity(new JSON().getContext(move.getClass()).writeValueAsString(move),
                ContentType.create("application/json", StandardCharsets.UTF_8.name())));
            request.addHeader(HTTP.CONTENT_TYPE, MEDIA_TYPE);
            final HttpResponse response = client.getClient().execute(request);
            try {
                switch(response.getStatusLine().getStatusCode()) {
                    case HttpStatus.SC_NO_CONTENT:
                        final PathAttributes attr = new PathAttributes(file.attributes());
                        fileid.cache(file, null);
                        fileid.cache(renamed, attr.getFileId());
                        return renamed.withAttributes(attr);
                    default:
                        throw new StoregateExceptionMappingService(fileid).map("Cannot rename {0}",
                                new ApiException(response.getStatusLine().getStatusCode(), response.getStatusLine().getReasonPhrase()), file);
                }
            }
            finally {
                EntityUtils.consume(response.getEntity());
            }
        }
        catch(IOException e) {
            throw new DefaultIOExceptionMappingService().map("Cannot rename {0}", e, file);
        }
    }
@Test
    public void testMoveOverride() throws Exception {
        final StoregateIdProvider nodeid = new StoregateIdProvider(session);
        final Path room = new StoregateDirectoryFeature(session, nodeid).mkdir(
            new Path(String.format("/My files/%s", new AlphanumericRandomStringService().random()),
                EnumSet.of(Path.Type.directory, Path.Type.volume)), new TransferStatus());
        final String filename = new AlphanumericRandomStringService().random();
        final Path test = new StoregateTouchFeature(session, nodeid).touch(new Path(room, filename, EnumSet.of(Path.Type.file)), new TransferStatus());
        final Path target = new Path(room, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.file));
        new StoregateTouchFeature(session, nodeid).touch(target, new TransferStatus());
        new StoregateMoveFeature(session, nodeid).move(test, target, new TransferStatus().exists(true), new Delete.DisabledCallback(), new DisabledConnectionCallback());
        assertFalse(new DefaultFindFeature(session).find(new Path(room, filename, EnumSet.of(Path.Type.file))));
        assertTrue(new DefaultFindFeature(session).find(target));
        new StoregateDeleteFeature(session, nodeid).delete(Collections.singletonList(room), new DisabledLoginCallback(), new Delete.DisabledCallback());
    }