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; 021// import org.opengion.fukurou.util.XHTMLTag; // 8.0.0.0 (2021/07/31) Delete 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 * SNAP エディターは、カメラ映像で取り込んだvideoをcanvasにキャプチャしてから、 029 * BASE64エンコードでサーバーにアップロードするクラスです。 030 * セーブフォルダは、サーブレットの初期値(saveDir) + 相対パスで、値(value値) を使用します。 031 * ファイル名は、初期値(yyyyMMddHHmmssSSS.png)か、引数 file を使用します。 032 * 受け側(サーバー側)は ImageSave サーブレットを使用します。 033 * 034 * 基本的な構造は、カメラ映像描画開始ボタン、静止画キャプチャボタン、アップロードボタン、 035 * 映像表示領域(video)、静止画描画領域(canvas)、ファイル名設定テキストフィールドで構成されます。 036 * 映像表示領域(video)でキャプチャすると、静止画を同じ場所に上書きします。もう一度押すと再度映像に切り替わります。 037 * 038 * <button type="button" id="vidStart" onclick="videoStart()" >Video Start</button> 039 * <button type="button" id="capStart" onclick="capture()" >Capture</button> 040 * <button type="button" id="upStart" onclick="upload( {dir:"≪値≫"} )" >Upload</button><br> 041 * <div id="videotop" style="display:flex;" > 042 * <video id="player" autoplay style="background-color: black;position: absolute;z-index: 1;" ></video> 043 * <canvas id="snapshot" style="visibility: hidden;z-index: 2;" ></canvas> 044 * </div> 045 * 046 * script は、1画面1つしかカメラは使います。 047 * これらは、使用する画面に、組み込んでください。 048 * <script src="{@SYS.JSP}/common/option/videocamera.js"><!-- --></script> 049 * 050 * @og.rev 7.4.2.1 (2021/05/21) 新規作成 051 * @og.group データ編集 052 * 053 * @version 7.4 054 * @author Kazuhiko Hasegawa 055 * @since JDK11.0, 056 */ 057public class Editor_SNAP extends AbstractEditor { 058 /** このプログラムのVERSION文字列を設定します。 {@value} */ 059 private static final String VERSION = "7.4.2.1 (2021/05/21)" ; 060 061// // 7.4.2.2 (2021/05/28) システム定数のJSPを使用します。(※ SYS.JSP + SYS.IMAGE_DIR) 062// private static final String JSP_OPT = HybsSystem.sys( "JSP" ) + "/option/" ; 063 064// private static final String JS_SRC = "<script src='" + JSP_OPT + "videocamera.js' ><!-- --></script>" ; 065 066 private static final String BASE_HTML1 = 067 "<button type='button' id='vidStart' onclick='videoStart()' >Video Start</button>" 068 + CR + "<button type='button' id='capStart' onclick='capture()' >Capture</button>" 069 + CR + "<button type='button' id='upStart' onclick='upload({dir:\"" ; 070 071 private static final String BASE_HTML2 = "\"})' >Upload</button><br>" 072 + CR + "<div id='videotop' style='display:flex;' >" 073 + CR + "<video id='player' autoplay style='background-color: black;position: absolute;z-index: 1;' ></video>" 074 + CR + "<canvas id='snapshot' style='visibility: hidden;z-index: 2;' ></canvas>" 075 + CR + "</div>" ; 076 077 /** 078 * デフォルトコンストラクター。 079 * このコンストラクターで、基本オブジェクトを作成します。 080 * 081 * @og.rev 7.4.2.1 (2021/05/21) 新規作成 082 * 083 */ 084 public Editor_SNAP() { super(); } // これも、自動的に呼ばれるが、空のメソッドを作成すると警告されるので、明示的にしておきます。 085 086 /** 087 * コンストラクター。 088 * 089 * @og.rev 7.4.2.1 (2021/05/21) 新規作成 090 * 091 * @param clm DBColumnオブジェクト 092 */ 093 protected Editor_SNAP( final DBColumn clm ) { 094 super( clm ); 095 096// // Attributesの連結記述 097// attributes = new Attributes() 098// .set( clm.getEditorAttributes() ) 099// .add( "class" , clm.getDbType() ); 100// 101// tagBuffer.add( XHTMLTag.textareaAttri( attributes ) ); 102 } 103 104 /** 105 * 各オブジェクトから自分のインスタンスを返します。 106 * 自分自身をキャッシュするのか、新たに作成するのかは、各サブクラスの実装に 107 * まかされます。 108 * 109 * @og.rev 7.4.2.1 (2021/05/21) 新規作成 110 * 111 * @param clm DBColumnオブジェクト 112 * 113 * @return CellEditorオブジェクト 114 * @og.rtnNotNull 115 */ 116 public CellEditor newInstance( final DBColumn clm ) { 117 return new Editor_SNAP( clm ); 118 } 119 120 /** 121 * データの編集用文字列を返します。 122 * 123 * @og.rev 7.4.2.1 (2021/05/21) 新規作成 124 * 125 * @param value 入力値 126 * 127 * @return データの編集用文字列 128 * @og.rtnNotNull 129 */ 130 @Override 131 public String getValue( final String value ) { 132 // TagBufferの連結記述 133// return BASE_HTML.replaceAll( "≪値≫" , value ); 134 return BASE_HTML1 + value + BASE_HTML2 ; 135 } 136 137 /** 138 * name属性を変えた、データ表示/編集用のHTML文字列を作成します。 139 * テーブル上の name に 行番号を付加して 名前_行番号 で登録するキーを作成し、 140 * リクエスト情報を1つ毎のフィールドで処理できます。 141 * 142 * @og.rev 7.4.2.1 (2021/05/21) 新規作成 143 * 144 * @param row 行番号 145 * @param value 入力値 146 * 147 * @return データ表示/編集用の文字列 148 * @og.rtnNotNull 149 */ 150 @Override 151 public String getValue( final int row,final String value ) { 152// final String newName = name + HybsSystem.JOINT_STRING + row; // newName は未使用 153 154// return BASE_HTML.replaceAll( "≪値≫" , value ); 155 return BASE_HTML1 + value + BASE_HTML2 ; 156 } 157}