#pragma ident "@(#) actions/HelpBrowser.java 0.0.1 2012.02.01,22:37"
package cms3.actions;
import java.io.*;
import java.awt.*;
import javax.swing.*;
/* ヘルプ
 * 
 * 機能
 *   ヘルプを表示する。
 *   本ソースコードはインターネットに公開されているコードをそのまま利用している。
 *   作者はTomoaki Oshima氏です。
 * 
 */

public class HelpBrowser extends JFrame{
    /**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	public HelpBrowser(){
        super();

        JEditorPane browser=new JEditorPane();
        browser.setEditable(false);
        browser.setContentType("text/html");

        String helpHtmlData="<html lang='ja'>" +
                "<html lang=\"ja\">" +
        "<head><br>" +
        "<title>Cms3Client help</title><br>" +
        "<meta name=\"date\" content=\"2012-01-23\"><br>" +
        "</head><br>" +
        "<body><br>" +
        "<center>" +
        "CMS3クライアントプロトコル<br>" +
        "(CMSの送受信サーバー CMS3リビジョン管理サーバから応答を受信する）<br>" +
        "</center>" +
        " <br><br>" +
        " 基本仕様<br>" +
        " ・本プロトコルは「Complete Walker Revision Administrator β7」の機能を利用している。<br>" +
        " ・「Complete Walker Revision Administrator β7」は現在 Vine Linux 5.2 上で稼動中である。<br>" +
        " ・USERとPASSはCMSの２種類のログインユーザを使用する（/musr /fusr）<br>" +
        " ・fusrはソースコードのサーバー側のリビジョン情報を管理するがネットワーク側には<br>" +
        " 　公開しない。musr はネットワーク側にリビジョン情報を公開する。<br>" +
        " ・CMS側はRUBYスクリプトでソケット通信を行う<br>" +
        " ・差分ファイルの記録を行うkorn-shellコマンドはRUBYスクリプトからの呼び出しで行う<br>" +
        " ・最新ファイルのGET及び差分登録のPUTは組込みFTPクライアント機能での送受信を行う<br>" +
        " ・ソケット通信に使用するポートはCMS3が3390~3399番ポートを使用する<br>" +
        " ・クライアント側のユーザインターフェースはJAVA-SwingのEclipseプラグインプログラ<br>" +
        "　 ムである本プログラム を利用する<br>" +
        " ・Eclipseプラグインのインストールは、<br>" +
        "　 http://codoo2hk.corede.net/cms3/cms3install/ リポジトリから直接可能である。<br>" +
        " ・Eclipseプラグインのアップデートは、http://codoo2hk.corede.net/cms3/cms3update/<br>" +
        "　 リポジトリから直接可能である。<br>" +
        " ・また、Eclipseプラグインの臨時アップデートは、<br>" +
        "　  http://codoo2hk.corede.net/cms3/cms3update2/リポジトリから直接可能となっている。<br>" +
        " ・PUTを行った後では誰でもGETが可能となる。<br>" +
        " ・PUTはファイルを送信後にサーバー側でリビジョンの登録を行う。サーバーは処理を一度<br>" +
        "　 に行うため送信は最も早く行わなければならない。<br>" +
        " ・PUTはリビジョンの登録後に /cms/diff/cmssetq のユーザにもしメールアドレスが登録<br>" +
        "　 されている場合、そのアドレスにPUT完了のメールを送信する。<br>" +
        " ・PUTはメール送信時、プラグイン操作においてメモ入力がされている場合はそのメモの内<br>" +
        "　 容をメールの本文に記録する。<br>" +
        " ・PUTはユーザのメールアドレスが登録されていない場合はCMSの代わりのFTPアドレスであ<br>" +
        "　 るFTPSにそのメールを転送する。<br>" +
        "  ※FTPSのユーザIDは FTPS であり、パスワードは yumura01 である。<br>" +
        " ・NEWFILEはその後にUNGETを行わないと他の開発者がGET出来なくなる。<br>" +
        " ・NEWFILEの実行時サーバー側に指定したディレクトリが存在しなければ自動的にそれを作<br>" +
        "　 成する。ディレクトリを作成するのはFTPプロトコルである。<br>" +
        " ・UNGETコマンドを利用出来るのはファイルをGETしたユーザとCMS管理者だけである。<br>" +
        " ・VGETは同時にそのリビジョンの差分ファイルも一緒に受信する。差分ファイル名にはバー<br>" +
        "　 ジョンとリビジョン番号が追加されている。<br>" +
        " ・ファイルの存在と排他制御を確認するのはサーバーのSTATコマンドになる。<br>" +
        " ・実際にファイルの送受信を行うのは組込みFTPプロトコルである。<br>" +
        " ・組込みFTPプロトコル及び、FTPメソッドは以下の動作を行う。<br>" +
        "　 １）もし、テーブルファイルに多重階層のディレクトリを用いたファイルの設定があった<br>" +
        "　     場合、そのファイルを遡ってRETRを行う。<br>" +
        "　 ２）もし、ローカル側（Windows)でテーブルファイルに登録された階層のフォルダが無か<br>" +
        "　     った場合、新たにフォルダを作成してファイルを受信する。<br>" +
        "　 ３）もし、サーバー側（Linux)でテーブルファイルに登録された階層のディレクトリが無<br>" +
        "　     かった場合、新たにディレクトリを作成してファイルを送信する。<br>" +
        "  ※ディレクトリ及びフォルダの階層は最大６４階層まで作成可能。<br>" +
        "  ※組込みFTPは/home/cms/fusr/ をホームディレクトリとすること。<br>" +
        " <br>" +
        " リポジトリ仕様<br>" +
        " ・専用サーバのユーザID　cms　を利用してリポジトリを管理する。<br>" +
        " ・cms　は既にsshにおけるバージョン/リビジョン管理システムとして利用出来る環境を保有<br>" +
        "　 する。<br>" +
        " ・各リポジトリは  /cms/fusr 配下に置かれ、リポジトリ配下の階層管理が可能となっている。<br>" +
        " ・リポジトリを管理するコマンドは /cms/bin に用意されている。<br>" +
        " ・専用サーバではリポジトリ管理の他に故障管理と修正管理を行うことが出来る。<br>" +
        " ・リポジトリを利用出来るユーザはsshにおいて２種類のタイプを持つ。（/cms/fusr と /cms/musr）<br>" +
        " ・ネットワークからCMS3プロトコルを通して本リポジトリを利用出来るユーザは /cms/diff/cmssetq <br>" +
        "　 にパスワードの存在するユーザだけである。<br>" +
        " ・リポジトリ管理のためのユーザIDは　cms　である。これはsshにおいてcms　を利用する<br>" +
        "　 ユーザは誰でもリポジトリ管理者となることを意味する。<br>" +
        " ・サーバー側に於いてリポジトリを操作するコマンドは　cf　である。このコマンドはファイ<br>" +
        "　 ラーであり、視覚的にリビジョンを管理する。<br>" +
        " ・リポジトリ操作のためのマニュアルは/cms/doc/cms.txt の最後に記述されている。<br>" +
        " ・リポジトリに登録できるファイルはテキストファイルのみである。拡張子は .c .cc .java <br>" +
        "　 .sh .ksh .bash .rb .py .php 等多岐に渡って登録可能である。<br>" +
        " ・リビジョン管理されたファイルの最初の１行にバージョン/リビジョン番号と登録した日付<br>" +
        "　 が振られることになる。<br>" +
        " ・ネットワークからリポジトリを操作するプログラムはCMS3プロトコルである。<br>" +
        " <br>" +
        " プロトコル仕様<br>" +
        "  サーバ側の常駐プログラムは cms3-server.rb スクリプトである。このスクリプトは ruby <br>" +
        "  で記述されている。<br>" +
        "  このプログラムはプロジェクトのリポジトリ名ごとに　cms　にログインし、リポジトリデ<br>" +
        "  ィレクトリのkorn-shll 環境で　.profile　を実行した後に起動しなければならない。<br>" +
        "  常駐するためのコマンドラインは以下となる。<br>" +
        "　      nohup cms3-server.rb -p 3390 > /home/cms/logs/{username}.3390.log &<br>" +
        "  オプション -p の次にあるポート番号はリポジトリごとに　3390〜3399までが利用出来る。<br>" +
        "  各ポートごとのソケットのFIFOキューは５つ用意してある。<br>" +
        "  現在用意したリポジトリ管理サーバのアドレスは codoo2hk.corede.net となる。これは個人<br>" +
        "  のサーバであるためcmsのためのsshのパスワードは公開出来ない。<br>" +
        "  但し、ftpのためのユーザIDとパスワードは公開している。（user-id:ftps  password:yumura01）<br>" +
        "  cmsではリビジョンのコンフリクト（衝突）を防止するためリビジョンを登録出来るユーザは<br>" +
        "  必ず毎時１ユーザだけに限られる。但しファイルの編集は誰でもいつでも出来る。<br>" +
        "  <br>" +
        " <br><br>" +
        " ECLIPSEプラグインの仕様についての注意事項<br>" +
        " <br>" +
        " Eclipseで本リビジョン管理を行う場合以下の点に注意する必要がある。<br>" +
        " ・Eclipse 側のソースファイルはEclipseのプロジェクト管理の元に置かれるため、実際に<br>" +
        "　 リビジョン管理する場合次の操作が必要になる。<br>" +
        "　 1)Eclipseの src フォルダ配下のソースファイルを直接操作可能。そのためWindowsのレ<br>" +
        "　   ジストリにフォルダ登録する機能が付属している。<br>" +
        "　 2)PUT,GET、NEWFILE等のコマンドは src フォルダ配下のソースファイルを直接扱うこと<br>" +
        "　 が出来るので、GETする場合は現在のソースを上書きすることになるため最新のソース<br>" +
        "　 ファイルは必ずPUTしてからGETする必要がある。<br>" +
        " ・GET,VGET,NEWFILE,PUT,UNGETとも階層的な管理が可能である。<br>" +
        "　 階層管理とはリビジョンテーブルファイルに Skigae/SekigaeOno.java という記述をし<br>" +
        "　 た場合CMSはリポジトリの管理下に Sekigae ディレクトリを登録する。<br>" +
        "　 この時、Eclipse 側では src フォルダの配下に Sekigae というフォルダを作成して置か<br>" +
        "　 ないと PUT,GETともファイルの送受信が出来ない。<br>" +
        " <br>" +
        " 操作方法<br>" +
        " ・Eclipseプラグインをインストールする。<br>" +
        " ※「新規ソフトウェアのインストール」で http://codoo2hk.corede.net/cms3/cms3update/<br>" +
        "　 のアドレスを「作業対象」に貼り付け「次へ」ボタンをクリック。<br>" +
        " ・Eclipseにて新規プロジェクトを作成する。<br>" +
        " ・次に新規ファイルを作成する。<br>" +
        " ※この時、パッケージ名を net.npaka.gestureex とした場合、Eclipse は自動的に<br>" +
        " 　net/npaka/gestureex のフォルダを作成しそこに新規ファイルを保存する。<br>" +
        " ・プロジェクト名とソースファイル名をCMS管理者に通知する。（例えば npaka の下が<br>" +
        "　 階層的になっている場合はその構造も通知する）<br>" +
        "　 ※現在本プログラムはディレクトリ階層を自動的に最大64階層まで作成します。<br>" +
        "　 ※以下のプロジェクト配置はGestureEx プロジェクトのフォルダ実装例です。<br>" +
        "　 <br>" +
        "　 C:/Documents and Settings/son.CMS2/workspace/GestureEx/src/net/npaka/gestureex<br>" +
        "　 <br>" +
        " ・ログインユーザIDとパスワードを管理者からもらう。<br>" +
        " ・管理者はCMSサーバー側でCMS3プロトコルを起動する。<br>" +
        " ・開発者は新規プロジェクトの、例えば npaka フォルダに新規ソースファイルを置き、<br>" +
        "　 プラグインを起動する。<br>" +
        "　 ※サーバー側では Eclipse のプロジェクト構造のうち、例えば npaka フォルダ配下<br>" +
        "　   からの管理を行います。<br>" +
        " ・プラグインの「ポート番号」に3390〜3399のうち、管理者から指定されたポート番号<br>" +
        "　 と「ユーザID」「パスワード」を入力する。<br>" +
        "　 ※現在 net.npaka プロジェクトのユーザIDは android　で設定完了しています。<br>" +
        "　   パスワードは yumura です。ポート番号は3399になります。<br>" +
        " ・「登録フォルダ」テキストボックスをクリックし、フォルダ選択ダイアログからプロ<br>" +
        "　 ジェクトのソースのあるフォルダを選択する。（androidユーザの場合 npaka になります）<br>" +
        "<br>" +
        "　  例：C:/Documents and Settings/son.CMS2/workspace/GestureEx/src/net/npaka<br>" +
        "　  <br>" +
        "　  上の場所を選択して「保存」ボタンをクリックすることで、以降このフォルダ上でリ<br>" +
        "　  ビジョン管理を行うころが出来ます。<br>" +
        "　  リビジョン管理されるソースファイルは以下のページからダウンロードしたものです。<br>" +
        "　    http://www.saturn.dti.ne.jp/~npaka/android/<br>" +
        "　  <br>" +
        " ・プラグインから「LISTの実行」ボタンでファイルの一覧をコンボボックスに読み込み、<br>" +
        "　    リビジョン登録するファイルを選択する。（または入力する）<br>" +
        "　 ※この時、例えばGestureプロジェクトの npaka フォルダで GestureEx.java を新規に<br>" +
        "　    作成する場合、「登録ファイル」に入力する形式は以下のようになります。<br>" +
        "　 <br>" +
        "　   gesture/GestureEx.java<br>" +
        " <br>" +
        "　 ※これはサーバーのリポジトリが npaka 配下からの管理になるためです。フォルダ名<br>" +
        "　   が小文字になっていることに注意してください。<br>" +
        "　 <br>" +
        " ・「NEWFILE」ボタンでリポジトリに登録する。登録が完了したら「UNGET」ボタンをク<br>" +
        "　 リックし、他の開発者がGET出来るようにしておきます。<br>" +
        " <br>" +
        "　 ※現在 net.npaka プロジェクトは全てNEWFILE　登録が完了していますので、「GET」<br>" +
        "　   ボタンでファイルを呼び出すだけになっています。<br>" +
        "　 <br>" +
        " ・登録したファイルを修正した後、プラグインから「PUT」ボタンでリビジョン登録する<br>" +
        "　 ことが出来ます。（「PUT」を実行すると修正前のファイルとの差分が登録されます）<br>" +
        " ・リビジョン登録が完了したソースファイルは他の開発者が誰でも「GET」ボタンで呼び<br>" +
        "　 出すことが可能となります。<br>" +
        " ・リビジョン管理ファイルは選択したフォルダのファイルに直接上書きされます。<br>" +
        "　 （ネットワークでの利用上途中ファイル転送が行われます）<br>" +
        "　 「WHO」ボタンで誰がGETしているのを確認することが出来ますが、今回は android の<br>" +
        "　 １ユーザだけですので、ファイルがロックされていてもUNGETボタンですぐに解消できます。<br>" +
        " <br>" +
        " ★ここから以降は npaka プロジェクトでは必要ありません。<br>" +
        " ・ファイルの修正が完了しプログラムが結合試験等に入った場合は、管理者にSUBMIT申請を<br>" +
        "　 行います。<br>" +
        "　 以上、SUBMITが完了した場合ファイルのリビジョン管理は出来なくなります。<br>" +
        "　 （再開したい場合は管理者に通知する）<br>" +
        " ・プロジェクトが完成し、最初のバージョンのリリースが行われた場合、COMMIT申請を行います。<br>" +
        "　 COMMIT申請を行なった場合は最初のバージョンでのリビジョン管理は出来なくなります。<br>" +
        " （再開したい場合はバージョン番号がプラスされてから再開されます）<br>" +
        " <br>" +
        " ※通常のリビジョン管理はユーザID（musr）のディレクトリで行います。特別のリビジョン<br>" +
        "　 管理はプロジェクトID（fusr）のディレクトリで行います。<br>" +
        " ※特別のリビジョン管理は結合テストの後で行われます。リリースの管理も fusr で行います。<br>" +
        " ※現在リビジョン管理サーバー codoo2hk.corede.net で管理する /musr 配下のユーザは<br>" +
        "　 以下になります。<br>" +
        "<br>" +
        "　       android takaha hirai hatori tatikawa yamasaki ikeya mai takayama test<br>" +
        " <br>" +
        " 注意点<br>" +
        " ・サーバー側にはその他多くの管理コマンドがあるが、ネットワーク側には公開しません。<br>" +
        " <br>" +
        " その他<br>" +
        " 本プロトコルはPOP3プロトコルに似せてあるのでPOP3を参考にすると良い<br>" +
        " <br>" +
        " Copyright(c) 2012 S.Ono<br>" +
        "</body><br>" +
        "</html><br>";


        //String helpHtmlData=getHelpData();
        browser.setText(helpHtmlData);

        //gui
        getContentPane().add(new JScrollPane(browser),BorderLayout.CENTER);
    }
	/*
    private String getHelpData(){
        try{
            String filename="help.html";
            BufferedReader r= new BufferedReader(new InputStreamReader(
                this.getClass().getClassLoader().getResourceAsStream(filename),"SJIS")) ;
            String html= toString(r);
            r.close();

            return html;
        }
        catch(Exception ex){
            ex.printStackTrace();
        }

        return "";
    }

    private static String toString(BufferedReader r) throws IOException{
        StringBuffer sb=new StringBuffer();
        while(true){
            String line=r.readLine();
            if(line==null)
                break;
            sb.append(line);
        }
        return sb.toString();
    }
    */
}