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.hayabusa.taglib;
017    
018    import org.opengion.hayabusa.common.HybsSystem;
019    import org.opengion.fukurou.util.Attributes;
020    import org.opengion.hayabusa.html.ViewMarker;
021    import org.opengion.hayabusa.html.ViewLink_LINK;
022    
023    import java.util.Locale ;
024    import java.io.ObjectOutputStream;
025    import java.io.ObjectInputStream;
026    import java.io.IOException;
027    
028    /**
029     * HTML のaタグと同等ã?リンクを作æ?するタグで、さらに国際化対応と引数の受け渡しが可能ですã?
030     *
031     * DBTableModelオブジェクトを表示する、å?通オブジェクトですã?
032     * こã?オブジェクトにã€?ãƒ??タ(DBTableModel)と、コントローラ(EntryTagForm)を与えてã€?
033     * 外部からコントロールすることで、各種形式で ãƒ??タ(DBTableModel)を表示させることã�?
034     * 可能ですã?
035     *
036     * @og.formSample
037     * ●形式ï¼?lt;og:viewLink command="…" > <og:link name="…" ... /> </og:viewLink >
038     * ●body?šあã‚?EVAL_BODY_BUFFERED:BODYを評価しã?{@XXXX} を解析しまã�?
039     *
040     * ●Tag定義??
041     *   <og:viewLink
042     *       command          ○ã?TAG】コマンãƒ?NEW,RENEW,RESET,REVIEW)をセãƒ?ƒˆしまã�?å¿??)ã€?
043     *       viewLinkId         【TAGã€?通常使ã�?�¾せん)requestから取得すã‚?ViewLink に対応すã‚?Attributes オブジェクトã? ID
044     *       debug              【TAG】デバッグæƒ??をå?力するかどã�?�‹[true/false]を指定しまã�?初期値:false)
045     *   >   ... Body ...
046     *   </og:viewLink>
047     *
048     * ●使用ä¾?
049     *     QueryTagとViewTagの間にviewLinkを使ã�?�¾すã?
050     *     <og:viewLink command="{@command}">
051     *         <og:link column="NOSYN" gamenId="01PATTERN1" href="query.jsp" target="QUERY"
052     *             keys="NOSYN,NMSYN,CDBK" value="[NOSYN],[NMSYN],[CDBK]" />
053     *         <og:link column="NMSYN" gamenId="01PATTERN1" href="query.jsp" target="QUERY"
054     *             keys="NMSYN" value="[NMSYN]" />
055     *         <og:link column="CDBK" gamenId="01PATTERN1" href="query.jsp" target="QUERY"
056     *             keys="NOSYN,NMSYN" value="[NOSYN],[NMSYN]" />
057     *     </og:viewLink>
058     *
059     * @og.group 画面表示
060     *
061     * @version  4.0
062     * @author       Kazuhiko Hasegawa
063     * @since    JDK5.0,
064     */
065    public class ViewLinkTag extends CommonTagSupport {
066            //* こã?プログラãƒ??VERSIONæ–?­—å?を設定しますã?       {@value} */
067            private static final String VERSION = "5.1.9.0 (2010/08/01)" ;
068    
069            private static final long serialVersionUID = 519020100801L ;
070    
071            /** command 引数に渡す事ã?出来ã‚?コマンãƒ? 新è¦?{@value} */
072            public static final String CMD_NEW      = "NEW" ;
073            /** command 引数に渡す事ã?出来ã‚?コマンãƒ? 再検索 {@value} */
074            public static final String CMD_RENEW    = "RENEW" ;
075            /** command 引数に渡す事ã?出来ã‚?コマンãƒ? リセãƒ?ƒˆ {@value}  */
076            public static final String CMD_RESET  = "RESET" ;               // 3.5.4.0 (2003/11/25)
077            /** command 引数に渡す事ã?出来ã‚?コマンãƒ? 再表示 {@value}  */
078            public static final String CMD_REVIEW  = "REVIEW" ;             // 3.5.4.0 (2003/11/25)
079    
080            /** command 引数に渡す事ã?出来ã‚?コマンãƒ?リスãƒ? */
081            private static final String[] COMMAND_LIST = new String[] {
082                    CMD_NEW , CMD_RENEW ,CMD_RESET , CMD_REVIEW };          // 3.5.4.0 (2003/11/25)
083    
084            private String          viewLinkId      = HybsSystem.VIEWLINK_KEY;
085            private String          command         = null;
086            private transient ViewMarker    viewMarker      = new ViewLink_LINK();
087    
088            /**
089             * Taglibの開始タグが見つかったときに処ç�?�™ã‚?doStartTag() ã‚?オーバã?ライドしますã?
090             *
091             * @og.rev 5.1.9.0 (2010/08/01) 戻りå?をã?EVAL_BODY_INCLUDE â†?EVAL_BODY_BUFFERED に変更
092             *
093             * @return      後続å?ç�??æŒ?¤º
094             */
095            @Override
096            public int doStartTag() {
097    //              if( check( command, COMMAND_LIST ) ) { return( EVAL_BODY_INCLUDE ); }
098                    if( check( command, COMMAND_LIST ) ) { return( EVAL_BODY_BUFFERED ); }          // 5.1.9.0 (2010/08/01) 変更
099                    else                                 { return( SKIP_BODY ); }
100            }
101    
102            /**
103             * Taglibの終äº?‚¿グが見つかったときに処ç�?�™ã‚?doEndTag() ã‚?オーバã?ライドしますã?
104             *
105             * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応ã?release2() ã‚?doEndTag()で呼ぶã€?
106             *
107             * @return      後続å?ç�??æŒ?¤º
108             */
109            @Override
110            public int doEndTag() {
111                    debugPrint();           // 4.0.0 (2005/02/28)
112                    if( check( command, COMMAND_LIST ) ) {
113                            setRequestAttribute( viewLinkId,viewMarker );
114                    }
115    
116                    return(EVAL_PAGE);
117            }
118    
119            /**
120             * タグリブオブジェクトをリリースしますã?
121             * キャãƒ?‚·ュされて再利用されるã?で、フィールドã?初期設定を行いますã?
122             *
123             * @og.rev 2.0.0.4 (2002/09/27) カスタãƒ?‚¿グの release() メソãƒ?ƒ‰をã?追åŠ?
124             * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応ã?release2() ã‚?doEndTag()で呼ぶã€?
125             *
126             */
127            @Override
128            protected void release2() {
129                    super.release2();
130                    viewLinkId      = HybsSystem.VIEWLINK_KEY;
131                    command         = null;
132                    viewMarker      = new ViewLink_LINK();
133            }
134    
135            /**
136             * å†?ƒ¨タグの LinkTag より、å?ã€??カラãƒ??値を書き換える 為の
137             * リンクæ–?­—å?を受け取るã?
138             *
139             * è¤?•°の値を受け取って、後ほど、すべてのカラãƒ?�«対して処ç�?‚’行いますã?
140             *
141             * @og.rev 3.1.2.0 (2003/04/07) taglib パッケージå†?ƒ¨で使用してã�?‚‹ç®?‰€ã‚?protected 化するã?
142             * @og.rev 4.0.0.0 (2005/08/31) 同ä¸?‚«ラãƒ??è¤?•°登録を許可しますã?
143             *
144             * @param       attri   リンクアトリビューãƒ?
145             */
146            protected void addAttribute( final Attributes attri ) {
147                    viewMarker.addAttribute( attri );
148            }
149    
150            /**
151             * 【TAG】コマンãƒ?NEW,RENEW,RESET,REVIEW)をセãƒ?ƒˆしますã?
152             *
153             * @og.tag
154             * コマンドã?,HTMLから(get/post)æŒ?®šされますã?で,CMD_xxx で設定される
155             * フィールド定数値のã�?�¥れかをã?æŒ?®šできますã?
156             *
157             * @param       cmd コマンãƒ?public static final 宣è¨?�•れてã�?‚‹æ–?­—å?)
158             * @see         <a href="../../../../constant-values.html#org.opengion.hayabusa.taglib.ViewLinkTag.CMD_NEW">コマンド定数</a>
159             */
160            public void setCommand( final String cmd ) {
161                    String cmd2 = getRequestParameter( cmd );
162                    if( cmd2 != null && cmd2.length() > 0 ) { command = cmd2.toUpperCase(Locale.JAPAN); }
163            }
164    
165            /**
166             * 【TAGã€?通常使ã�?�¾せん)requestから取得すã‚?ViewLink に対応すã‚?Attributes オブジェクトã? IDã€?
167             *
168             * @og.tag
169             * ViewLink オブジェクトをこã?キーで、登録することによりã€?
170             * ViewForm オブジェクトで、リンクæƒ??を付加して表示させるã?
171             * 初期値は、HybsSystem.VIEWLINK_KEY ですã?
172             *
173             * @og.rev 3.1.4.0 (2003/04/18) 新規追åŠ?
174             * @og.rev 3.5.6.3 (2004/07/12) {&#064;XXXX} 変数を使用できるように変更ã€?
175             * @og.rev 3.5.6.4 (2004/07/16) LINK_ID を付加して、他ã?id と混同しなã�?‚ˆã�?�«しますã?
176             *
177             * @param       id      オブジェクãƒ?D
178             */
179            public void setViewLinkId( final String id ) {
180                    String temp = getRequestParameter( id ) ;
181                    if( temp != null && temp.length() > 0 ) {
182                            viewLinkId = temp + TaglibUtil.LINK_ID;
183                    }
184            }
185    
186            /**
187             * シリアライズ用のカスタãƒ?‚·リアライズ書き込みメソãƒ?ƒ‰
188             *
189             * @og.rev 4.0.0.0 (2006/09/31) 新規追åŠ?
190             * @serialData ä¸?ƒ¨のオブジェクトã?、シリアライズされませんã€?
191             *
192             * @param       strm    ObjectOutputStreamオブジェクãƒ?
193             * @throws IOException  入出力エラーが発生したå?å�?
194             */
195            private void writeObject( final ObjectOutputStream strm ) throws IOException {
196                    strm.defaultWriteObject();
197            }
198    
199            /**
200             * シリアライズ用のカスタãƒ?‚·リアライズ読み込みメソãƒ?ƒ‰
201             *
202             * ここでは、transient 宣è¨?�•れたå†?ƒ¨変数のå†??初期化がå¿?¦�なフィールドã?み設定しますã?
203             *
204             * @og.rev 4.0.0.0 (2006/09/31) 新規追åŠ?
205             * @serialData ä¸?ƒ¨のオブジェクトã?、シリアライズされませんã€?
206             *
207             * @param       strm    ObjectInputStreamオブジェクãƒ?
208             * @see #release2()
209             * @throws IOException  シリアライズに関する入出力エラーが発生したå?å�?
210             * @throws ClassNotFoundException       クラスを見つけることができなかったå?å�?
211             */
212            private void readObject( final ObjectInputStream strm ) throws IOException , ClassNotFoundException {
213                    strm.defaultReadObject();
214                    viewMarker = new ViewLink_LINK();
215            }
216    
217            /**
218             * こã?オブジェクトã?æ–?­—å?表現を返しますã?
219             * 基本çš?�«ãƒ?ƒ�ãƒ?‚°目çš?�«使用しますã?
220             *
221             * @return こã?クラスのæ–?­—å?表現
222             */
223            @Override
224            public String toString() {
225                    return org.opengion.fukurou.util.ToString.title( this.getClass().getName() )
226                                    .println( "VERSION"             ,VERSION        )
227                                    .println( "viewLinkId"  ,viewLinkId     )
228                                    .println( "command"             ,command        )
229                                    .println( "Other..."    ,getAttributes().getAttribute() )
230                                    .fixForm().toString() ;
231            }
232    }