    001/*
    002 * Copyright (c) 2009 The openGion Project.
    003 *
    004 * Licensed under the Apache License, Version 2.0 (the "License");
    005 * you may not use this file except in compliance with the License.
    006 * You may obtain a copy of the License at
    007 *
    008 *     http://www.apache.org/licenses/LICENSE-2.0
    009 *
    010 * Unless required by applicable law or agreed to in writing, software
    011 * distributed under the License is distributed on an "AS IS" BASIS,
    012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
    013 * either express or implied. See the License for the specific language
    014 * governing permissions and limitations under the License.
    015 */
    016package org.opengion.plugin.column;
    017
    018import org.opengion.hayabusa.db.AbstractEditor;
    019import org.opengion.hayabusa.db.CellEditor;
    020import org.opengion.hayabusa.db.DBColumn;
    021import org.opengion.fukurou.util.XHTMLTag;
    022// import org.opengion.hayabusa.common.HybsSystem;                                              // 8.0.0.0 (2021/07/31) Delete
    023// import org.opengion.fukurou.util.Attributes;                                                 // 8.0.0.0 (2021/07/31) Delete
    024// import org.opengion.fukurou.util.StringUtil;                                                 // 8.0.0.0 (2021/07/31) Delete
    025// import org.opengion.fukurou.util.TagBuffer;                                                  // 8.0.0.0 (2021/07/31) Delete
    026
    027/**
    028 * BARCODE エディターは、quagga.js を利用した、カメラ映像からバーコードを読み込むクラスです。
    029 * 読み込んだ文字列は テキストエリアに書き出します。
    030 *
    031 * ｽﾀｰﾄ/ｴﾝﾄﾞｷｬﾗｸﾀ(*)は、JavaScript側(quagga)で削除されるようです。
    032 * ﾁｪｯｸﾃﾞｼﾞｯﾄのﾓｼﾞｭﾗｽ43 は、既存のﾊﾞｰｺｰﾄﾞﾌｫﾝﾄ仕様との互換性から、付いていません。…つまり何もしません。
    033 *
    034 * 基本的な構造は、カメラ映像描画開始ボタン、映像表示領域(canvas)、textarea で構成されます。
    035 * JavaScriptのサンプルの都合で、Editor_QRCODE と同じように、映像表示領域(video) を使用できませんでした。
    036 *
    037 *    &lt;button type='button' id='barStart' onClick='barcodeStart();'&gt;Video Start&lt;/button&gt;
    038 *    &lt;input name='≪ｶﾗﾑ名≫' id='outdata' /&gt; &lt;br /&gt;
    039 *    &lt;canvas id='preview' style='background-color: black;'&gt; &lt;/canvas&gt;
    040 *
    041 * script に CDNサービス を使うと、無線環境(iPad等)ではものすごく遅くなったため、ローカルに配置することにします。
    042 * &lt;script src="https://cdn.jsdelivr.net/npm/quagga@0.12.1/dist/quagga.min.js"&gt;&lt;!-- --&gt;&lt;/script&gt;
    043 *
    044 * script は、quagga.min.js を使います。現在、1画面1つしかカメラは使えません。
    045 * これらは、使用する画面に、組み込んでください。
    046 * &lt;script src="{&#064;SYS.JSP}/option/quagga.min.js"&gt;&lt;!-- --&gt;&lt;/script&gt;
    047 * &lt;script src="{&#064;SYS.JSP}/option/videocamera.js"&gt;&lt;!-- --&gt;&lt;/script&gt;
    048 *
    049 * を使用するページに設定します。
    050 *
    051 * @og.rev 7.4.2.2 (2021/05/28) 新規作成
    052 * @og.group データ編集
    053 *
    054 * @version  7.4
    055 * @author   Kazuhiko Hasegawa
    056 * @since    JDK11.0,
    057 */
    058public class Editor_BARCODE extends AbstractEditor {
    059        /** このプログラムのVERSION文字列を設定します。   {@value} */
    060        private static final String VERSION = "7.4.2.2 (2021/05/28)" ;
    061
    062//      // 7.4.2.2 (2021/05/28) ｼｽﾃﾑ定数のJSPを使用します。(※ SYS.JSP + SYS.IMAGE_DIR)
    063//      private static final String JSP_OPT =  HybsSystem.sys( "JSP" ) + "/option/" ;
    064
    065//      private static final String JS_SRC = "<script src='" + JSP_OPT + "quagga.min.js' ><!-- --></script>"
    066//                                                              + CR +   "<script src='" + JSP_OPT + "videocamera.js' ><!-- --></script>" ;
    067
    068        private static final String BASE_HTML1 = "<button type='button' id='barStart' onClick='barcodeStart();'>Scan Start</button>" ;
    069
    070        private static final String BASE_HTML2 = "<br /><canvas id='preview' style='background-color: black;'> </canvas>" ;
    071
    072        /**
    073         * デフォルトコンストラクター。
    074         * このコンストラクターで、基本オブジェクトを作成します。
    075         *
    076         * @og.rev 7.4.2.2 (2021/05/28) 新規作成
    077         *
    078         */
    079        public Editor_BARCODE() { super(); }            // これも、自動的に呼ばれるが、空のメソッドを作成すると警告されるので、明示的にしておきます。
    080
    081        /**
    082         * コンストラクター。
    083         *
    084         * @og.rev 7.4.2.2 (2021/05/28) 新規作成
    085         *
    086         * @param       clm     DBColumnオブジェクト
    087         */
    088        protected Editor_BARCODE( final DBColumn clm ) {
    089                super( clm );
    090
    091                // Attributesの連結記述
    092                attributes.set( "id", "outdata" );                              // id 固定
    093
    094                tagBuffer.add( XHTMLTag.inputAttri( attributes ) );
    095        }
    096
    097        /**
    098         * 各オブジェクトから自分のインスタンスを返します。
    099         * 自分自身をキャッシュするのか、新たに作成するのかは、各サブクラスの実装に
    100         * まかされます。
    101         *
    102         * @og.rev 7.4.2.2 (2021/05/28) 新規作成
    103         *
    104         * @param       clm     DBColumnオブジェクト
    105         *
    106         * @return      CellEditorオブジェクト
    107         * @og.rtnNotNull
    108         */
    109        public CellEditor newInstance( final DBColumn clm ) {
    110                return new Editor_BARCODE( clm );
    111        }
    112
    113        /**
    114         * データの編集用文字列を返します。
    115         *
    116         * @og.rev 7.4.2.2 (2021/05/28) 新規作成
    117         *
    118         * @param   value 入力値
    119         *
    120         * @return  データの編集用文字列
    121         * @og.rtnNotNull
    122         */
    123        @Override
    124        public String getValue( final String value ) {
    125                // TagBufferの連結記述
    126                return  BASE_HTML1
    127                        + CR + super.getValue( value )
    128                        + CR + BASE_HTML2 ;
    129        }
    130
    131        /**
    132         * name属性を変えた、データ表示/編集用のHTML文字列を作成します。
    133         * テーブル上の name に 行番号を付加して、名前_行番号 で登録するキーを作成し,
    134         * リクエスト情報を１つ毎のフィールドで処理できます。
    135         *
    136         * @og.rev 7.4.2.2 (2021/05/28) 新規作成
    137         *
    138         * @param   row   行番号
    139         * @param   value 入力値
    140         *
    141         * @return  データ表示/編集用の文字列
    142         * @og.rtnNotNull
    143         */
    144        @Override
    145        public String getValue( final int row,final String value ) {
    146                // TagBufferの連結記述
    147                return  BASE_HTML1
    148                        + CR + super.getValue( row, value )
    149                        + CR + BASE_HTML2 ;
    150        }
    151}