太郎日記’79J

「やったろうやないの。」な太郎のblog
技術ネタはタロタローグに任せて、こっちはニュースメインで。
<< September 2018 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 >>
 
RECOMMEND
MySQLによるタフなサイトの作り方
MySQLによるタフなサイトの作り方 (JUGEMレビュー »)
佐藤 真人,桑野 章弘,岡田 達典,大黒 圭祐
MySQLだけでなく、DBサーバやアプリの設計など、あらゆる手段を使ってタフなサイトを作る本である
最新記事
あわせて読みたい
あわせて読みたい
なかのひと
ClusterMaps
CM by JUGEM
スポンサーサイト

一定期間更新がないため広告を表示しています

- | 個別記事 | - | -
JSPWikiプラグイン自作コーナー (1):Attachしたテキストを表示する

実は、最近自分のメモ用にJSPWikiを使ってます。
で、Attach(Wikiページにファイルを添付すること)したテキストをページ内に表示したかったんですが、
今一やり方がわからなかったんで実験的にプラグインを自作することに。

JSPWikiのプラグインは、
「com.ecyrd.jspwiki.plugin.WikiPlugin」
というインタフェースを実装したクラスで、
プラグイン名はそのままクラス名になるみたいです。
で、作ったプラグインのクラスファイルををWEB-INF/classesに入れるか、
jarファイルにしてWEB-INF/lib以下に入れ、プラグイン検索パスにパッケージを指定すると、
使えるようになるみたいですね。

と、いうわけで、こんな風にプラグインを書いてみました。

package jp.jugem.tarotaro.JSPWiki.plugins;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import com.ecyrd.jspwiki.WikiContext;
import com.ecyrd.jspwiki.plugin.PluginException;
import com.ecyrd.jspwiki.plugin.WikiPlugin;

public class AttachmentText implements WikiPlugin {

  public static final String PARAM_NAME = "src";

  private static final String URL_SEPARATOR = "/";

  private static final String ATTACH_DIR_NAME = "attach";
  /**
   * AttachしたテキストファイルをWiki上に書き出すプラグイン。<br />
   * 使い方:<code>[{INSERT AttachmentText src='ファイル名'}]</code>
   * @param context WikiやServletの情報を持っている便利な奴という認識
   * @param パラメータが入っている。このプラグインの場合は"src"が入っているハズ
   */
  public String execute(WikiContext context, Map map) throws PluginException {
    //ファイル名を取得
    String src = (String) map.get(PARAM_NAME);
    //AttachしたファイルをHTTP経由でダウンロードしてくるため、URLを構築する
    //ローカルから直接取得できないのか?
    HttpServletRequest request = context.getHttpRequest();
    StringBuffer requestURL = request.getRequestURL();
    String requestURI = request.getRequestURI();
    String baseURL = requestURL.substring(0,requestURL.lastIndexOf(requestURI));
    String urlString = baseURL
              + URL_SEPARATOR
              + context.getEngine().getServletContext().getServletContextName()
              + URL_SEPARATOR
              + ATTACH_DIR_NAME
              + URL_SEPARATOR
              + context.getPage().getName()
              + URL_SEPARATOR
              + src;
    URL url = null;
    StringBuffer out = new StringBuffer();
    BufferedReader br = null;
    try {
      url = new URL(urlString);
      br = new BufferedReader(new InputStreamReader(url.openStream()));
      String line = null;
      out.append("<pre>");
      while ((line = br.readLine()) != null) {
        line = line.replaceAll("<", "&lt;").replaceAll(">", "&gt;");
        out.append(line).append("¥n");
      }
      out.append("</pre>");
      return out.toString();
    } catch (IOException e) {
      throw new PluginException("¥nファイル[" + src + "]の読込に失敗しました。¥n",e);
    } finally {
      if (br != null) {
        try {
          br.close();
        } catch (IOException e1) {
          throw new PluginException("¥nファイル[" + src + "]のクローズに失敗しました。¥n",e1);
        }
      }
    }
  }
}
Attachしたファイルを直接拾う方法が今一わからなかったんで、
仕方なくHTTP経由でダウンロードしてます。
このあたりは改善事項ですが、基本的にはローカル利用の予定なので、
今の所はまぁいいでしょう。

これをWEB-INF/classes以下に、パッケージを合わせて格納してやります。
で、jspwiki.propertiesの「jspwiki.plugin.searchPath」プロパティを以下のように設定します。
jspwiki.plugin.searchPath = jp.jugem.tarotaro.JSPWiki.plugins
これで、自作プラグイン「AttachmentText」が使えるようになるわけです。
使い方は、
[{INSERT AttachmentText src='ファイル名'}]
ですね。
やってみると意外と簡単です。
色々とプラグインを試して、より使いやすいJSPWikiライフを楽しもうかな。
次は、スケジュール帳かTODO管理を作ろう。

スポンサーサイト
- | 個別記事 | - | -
ドミノ・ピザでも食べながら、コメントをどうぞ。
コメントする









 
トラックバック
この記事のトラックバックURL(記事と無関係なトラックバックは削除される可能性があります)
※記事が投稿されてから30分の間、トラックバックを行うことが出来ません。
http://tarotaro.jugem.cc/trackback/1179
 

Copyright (C) 2004 paperboy&co. All Rights Reserved.

Powered by "JUGEM"