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 * <button type="button" id="barStart" onclick="barcodeStart();" >Video Start</button> 038 * <input name="≪カラム名≫" id="outdata" ><br> 039 * <canvas id="preview" style="background-color: black;" > </canvas> 040 * 041 * script に CDNサービス を使うと、無線環境(iPad等)ではものすごく遅くなったため、ローカルに配置することにします。 042 * <script src="https://cdn.jsdelivr.net/npm/quagga@0.12.1/dist/quagga.min.js"><!-- --></script> 043 * 044 * script は quagga.min.js を使います。現在、1画面1つしかカメラは使えません。 045 * これらは、使用する画面に、組み込んでください。 046 * <script src="{@SYS.JSP}/common/option/quagga.min.js"><!-- --></script> 047 * <script src="{@SYS.JSP}/common/option/videocamera.js"><!-- --></script> 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 * リクエスト情報を1つ毎のフィールドで処理できます。 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}