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                            throw new HybsSystemException( errMsg );
066                    }
067    
068                    viewform.setParam( param );
069    
070                    return(EVAL_PAGE);
071            }
072    
073            /**
074             * タグリブオブジェクトをリリースします?
075             * キャ?ュされて再利用される?で、フィールド?初期設定を行います?
076             *
077             */
078            @Override
079            protected void release2() {
080                    super.release2();               // 3.5.6.0 (2004/06/18) 追?抜けて?)
081                    param = null;
082            }
083    
084            /**
085             * パラメータのMapを?期設定します?
086             *
087             * パラメータのキーと値の初期値をセ?したMapを?期設定します?
088             * 処??タイミングとして、すでにパラメータ変数は、設定されて?す?
089             * ?も設定されて???合?、param == null なので、引数の初期値マップを
090             * そ?まま?コピ?して?作?します?
091             * すでに、登録されて?場合?、キーが存在して?ため、キーの存在しな?
092             * ??タのみ、?期?マップからコピ?します?
093             *
094             * @og.rev 5.5.5.6 (2012/08/31) 新規追?
095             *
096             * @param   map         パラメータのMap
097             */
098            protected void initParam( final Map<String,String> map ) {
099                    if( param == null ) {
100                            param = new HashMap<String,String>( map );
101                    }
102                    else {
103                            for ( String key : map.keySet() ) {
104                                    if( !param.containsKey( key ) ) {       // キーが存在しなければ、?期化??を登録する?
105                                            param.put( key,map.get( key ) );
106                                    }
107                            }
108                    }
109            }
110    
111            /**
112             * パラメータのキーと値をセ?します?
113             *
114             * パラメータのキーと値をセ?します?
115             *
116             * @param   key         キー
117             * @param   value       値
118             */
119            protected void putParam( final String key, final String value ) {
120                    if( key != null ) {
121                            if( param == null ) { param = new HashMap<String,String>(); }
122                            param.put( key,value );
123                    }
124            }
125    
126            /**
127             * シリアライズ用のカスタ?リアライズ書き込みメソ?
128             *
129             * @og.rev 4.0.0.0 (2006/09/31) 新規追?
130             * @serialData
131             *
132             * @param       strm    ObjectOutputStreamオブジェク?
133             */
134            private void writeObject( final ObjectOutputStream strm ) throws IOException {
135                    strm.defaultWriteObject();
136            }
137    
138            /**
139             * シリアライズ用のカスタ?リアライズ読み込みメソ?
140             *
141             * ここでは、transient 宣?れた?変数の??初期化が?なフィールド?み設定します?
142             *
143             * @og.rev 4.0.0.0 (2006/09/31) 新規追?
144             * @serialData
145             *
146             * @param       strm    ObjectInputStreamオブジェク?
147             * @see #release2()
148             */
149            private void readObject( final ObjectInputStream strm ) throws IOException , ClassNotFoundException {
150                    strm.defaultReadObject();
151            }
152    
153            /**
154             * こ?オブジェクト???表現を返します?
155             * 基本???目?使用します?
156             *
157             * @og.rev 5.2.1.0 (2010/10/01) Map の?表示方法を変更
158             *
159             * @return こ?クラスの??表現
160             */
161            @Override
162            public String toString() {
163                    StringBuilder rtn = new StringBuilder( HybsSystem.BUFFER_MIDDLE );
164    
165                    rtn.append( "[" ).append( this.getClass().getName() ).append( "]" ).append( HybsSystem.CR );
166    //              rtn.append( param     ).append( HybsSystem.CR );
167                    if( param != null ) {
168                            for ( Map.Entry<String, String> ent : param.entrySet() ) {
169                                    rtn.append( ent.getKey() ).append( "=" ).append( ent.getValue() ).append( HybsSystem.CR );
170                            }
171                    }
172    
173                    return rtn.toString();
174            }
175    }