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.db;
017
018import org.opengion.hayabusa.common.HybsSystem;
019import org.opengion.hayabusa.common.HybsSystemException;
020import org.opengion.hayabusa.resource.CodeData;
021
022/**
023 * データのコード情報を取り扱うクラスです。
024 *
025 * コードのキーとラベルの情報から、HTMLのメニューやリストを作成するための オプション
026 * タグを作成したり、与えられたキーをもとに、チェック済みのオプションタグを作成したり
027 * します。
028 *
029 * @og.group 選択データ制御
030 *
031 * @version  4.0
032 * @author   Kazuhiko Hasegawa
033 * @since    JDK5.0,
034 */
035// public class Selection_RADIO implements Selection {
036public class Selection_RADIO extends Selection_NULL {
037        private final CodeData codeData ;
038
039        /**
040         * コンストラクター
041         *
042         * @param       cdData  コードデータオブジェクト
043         *
044         */
045        public Selection_RADIO( final CodeData cdData ) {
046                if( cdData == null ) {
047                        String errMsg = "コードリソースが定義されていません。" + HybsSystem.CR ;
048                        throw new HybsSystemException( errMsg );
049                }
050
051                codeData = cdData ;
052        }
053
054        /**
055         * 初期値が選択済みの 選択肢(オプション)を返します。
056         * このオプションは、引数の値を初期値とするオプションタグを返します。
057         * ※ このクラスでは実装されていません。
058         *
059         * @og.rev 3.6.0.6 (2004/10/22) シーケンスアクセス機能を指定する seqFlag を導入
060         * @og.rev 5.7.7.1 (2014/06/13) Selection_NULL を 継承するため、削除
061         *
062         * @param       selectValue     選択されている値
063         * @param       seqFlag         シーケンスアクセス機能の指定
064         *
065         * @return  オプションタグ
066         */
067//      public String getOption( final String selectValue,final boolean seqFlag ) {
068//              String errMsg = "このクラスでは実装されていません。";
069//              throw new UnsupportedOperationException( errMsg );
070//      }
071
072        /**
073         * 初期値が選択済みの 選択肢(オプション)を返します。
074         * このオプションは、引数の値を初期値とするオプションタグを返します。
075         * ※ このクラスでは実装されていません。
076         *
077         * @og.rev 5.1.3.0 (2010/02/01) 追加
078         *
079         * @param       selectValue     選択されている値
080         * @param       seqFlag シーケンスアクセス機能の指定
081         * @param       useShortLabel   短ラベルの指定
082         *
083         * @return  オプションタグ
084         */
085        @Override
086        public String getOption( final String selectValue,final boolean seqFlag, final boolean useShortLabel ) {
087                String errMsg = "このクラスでは実装されていません。";
088                throw new UnsupportedOperationException( errMsg );
089        }
090
091        /**
092         * 初期値が選択済みの 選択肢(オプション)を返します。
093         * このオプションは、引数の値を初期値とするオプションタグを返します。
094         *
095         * @og.rev 2.1.0.1 (2002/10/17) 選択リストを、正方向にしか選べないようにする sequenceFlag を導入する
096         * @og.rev 3.5.6.3 (2004/07/12) キャッシュを利用せず毎回タグを作成します。
097         * @og.rev 3.8.6.0 (2006/09/29) useLabel 属性 追加
098         *
099         * @param   name         ラジオの name
100         * @param   selectValue  選択されている値
101         * @param   useLabel     ラベル表示の有無 [true:有/false:無]
102         *
103         * @return  オプションタグ
104         */
105        @Override
106        public String getRadio( final String name,final String selectValue,final boolean useLabel ) {
107                String inputTag = "<input type=\"radio\" name=\"" + name + "\" value=\"" ;
108                StringBuilder buf = new StringBuilder( HybsSystem.BUFFER_LARGE );
109                int size = codeData.getSize();
110                for( int i=0; i<size; i++ ) {
111                        String value = codeData.getCodeKey(i);
112                        if( useLabel ) { buf.append( "<label>" ); }
113                        buf.append( inputTag ).append( value ).append( "\"" );
114                        if( value.equals( selectValue ) ) {
115                                buf.append( " checked=\"checked\"" );
116                        }
117                        buf.append( "/>" );
118                        if( useLabel ) { buf.append( codeData.getShortLabel(i) ).append( "</label>" ); }
119                }
120                return buf.toString();
121        }
122
123        /**
124         * 選択肢(value)に対するラベルを返します。
125         * 選択肢(value)が、存在しなかった場合は、選択肢そのものを返します。
126         * getValueLabel( XX ) は、getValueLabel( XX,false ) と同じです。
127         *
128         * @og.rev 5.7.7.1 (2014/06/13) Selection_NULL を 継承するため、削除
129         *
130         * @param   selectValue 選択肢の値
131         *
132         * @return  選択肢のラベル
133         * @see     #getValueLabel( String,boolean )
134         */
135//      public String getValueLabel( final String selectValue ) {
136//              return getValueLabel( selectValue,false );
137//      }
138
139        /**
140         * 選択肢(value)に対するラベルを返します。
141         * 選択肢(value)が、存在しなかった場合は、選択肢そのものを返します。
142         * このメソッドでは、短縮ラベルを返すかどうかを指定するフラグを指定します。
143         * getValueLabel( XX,false ) は、getValueLabel( XX ) と同じです。
144         *
145         * @og.rev 4.0.0.0 (2005/11/30) を追加
146         *
147         * @param       selectValue     選択肢の値
148         * @param       flag    短縮ラベルを使用する [true:使用する/false:しない]
149         *
150         * @return  選択肢のラベル
151         * @see     #getValueLabel( String )
152         */
153        @Override
154        public String getValueLabel( final String selectValue,final boolean flag ) {
155                // マッチするアドレスを探す。
156                int selected = codeData.getAddress( selectValue );
157
158                if( selected < 0 ) {
159                        // マッチしなければ、選択肢そのものを返す。
160                        return selectValue;
161                }
162                else {
163                        if( flag ) {
164                                return codeData.getShortLabel(selected);
165                        }
166                        else {
167                                return codeData.getLongLabel(selected);
168                        }
169                }
170        }
171
172        /**
173         * 選択肢(value)に対するラベルを返します。
174         * 選択肢(value)が、存在しなかった場合は、選択肢そのものを返します。
175         * getValueLabel( XX ) は、getValueLabel( XX,false ) と同じです。
176         *
177         * @param   selectValue 選択肢の値
178         *
179         * @return  選択肢のラベル
180         * @see     #getValueLabel( String,boolean )
181         */
182        @Override
183        public String getRadioLabel( final String selectValue ) {
184
185                StringBuilder rtn = new StringBuilder( HybsSystem.BUFFER_MIDDLE );
186                int size = codeData.getSize();
187                for( int i=0; i<size; i++ ) {
188                        String value = codeData.getCodeKey(i);
189                        if( value.equals( selectValue ) ) {
190                                rtn.append( "○" );                      // (2003/10/08 修正分)
191                        }
192                        else {
193                                rtn.append( " " );                      // (2003/10/08 修正分)
194                        }
195                }
196
197                return rtn.toString();
198        }
199
200        /**
201         * マルチ・キーセレクトを使用するかどうかを返します。
202         * true:使用する。false:使用しない です。
203         * ただし、実際に使用するかどうかは、HTML出力時に決めることが出来ます。
204         * ここでは、USE_MULTI_KEY_SELECT が true で、USE_SIZE(=20)以上の場合に
205         * true を返します。
206         *
207         * @og.rev 3.5.5.7 (2004/05/10) 新規作成
208         * @og.rev 5.7.7.1 (2014/06/13) Selection_NULL を 継承するため、削除
209         *
210         * @return  選択リストで、マルチ・キーセレクトを使用するかどうか(true:使用する)
211         */
212//      public boolean useMultiSelect() {
213//              return false;
214//      }
215
216        /**
217         * オブジェクトのキャッシュが時間切れかどうかを返します。
218         * キャッシュが時間切れ(無効)であれば、true を、有効であれば、
219         * false を返します。
220         *
221         * @og.rev 4.0.0.0 (2005/01/31) 新規作成
222         * @og.rev 5.7.7.1 (2014/06/13) Selection_NULL を 継承するため、削除
223         *
224         * @return  キャッシュが時間切れなら true
225         */
226//      public boolean isTimeOver() {
227//              return false;
228//      }
229}