JSエディタのスナップショットビルド

AmaterasのJavaScriptエディタを改良しているけど,より多くの方にテストしてほしいな~とか思い,スナップショットビルドができるようにしてみました.

http://amateras.sourceforge.jp/files/htmleditor/

試すためには,そのzipの中のtk.~というディレクトリをEclipseのdropinsディレクトリ以下に置いてください.pluginsとかdropinsとかに既に旧バージョンのjarとかがあると,変な動きになると思うので,あれば取り除いてください.

今までより何が強化されているかというと,パーサーにはRhinoを使っているので,JavaScriptの解析能力は向上していると思います.あとは,依存するJavaScriptとかあればプロジェクトのプロパティで依存するJSファイルを指定できます.まぁ,前からあった機能ですが,ECMAScriptのオブジェクトやFirefoxのオブジェクトとかを追加して,よく使いそうなやつはチェックボックスでも指定できます(一応,node.jsも入れてみた).これらのJSファイルが補完の情報に利用されます.あとは,commonJSのmoduleにある require も対応したいと思っていますが,まだ,相対パスの指定しか対応できていません.

という感じで,もっとも重要なことは,これはスナップショットビルドです(その時点で最新のビルドです).つまり,想定する利用者はオープンソースだから一緒にJavaScriptエディタを良くしてやろう,というような生産的なご意見をいただける方の利用を期待しています.質にシビアな現場での利用とかは全く想定していません.バグとか改善点などをお知らせいただければ,ベストエフォートで対応したいとは思っています.そんな感じで,Eclipseな人に最高のJavaScriptエディタの提供を目指していますー.

HttpClient 3 から 4 へ

日本語だと HttpClient 4 を使っている人をあまり見ないような気もするけど(気のせい?)、3 から 4 にするとどう違うかを超簡単に示すと、

// Create an instance of HttpClient.
HttpClient client = new HttpClient();
// Create a method instance.
GetMethod method = new GetMethod(url);
try {
// Execute the method.
int statusCode = client.executeMethod(method);
// Read the response body.
InputStream is = method.getResponseBodyAsStream();
... 何かする ...
} catch (Exception e) {
... 何かする ...
} finally {
// Release the connection.
method.releaseConnection();
}

という感じで今まで書いていたと思うけど、

// Create an instance of HttpClient.
HttpClient httpclient = new DefaultHttpClient();
// Create a method instance.
HttpGet httpget = new HttpGet(url);
HttpEntity entity = null;
try {
// Execute the method.
HttpResponse response = httpclient.execute(httpget);
int statusCode = response.getStatusLine().getStatusCode();
entity = response.getEntity();
// Read the response body.
InputStream is = entity.getContent();
... 何かする ...
} catch (Exception e) {
... 何かする ...
} finally {
// Release the connection.
if (entity != null) {
entity.consumeContent();
}
}
httpclient.getConnectionManager().shutdown();

という感じ。

まず、DefaultHttpClient を生成する。今までのHttpClientと思って良いだろう。メソッドクラス系の GetMethod などは、HttpGet などに置き換わっている。まぁ、これも特に問題ないだろう。メソッドの実行については execute メソッドを利用する。引数は HttpGet などのメソッドだ(本気で HttpClient 4 を使う場合はリクエストヘッダーなどのパラメータなども渡したくなるからHttpContextも渡すメソッドを使うことになるだろう)。executeメソッドを実行すると HttpResponse が返ってくる。なので、レスポンスはここから取得する。ステータス系は getStatusLine メソッドで取得できる。レスポンスの本文は HttpEntity から取得する。getContent メソッドでストリームを取得できる。取得したら、今までのreleaseConnectionメソッドを呼んでいたところでHttpEntity の consumeContent メソッドを呼んでおく。httpclientが不要になったら、connectionManagerのshutdownをしておく。