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.hayabusa.common.HybsSystemException;
020    
021    import java.util.Map;
022    import java.util.HashMap;
023    import java.io.ObjectOutputStream;
024    import java.io.ObjectInputStream;
025    import java.io.IOException;
026    
027    /**
028     * ViewFormTag にパラメーターを渡す為のスーパã?クラスですã?
029     *
030     * ViewForm 関連のå�?‚¯ラスは、特殊ã?専用化ã?傾向が強くなりつつありã€?
031     * 設定するパラメーターも増えてã�?�¾すã?これらã?パラメータをã?共通ã?
032     * ViewFormインターフェースに設定することは、得策とはè€?�ˆられなã�?‚ºã€?
033     * パラメーターをä¸?‹¬して渡すよã�?�«しますã?
034     * ただしã?key1=**** val2=**** çš?�ª渡し方では、エラーチェãƒ?‚¯ã‚??動ドキュメント化
035     * が難しいため、各ViewFormのサブクラスごとに、パラメータクラスを作æ?しã?
036     * それらã?スーパã?クラスとして、最終的には、同ä¸?–¹法で、パラメータオブジェクãƒ?
037     * として渡すことにしますã?
038     *
039     * @og.rev 3.5.4.8 (2004/02/23) 新規作æ?
040     * @og.group 画面表示
041     *
042     * @version  4.0
043     * @author   Kazuhiko Hasegawa
044     * @since    JDK5.0,
045     */
046    public class ViewParamTag extends CommonTagSupport {
047            //* こã?プログラãƒ??VERSIONæ–?­—å?を設定しますã?       {@value} */
048            private static final String VERSION = "5.5.5.6 (2012/08/31)" ;
049    
050            private static final long serialVersionUID = 555620120831L ;
051    
052            private transient Map<String,String> param = null;        // 3.5.6.2 (2004/07/05)
053    
054            /**
055             * Taglibの終äº?‚¿グが見つかったときに処ç�?�™ã‚?doEndTag() ã‚?オーバã?ライドしますã?
056             *
057             * @return      後続å?ç�??æŒ?¤º
058             */
059            @Override
060            public int doEndTag() {
061                    debugPrint();           // 4.0.0 (2005/02/28)
062                    ViewFormTag viewform = (ViewFormTag)findAncestorWithClass( this,ViewFormTag.class );
063                    if( viewform == null ) {
064    //                      String errMsg = "<b>こã?タグは、ViewFormTagのå†??(要ç´?に記述してくださいã€?/b>";
065                            String errMsg = "<b>" + getTagName() + "タグは、ViewFormTagのå†??(要ç´?に記述してくださいã€?/b>";
066                            throw new HybsSystemException( errMsg );
067                    }
068    
069                    viewform.setParam( param );
070    
071                    return(EVAL_PAGE);
072            }
073    
074            /**
075             * タグリブオブジェクトをリリースしますã?
076             * キャãƒ?‚·ュされて再利用されるã?で、フィールドã?初期設定を行いますã?
077             *
078             */
079            @Override
080            protected void release2() {
081                    super.release2();               // 3.5.6.0 (2004/06/18) 追åŠ?抜けてã�?�Ÿ)
082                    param = null;
083            }
084    
085            /**
086             * パラメータのMapをå?期設定しますã?
087             *
088             * パラメータのキーと値の初期値をセãƒ?ƒˆしたMapをå?期設定しますã?
089             * 処ç�??タイミングとして、すでにパラメータ変数は、設定されてã�?�¾すã?
090             * ä¸?�¤も設定されてã�?�ªã�??合ã?、param == null なので、引数の初期値マップを
091             * そã?まま?ˆコピã?して?‰作æ?しますã?
092             * すでに、登録されてã�?‚‹場合ã?、キーが存在してã�?‚‹ため、キーの存在しなã�?
093             * ãƒ??タのみ、å?期å?マップからコピã?しますã?
094             *
095             * @og.rev 5.5.5.6 (2012/08/31) 新規追åŠ?
096             *
097             * @param   map         パラメータのMap
098             */
099            protected void initParam( final Map<String,String> map ) {
100                    if( param == null ) {
101                            param = new HashMap<String,String>( map );
102                    }
103                    else {
104                            for ( String key : map.keySet() ) {
105                                    if( !param.containsKey( key ) ) {       // キーが存在しなければ、å?期化æƒ??を登録するã€?
106                                            param.put( key,map.get( key ) );
107                                    }
108                            }
109                    }
110            }
111    
112            /**
113             * パラメータのキーと値をセãƒ?ƒˆしますã?
114             *
115             * パラメータのキーと値をセãƒ?ƒˆしますã?
116             *
117             * @param   key         キー
118             * @param   value       値
119             */
120            protected void putParam( final String key, final String value ) {
121                    if( key != null ) {
122                            if( param == null ) { param = new HashMap<String,String>(); }
123                            param.put( key,value );
124                    }
125            }
126    
127            /**
128             * シリアライズ用のカスタãƒ?‚·リアライズ書き込みメソãƒ?ƒ‰
129             *
130             * @og.rev 4.0.0.0 (2006/09/31) 新規追åŠ?
131             * @serialData ä¸?ƒ¨のオブジェクトã?、シリアライズされませんã€?
132             *
133             * @param       strm    ObjectOutputStreamオブジェクãƒ?
134             * @throws IOException  入出力エラーが発生したå?å�?
135             */
136            private void writeObject( final ObjectOutputStream strm ) throws IOException {
137                    strm.defaultWriteObject();
138            }
139    
140            /**
141             * シリアライズ用のカスタãƒ?‚·リアライズ読み込みメソãƒ?ƒ‰
142             *
143             * ここでは、transient 宣è¨?�•れたå†?ƒ¨変数のå†??初期化がå¿?¦�なフィールドã?み設定しますã?
144             *
145             * @og.rev 4.0.0.0 (2006/09/31) 新規追åŠ?
146             * @serialData ä¸?ƒ¨のオブジェクトã?、シリアライズされませんã€?
147             *
148             * @param       strm    ObjectInputStreamオブジェクãƒ?
149             * @see #release2()
150             * @throws IOException  シリアライズに関する入出力エラーが発生したå?å�?
151             * @throws ClassNotFoundException       クラスを見つけることができなかったå?å�?
152             */
153            private void readObject( final ObjectInputStream strm ) throws IOException , ClassNotFoundException {
154                    strm.defaultReadObject();
155            }
156    
157            /**
158             * こã?オブジェクトã?æ–?­—å?表現を返しますã?
159             * 基本çš?�«ãƒ?ƒ�ãƒ?‚°目çš?�«使用しますã?
160             *
161             * @og.rev 5.2.1.0 (2010/10/01) Map のå†?®¹表示方法を変更
162             *
163             * @return こã?クラスのæ–?­—å?表現
164             */
165            @Override
166            public String toString() {
167                    StringBuilder rtn = new StringBuilder( HybsSystem.BUFFER_MIDDLE );
168    
169                    rtn.append( "[" ).append( this.getClass().getName() ).append( "]" ).append( HybsSystem.CR );
170    //              rtn.append( param     ).append( HybsSystem.CR );
171                    if( param != null ) {
172                            for ( Map.Entry<String, String> ent : param.entrySet() ) {
173                                    rtn.append( ent.getKey() ).append( "=" ).append( ent.getValue() ).append( HybsSystem.CR );
174                            }
175                    }
176    
177                    return rtn.toString();
178            }
179    }