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.hayabusa.taglib;
017
018import static org.opengion.fukurou.util.StringUtil.nval;
019
020import org.opengion.fukurou.util.StringUtil;
021import org.opengion.fukurou.util.XHTMLTag;
022import org.opengion.hayabusa.common.HybsSystem;
023import org.opengion.hayabusa.resource.GUIInfo;
024
025/**
026 * テキストフィールドの入力を補助するポップアップを作成します。
027 *
028 * 通常のテキストフィールドに組み込むケースと、一覧表に組み込むケースに対応しています。
029 * 基本的には、columnMarker タグと同じ使い方ですが、フィールドが書き込み許可時に表示させる必要が
030 * あるため、実際には、viewMarker の isRendere="false" で使用するケースが多いと思います。
031 * なお、ポップアップ専用なので href="index.jsp" target="CONTENTS" がデフォルトで設定されています。
032 *
033 * @og.formSample
034 * ●形式:<og:popup gamenId="…" href="…" keys="…,…" vals="…,…" rtnKeys="…,…" />
035 * ●body:なし
036 *
037 * ●Tag定義:
038 *   <og:popup
039 *       name               【TAG】この要素をリンクの対象とするための名前を指定します
040 *       gamenId            【TAG】画面ID属性を登録します
041 *       href               【TAG】ポップアップ先のURLを指定します(初期値:index.jsp)
042 *       keys               【TAG】ポップアップ先に渡す入力キー配列をCSV形式で複数指定します
043 *       vals               【TAG】ポップアップ先に渡す値配列をCSV形式で複数指定します
044 *       rtnKeys            【TAG】ポップアップ先より受け取るキー配列をCSV形式で複数指定します
045 *       column             【TAG】リンクをつけたいカラムを指定します
046 *       onMark             【TAG】リンクを張る(true or 1)/張らない(false or 0)の設定を指定します(初期値:true)
047 *       markList           【TAG】処理するマークを、"|"区切りの文字列で指定します
048 *       height             【TAG】ダイアログの縦幅をピクセル数で指定します
049 *       width              【TAG】ダイアログの横幅をピクセル数で指定します
050 *       src                【TAG】表示させる画像のURLを指定します
051 *       charset            【TAG】ポップアップ先の文字コードセットを指定します
052 *       target             【TAG】ポップアップ先の表示ターゲットを指定します(初期値:CONTENTS)
053 *       caseKey            【TAG】このタグ自体を利用するかどうかの条件キーを指定します(初期値:null)
054 *       caseVal            【TAG】このタグ自体を利用するかどうかの条件値を指定します(初期値:null)
055 *       caseNN             【TAG】指定の値が、null/ゼロ文字列 でない場合(Not Null=NN)は、このタグは使用されます(初期値:true)
056 *       caseNull           【TAG】指定の値が、null/ゼロ文字列 の場合は、このタグは使用されます(初期値:true)
057 *       id                 【HTML】要素に対して固有の名前(id)をつける場合に設定します
058 *       lang               【HTML】要素の内容と他の属性値の言語(lang,xml:lang)を指定します
059 *       dir                【HTML】文字表記の方向(dir)を指定します
060 *       title              【HTML】要素に対する補足的情報(title)を設定します
061 *       style              【HTML】この要素に対して適用させるスタイルシート(style)を設定します
062 *       tabindex           【HTML】タブの移動順(tabindex)を指定します(0 〜 32767)
063 *       accesskey          【HTML】アクセスキー(alt+キーで直接指定)を割り当てます
064 *       clazz              【HTML】要素に対して class 属性を設定します
065 *       lbl                【TAG】ラベルリソースのラベルIDを指定します
066 *       language           【TAG】タグ内部で使用する言語コード[ja/en/zh/…]を指定します
067 *       command            【TAG】(通常使いません)処理の実行を指定する command を設定できます(初期値:NEW)
068 *       append             【TAG】返ってきた値をキャレット位置に追記するかどうか(初期値:false)
069 *       setSrc             【TAG】ボタンではなく画像を利用する場合にimgのsrcを指定します
070 *       span            【TAG】テキストでポップアップを利用する場合に指定します
071 *       useGamenId         【TAG】popupのURLに画面ID属性を追加するかどうか(初期値:false)
072 *       debug              【TAG】デバッグ情報を出力するかどうか[true/false]を指定します(初期値:false)
073 *   />
074 *
075 * ●使用例
076 *    ・普通のポップアップ
077 *        <og:popup gamenId="GE0002" href="index.jsp" target="CONTENTS"
078 *                    keys="AAA,BBB,CCC" vals="{@AAA},{@B},ABC"
079 *                    rtnKeys="DDD,EEE" />
080 *
081 *    ・QUERYの入力フィールドに組み込む
082 *      @keys、vals、rtnKeys がセットされる場合
083 *          セットされる keys に対して vals の値をポップアップ画面に渡し、ポップアップ画面の戻り値を rtnKeys にセットされます。
084 *        <og:column name="AAA" value="{@AAA}" >
085 *            <og:popup gamenId="GE0002"
086 *                        keys="AAA,BBB,CCC" vals="{@AAA},{@B},ABC"
087 *                        rtnKeys="DDD,EEE" />
088 *        </og:column>
089 *      Akeys、vals、rtnKeys がセットされない場合
090 *           ポップアップ画面にリクエスト変数 XNAME に外側のカラム名、XVALUE にカラムの入力値、rtnKeys にカラム名を自動的にセットされます。
091 *        <og:column name="AAA" value="{@AAA}" >
092 *            <og:popup gamenId="GE0002" />
093 *        </og:column>
094 *
095 *    ・RESULTの入力フィールドに組み込む(viewMarker 経由)
096 *      gamenId を指定しなければこの画面へのURLを作成します。
097 *      このURLは、その画面の index.jsp に直接ジャンプするためのURLです。
098 *        <og:viewMarker command="{@command}" isRenderer="false">
099 *            <og:popup gamenId="GE0002" column="ABC" onMark="[ABC]" markList="1|2|3"
100 *                        keys="AAA,BBB,CCC" vals="[AAA],[BBB].value,{@CCC}"
101 *                        rtnKeys="DDD,EEE" />
102 *        </og:viewMarker>
103 *
104 *    ・ポップアップ側のJSPファイル(view 部分)
105 *
106 * @og.group 画面部品
107 * @og.rev 3.8.6.1 (2006/10/20) 新規作成
108 *
109 * @version  0.9.0      2000/10/17
110 * @author       Kazuhiko Hasegawa
111 * @since        JDK1.1,
112 */
113public class PopupTag extends HTMLTagSupport {
114        //* このプログラムのVERSION文字列を設定します。   {@value} */
115        private static final String VERSION = "5.2.2.0 (2010/11/01)" ;
116
117        private static final long serialVersionUID = 522020101101L ;
118
119        private static final String DEF_BODY  = "▼" ;
120//      private static final String DEF_STYLE = "width:20px;text-align:center;" ;
121        private static final String DEF_STYLE = "width:20px;text-align:center;padding:0;" ; // 5.9.4.3 (2016/01/15) padding
122
123        private String          column          = null;
124        private String          gamenId         = null;
125        private String          href            = "index.jsp";
126        private String          target          = "CONTENTS";
127        private String          onMark          = "true";       // true または 1
128        private String          markList        = "true|TRUE|1";        // true または 1
129        private String          height          = null;
130        private String          width           = null;
131        private String          imgsrc          = null;
132        private String[]        keys            = null;
133        private String[]        vals            = null;
134        private String[]        rtnKeys         = null;
135
136        /** command 引数に渡す事の出来る コマンド  新規 {@value} */
137        private static final String CMD_NEW      = "NEW" ;              // 5.1.7.0 (2010/06/01)
138        private String          command         = CMD_NEW;                      // 5.1.7.0 (2010/06/01)
139        
140        private String          append          = "false";                      // 5.8.5.0 (2015/03/06)
141        
142//      private static String VALUE_PRE = "this.form.";         // 5.9.6.0 (2016/03/01)
143        private static String VALUE_PRE = "$(this).closest('form').get(0)."; // 5.10.11.2 (2019/05/17)
144        
145        private boolean useGamenId = false; // 5.10.11.2 (2019/05/17) 7.0.3.0追加適用
146        private String setSpan = null; // 5.10.11.2 (2019/05/07)
147
148        /**
149         * Taglibの終了タグが見つかったときに処理する doEndTag() を オーバーライドします。
150         *
151         * @og.rev 5.2.2.0 (2010/11/01) caseKey 、caseVal 属性対応
152         *
153         * @return      後続処理の指示
154         */
155        @Override
156        public int doEndTag() {
157                // 5.2.2.0 (2010/11/01) caseKey 、caseVal 属性対応
158                if( useTag() ) {
159                        makeGamenLink();
160
161                        // GAMENID属性のURLへの自動セットは行わない。
162                        ViewMarkerTag viewMark = (ViewMarkerTag)findAncestorWithClass( this,ViewMarkerTag.class );
163                        if( viewMark != null ) {
164                                set( "onMark"  ,onMark );
165                                set( "markList",markList );
166                                set( "body"    ,makePopup( true ) );
167
168                                if( column != null && column.length() > 0 ) {
169                                        set( "column"  ,column );       // 4.0.0 (2005/08/31) 同一カラムの複数登録を許可します。
170                                        viewMark.addAttribute( getAttributes() );
171                                }
172                        }
173                        else {
174                                if( markList.indexOf( onMark ) >= 0 ) {
175                                        jspPrint( makePopup( false ) );
176                                }
177                        }
178                }
179                return(EVAL_PAGE);
180        }
181
182        /**
183         * 使用しません。
184         *
185         * @return      (null 固定)
186         */
187        @Override
188        protected String makeTag() { return null; }
189
190        /**
191         * タグリブオブジェクトをリリースします。
192         * キャッシュされて再利用されるので、フィールドの初期設定を行います。
193         * 
194         * @og.rev 5.10.11.2 (2019/05/17) useGamenid,setSpan追加
195         */
196        @Override
197        protected void release2() {
198                super.release2();
199                column          = null;
200                gamenId         = null;
201                href            = "index.jsp";
202                target          = "CONTENTS";
203                onMark          = "true";                       // true または 1
204                markList        = "true|TRUE|1";        // true または 1
205                keys            = null;
206                vals            = null;
207                rtnKeys         = null;
208                height          = null;
209                width           = null;
210                imgsrc          = null;
211                command         = CMD_NEW;                      // 5.1.7.0 (2010/06/01)
212                append          = "false";                      // 5.8.5.0 (2015/03/66)
213                useGamenId  = false;                    // 5.10.11.2 (2019/05/17)
214                setSpan         = null;                         // 5.10.11.2 (2019/05/17)
215        }
216
217        /**
218         * リンクを作成します。
219         *
220         * @og.rev 4.2.4.0 (2008/07/01) keys,vals,rtnKeysが設定されていない場合、外側のog:columnタグのname値を設定するように変更
221         * @og.rev 5.1.7.0 (2010/06/01) 引数にcommandを追加
222         * @og.rev 5.2.1.0 (2010/10/01) height、width には、"px" などの単位を付ける前提での対応
223         * @og.rev 5.2.2.0 (2010/11/01) height、width が null の場合は、シングルクオートをつけない。
224         * @og.rev 5.8.5.0 (2015/03/06) append追加
225         * @og.rev 5.9.16.1 (2017/01/20) this.formの追加
226         * @og.rev 5.10.11.2 (2019/05/17) useGamenId追加
227         *
228         * @param       useKey [true:KEY付き/false:KEY無し]
229         *
230         * @return      リンクタグ文字列
231         */
232        private String makePopup( final boolean useKey ) {
233                StringBuilder rtn = new StringBuilder();
234//              rtn.append( "ogPopup( '" ).append( get( "href" ) ).append( "'," );
235//              rtn.append( height ).append( "," ).append( width ).append( "," );
236                // 5.2.1.0 (2010/10/01)  px を付けると数字ではなくなるため、シングルクオーテーションでくくる。
237                rtn.append( "ogPopup( '" ).append( get( "href" ) ).append( "'," );
238                // 5.2.2.0 (2010/11/01) height、width が null の場合は、シングルクオートをつけない。
239                if( height != null ) { rtn.append( "'" ).append( height ).append( "'" ); }
240                else {                             rtn.append( "null" ); }
241                rtn.append( "," );
242                if( width != null ) {  rtn.append( "'" ).append( width ).append( "'" );  }
243                else {                             rtn.append( "null" ); }
244                rtn.append( "," );
245                
246                final String GMN_KV = useGamenId && gamenId != null && !gamenId.isEmpty()
247                                ?       "'GAMENID','" + gamenId + "'," 
248                                :       "" ;
249
250                String columnName = null; //4.2.4.0 2008/07/01
251                if( keys != null && keys.length > 0 ) {
252                        rtn.append( "new Array(" )
253                        .append( GMN_KV ); // 5.10.11.2 (2019/05/17)
254                        addQuote( rtn, keys[0], false );
255                        rtn.append( "," );
256                        addQuote( rtn, vals[0], false );
257                        for( int i = 1; i < keys.length; i++ ) {
258                                rtn.append( "," );
259                                addQuote( rtn, keys[i], false );
260                                rtn.append( "," );
261                                addQuote( rtn, vals[i], false );
262                        }
263                        rtn.append( ")," );
264                }
265                else {
266                        ColumnTag outerColumn = (ColumnTag) findAncestorWithClass( this, ColumnTag.class );
267                        columnName = ( outerColumn == null ) ? null : outerColumn.getName();
268                        if( columnName != null ) {
269                                rtn.append( "new Array('XNAME','" );
270                                rtn.append( columnName );
271                                rtn.append( "','XVALUE'," );
272                                rtn.append( VALUE_PRE ); // 5.9.16.1 (2017/01/20)
273                                rtn.append( columnName );
274                                rtn.append( ".value" );
275                                rtn.append( ")," );
276                        }
277                        else {
278                                rtn.append( "null," );
279                        }
280                }
281                rtn.append( "" );
282
283                if( rtnKeys != null && rtnKeys.length > 0 ) {
284                        rtn.append( "this,new Array(" );
285                        addQuote( rtn, rtnKeys[0], useKey );
286                        for( int i = 1; i < rtnKeys.length; i++ ) {
287                                rtn.append( "," );
288                                addQuote( rtn, rtnKeys[i], useKey );
289                        }
290                        rtn.append( ")" );
291                }
292                else if( columnName != null ) {
293                        rtn.append( "this,new Array('" );
294                        rtn.append( columnName );
295                        rtn.append( "')" );
296                }
297                else {
298                        rtn.append( "null,null" );
299                }
300
301                // 5.1.7.0 (2010/06/01) 引数にcommandを追加
302                // 5.8.5.0 (2015/03/06) append追加
303//              rtn.append( ");" );
304//              rtn.append( ",'" ).append( command ).append( "');" );
305                rtn.append( ",'" ).append( command ).append( "'");
306                rtn.append( ",'" ).append( append ).append( "');" );
307
308//              if( imgsrc == null ) {
309//                      set( "type"   , "button" );
310//                      set( "body"   , nval( getMsglbl(),DEF_BODY) );
311//                      set( "onClick", rtn.toString() );
312//                      set( "style"  , nval( get( "style" ),DEF_STYLE) );
313//                      return XHTMLTag.button( getAttributes() ) ;
314//              }
315//              else {
316//                      set( "src"    , imgsrc );
317//                      set( "title"  , getMsglbl() );
318//                      set( "onClick", rtn.toString() );
319//                      set( "style"  , get( "style" ) );
320//                      return XHTMLTag.img( getAttributes() ) ;
321//              }
322                
323                if( imgsrc != null ) {
324                        set( "src"    , imgsrc );
325                        set( "title"  , getMsglbl() );
326                        set( "onClick", rtn.toString() );
327                        set( "style"  , get( "style" ) );
328                        return XHTMLTag.img( getAttributes() ) ;
329                }
330                else if( setSpan != null ) { // 5.10.11.2 (2019/05/17)
331                        set( "body"   , StringUtil.htmlFilter(setSpan) );
332                        set( "title"  , getMsglbl() );
333                        set( "optionAttributes", "onClick=\""+rtn.toString()+"\"" );
334                        set( "style"  , get( "style" ) );
335                        set( "class" , "hybsPopup" );
336                        return XHTMLTag.span( getAttributes() ) ;
337                }
338                else {
339                        set( "type"   , "button" );
340                        set( "body"   , nval( getMsglbl(),DEF_BODY) );
341                        set( "onClick", rtn.toString() );
342                        set( "style"  , nval( get( "style" ),DEF_STYLE) );
343                        return XHTMLTag.button( getAttributes() ) ;
344                }
345        }
346
347        /**
348         * 引数 val の設定値を設定する簡易メソッド
349         * 
350         * @og.rev 5.9.6.0 (2016/03/01) valueの取得の形を少し変える処理をここに入れる
351         *
352         * @param       buf             結果を格納するStringBuilderオブジェクト
353         * @param       val             設定値
354         * @param       useKey  [true:KEY付き/false:KEY無し]
355         *
356         * @return      (引数のバッファと同じオブジェクト)
357         */
358        private StringBuilder addQuote( final StringBuilder buf, final String val, final boolean useKey ) {
359                // 5.9.6.0 this.form.対応
360                String val2 = "";
361                if( val != null && val.endsWith( ".value" ) && val.indexOf( "." ) == val.lastIndexOf( "." ) ){
362                        val2 = VALUE_PRE;
363                }
364                
365                
366                if( useKey ) {
367                        if( val != null && val.endsWith( ".value" ) ) {
368//                              buf.append( val.substring( 0,val.length()-6 ) ).append( "__{I}.value" );
369                                buf.append( val2 ).append( val.substring( 0,val.length()-6 ) ).append( "__{I}.value" ); // 5.9.6.0
370                        }
371                        else {
372                                buf.append( "'" ).append( val ).append( "__{I}'" );
373                        }
374                }
375                else {
376                        if( val != null && val.endsWith( ".value" ) ) {
377                                if( val.charAt(0) == '[' ) {
378//                                      buf.append( val.substring( 1,val.length()-7 ) ).append( "__{I}.value" );
379                                        buf.append( val2 ).append( val.substring( 1,val.length()-7 ) ).append( "__{I}.value" ); // 5.9.6.0
380                                }
381                                else {
382//                                      buf.append( val );
383                                        buf.append( val2 ).append( val ); // 5.9.6.0
384                                }
385                        }
386                        else {
387                                buf.append( "'" ).append( val ).append( "'" );
388                        }
389                }
390                return buf ;
391        }
392
393        /**
394         * 画面IDとhref から、指定のURLを作成します。
395         * 
396         */
397        private void makeGamenLink() {
398                if( gamenId == null || gamenId.length() == 0 ) { return ; }
399
400                GUIInfo guiInfo = getGUIInfo( gamenId );                // 4.0.0 (2005/01/31)
401                if( guiInfo == null ) { return ; }      // 見つからない場合は、アクセス不可
402
403                String address = guiInfo.getRealAddress( get( "href" ) );
404                String url = getRequestParameter( address );
405                
406                set( "href",url );
407
408                if( get( "title" ) == null ) {
409                        set( "title","To:" + guiInfo.getLabel() );
410                }
411        }
412
413        /**
414         * 【TAG】この要素をリンクの対象とするための名前を指定します。
415         *
416         * @og.tag この要素をリンクの対象とするための名前を指定します。
417         *
418         * @param       name 名前
419         */
420        public void setName( final String name ) {
421                set( "name",getRequestParameter( name ) );
422        }
423
424        /**
425         * 【TAG】リンクをつけたいカラムを指定します。
426         *
427         * @og.tag
428         * このカラム名のTableModelに対して、 ViewLink タグが存在する場合は,
429         * リンクを張ります。
430         *
431         * @param       clm カラム名
432         */
433        public void setColumn( final String clm ) {
434                column = nval( getRequestParameter( clm ),column );
435        }
436
437        /**
438         * 【TAG】画面ID属性を登録します。
439         *
440         * @og.tag
441         * gamenId 属性は、画面IDをキーに、実アドレスを求めるのに使用します。
442         * 画面IDが指定された場合は、実アドレスに変換する。指定されない場合は、
443         * href 属性をそのままリンク情報を作成します。
444         * 画面IDを指定する場合の href は、JSPファイル名(例えば、index.jsp 等)です。
445         *
446         * @param       id      画面ID
447         */
448        public void setGamenId( final String id ) {
449                gamenId = nval( getRequestParameter( id ),gamenId );
450        }
451
452        /**
453         * 【TAG】ポップアップ先のURLを指定します(初期値:index.jsp)。
454         *
455         * @og.tag
456         * 通常、gamenId を指定している場合は、それ以降(index.jsp , result.jsp など)を指定します。
457         * 通常のリンクの場合、GAMENID/href というアドレスに合成されます。( GE0001/result.jsp など )
458         * (正確には、画面IDではなく、対応する画面ADDRESSを使用します。)
459         * ポップアップ専用のリンクなので、初期値は、index.jsp です。
460         *
461         * @param       href ポップアップ先のURL
462         */
463        public void setHref( final String href ) {
464                set( "href",nval( getRequestParameter( href ),this.href ) );
465        }
466
467        /**
468         * 【TAG】ポップアップ先の文字コードセットを指定します。
469         *
470         * @og.tag ポップアップ先の文字コードセットを指定します。
471         *
472         * @param       charset 文字コードセット
473         */
474        public void setCharset( final String charset ) {
475                set( "charset",getRequestParameter( charset ) );
476        }
477
478        /**
479         * 【TAG】ポップアップ先の表示ターゲットを指定します(初期値:CONTENTS)。
480         *
481         * @og.tag ポップアップ先の表示ターゲットを指定します。
482         *
483         * @param       target 表示ターゲット
484         */
485        public void setTarget( final String target ) {
486                set( "target",nval( getRequestParameter( target ),this.target ) );
487        }
488
489        /**
490         * 【TAG】ポップアップ先に渡す入力キー配列をCSV形式で複数指定します。
491         *
492         * @og.tag ポップアップ先に渡す入力キー配列を指定します。
493         * 分解方法は、CSV変数を先に分解してから、getRequestParameter で値を取得します。
494         * こうしないとデータ自身にカンマを持っている場合に分解をミスる為です。
495         *
496         * @param       key 渡す入力キー配列(CSV形式)
497         */
498        public void setKeys( final String key ) {
499                keys = getCSVParameter( key );
500        }
501
502        /**
503         * 【TAG】ポップアップ先に渡す値配列をCSV形式で複数指定します。
504         *
505         * @og.tag ポップアップ先に渡す値配列を指定します。
506         * 分解方法は、CSV変数を先に分解してから、getRequestParameter で値を取得します。
507         * こうしないとデータ自身にカンマを持っている場合に分解をミスる為です。
508         *
509         * @param       val 渡す値配列(CSV形式)
510         */
511        public void setVals( final String val ) {
512                vals = getCSVParameter( val );
513        }
514
515        /**
516         * 【TAG】ポップアップ先より受け取るキー配列をCSV形式で複数指定します。
517         *
518         * @og.tag ポップアップ先より受け取るキー配列を指定します。
519         * 分解方法は、CSV変数を先に分解してから、getRequestParameter で値を取得します。
520         * こうしないとデータ自身にカンマを持っている場合に分解をミスる為です。
521         *
522         * @param       key 受け取るキー配列(CSV形式)
523         */
524        public void setRtnKeys( final String key ) {
525                rtnKeys = getCSVParameter( key );
526        }
527
528        /**
529         * 【TAG】リンクを張る(true or 1)/張らない(false or 0)の設定を指定します(初期値:true)。
530         *
531         * @og.tag
532         * リンクを張る場合は、"true"(または "1") リンクを張らない
533         * 場合は, "true以外"(または "0")をセットします。
534         * 初期値は、 "true"(リンクを張る)です。
535         * さらに、[カラム名] で、動的にカラムの値で、リンクを張る、張らないを
536         * 選ぶ事が可能になります。値は、"true"(または "1") で、マークします。
537         * ただし、単独 linkタグ時は使用できません。
538         * 追記 3.5.2.0 (2003/10/20):markList属性に、処理対象文字列郡を指定できます。
539         * これにより、リンクを処理するかどうかの判断が、true,1 以外にも使用できるようになりました。
540         *
541         * @param       flag リンクの設定[true:リンクを張る/それ以外:リンクを張らない]
542         */
543        public void setOnMark( final String flag ) {
544                onMark = nval( getRequestParameter( flag ),onMark );
545        }
546
547        /**
548         * 【TAG】処理するマークを、"|"区切りの文字列で指定します。
549         *
550         * @og.tag
551         * markListで与えられた文字列に、onMark文字列(大文字/小文字の区別あり)が
552         * 含まれていれば、処理します。
553         * 例えば、"A","B","C" という文字列が、onMark で指定された
554         * 場合に処理するようにしたい場合は、"A|B|C" をセットします。
555         * markList には、[カラム名]指定が可能です。(ただし、単独 linkタグ時は除く)
556         * 初期値は、 "true|TRUE|1"です。
557         *
558         * @param       list 処理するマーク(indexOf による含む/含まない判定)
559         */
560        public void setMarkList( final String list ) {
561                markList = nval( getRequestParameter( list ),markList );
562        }
563
564        /**
565         * 【TAG】ダイアログの縦幅をピクセル数で指定します。
566         *
567         * @og.tag
568         * 縦幅を指定します。単位も含めて入力してください。
569         * 設定しない場合は、ogPopup JavaScript の内部初期値が採用されます。
570         *
571         * @og.rev 5.2.1.0 (2010/10/01) height、width には、"px" などの単位を付ける前提での対応
572         *
573         * @param   ht ダイアログの縦幅(ピクセル数)
574         */
575        public void setHeight( final String ht ) {
576                height = nval( getRequestParameter( ht ),height );
577                if( height != null && ! height.endsWith( "px" ) ) { height += "px"; }   // 5.2.1.0 (2010/10/01)
578        }
579
580        /**
581         * 【TAG】ダイアログの横幅をピクセル数で指定します。
582         *
583         * @og.tag
584         * 横幅を指定します。単位も含めて入力してください。
585         * 設定しない場合は、ogPopup JavaScript の内部初期値が採用されます。
586         *
587         * @og.rev 5.2.1.0 (2010/10/01) height、width には、"px" などの単位を付ける前提での対応
588         *
589         * @param   wh ダイアログの横幅(ピクセル数)
590         */
591        public void setWidth( final String wh ) {
592                width = nval( getRequestParameter( wh ),width );
593                if( width != null && ! width.endsWith( "px" ) ) { width += "px"; }      // 5.2.1.0 (2010/10/01)
594        }
595
596        /**
597         * 【TAG】表示させる画像のURLを指定します。
598         *
599         * @og.tag
600         * この属性を設定すると、自動的に イメージリンクでの onClick属性で
601         * ポップアップの起動画面を作成します。
602         * この属性が設定されていない場合は、button での起動になります。
603         *
604         * @param   src 画像のURL
605         */
606        public void setSrc( final String src ) {
607                imgsrc = nval( getRequestParameter( src ),imgsrc );
608        }
609
610        /**
611         * 【TAG】(通常使いません)処理の実行を指定する command を設定できます(初期値:NEW)。
612         *
613         * @og.tag
614         * ここで指定されたcommandは、ポップアップ画面の引数として渡されます。
615         * 初期値は、NEW です。
616         *
617         * @og.rev 5.1.7.0 (2010/06/01) 新規作成
618         *
619         * @param       cmd コマンド
620         */
621        public void setCommand( final String cmd ) {
622                command = nval( getRequestParameter( cmd ),command );
623        }
624        
625        /**
626         * 【TAG】返り値をキャレット位置に追記する(true)/しない(false)の設定を指定します(初期値:false)。
627         *
628         * @og.tag
629         * ポップアップからの返り値を、元の値と置換するのではなく、キャレット位置に挿入するかどうかを指定します。
630         * 
631         * @og.rev 5.8.5.0 (2015/02/06)
632         *
633         * @param       flg 返り値のキャレット位置に追記設[true:追記/それ以外:置換]
634         */
635        public void setAppend( final String flg ) {
636                append = nval( getRequestParameter( flg ),append );
637        }
638        
639        /**
640         * 【TAG】表示させる文字列を指定します。
641         *
642         * @og.tag
643         * この属性を設定すると、spanタグの onClick属性で
644         * ポップアップの起動画面を作成します。
645         * classにはhybsPopupを付加します。
646         * img利用を指定している場合は、そちらが優先的に利用されます。
647         *
648         * @param   text 表示させる文字列
649         */
650        public void setSpan( final String text ) {
651                setSpan = nval( getRequestParameter( text ),setSpan );
652        }
653        
654        /**
655         * 【TAG】popupで上がる画面のURLにGamenId属性を付加するかどうかせっています(初期値:false)。
656         *
657         * @og.tag
658         * ポップアップのURLのリクエスト変数にGAMENIDを付加するかどうかを指定します。
659         * 初期値は互換性を考慮してfalseです。
660         * 
661         * @og.rev 5.10.11.2 (2019/05/17) 新規作成
662         *
663         * @param       flg gamenidの付加設定[true:付加する/false:しない]
664         */
665        public void setUseGamenId( final String flg ) {
666                useGamenId = nval( getRequestParameter( flg ),useGamenId );
667        }
668
669        /**
670         * このオブジェクトの文字列表現を返します。
671         * 基本的にデバッグ目的に使用します。
672         *
673         * @return このクラスの文字列表現
674         */
675        @Override
676        public String toString() {
677                return org.opengion.fukurou.util.ToString.title( this.getClass().getName() )
678                                .println( "VERSION"             ,VERSION        )
679                                .println( "column"              ,column         )
680                                .println( "gamenId"             ,gamenId        )
681                                .println( "href"                ,href           )
682                                .println( "target"              ,target         )
683                                .println( "onMark"              ,onMark         )
684                                .println( "markList"    ,markList       )
685                                .println( "height"              ,height         )
686                                .println( "width"               ,width          )
687                                .println( "keys"                ,keys           )
688                                .println( "vals"                ,vals           )
689                                .println( "rtnKeys"             ,rtnKeys        )
690                                .println( "Other..."    ,getAttributes().getAttribute() )
691                                .fixForm().toString()
692                        + HybsSystem.CR
693                        + super.toString() ;
694        }
695}