WappenLite の配布に含まれているサンプル実装 (言語処理系として Java, GHCi, NestedVM, Scala, tuProlog, SISC Schemeなど) をそのまま利用する場合は、ここはスキップしても構いません。
コンテキストは util.IContext というインターフェイスを実装するクラスを作成します。
次のようなメソッドを実装する必要があります。
メソッド名 | 短い説明 |
---|---|
void configure(HashMap<String, String> config) | コンテキストの設定を変更します。 |
String save(String path, String contents) | ファイルをセーブします。 |
boolean waitForLoad() | ソースファイルのファイル構成に変化があるまで、
ブロックします。 現在使用されていません。将来的に廃止の方向です。 |
void load(Appendable out) | ソースファイルの内容を返します。 |
void load(String path, Appendable out) | 指定されたパスのソースファイルの内容を返します。 |
boolean isAuthenticationNecessary() | セッションの開始にパスワードが必要かどうかを示します。 |
boolean start(String account, String passwd) | 指定されたアカウントとパスワードでセッションをスタートします。 |
boolean stop() | セッションを終了します。 |
int run(String[] args) | プログラムを指定された引数で実行します。 |
Process exec(String[] args) | プログラムを指定された引数で実行します。 |
void write(String str) | 実行中のプログラムの標準入力に文字列を渡します。 |
void eof() | 実行中のプログラムの標準入力にEOFを渡します。 |
boolean waitForRead(int index) | index文字目以降の出力があるまでブロックします。 |
ArrayList<HashMap<String, Object>> read(int index) | index文字目以降の出力を返します。 |
void connect(util.Connection out) | 実行中のプログラムに出力ストリームを接続します。 |
void view(String path, OutputStream out) | 指定されたパスのファイルの内容を返します。 loadと似ていますが、 viewの場合はバイナリファイルでも構いません。 |
HashMap<String, Object> getStatus() | 現在のステータスを返します。 |
通常、コンテキストは util.TrivialContext という抽象クラスを継承して実装します。
util.TrivialContext (または、そのスーパークラスの util.AbstractContext)には、 util.IContext のメソッドのデフォルト実装の他に、 次のような protected なメソッドとフィールドがあります。フィールド名 | 説明 |
---|---|
File baseDir | ソースファイルなどの置き場所のベースディレクトリです。 |
String baseURL | ソースファイルなどをダウンロードしてくる場所のベースURLです。 |
String classpath | JVMを実行するときの CLASSPATH変数です。 |
HashMap<String, String> content | ソースファイルの内容のキャッシュです |
String encoding | テキストファイルのエンコーディングを指定します。 |
String[] hiddens | sources, jars以外の隠しファイルの相対パスのリストです。 |
String[] jars | CLASSPATHに入る JARファイルの相対パスのリストです |
HashMap<String, String> origin | sources, jars, hiddensのダウンロード元のURLのキャッシュです。 |
String output | プログラムの出力を保存するファイルの相対パスです。 |
HashMap<String, String> properties | configure()の引数のキャッシュです。 |
boolean running | プログラムが実行中か否かを示します。 |
String[] sources | エディターに表示するソースファイルの相対パスのリストです。 |
HashMap<String, Object> status | ステータス情報です。 |
Process process | 実行中のプログラムのプロセスです。 |
OutputStream out | 上記のプロセスの標準入力に繋がっている出力ストリームです。 |
util.ContextBuffer buf | プログラムの出力を保存するバッファーです。 |
メソッド名 | 説明 |
void initialize(HashMap<String, String> config) | フィールドの初期化を行ないます。 |
void loadContents() | baseURLからbaseDirへ、 sources, jars, hiddensで指定されたファイルをダウンロードします。 |
java.io.File saveContents(String path, String contents) |
baseDirのpathに、contentsの内容を持つファイルを作成します。 |
boolean contentChangeNotify() | サーバー側の要因でcontentsの内容に変更があったとき、 クライアント側のエディターに変更を促すために呼びます。 |
void uploadFile(String path, String upload) |
baseDirのpathに存在するファイルを、 baseURL, uploadで指定されるURLにアップロードします。 |
通常、コンテキストの各メソッドは
util.TrivialContextを継承して、次のように実装して下さい。
(オーバーライドが必要と思われるもののみ列挙しています。)
コンテキストの設定を変更します。バックエンド設定ファイルのパラメーターについては、 バックエンドパラメーターの設定 をみて下さい。
最初に initialize(config)を呼び出して下さい。 sourcesなどのフィールドの初期化を行ないます。
また、 protectedメソッドの void loadContents()を呼んで下さい。 ソースファイルなどをダウンロードして配備します。
ファイルをセーブします。
protectedメソッドの File saveContents(String path, String contents) を使用して、実際にファイル内容をファイルシステムに保存します。
その後、コンパイラー方式の処理系の場合は、 ここでコンパイルを行なって下さい。インタプリター方式の処理系の場合は、 リロードして下さい。
コンパイル時にエラーメッセージなどが出たときは、 戻り値として返して下さい。エラーがなければ nullを返して下さい。
セッションの開始にパスワードが必要かどうかを示します。 false以外を返す場合はオーバーライドする必要があります。
SSHなどを使用して、実行の前に認証が必要なコンテキストは、 このメソッドでログインします。 また、インタプリター方式の場合はrun()を呼び出して、 インタプリターを起動して下さい。
SSHなどを使用して、実行の前に認証が必要なコンテキストは、 このメソッドでログアウトします。
インタプリター方式の場合は、インタプリターを起動します。
コンパイラー方式の処理系はプログラムを指定された引数で実行します。
このメソッドは Session/Run サーブレットから使用されます。
通常、 Runtime.getRuntime.exec(String[] cmdarray, String[] envp, File dir)メソッドや ProcessBuilderクラスを使って、外部プロセスとして実行します。
コンパイラー方式の処理系はプログラムを指定された引数で実行します。
インタプリター方式の場合は、通常使用しません。
このメソッドは Session/Exec サーブレットから使用されます。
現在のステータスを返します。どのようなステータスを返すかは、 コンテキストの作者の裁量に任されますが、 runningという現在プログラムが実行中かどうかを示すプロパティーは、 必ず含めて下さい。
テストの方法は、 「WappenLite バックエンドのテスト実行と配備」の「テストの方法」を見てください。