io.v.v23.syncbase.SyncgroupImpl.java Source code

Java tutorial

Introduction

Here is the source code for io.v.v23.syncbase.SyncgroupImpl.java

Source

// 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);
    }
}