    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 *    &lt;button type='button' id='vidStart' onClick='videoStart()'&gt;Video Start&lt;/button&gt;
    039 *    &lt;button type='button' id='capStart' onClick='capture()'&gt;Capture&lt;/button&gt;
    040 *    &lt;button type='button' id='upStart' onClick='upload( {dir:'≪値≫'} )'&gt;Upload&lt;/button&gt;&lt;br /&gt;
    041 *    &lt;div id='videotop' style='display:flex;' &gt;
    042 *        &lt;video id='player' autoplay style='background-color: black;position: absolute;z-index: 1;'&gt;&lt;/video&gt;
    043 *        &lt;canvas id='snapshot' style='visibility:hidden;z-index: 2; '&gt;&lt;/canvas&gt;
    044 *    &lt;/div&gt;
    045 *
    046 * script は、1画面1つしかカメラは使います。
    047 * これらは、使用する画面に、組み込んでください。
    048 * &lt;script src="{&#064;SYS.JSP}/option/videocamera.js"&gt;&lt;!-- --&gt;&lt;/script&gt;
    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         * リクエスト情報を１つ毎のフィールドで処理できます。
    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}