blob: 84fa6c18da2ec6462a2c8139585c16fdaf5bc65b [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.syncbase.v23.services.syncbase;
import io.v.syncbase.v23.services.syncbase.nosql.Database;
import io.v.syncbase.v23.services.syncbase.nosql.Schema;
import io.v.syncbase.v23.services.syncbase.util.AccessController;
import io.v.v23.context.VContext;
import io.v.v23.security.access.Permissions;
import io.v.v23.verror.VException;
/**
* A handle for an app running as part of a {@link SyncbaseService}.
*/
public interface SyncbaseApp extends AccessController {
/**
* Returns the relative name of this app.
*/
String name();
/**
* Returns the full (i.e., object) name of this app.
*/
String fullName();
/**
* Returns {@code true} iff this app exists and the user has sufficient
* permissions to access it.
*
* @param ctx Vanadium context
* @return {@code true} iff this app exists and the user has sufficient
* permissions to access it
* @throws VException if the app's existence couldn't be determined
*/
boolean exists(VContext ctx) throws VException;
/**
* Returns a handle for a NoSQL database with the provided name.
* <p>
* Note that this database may not yet exist and can be created using the
* {@link Database#create} method.
*
* @param relativeName name of the NoSQL database; must not contain slashes
* @param schema database schema; it can be {@code null} only if schema was never
* set for the database in the first place
* @return a handle for a NoSQL database with the provided name
*/
Database getNoSqlDatabase(String relativeName, Schema schema);
/**
* Returns a list of all (relative) database names.
*
* @param ctx Vanadium context
* @throws VException if the list of database names couldn't be retrieved
*/
String[] listDatabases(VContext ctx) throws VException;
/**
* Creates the app.
*
* @param ctx Vanadium context
* @param perms app permissions; if {@code null}, {@link SyncbaseService}'s
* permissions are used
* @throws VException if the app couldn't be created
*/
void create(VContext ctx, Permissions perms) throws VException;
/**
* Deletes the app.
*
* @param ctx Vanadium context
* @throws VException if the app couldn't be deleted
*/
void delete(VContext ctx) throws VException;
}