blob: 24993523564bceed89cac5ad09d70f03d9ee9439 [file] [log] [blame]
// Copyright 2015 The Vanadium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package io.v.v23.syncbase.nosql;
import java.util.Map;
import com.google.common.base.Function;
import com.google.common.collect.ImmutableMap;
import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.ListenableFuture;
import io.v.v23.VFutures;
import io.v.v23.services.syncbase.nosql.DatabaseClient;
import io.v.v23.services.syncbase.nosql.DatabaseClientFactory;
import io.v.v23.services.syncbase.nosql.SyncgroupManagerClient;
import io.v.v23.services.syncbase.nosql.SyncgroupMemberInfo;
import io.v.v23.services.syncbase.nosql.SyncgroupSpec;
import io.v.v23.context.VContext;
class SyncgroupImpl implements Syncgroup {
private final String name;
private final String dbFullName;
private final DatabaseClient dbClient;
SyncgroupImpl(String dbFullName, String name) {
this.name = name;
this.dbFullName = dbFullName;
this.dbClient = DatabaseClientFactory.getDatabaseClient(dbFullName);
}
@Override
public ListenableFuture<Void> create(VContext ctx, SyncgroupSpec spec,
SyncgroupMemberInfo info) {
return dbClient.createSyncgroup(ctx, name, spec, info);
}
@Override
public ListenableFuture<SyncgroupSpec> join(VContext ctx, SyncgroupMemberInfo info) {
return dbClient.joinSyncgroup(ctx, name, info);
}
@Override
public ListenableFuture<Void> leave(VContext ctx) {
return dbClient.leaveSyncgroup(ctx, name);
}
@Override
public ListenableFuture<Void> destroy(VContext ctx) {
return dbClient.destroySyncgroup(ctx, name);
}
@Override
public ListenableFuture<Void> eject(VContext ctx, String member) {
return dbClient.ejectFromSyncgroup(ctx, name, member);
}
@Override
public ListenableFuture<Map<String, SyncgroupSpec>> getSpec(VContext ctx) {
return VFutures.withUserLandChecks(ctx,
Futures.transform(dbClient.getSyncgroupSpec(ctx, name), new Function<
SyncgroupManagerClient.GetSyncgroupSpecOut, Map<String, SyncgroupSpec>>() {
@Override
public Map<String, SyncgroupSpec> apply(
SyncgroupManagerClient.GetSyncgroupSpecOut spec) {
return ImmutableMap.of(spec.version, spec.spec);
}
}));
}
@Override
public ListenableFuture<Void> setSpec(VContext ctx, SyncgroupSpec spec, String version) {
return dbClient.setSyncgroupSpec(ctx, name, spec, version);
}
@Override
public ListenableFuture<Map<String, SyncgroupMemberInfo>> getMembers(VContext ctx) {
return dbClient.getSyncgroupMembers(ctx, name);
}
}