package org.basex.server; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import org.basex.core.Command; import org.basex.io.out.ArrayOutput; /** * <p>This class defines methods for evaluating commands, either locally or * via the client/server architecture.</p> * * <p>The results of database commands are returned as strings. If an output * stream is specified in the constructor or with * {@link #setOutputStream(OutputStream)}, results are instead serialized * to that stream. * The class is implemented by the {@link ClientSession} and * {@link LocalSession} classes.</p> * * @author BaseX Team 2005-12, BSD License * @author Christian Gruen */ public abstract class Session { /** Client output stream. */ protected OutputStream out; /** Command info. */ String info; /** * Executes a {@link Command} and returns the result as string or serializes * it to the specified output stream. * @param command command to be executed * @return result, or {@code null} reference * @throws IOException I/O exception */ public final String execute(final Command command) throws IOException { final ArrayOutput ao = out == null ? new ArrayOutput() : null; execute(command, ao != null ? ao : out); return ao != null ? ao.toString() : null; } /** * Executes a command and returns the result as string or serializes * it to the specified output stream. * @param command command to be parsed * @return result, or {@code null} reference * @throws IOException I/O exception */ public final String execute(final String command) throws IOException { final ArrayOutput ao = out == null ? new ArrayOutput() : null; execute(command, ao != null ? ao : out); return ao != null ? ao.toString() : null; } /** * Returns a query object for the specified query string. * @param query query string * @return query * @throws IOException I/O exception */ public abstract Query query(final String query) throws IOException; /** * Creates a database. * @param name name of database * @param input xml input * @throws IOException I/O exception */ public abstract void create(final String name, final InputStream input) throws IOException; /** * Adds a document to the opened database. * @param path target path * @param input xml input * @throws IOException I/O exception */ public abstract void add(final String path, final InputStream input) throws IOException; /** * Replaces a document in an open database. * @param path document(s) to replace * @param input new content * @throws IOException I/O exception */ public abstract void replace(final String path, final InputStream input) throws IOException; /** * Stores raw data in an open database. * @param path target path * @param input binary input * @throws IOException I/O exception */ public abstract void store(final String path, final InputStream input) throws IOException; /** * Returns command info as a string, regardless of whether an output stream * was specified. * @return command info */ public final String info() { return info; } /** * Specifies an output stream. The output stream can be invalidated by * passing on {@code null} as argument. * @param output client output stream. */ public final void setOutputStream(final OutputStream output) { out = output; } /** * Closes the session. * @throws IOException I/O exception */ public abstract void close() throws IOException; // PROTECTED METHODS ======================================================== /** * Constructor. * @param output client output stream; if set to {@code null}, all * results will be returned as strings. */ Session(final OutputStream output) { out = output; } /** * Executes a command and prints the result to the specified output stream. * @param cmd command to be parsed * @param os output stream * @throws IOException I/O exception */ protected abstract void execute(final String cmd, final OutputStream os) throws IOException; /** * Executes a command and prints the result to the specified output stream. * @param cmd command to be executed * @param os output stream * @throws IOException I/O exception */ protected abstract void execute(final Command cmd, final OutputStream os) throws IOException; }