Java tutorial
// 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; 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.context.VContext; import io.v.v23.services.syncbase.DatabaseClient; import io.v.v23.services.syncbase.DatabaseClientFactory; import io.v.v23.services.syncbase.Id; import io.v.v23.services.syncbase.SyncgroupManagerClient; import io.v.v23.services.syncbase.SyncgroupMemberInfo; import io.v.v23.services.syncbase.SyncgroupSpec; import java.util.List; import java.util.Map; class SyncgroupImpl implements Syncgroup { private final Id id; private final String dbFullName; private final DatabaseClient dbClient; SyncgroupImpl(String dbFullName, Id id) { this.id = id; this.dbFullName = dbFullName; this.dbClient = DatabaseClientFactory.getDatabaseClient(dbFullName); } @Override public ListenableFuture<Void> create(VContext ctx, SyncgroupSpec spec, SyncgroupMemberInfo info) { return dbClient.createSyncgroup(ctx, id, spec, info); } @Override public ListenableFuture<SyncgroupSpec> join(VContext ctx, String syncbaseName, List<String> expectedSyncbaseBlessings, SyncgroupMemberInfo info) { return dbClient.joinSyncgroup(ctx, syncbaseName, expectedSyncbaseBlessings, id, info); } @Override public ListenableFuture<Void> leave(VContext ctx) { return dbClient.leaveSyncgroup(ctx, id); } @Override public ListenableFuture<Void> destroy(VContext ctx) { return dbClient.destroySyncgroup(ctx, id); } @Override public ListenableFuture<Void> eject(VContext ctx, String member) { return dbClient.ejectFromSyncgroup(ctx, id, member); } @Override public ListenableFuture<Map<String, SyncgroupSpec>> getSpec(VContext ctx) { return VFutures.withUserLandChecks(ctx, Futures.transform(dbClient.getSyncgroupSpec(ctx, id), 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, id, spec, version); } @Override public ListenableFuture<Map<String, SyncgroupMemberInfo>> getMembers(VContext ctx) { return dbClient.getSyncgroupMembers(ctx, id); } }