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     */
016    package org.opengion.plugin.column;
017    
018    import org.opengion.hayabusa.common.HybsSystem;
019    import org.opengion.hayabusa.common.HybsSystemException;
020    import org.opengion.hayabusa.db.AbstractEditor;
021    import org.opengion.hayabusa.db.CellEditor;
022    import org.opengion.hayabusa.db.DBColumn;
023    import org.opengion.hayabusa.db.Selection;
024    import org.opengion.hayabusa.db.SelectionFactory;
025    import org.opengion.fukurou.util.StringFormat;
026    import org.opengion.fukurou.util.XHTMLTag;
027    import org.opengion.fukurou.util.TagBuffer;
028    
029    /**
030     * カラãƒ??ç·¨é›?ƒ‘ラメーターã®?³?±?¬æ–??å®Ÿè¡Œçµæžœã‚ˆã‚Šã€datalistを作æ?ã—ã¦
031     * 入力å?補ã¨ãªã‚‹ãƒ‡ãƒ¼ã‚¿ãƒªã‚¹ãƒˆã‚’定義ã™ã‚‹ç·¨é›?”¨ã‚¨ãƒ?‚£ã‚¿ãƒ¼ã‚¯ãƒ©ã‚¹ã§ã™ã?
032     * datalist ã¯ã€HTML5 ã‹ã‚‰æŽ¡ç”¨ã•れãŸã‚¿ã‚°ã§ã™ã?
033     *
034     * ç·¨é›?ƒ‘ラメータã«ã¯ã€datalistを作æ?ã™ã‚‹ãŸã‚ã®ã€SQLæ–?‚’記述ã—ã¾ã™ã?
035     * ã“ã?SQLæ–??ã€select KEY,LABEL from xx ?¥?¥?¥ ã¨ã?†æ§‹æ–‡ã§ã€KEY部åˆ?¨LABEL部åˆ?Œ
036     * é¸æŠžã•れã¾ã™ã?
037     * datalist 自身ãŒã?HTML5ã‹ã‚‰ã®æ–°æ©Ÿè?ãªã®ã§ã€ç¾æ™‚点ã§ã¯ã€ã“れ以上ã?機è?ã¯ã‚りã¾ã›ã‚“ã€?
038     * å°?¥çš?«ã€DBMENU ãªã©ã¨åŒæ§˜ã«ã€ç¬¬ä¸‰ã‚«ãƒ©ãƒ?»¥é™ã‚’利用å¯èƒ½ã«ãªã‚‹ã¨æ€ã„ã¾ã™ã?ã§ã€?
039     * 今ã?使ã‚ãªã?§ãã ã•ã„。(å°?¥ã®æ©Ÿè?追åŠ?™‚ã«äº’æ›æ€§å•題を引ãèµ·ã“ã™ã‹ã‚‚ã—れã¾ã›ã‚“ã®ã§??
040     *
041     * 入力フィールドã¨datalistã‚¿ã‚°ã¨ã®é–¢ä¿‚付ã?ã€ã‚«ãƒ©ãƒ?Dã«ã€?カラãƒ?D.sel" ã§çµã?ã¤ã‘ã¾ã™ã?
042     *
043     * <input name="カラ�D" list="カラ�D.sel" />
044     * <div style="display:none;">
045     *   <datalist id="カラ�D.sel">
046     *     <option value="KEY1">LABEL1</option>
047     *     <option value="KEY2">LABEL2</option>
048     *     <option value="KEY3">LABEL3</option>
049     *   </datalist>
050     * </div>
051     *
052     * divã‚¿ã‚°ã¯ã€HTML5 éžå¯¾å¿œãƒ–ラウザを使用ã—ãŸå ´åˆã?datalist ã® option ãŒãã®ã¾ã¾
053     * ãƒ?‚­ã‚¹ãƒˆã¨ã—ã¦è¦‹ãˆã¦ã—ã¾ã??ã‚’é¿ã‘ã‚‹ãŸã‚ã§ã™ã?
054     *
055     * ä¸?¦§è¡¨å‡ºåŠ›æ™‚ã® getValue( int ,String ) 処ç?§ã¯ã€Selection オブジェクトã?
056     * キャãƒ?‚·ãƒ¥æ©Ÿè?を利用ã—ã¦ã€åŒä¸?election オブジェクトã?é–“ã?ã€datalist ã¯ã€?
057     * ?‘度ã—ã‹ã€å?力ã—ãªã?§˜ã«åˆ¶å¾¡ã—ã¦ã?¾ã™ã?ã“れã«ã‚ˆã‚Šã€å?有ã?datalist を使用ã™ã‚‹ç‚ºã€?
058     * HTMLã®å‡ºåŠ›ãƒ‡ãƒ¼ã‚¿é‡ã‚’抑ãˆã‚‹ã“ã¨ãŒå¯èƒ½ã«ãªã‚Šã¾ã™ã?
059     * (キャãƒ?‚·ãƒ¥ã‚’利用ã—ãªã?¨?‘ï¼ï¼è¡Œå?力ã™ã‚‹ã¨?‘ï¼ï¼å?ã®datalistã‚’å?力ã™ã‚‹äº‹ã«ãªã‚Šã¾ã™ã?)
060     * (åŒæ§˜ã?機è?ã‚’æŒã¤ INDBMENU ã§ã¯ã€è¡Œã”ã¨ã«ãƒ—ルãƒ?‚¦ãƒ³ãƒ??タを作æ?ã—ã¦ã?¾ã™ã?)
061     * ãŸã ã—ã?行å˜ä½ã«SQLã®æ¡ä»¶ã‚’変ãˆã‚‹æ©Ÿè?(AAA:BBB:CCC:DDD引数)ãŒæŒ‡å®šã•れãŸå ´åˆã?ã€?
062     * 行ã”ã¨ã«å‡ºåŠ›ã—ã¾ã™ã?
063     *
064     * å?‚«ãƒ©ãƒ??値(value値)ã«ã€AAA:BBB:CCC:DDD ã¨ã?†å€¤ã‚’設定ã§ãã¾ã™ã?ã“れã¯ã€?
065     * $1,$2,$3,$4 ã«å‰²ã‚Šå½“ã¦ãªãŠã—ã¦ã€QUERYを実行ã—ã¾ã™ã?ã¾ãŸã?$1 ã¯ã€æœ¬æ¥ã®å€¤ã¨ã—ã¦ã€?
066     * メニューã®åˆæœŸå€¤è¨­å®šç­‰ã«ä½¿ç”¨ã—ã¾ã™ã?上記ã?例ã§ã¯ã€AAA ãŒå?ã§ã€ãれ以é™ã?ã€?
067     * 引数ã«ãªã‚Šã¾ã™ã?
068     * åˆã?$Cã«ã¯è‡ªåˆ??身ã®ã‚«ãƒ©ãƒ?を割り当ã¦ã¾ã™ã?
069     * ã“ã?機è?を使用ã™ã‚Œã°ã€å‹•çš?ƒ¡ãƒ‹ãƒ¥ãƒ¼ã‚’行ã”ã¨ã«æ¡ä»¶ã‚’変ãˆã¦ä½œæ?ã™ã‚‹ã“ã¨ã?
070     * å¯èƒ½ã«ãªã‚Šã¾ã™ã?
071     * 例:select KEY,LABEL from xx where KUBUN='$2' and CDK='$3'
072     * ã•らã«ã€å?ã®æ–?­—å?"AAA:BBB:CCC:DDD"ã¯ã€?0 ã«å‰²ã‚Šå½“ã¦ã‚‰ã‚Œã¾ã™ã?割り当ã¦ãŒãªã?
073     * 変数ã¯ã€?"(ゼロæ–?­—å?)ã¨ã—ã¦ã€æ‰±ã‚れã¾ã™ã?
074     *
075     * カラãƒ??表示ã«å¿?¦ãªå±žæ?ã¯, DBColumn オブジェクãƒ?よりå–り出ã—ã¾ã™ã?
076     * ã“ã?クラスã¯ã€DBColumn オブジェクト毎ã«?‘ã¤ä½œæ?ã•れã¾ã™ã?
077     *
078     * @og.rev 5.7.4.3 (2014/03/28) æ–°è¦ä½œæ?
079     * @og.group �?タ編�HTML5)
080     *
081     * @version  4.0
082     * @author       Kazuhiko Hasegawa
083     * @since    JDK5.0,
084     */
085    public class Editor_DATALIST extends AbstractEditor {
086            //* ã“ã?プログラãƒ??VERSIONæ–?­—å?を設定ã—ã¾ã™ã?       {@value} */
087            private static final String VERSION = "5.7.6.2 (2014/05/16)" ;
088    
089            // 5.7.5.0 (2014/04/04) datalist 使用時ã?ã€display:none ã«ã—ã¦ã€HTML5未対応ã?ブラウザã«å‚™ãˆã‚‹ã?
090            private static final String DIV1 = "<div style=\"display:none;\">" ;
091            private static final String DIV2 = "</div>" ;
092    
093            private final String query ;
094            private final String dbid ;
095            private final String lang ;
096    
097            private Selection bkSel= null;  // 5.7.5.0 (2014/04/04) Selection オブジェクトã?キャãƒ?‚·ãƒ¥æ©Ÿè?
098    
099            /**
100             * ãƒ?ƒ•ォルトコンストラクターã€?
101             * ã“ã?コンストラクターã§ã€åŸºæœ¬ã‚ªãƒ–ジェクトを作æ?ã—ã¾ã™ã?
102             *
103             */
104            public Editor_DATALIST() {
105            //      super();
106                    query   = null;
107                    dbid    = null;
108                    lang    = null;
109            }
110    
111            /**
112             * コンストラクター�
113             *
114             * @param       clm     DBColumnオブジェク�
115             */
116            private Editor_DATALIST( final DBColumn clm ) {
117                    super( clm );
118                    tagBuffer.add( XHTMLTag.inputAttri( attributes ) );
119    
120                    query           = clm.getEditorParam();
121                    dbid            = clm.getDbid();
122                    lang            = clm.getLang();                        // 4.0.0 (2006/11/15)
123    
124                    // 3.5.5.9 (2004/06/07)
125                    if( query == null || query.length() == 0 ) {
126                            String errMsg = "DATALIST Editor ã§ã¯ã€ç·¨é›?ƒ‘ラメータã¯å¿??ã§ã™ã?"
127                                            + " name=[" + name + "]" + HybsSystem.CR ;
128                            throw new HybsSystemException( errMsg );
129                    }
130            }
131    
132            /**
133             * å?‚ªãƒ–ジェクトã‹ã‚‰è?åˆ??インスタンスを返ã—ã¾ã™ã?
134             * 自åˆ??身をキャãƒ?‚·ãƒ¥ã™ã‚‹ã®ã‹ã?æ–°ãŸã«ä½œæ?ã™ã‚‹ã®ã‹ã?ã€å„サブクラスã®å®Ÿè£?«
135             * ã¾ã‹ã•れã¾ã™ã?
136             *
137             * @param       clm     DBColumnオブジェク�
138             *
139             * @return      CellEditorオブジェク�
140             */
141            public CellEditor newInstance( final DBColumn clm ) {
142                    return new Editor_DATALIST( clm );
143            }
144    
145            /**
146             * ãƒ??ã‚¿ã®ç·¨é›?”¨æ–?­—å?ã‚’è¿”ã—ã¾ã™ã?
147             *
148             * ã“ã“ã§ã¯ã€AAA:BBB:CCC:DDD ã¨ã?†å€¤ã‚’ã?$1,$2,$3,$4 ã«å‰²ã‚Šå½“ã¦ãªãŠã—ã¦ã€?
149             * QUERYを実行ã—ã¾ã™ã?ã¾ãŸã?$1 ã¯ã€æœ¬æ¥ã®å€¤ã¨ã—ã¦ã€ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã®åˆæœŸå€¤è¨­å®šç­‰ã«
150             * 使用ã—ã¾ã™ã?上記ã?例ã§ã¯ã€AAA ãŒå?ã§ã€ãれ以é™ã?ã€å¼•æ•°ã«ãªã‚Šã¾ã™ã?
151             * ã•らã«ã€å?ã®æ–?­—å?"AAA:BBB:CCC:DDD"ã¯ã€?0 ã«å‰²ã‚Šå½“ã¦ã‚‰ã‚Œã¾ã™ã?割り当ã¦ãŒãªã?
152             * 変数ã¯ã€?"(ゼロæ–?­—å?)ã¨ã—ã¦ã€æ‰±ã‚れã¾ã™ã?
153             * åˆã?$Cã«ã¯è‡ªåˆ??身ã®ã‚«ãƒ©ãƒ?を割り当ã¦ã¾ã™ã?
154             *
155             * @og.rev 5.7.5.0 (2014/04/04) datalist 使用時ã?ã€display:none ã«ã—ã¦ã€HTML5未対応ã?ブラウザã«å‚™ãˆã‚‹ã?
156             * @og.rev 5.7.6.2 (2014/05/16) list属æ?ã¨id属æ?ã®çµã?ã¤ãã‚’ã€name+".sel" ã«å¤‰æ›´
157             *
158             * @param       value 入力å?
159             *
160             * @return      ãƒ??ã‚¿ã®ç·¨é›?”¨æ–?­—å?
161             */
162            @Override
163            public String getValue( final String value ) {
164                    // input ã‚¿ã‚°ã®ä½œæ?
165                    TagBuffer intag = new TagBuffer( "input" );
166                    intag.add( "name"    , name );
167                    if( attributes.get( "id" ) == null || attributes.get( "id" ).length() == 0 ) {
168                            intag.add( "id"      , name );
169                    }
170    //              intag.add( "list"    , "dl_" + name );          // datalistã‚¿ã‚°ã¨ã®é–¢ä¿‚付ã‘ã‚‹ãŸã‚ã?キーワーãƒ?
171                    intag.add( "list"    , name + ".sel" );         // datalistã‚¿ã‚°ã¨ã®é–¢ä¿‚付ã‘ã‚‹ãŸã‚ã?キーワーãƒ?
172                    intag.add( "value"   , value );
173                    intag.add( "size"    , size1 );
174                    intag.add( tagBuffer.makeTag() );
175                    intag.add( optAttr );
176    
177                    // datalist ã‚¿ã‚°ã®ä½œæ?
178                    TagBuffer dltag = new TagBuffer( "datalist" );
179    //              dltag.add( "id"    , "dl_" + name );                    // inputã‚¿ã‚°ã¨ã®é–¢ä¿‚付ã‘ã‚‹ãŸã‚ã?キーワーãƒ?
180                    dltag.add( "id"    , name + ".sel" );                   // inputã‚¿ã‚°ã¨ã®é–¢ä¿‚付ã‘ã‚‹ãŸã‚ã?キーワーãƒ?
181    
182                    dltag = getOption( dltag,value,false );                 // キャãƒ?‚·ãƒ¥ã¯ä½¿ç”¨ã—ãªã??
183    
184                    // display:none ã¯ã€datalist ã® optionã®BODY部ãŒã?HTML5 以外ã§ã¯è¡¨ç¤ºã•れã¦ã—ã¾ã??を防ããŸã‚ã?
185                    return intag.makeTag()  + HybsSystem.CR +
186                                    DIV1 + dltag.makeTag() + DIV2 + HybsSystem.CR;
187            }
188    
189            /**
190             * name属æ?を変ãˆãŸã?ãƒ??タ表示/ç·¨é›?”¨ã®HTMLæ–?­—å?を作æ?ã—ã¾ã™ã?
191             * ãƒ??ブル上ã? name 㫠行番å·ã‚’付加ã—ã¦ã€åå‰_è¡Œç•ªå· ã§ç™»éŒ²ã™ã‚‹ã‚­ãƒ¼ã‚’作æ?ã?
192             * ãƒªã‚¯ã‚¨ã‚¹ãƒˆæƒ…å ±ã‚’ï¼‘ã¤æ¯Žã?フィールドã§å‡¦ç?§ãã¾ã™ã?
193             *
194             * ã“ã“ã§ã¯ã€AAA:BBB:CCC:DDD ã¨ã?†å€¤ã‚’ã?$1,$2,$3,$4 ã«å‰²ã‚Šå½“ã¦ãªãŠã—ã¦ã€?
195             * QUERYを実行ã—ã¾ã™ã?ã¾ãŸã?$1 ã¯ã€æœ¬æ¥ã®å€¤ã¨ã—ã¦ã€ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã®åˆæœŸå€¤è¨­å®šç­‰ã«
196             * 使用ã—ã¾ã™ã?上記ã?例ã§ã¯ã€AAA ãŒå?ã§ã€ãれ以é™ã?ã€å¼•æ•°ã«ãªã‚Šã¾ã™ã?
197             * ã•らã«ã€å?ã®æ–?­—å?"AAA:BBB:CCC:DDD"ã¯ã€?0 ã«å‰²ã‚Šå½“ã¦ã‚‰ã‚Œã¾ã™ã?割り当ã¦ãŒãªã?
198             * 変数ã¯ã€?"(ゼロæ–?­—å?)ã¨ã—ã¦ã€æ‰±ã‚れã¾ã™ã?
199             * åˆã?$Cã«ã¯è‡ªåˆ??身ã®ã‚«ãƒ©ãƒ?を割り当ã¦ã¾ã™ã?
200             *
201             * @og.rev 5.7.5.0 (2014/04/04) datalist 使用時ã?ã€display:none ã«ã—ã¦ã€HTML5未対応ã?ブラウザã«å‚™ãˆã‚‹ã?
202             * @og.rev 5.7.5.0 (2014/04/04) Selection オブジェクトã?キャãƒ?‚·ãƒ¥æ©Ÿè?
203             * @og.rev 5.7.6.2 (2014/05/16) list属æ?ã¨id属æ?ã®çµã?ã¤ãã‚’ã€name+".sel" ã«å¤‰æ›´
204             *
205             * @param       row   行番å·
206             * @param       value 入力å?
207             *
208             * @return      ãƒ??タ表示/ç·¨é›?”¨ã®æ–?­—å?
209             */
210            @Override
211            public String getValue( final int row,final String value ) {
212                    String name2 = name + HybsSystem.JOINT_STRING + row ;
213    
214                    // 5.7.5.0 (2014/04/04) Selection オブジェクトã?キャãƒ?‚·ãƒ¥æ©Ÿè? (true:使用å¯èƒ½)
215                    boolean useSelCache = value != null && value.indexOf( ':' ) < 0 ;
216    
217                    String listId = useSelCache ? name : name2;             // キャãƒ?‚·ãƒ¥ã‚’使用ã™ã‚‹å ´åˆã?ã€å?通ã? name を使ã??
218    
219                    // input ã‚¿ã‚°ã®ä½œæ?
220                    TagBuffer intag = new TagBuffer( "input" );
221                    intag.add( "name"    , name2 );
222                    if( attributes.get( "id" ) == null || attributes.get( "id" ).length() == 0 ) {
223                            intag.add( "id"      , name2 );
224                    }
225    //              intag.add( "list"    , "dl_" + listId );                // datalistã‚¿ã‚°ã¨ã®é–¢ä¿‚付ã‘ã‚‹ãŸã‚ã?キーワーãƒ?
226                    intag.add( "list"    , listId + ".sel" );               // datalistã‚¿ã‚°ã¨ã®é–¢ä¿‚付ã‘ã‚‹ãŸã‚ã?キーワーãƒ?
227                    intag.add( "value"   , value );
228                    intag.add( "size"    , size2 );
229                    intag.add( tagBuffer.makeTag() );
230                    intag.add( optAttr );
231    
232                    // datalist ã‚¿ã‚°ã®ä½œæ?
233                    TagBuffer dltag = new TagBuffer( "datalist" );
234    //              dltag.add( "id"    , "dl_" + listId );                  // inputã‚¿ã‚°ã¨ã®é–¢ä¿‚付ã‘ã‚‹ãŸã‚ã?キーワーãƒ?
235                    dltag.add( "id"    , listId + ".sel" );                 // inputã‚¿ã‚°ã¨ã®é–¢ä¿‚付ã‘ã‚‹ãŸã‚ã?キーワーãƒ?
236    
237                    dltag = getOption( dltag,value,useSelCache );
238    
239                    // キャãƒ?‚·ãƒ¥ãŒåйãã¨ã€getOption ã®æˆ»ã‚Šå?ã¯ã€null ã«ãªã‚‹ã?
240                    if( dltag != null ) {
241                            return intag.makeTag( row,value ) + HybsSystem.CR +
242                                            DIV1 + dltag.makeTag( row,value ) + DIV2 + HybsSystem.CR ;
243                    }
244                    else {
245                            return intag.makeTag( row,value ) + HybsSystem.CR ;
246                    }
247            }
248    
249            /**
250             * åˆæœŸå€¤ãŒé¸æŠžæ¸ˆã¿ã® é¸æŠžè‚¢(オプション)ã‚’TagBuffer ã«å映ã—ã¾ã™ã?
251             * ã“ã?オプションã¯ã€å¼•æ•°ã®å€¤ã‚’å?期å?ã¨ã™ã‚‹ã‚ªãƒ—ションタグ作æ?ã—ã?TagBuffer
252             * ã«å€¤ã‚’設定ã—ã¦è¿”ã—ã¾ã™ã?
253             *
254             * 第?“引数ã¯ã€Selection オブジェクトã?キャãƒ?‚·ãƒ¥æ©Ÿè?を使用ã™ã‚‹ã‹ã©ã?‹æŒ?®šã—ã¾ã™ã?
255             * true ã§ã€ä½¿ç”¨ã™ã‚‹äº‹ã‚’剿ã«ã€ãƒã‚§ãƒ?‚¯ã‚’行ã„ã¾ã™ã?
256             * DBMENU ãªã©ã€ä»–ã?メソãƒ?ƒ‰ã§ã¯ã€ãƒ©ãƒ™ãƒ«(短)ã®ä½¿ç”¨æœ‰ç„¡ã¨ã—ã¦ä½¿ç”¨ã—ã¦ã?‚‹ãŸã‚ã€ç•°ãªã‚Šã¾ã™ã?
257             *
258             * ã“ã“ã§ã¯ã€AAA:BBB:CCC:DDD ã¨ã?†å€¤ã‚’ã?$1,$2,$3,$4 ã«å‰²ã‚Šå½“ã¦ãªãŠã—ã¦ã€?
259             * QUERYを実行ã—ã¾ã™ã?ã¾ãŸã?$1 ã¯ã€æœ¬æ¥ã®å€¤ã¨ã—ã¦ã€ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã®åˆæœŸå€¤è¨­å®šç­‰ã«
260             * 使用ã—ã¾ã™ã?上記ã?例ã§ã¯ã€AAA ãŒå?ã§ã€ãれ以é™ã?ã€å¼•æ•°ã«ãªã‚Šã¾ã™ã?
261             * ã•らã«ã€å?ã®æ–?­—å?"AAA:BBB:CCC:DDD"ã¯ã€?0 ã«å‰²ã‚Šå½“ã¦ã‚‰ã‚Œã¾ã™ã?割り当ã¦ãŒãªã?
262             * 変数ã¯ã€?"(ゼロæ–?­—å?)ã¨ã—ã¦ã€æ‰±ã‚れã¾ã™ã?
263             * åˆã?$Cã«ã¯è‡ªåˆ??身ã®ã‚«ãƒ©ãƒ?を割り当ã¦ã¾ã™ã?
264             *
265             * @param       buf    ã‚¿ã‚°æ–?­—å?ã®ãƒãƒƒãƒ•ァー
266             * @param       value  é¸æŠžã•れã¦ã?‚‹å€¤
267             * @param   useSelCache Selection オブジェクトã?キャãƒ?‚·ãƒ¥æ©Ÿè?を使用ã™ã‚‹ã‹ã©ã?‹ã€?
268             *
269             * @return      オプションタグ
270             */
271            private TagBuffer getOption( final TagBuffer buf,final String value,final boolean useSelCache ) {
272    
273                    StringFormat format = new StringFormat( query, value, name );
274                    String newQuery = format.format();
275                    String newValue = format.getValue();
276    
277                    Selection selection = SelectionFactory.newDBSelection( newQuery, dbid, lang );
278    
279                    if( useSelCache ) {
280                            if( selection == bkSel ) { return null; }
281                            bkSel = selection ;
282                    }
283    
284                    buf.setBody( selection.getOption( newValue, false ) );
285    
286                    return buf;
287            }
288    }