org.opengion.fukurou.util

## クラス DisplayCapture

- java.lang.Object
- - org.opengion.fukurou.util.DisplayCapture

- すべての実装されたインタフェース:
    java.awt.datatransfer.FlavorListener, java.util.EventListener

      public final class DisplayCapture
      extends java.lang.Object
      implements java.awt.datatransfer.FlavorListener

       DisplayCapture.java は、画面イメージをキャプチャして、ファイルに書き出すためのクラスです。

       基本的な使い方は、main メソッドから立ち上げて、クリップボードの状態を監視します。
       クリップボードに、"GUI:画面ID xxxxx.jsp" 形式の文字が書き込まれると、flavorsChanged イベントが
       発生して、画面を、ファイルに書き出す処理が実行されます。
       エンジンの機能と連動すれば、画面IDやファイル名をクリップボード経由でこのアプリケーションに
       渡すことで、画面操作を行うだけで、自動的に画面キャプチャを行うことが可能です。

       エンジンでは、jsp/indexc.jsp に、この機能が組み込まれているため、gf\BAT\displayCapture の
       DisplayCapture.bat を起動後、アプリケーションを、jsp/indexc.jsp で呼び出せば、自動的に
       画面のキャプチャを開始できます。
       キャプチャは、全画面のみですので、IEを最大に広げて操作してください。
       また、｢Prnt Scrn｣ボタンにも対応していますので、操作中やポップアップ等の非自動化の
       画面キャプチャも、手動で取得できます。

       起動時の引数に応じて、処理を制御することが可能です。

       書き出すフォルダは、BASE_DIR で指定します。
        すべてのキャプチャ画像は、ベースフォルダ に集約して保存します。
        キャプチャ画像の情報は、出力されるファイル名に反映されます。ファイル名の形式も２種類あり、
        キャプチャ順と、画面ID順が指定できます。
        初期値は、Java起動時のフォルダになります。

       書き出すファイル名の初期形式は、firstID の設定により異なります。
         firstID を gui に設定した場合
            ベースフォルダでフォルダを作成し、その中に、画面ID_JSPファイル名_連番.画像形式 ファイルを作成します。
            画面ID 単位に、画面のキャプチャを整理、使用したい場合に便利です。
            ファイルのタイムスタンプ(作成時刻)で並び替えを行えば、キャプチャ順に並び替えできます。
         firstID を seq に設定した場合
            ベースフォルダでフォルダを作成し、その中に、連番_画面ID_JSPファイル名.画像形式 ファイルを作成します。
            ファイルは、キャプチャされた順番に、画面IDも混在して作成されます。つまり、ファイル名の順番に
            再生すれば、リンクや他のシステムとの連携などで、画面が行き来しても、作業の順番にキャプチャできて
            いる事になります。

       このクラスは、これらを実現するために利用している、static メソッドをいくつか持っています。
         BufferedImage doCapture()
            画面イメージをキャプチャします。これは、全画面です。
         void saveImage( File saveFile, BufferedImage img, String imgType )
            指定のファイルに、画面イメージを書き出します。
            imgType に、画像の種類(png|gif|jpg)を指定します(初期値:png)。
         String getClipboard()
            現在のクリップボードの値を取り出します。ここでは、文字列のみ取り出すことが可能です。
            このメソッドの特徴的なところは、PrintScreenなどの文字列以外の値をクリップボードにセット
            した場合に、"GUI:PRINT SCREEN.img" という文字列を返すところです。つまり、その場合は、
            全画面のキャプチャが行われるという事です。
         void setClipboard( String txt )
            クリップボードに、文字列をセットします。

       このクラスが実装している FlavorListener は、クリップボードの"値"の更新には追従していません。
       内部の Transferable オブジェクトが変更された場合に、flavorsChanged メソッドが呼び出されます。
       つまり、一度セットされた文字型データは、取り出した後、別のTransferable オブジェクトに変更して
       おかないと、次の文字列の変更が拾えなくなります。また、この別のTransferableオブジェクトの
       設定で、再び、イベントが発生するので、そのままでは、無限ループになってしまいます。
       そこで、少し、トリッキーなのですが、setClipboard( String ) すると、再びイベントが呼び出され
       ないように、取得した文字列の先頭が、"GUI:" で始まる場合のみ、再設定するようにしています。

       Usage: java org.opengion.fukurou.util.DisplayCapture
                         [BASE_DIR] [firstID(seq|gui)] [imageFormat(png|gif|jpg)] [startCnt(100)]

           args[0]  BASE_DIR    : キャプチャファイルをセーブするベースとなるディレクトリ(初期値:起動フォルダ)
           args[1]  firstID     : キャプチャ画像をセーブするファイル方式を指定します(初期値:seq)
                                  gui (画面ID_JSPファイル名_連番.画像形式)
                                  seq (連番_画面ID_JSPファイル名.画像形式)
           args[2]  imageFormat : 作成するイメージの形式。png|gif|jpg のどれか(初期値:png)
           args[3]  startCnt    : セーブファイル名をユニークにするためのカウント(初期値:100)

       この実装は同期化されません。

  変更履歴:
    5.1.7.0 (2010/06/01) 新規追加, 5.2.1.0 (2010/10/01) 実用性を重視した改修
  バージョン
    5.0
  作成者
    Kazuhiko Hasegawa
  導入されたバージョン:
    JDK6.0,

