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.fukurou.util; 017 018import static org.opengion.fukurou.system.HybsConst.CR; // 6.1.0.0 (2014/12/26) refactoring 019import static org.opengion.fukurou.system.HybsConst.BUFFER_MIDDLE; // 6.1.0.0 (2014/12/26) refactoring 020 021import java.util.List; 022import java.util.ArrayList; 023 024/** 025 * Options.java は、String 型リストをプールするクラスです。 026 * 027 * HTMLのOptionタグのように、複数の文字列をキープしておき、 028 * すべてを連結して出力するような場合に利用できます。 029 * 030 * この実装は同期化されません。 031 * 032 * @version 4.0 033 * @author Kazuhiko Hasegawa 034 * @since JDK5.0, 035 */ 036public final class Options { 037 private final List<String> option = new ArrayList<>( 100 ); 038 039 /** 040 * デフォルトコンストラクター 041 * 042 * @og.rev 6.4.2.0 (2016/01/29) PMD refactoring. Each class should declare at least one constructor. 043 */ 044 public Options() { super(); } // これも、自動的に呼ばれるが、空のメソッドを作成すると警告されるので、明示的にしておきます。 045 046 /** 047 * すべての要素をリストから削除します 。 048 * この呼び出しからの復帰後、リストは空になります 。 049 * (例外をスローした場合を除く)。 050 * 051 */ 052 public void clear() { 053 option.clear() ; 054 } 055 056 /** 057 * リストの末尾に指定の文字列を追加します。 058 * value が null の場合は、追加されません。 059 * 060 * @param value リストに追加される文字列 061 */ 062 public void add( final String value ) { 063 if( value != null ) { option.add( value ) ; } 064 } 065 066 /** 067 * メニュー項目の最後の項目を削除します。 068 * 069 * select タグのBODY要素の OptionTag よりアクセスされます。 070 * 071 * @og.rev 6.8.0.0 (2017/06/02) メニュー項目の最後の項目を削除。 072 */ 073 public void removeLast() { 074 option.remove( option.size()-1 ); 075 } 076 077 /** 078 * リスト内の指定された位置にある要素を返します。 079 * ただし、value が null の場合は、追加されていませんので、 080 * index の順番と 登録データの順番が異なる場合もありますので、 081 * 注意する必要があります。 082 * 083 * @param index 返される要素のインデックス 084 * 085 * @return リスト内の指定された位置にある要素 086 */ 087 public String get( final int index ) { 088 return option.get( index ) ; 089 } 090 091 /** 092 * 登録されているオプションの数を返します。 093 * 094 * @return インタフェース List 内の size 095 * 096 */ 097 public int size() { 098 return option.size() ; 099 } 100 101 /** 102 * リスト内のすべての要素を正しい順序で保持する配列を返します。 103 * 104 * @return リスト内のすべての要素の配列 105 * @og.rtnNotNull 106 */ 107 public String[] toArray() { 108// return option.toArray( new String[option.size()] ) ; 109 return option.toArray( new String[0] ) ; // 8.5.4.2 (2024/01/12) PMD 7.0.0 OptimizableToArrayCall 対応 110 } 111 112 /** 113 * リストに含まれているデータを オプションタグ形式で返します。 114 * 各オプションタグは整形します。(各リスト毎に改行を入れます。) 115 * 116 * @return Optionタグの形式で返します 117 * @og.rtnNotNull 118 */ 119 public String getOption() { 120 return getOption( true ); 121 } 122 123 /** 124 * リストに含まれているデータを オプションタグ形式で返します。 125 * 各オプションタグの整形をする/しないは、パラメータで指定します。 126 * 127 * @param flag 整形する(true)/整形しない(false) 128 * 129 * @return Optionタグの形式で返します 130 * @og.rtnNotNull 131 */ 132 public String getOption( final boolean flag ) { 133 final StringBuilder buf = new StringBuilder( BUFFER_MIDDLE ); 134 135 final String crlf = flag ? CR : " "; 136 137 // 8.5.4.2 (2024/01/12) PMD 7.0.0 ForLoopCanBeForeach 138// for( int i=0; i<option.size(); i++ ) { 139// buf.append( option.get(i) ).append( crlf ); 140// } 141 for( final String opt : option ) { 142 buf.append( opt ).append( crlf ); 143 } 144 return buf.toString(); 145 } 146 147 /** 148 * このオブジェクトの文字列表現を返します。 149 * 基本的にデバッグ目的に使用します。 150 * 151 * @return オブジェクトの文字列表現 152 */ 153 @Override 154 public String toString() { 155 return getOption( false ) ; 156 } 157}