/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.karaf.shell.api.console; import java.io.Closeable; import java.io.IOException; import java.io.InputStream; import java.io.PrintStream; import java.nio.file.Path; /** * A <code>Session</code> can be used to execute commands. * * The {@link org.apache.karaf.shell.api.console.Registry} associated * with this <code>Session</code> will contain: <ul> * <li>{@link SessionFactory}</li> * <li>{@link Command}s</li> * <li>{@link Session}</li> * <li>{@link Registry}</li> * <li>{@link History}</li> * <li>{@link Terminal}</li> * </ul> */ public interface Session extends Runnable, Closeable { // // Session properties // // Property names starting with "karaf." are reserved for karaf // String SCOPE = "SCOPE"; String SUBSHELL = "SUBSHELL"; String PRINT_STACK_TRACES = "karaf.printStackTraces"; String LAST_EXCEPTION = "karaf.lastException"; String IGNORE_INTERRUPTS = "karaf.ignoreInterrupts"; String COMPLETION_MODE = "karaf.completionMode"; String COMPLETION_MODE_GLOBAL = "global"; String COMPLETION_MODE_SUBSHELL = "subshell"; String COMPLETION_MODE_FIRST = "first"; String SCOPE_GLOBAL = "*"; /** * Execute a program in this session. * * @param commandline the provided command line * @return the result of the execution * @throws Exception in case of execution failure. */ Object execute(CharSequence commandline) throws Exception; /** * Get the value of a variable. * * @param name the key name in the session * @return the corresponding object */ Object get(String name); /** * Set the value of a variable. * * @param name Name of the variable. * @param value Value of the variable */ void put(String name, Object value); /** * Return the input stream that is the first of the pipeline. This stream is * sometimes necessary to communicate directly to the end user. For example, * a "less" or "more" command needs direct input from the keyboard to * control the paging. * * @return InputStream used closest to the user or null if input is from a * file. */ InputStream getKeyboard(); /** * Return the PrintStream for the console. This must always be the stream * "closest" to the user. This stream can be used to post messages that * bypass the piping. If the output is piped to a file, then the object * returned must be null. * * @return the console stream */ PrintStream getConsole(); /** * Prompt the user for a line. * * @param prompt the session prompt * @param mask the session mask * @return the corresponding line * @throws java.io.IOException in case of prompting failure */ String readLine(String prompt, final Character mask) throws IOException; /** * Retrieve the {@link org.apache.karaf.shell.api.console.Terminal} associated * with this <code>Session</code> or <code>null</code> if this <code>Session</code> * is headless. * * @return the session terminal */ Terminal getTerminal(); /** * Retrieve the {@link org.apache.karaf.shell.api.console.History} associated * with this <code>Session</code> or <code>null</code> if this <code>Session</code> * is headless. * * @return the session history */ History getHistory(); /** * Retrieve the {@link org.apache.karaf.shell.api.console.Registry} associated * with this <code>Session</code>. * * @return the session registry */ Registry getRegistry(); /** * Retrieve the {@link org.apache.karaf.shell.api.console.SessionFactory} associated * with this <code>Session</code>. * * @return the session factory */ SessionFactory getFactory(); /** * Resolve a command name. If the command name has no specified scope, the fully * qualified command name will be returned, depending on the scopes and current * subshell. * * @param name the command name * @return the full qualified command name */ String resolveCommand(String name); Path currentDir(); void currentDir(Path path); /** * Close this session. After the session is closed, it will throw * IllegalStateException when it is used. */ void close(); }