- - ### コンストラクタのサマリー

    コンストラクタ
    コンストラクタと説明
    `DisplayCapture()`

  - ### メソッドのサマリー

    すべてのメソッド staticメソッド インスタンス・メソッド concreteメソッド
    修飾子とタイプ | メソッドと説明
    --- | ---
    `static java.awt.image.BufferedImage` | `doCapture()` 全画面の画像イメージ(キャプチャ画像)を取得します。
    `void` | `flavorsChanged(java.awt.datatransfer.FlavorEvent fe)` リスナー対象の Clipboard で使用可能な DataFlavor が変更されたときに呼び出されます。
    `static java.lang.String` | `getClipboard()` システムのクリップボードの文字列を取得します。
    `static void` | `main(java.lang.String[] args)` DisplayCapture.java は、画面イメージをキャプチャする、メインメソッドです。
    `static void` | `saveImage(java.awt.image.BufferedImage img, java.lang.String imgType, java.io.File saveFile)` キャプチャ画像をファイルにセーブします。
    `void` | `setBaseDir(java.lang.String bsDir)` キャプチャファイルをセーブするベースとなるディレクトリを設定します(初期値:java実行フォルダ)。
    `static void` | `setClipboard(java.lang.String txt)` システムのクリップボードに文字列を書き込みます。
    `void` | `setFirstID(java.lang.String firstID)` キャプチャ画像をセーブするファイル方式を指定します(初期値:seq)。
    `void` | `setImageType(java.lang.String imgType)` キャプチャ画像をセーブする画像形式を指定します(初期値:png)。
    `void` | `setStartCnt(java.lang.String startCnt)` キャプチャ画像をセーブするファイル名の先頭に付ける連番の開始数(初期値:100)。

    - ### クラスから継承されたメソッド java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### コンストラクタの詳細

    - #### DisplayCapture

          public DisplayCapture()

  - ### メソッドの詳細

    - #### setBaseDir

          public void setBaseDir(java.lang.String bsDir)

      キャプチャファイルをセーブするベースとなるディレクトリを設定します(初期値:java実行フォルダ)。 クラスの内部的には、Java の実行フォルダ( new File(".") ) が初期値です。
      パラメータ:
        `bsDir` - セーブするベースディレクトリ
      例外:
        `java.lang.RuntimeException` - セーブフォルダが作成できなかった場合

    - #### setFirstID

          public void setFirstID(java.lang.String firstID)

      キャプチャ画像をセーブするファイル方式を指定します(初期値:seq)。 seq (連番_画面ID_JSPファイル名.画像形式) gui (画面ID_JSPファイル名_連番.画像形式) 初期値は、seq です。
      パラメータ:
        `firstID` - セーブするファイル方式(seq|gui)
      例外:
        `java.lang.RuntimeException` - ファイル方式の指定が間違っていた場合

    - #### setImageType

          public void setImageType(java.lang.String imgType)

      キャプチャ画像をセーブする画像形式を指定します(初期値:png)。 キャプチャされたイメージをセーブするときの画像形式を指定できます。 ここでは、png , gif ,jpg を指定できます。 初期値は、png 形式です。
      パラメータ:
        `imgType` - セーブする画像形式(png|gif|jpg)

    - #### setStartCnt

          public void setStartCnt(java.lang.String startCnt)

      キャプチャ画像をセーブするファイル名の先頭に付ける連番の開始数(初期値:100)。 キャプチャされたイメージをセーブするとき、画面IDとJSPファイル名だけでは、前回分を 上書きしてしまうため、ファイル名の先頭に連番を付与しています。 ここでは、その連番の開始番号を指定できます。 初期値は、100 です。
      パラメータ:
        `startCnt` - 連番の開始数(初期値:100)

    - #### doCapture

          public static java.awt.image.BufferedImage doCapture()

      全画面の画像イメージ(キャプチャ画像)を取得します。 java.awt.Toolkit で、全画面のスクリーンサイズを取得し、java.awt.Robot の createScreenCapture( Rectangle ) メソッドで、BufferedImage を取得しています。
      戻り値:
        全画面の画像イメージ
      例外:
        `java.lang.RuntimeException` - AWTException が発生した場合

    - #### saveImage

          public static void saveImage(java.awt.image.BufferedImage img,
                                       java.lang.String imgType,
                                       java.io.File saveFile)

      キャプチャ画像をファイルにセーブします。 ここでは、単純に、引数そのままで、ImageIO.write( BufferedImage,String,File ) しています。 saveFile のディレクトリ存在チェックや、ファイル名の拡張子(png,gif,jpgなど)の修正、 imgType の形式チェックなどは、行っていません。 それらの処理は、事前に、調整しておいてください。
      パラメータ:
        `img` - セーブする画像イメージ
        `imgType` - セーブする画像形式(png|gif|jpg)
        `saveFile` - セーブする画像ファイルオブジェクト
      例外:
        `java.lang.RuntimeException` - IOException が発生した場合
      関連項目:
        `ImageIO.write( java.awt.image.RenderedImage , String , java.io.File )`

    - #### getClipboard

          public static java.lang.String getClipboard()

      システムのクリップボードの文字列を取得します。 Toolkit.getDefaultToolkit().getSystemClipboard() で取得された Clipboard オブジェクトから 文字列情報(DataFlavor.stringFlavor)を取得します。 文字列情報が取得できない場合、(UnsupportedFlavorException が発生した場合) 例えば、 PrntScrn ボタンが押された場合などは、文字列として、"GUI:PRINT SCREEN.img" を返します。 これは、文字列が返せない場合でも、クリップボードに書き込まれたイベントで、全画面のキャプチャを 取得するための、特殊なコマンドに相当します。
      戻り値:
        クリップボードの文字列
      例外:
        `java.lang.RuntimeException` - IOException が発生した場合
      関連項目:
        `Clipboard.getData( DataFlavor )`

    - #### setClipboard

          public static void setClipboard(java.lang.String txt)

      システムのクリップボードに文字列を書き込みます。 システムの Clipboard オブジェクトに、StringSelection を セットします。 通常であれば、単純に、クリップボード経由でデータのやり取りをするだけの機構ですが、 FlavorListener を実装している関係上、flavorsChanged が発生します。 このイベントについては、#flavorsChanged( FlavorEvent ) を参照ください。
      パラメータ:
        `txt` - クリップボードに書き込む文字列
      関連項目:
        `StringSelection`, `Clipboard.setContents( Transferable , ClipboardOwner )`

    - #### flavorsChanged

          public void flavorsChanged(java.awt.datatransfer.FlavorEvent fe)

      リスナー対象の Clipboard で使用可能な DataFlavor が変更されたときに呼び出されます。 これは、FlavorListener の イベントの実装です。 DataFlavor が変更されたときであり、そのデータの内容が書き換えられた場合には、イベントが 発生しません。 そのため、データを取り出したあとで、Transferable を再セットする処理を行っています。 クリップボードで使用可能な一連の DataFlavors の変更によるものでない、余分な通知もあります。 さらに、イベントを発生させるために、Transferable をセットする処理( #setClipboard(String) )を 実行しても、同様にイベントが発生します。 ここでは、取得したクリップボードの文字列が、"GUI:" の場合のみ処理しています。 これにより、取得後の Transferable の再セット時の文字列は、"GUI:" を削除しています。 このメソッドでは、画面キャプチャを取得し、クリップボードの文字列から、画面ID とJSPファイル名を 抜き出し、セーブする一連の処理を行っています。
      定義:
        `flavorsChanged` インタフェース内 `java.awt.datatransfer.FlavorListener`
      パラメータ:
        `fe` - イベントソース
      関連項目:
        `FlavorListener.flavorsChanged( FlavorEvent )`

    - #### main

          public static void main(java.lang.String[] args)

      DisplayCapture.java は、画面イメージをキャプチャする、メインメソッドです。 Javaアプリケーションとして実行すると、無限処理に入ります。 内部的には、flavorsChanged イベント によるクリップボードの監視を行います。 クリップボードに、"GUI:画面ID xxxxx.jsp" 形式の文字が書き込まれると、画面キャプチャを、 ファイルに書き出す処理が実行されます。 書き出すファイル名の初期形式は、firstID の設定により異なります。 firstID を seq に設定した場合 ベースフォルダでフォルダを作成し、その中に、連番_画面ID_JSPファイル名.画像形式 ファイルを作成します。 ファイルは、キャプチャされた順番に、画面IDも混在して作成されます。つまり、ファイル名の順番に 再生すれば、リンクや他のシステムとの連携などで、画面が行き来しても、作業の順番にキャプチャできて いる事になります。 firstID を gui に設定した場合 ベースフォルダでフォルダを作成し、その中に、画面ID_JSPファイル名_連番.画像形式 ファイルを作成します。 画面ID 単位に、画面のキャプチャを整理、使用したい場合に便利です。 ファイルのタイムスタンプ(作成時刻)で並び替えを行えば、キャプチャ順に並び替えできます。 Usage: java org.opengion.fukurou.util.DisplayCapture [BASE_DIR] [firstID(seq|gui)] [imageFormat(png|gif|jpg)] [startCnt(100)] args[0] BASE_DIR : キャプチャファイルをセーブするベースとなるディレクトリ(初期値:起動フォルダ) args[1] firstID : キャプチャ画像をセーブするファイル方式を指定します(初期値:seq) seq (連番_画面ID_JSPファイル名.画像形式) gui (画面ID_JSPファイル名_連番.画像形式) args[2] imageFormat : 作成するイメージの形式。png|gif|jpg のどれか(初期値:png) args[3] startCnt : セーブファイル名をユニークにするためのカウント(初期値:100)
      パラメータ:
        `args` - 引数 [BASE_DIR] [firstID(seq|gui)] [imageFormat(png|gif|jpg)] [startCnt(100)]

Webアプリケーションフレームワーク openGion
Copyright (c) 2009 The openGion Project.