    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 org.opengion.fukurou.system.OgRuntimeException ;                         // 6.4.2.0 (2016/01/29)
    019import java.awt.Color;
    020import java.util.LinkedHashMap;                                                                         // 6.4.6.1 (2016/06/03)
    021import java.util.Map;
    022import java.util.List;                                                                                          // 6.9.9.2 (2018/09/18)
    023import java.util.ArrayList;                                                                                     // 6.9.9.2 (2018/09/18)
    024import java.util.Locale ;
    025
    026import static org.opengion.fukurou.system.HybsConst.CR;                         // 6.1.0.0 (2014/12/26) refactoring
    027
    028/**
    029 * ColorMap.java は、共通的に使用される Color関連メソッドを集約した、クラスです。
    030 * StringUtil から、Color関係の部分を独立させました。
    031 *
    032 * カラー文字列は、java.awt.Color static 定義色、CSS1 / HTML3–4 / VGA の色名称、
    033 * X11の色名称 が指定できます。
    034 *
    035 * カラー番号は、0:BLUE,1:CYAN,2:GRAY,3:GREEN,4:LIGHT_GRAY,
    036 * 5:MAGENTA,6:DARK_GRAY,7:ORANGE,8:PINK,9:RED,10:YELLOW
    037 * となっており、配列数を超えると、0:BLUE に戻ります。
    038 *
    039 * @og.group ユーティリティ
    040 * @og.rev 6.0.2.1 (2014/09/26) 新規作成
    041 * @og.rev 6.4.3.3 (2016/03/04) ViewForm_ImageTimeBar#FlgColorMap 内部クラスから機能移動
    042 *
    043 * @version  6.0
    044 * @author       Kazuhiko Hasegawa
    045 * @since    JDK8.0,
    046 */
    047public final class ColorMap {
    048//      // 6.9.9.2 (2018/09/18) Map から、CLR_ARY を作成します。
    049//      // 6.4.3.3 (2016/03/04) ViewForm_ImageTimeBar#FlgColorMap 内部クラスから移動
    050//      private static final Color[] CLR_ARY = new Color[] {
    051//                      Color.BLUE      ,Color.CYAN   ,Color.GRAY ,Color.GREEN ,Color.LIGHT_GRAY ,Color.MAGENTA ,
    052//                      Color.DARK_GRAY ,Color.ORANGE ,Color.PINK ,Color.RED   ,Color.YELLOW
    053//      };
    054
    055        // 6.9.9.2 (2018/09/18) パステルカラー の色ｺｰﾄﾞ配列追加
    056        private static final String[] PSTL_KEY = new String[] {
    057                "#FF7F7F" , "#7FFFFF" , "#BF7FFF" , "#BFFF7F" ,
    058                "#FF7FBF" , "#7FFFBF" , "#7F7FFF" , "#FFFF7F" ,
    059                "#FF7FFF" , "#7FFF7F" , "#7FBFFF" , "#FFBF7F"
    060        };
    061
    062        // 4.0.3.0 (2007/12/26) 色コードにPURPLE を追加
    063        // 5.7.8.0 (2014/07/04) 透明追加
    064        private static final List<Color>                CLR_LIST = new ArrayList<>();                   // 6.9.9.2 (2018/09/18) 色配列ではなく、リストに変更します。
    065        /** staticイニシャライザ。読み取り専用(Collections.unmodifiableMap(Map))や、ConcurrentHashMap を使用しません。 */
    066        private static final Map<String,Color>  CLR_MAP  = new LinkedHashMap<>();               // 6.4.6.1 (2016/06/03) 登録順をキープします。
    067        static {
    068                // java.awt.Color static 定義色
    069                CLR_MAP.put( "BLUE"                     ,Color.BLUE                     );
    070                CLR_MAP.put( "CYAN"                     ,Color.CYAN                     );
    071                CLR_MAP.put( "GRAY"                     ,Color.GRAY                     );
    072                CLR_MAP.put( "GREEN"            ,Color.GREEN            );
    073                CLR_MAP.put( "LIGHTGRAY"        ,Color.LIGHT_GRAY       );
    074                CLR_MAP.put( "MAGENTA"          ,Color.MAGENTA          );
    075                CLR_MAP.put( "DARKGRAY"         ,Color.DARK_GRAY        );
    076                CLR_MAP.put( "ORANGE"           ,Color.ORANGE           );
    077                CLR_MAP.put( "PINK"                     ,Color.PINK                     );
    078                CLR_MAP.put( "RED"                      ,Color.RED                      );
    079                CLR_MAP.put( "YELLOW"           ,Color.YELLOW           );
    080
    081//              // 6.9.9.2 (2018/09/18) CSS1 / HTML3–4 / VGA の色名称の後ろに移動。
    082//              CLR_MAP.put( "WHITE"            ,Color.WHITE            );
    083//              CLR_MAP.put( "BLACK"            ,Color.BLACK            );
    084//              CLR_MAP.put( "TRANSPARENT"      ,new Color( 255,255,255,0 )     );              // 5.7.8.0 (2014/07/04) 透明追加
    085
    086                // 6.0.2.1 (2014/09/26) CSS1 / HTML3–4 / VGA の色名称 追加
    087                CLR_MAP.put( "LIME"                     ,Color.decode( "#00FF00" )      );
    088                CLR_MAP.put( "AQUA"                     ,Color.decode( "#00FFFF" )      );
    089                CLR_MAP.put( "SILVER"           ,Color.decode( "#C0C0C0" )      );
    090                CLR_MAP.put( "MAROON"           ,Color.decode( "#800000" )      );              // X11では、#B03060
    091                CLR_MAP.put( "OLIVE"            ,Color.decode( "#808000" )      );
    092                CLR_MAP.put( "TEAL"                     ,Color.decode( "#008080" )      );
    093                CLR_MAP.put( "NAVY"                     ,Color.decode( "#000080" )      );
    094                CLR_MAP.put( "FUCHSIA"          ,Color.decode( "#FF00FF" )      );
    095                CLR_MAP.put( "PURPLE"           ,Color.decode( "#800080" )      );              // X11では、#A020F0
    096
    097                // 6.9.9.2 (2018/09/18) Map から、CLR_LIST を作成するのは、ここまで。
    098                CLR_LIST.addAll( CLR_MAP.values() );
    099
    100                // 6.9.9.2 (2018/09/18) パステルカラー の色ｺｰﾄﾞ配列追加
    101                for( final String col : PSTL_KEY ) {
    102                        CLR_LIST.add( Color.decode( col ) );
    103                }
    104
    105                CLR_MAP.put( "WHITE"            ,Color.WHITE            );
    106                CLR_MAP.put( "BLACK"            ,Color.BLACK            );
    107                CLR_MAP.put( "TRANSPARENT"      ,new Color( 255,255,255,0 )     );              // 5.7.8.0 (2014/07/04) 透明追加
    108
    109                // 6.0.2.1 (2014/09/26) X11の色名称 追加
    110                CLR_MAP.put( "ALICEBLUE"                        ,Color.decode( "#F0F8FF" )      );
    111                CLR_MAP.put( "ANTIQUEWHITE"                     ,Color.decode( "#FAEBD7" )      );
    112                CLR_MAP.put( "AQUAMARINE"                       ,Color.decode( "#7FFFD4" )      );
    113                CLR_MAP.put( "AZURE"                            ,Color.decode( "#F0FFFF" )      );
    114                CLR_MAP.put( "BEIGE"                            ,Color.decode( "#F5F5DC" )      );
    115                CLR_MAP.put( "BISQUE"                           ,Color.decode( "#FFE4C4" )      );
    116                CLR_MAP.put( "BLANCHEDALMOND"           ,Color.decode( "#FFEBCD" )      );
    117                CLR_MAP.put( "BLUEVIOLET"                       ,Color.decode( "#8A2BE2" )      );
    118                CLR_MAP.put( "BROWN"                            ,Color.decode( "#A52A2A" )      );
    119                CLR_MAP.put( "BURLYWOOD"                        ,Color.decode( "#DEB887" )      );
    120                CLR_MAP.put( "CADETBLUE"                        ,Color.decode( "#5F9EA0" )      );
    121                CLR_MAP.put( "CHARTREUSE"                       ,Color.decode( "#7FFF00" )      );
    122                CLR_MAP.put( "CHOCOLATE"                        ,Color.decode( "#D2691E" )      );
    123                CLR_MAP.put( "CORAL"                            ,Color.decode( "#FF7F50" )      );
    124                CLR_MAP.put( "CORNFLOWERBLUE"           ,Color.decode( "#6495ED" )      );
    125                CLR_MAP.put( "CORNSILK"                         ,Color.decode( "#FFF8DC" )      );
    126                CLR_MAP.put( "CRIMSON"                          ,Color.decode( "#DC143C" )      );
    127                CLR_MAP.put( "DARKBLUE"                         ,Color.decode( "#00008B" )      );
    128                CLR_MAP.put( "DARKCYAN"                         ,Color.decode( "#008B8B" )      );
    129                CLR_MAP.put( "DARKGOLDENROD"            ,Color.decode( "#B8860B" )      );
    130                CLR_MAP.put( "DARKGREEN"                        ,Color.decode( "#006400" )      );
    131                CLR_MAP.put( "DARKKHAKI"                        ,Color.decode( "#BDB76B" )      );
    132                CLR_MAP.put( "DARKMAGENTA"                      ,Color.decode( "#8B008B" )      );
    133                CLR_MAP.put( "DARKOLIVEGREEN"           ,Color.decode( "#556B2F" )      );
    134                CLR_MAP.put( "DARKORANGE"                       ,Color.decode( "#FF8C00" )      );
    135                CLR_MAP.put( "DARKORCHID"                       ,Color.decode( "#9932CC" )      );
    136                CLR_MAP.put( "DARKRED"                          ,Color.decode( "#8B0000" )      );
    137                CLR_MAP.put( "DARKSALMON"                       ,Color.decode( "#E9967A" )      );
    138                CLR_MAP.put( "DARKSEAGREEN"                     ,Color.decode( "#8FBC8F" )      );
    139                CLR_MAP.put( "DARKSLATEBLUE"            ,Color.decode( "#483D8B" )      );
    140                CLR_MAP.put( "DARKSLATEGRAY"            ,Color.decode( "#2F4F4F" )      );
    141                CLR_MAP.put( "DARKTURQUOISE"            ,Color.decode( "#00CED1" )      );
    142                CLR_MAP.put( "DARKVIOLET"                       ,Color.decode( "#9400D3" )      );
    143                CLR_MAP.put( "DEEPPINK"                         ,Color.decode( "#FF1493" )      );
    144                CLR_MAP.put( "DEEPSKYBLUE"                      ,Color.decode( "#00BFFF" )      );
    145                CLR_MAP.put( "DIMGRAY"                          ,Color.decode( "#696969" )      );
    146                CLR_MAP.put( "DODGERBLUE"                       ,Color.decode( "#1E90FF" )      );
    147                CLR_MAP.put( "FIREBRICK"                        ,Color.decode( "#B22222" )      );
    148                CLR_MAP.put( "FLORALWHITE"                      ,Color.decode( "#FFFAF0" )      );
    149                CLR_MAP.put( "FORESTGREEN"                      ,Color.decode( "#228B22" )      );
    150                CLR_MAP.put( "GAINSBORO"                        ,Color.decode( "#DCDCDC" )      );
    151                CLR_MAP.put( "GHOSTWHITE"                       ,Color.decode( "#F8F8FF" )      );
    152                CLR_MAP.put( "GOLD"                                     ,Color.decode( "#FFD700" )      );
    153                CLR_MAP.put( "GOLDENROD"                        ,Color.decode( "#DAA520" )      );
    154                CLR_MAP.put( "GREENYELLOW"                      ,Color.decode( "#ADFF2F" )      );
    155                CLR_MAP.put( "HONEYDEW"                         ,Color.decode( "#F0FFF0" )      );
    156                CLR_MAP.put( "HOTPINK"                          ,Color.decode( "#FF69B4" )      );
    157                CLR_MAP.put( "INDIANRED"                        ,Color.decode( "#CD5C5C" )      );
    158                CLR_MAP.put( "INDIGO"                           ,Color.decode( "#4B0082" )      );
    159                CLR_MAP.put( "IVORY"                            ,Color.decode( "#FFFFF0" )      );
    160                CLR_MAP.put( "KHAKI"                            ,Color.decode( "#F0E68C" )      );
    161                CLR_MAP.put( "LAVENDER"                         ,Color.decode( "#E6E6FA" )      );
    162                CLR_MAP.put( "LAVENDERBLUSH"            ,Color.decode( "#FFF0F5" )      );
    163                CLR_MAP.put( "LAWNGREEN"                        ,Color.decode( "#7CFC00" )      );
    164                CLR_MAP.put( "LEMONCHIFFON"                     ,Color.decode( "#FFFACD" )      );
    165                CLR_MAP.put( "LIGHTBLUE"                        ,Color.decode( "#ADD8E6" )      );
    166                CLR_MAP.put( "LIGHTCORAL"                       ,Color.decode( "#F08080" )      );
    167                CLR_MAP.put( "LIGHTCYAN"                        ,Color.decode( "#E0FFFF" )      );
    168                CLR_MAP.put( "LIGHTGOLDENRODYELLOW"     ,Color.decode( "#FAFAD2" )      );
    169                CLR_MAP.put( "LIGHTGREEN"                       ,Color.decode( "#90EE90" )      );
    170                CLR_MAP.put( "LIGHTPINK"                        ,Color.decode( "#FFB6C1" )      );
    171                CLR_MAP.put( "LIGHTSALMON"                      ,Color.decode( "#FFA07A" )      );
    172                CLR_MAP.put( "LIGHTSEAGREEN"            ,Color.decode( "#20B2AA" )      );
    173                CLR_MAP.put( "LIGHTSKYBLUE"                     ,Color.decode( "#87CEFA" )      );
    174                CLR_MAP.put( "LIGHTSLATEGRAY"           ,Color.decode( "#778899" )      );
    175                CLR_MAP.put( "LIGHTSTEELBLUE"           ,Color.decode( "#B0C4DE" )      );
    176                CLR_MAP.put( "LIGHTYELLOW"                      ,Color.decode( "#FFFFE0" )      );
    177                CLR_MAP.put( "LIMEGREEN"                        ,Color.decode( "#32CD32" )      );
    178                CLR_MAP.put( "LINEN"                            ,Color.decode( "#FAF0E6" )      );
    179                CLR_MAP.put( "MEDIUMAQUAMARINE"         ,Color.decode( "#66CDAA" )      );
    180                CLR_MAP.put( "MEDIUMBLUE"                       ,Color.decode( "#0000CD" )      );
    181                CLR_MAP.put( "MEDIUMORCHID"                     ,Color.decode( "#BA55D3" )      );
    182                CLR_MAP.put( "MEDIUMPURPLE"                     ,Color.decode( "#9370DB" )      );
    183                CLR_MAP.put( "MEDIUMSEAGREEN"           ,Color.decode( "#3CB371" )      );
    184                CLR_MAP.put( "MEDIUMSLATEBLUE"          ,Color.decode( "#7B68EE" )      );
    185                CLR_MAP.put( "MEDIUMSPRINGGREEN"        ,Color.decode( "#00FA9A" )      );
    186                CLR_MAP.put( "MEDIUMTURQUOISE"          ,Color.decode( "#48D1CC" )      );
    187                CLR_MAP.put( "MEDIUMVIOLETRED"          ,Color.decode( "#C71585" )      );
    188                CLR_MAP.put( "MIDNIGHTBLUE"                     ,Color.decode( "#191970" )      );
    189                CLR_MAP.put( "MINTCREAM"                        ,Color.decode( "#F5FFFA" )      );
    190                CLR_MAP.put( "MISTYROSE"                        ,Color.decode( "#FFE4E1" )      );
    191                CLR_MAP.put( "MOCCASIN"                         ,Color.decode( "#FFE4B5" )      );
    192                CLR_MAP.put( "NAVAJOWHITE"                      ,Color.decode( "#FFDEAD" )      );
    193                CLR_MAP.put( "OLDLACE"                          ,Color.decode( "#FDF5E6" )      );
    194                CLR_MAP.put( "OLIVEDRAB"                        ,Color.decode( "#6B8E23" )      );
    195                CLR_MAP.put( "ORANGERED"                        ,Color.decode( "#FF4500" )      );
    196                CLR_MAP.put( "ORCHID"                           ,Color.decode( "#DA70D6" )      );
    197                CLR_MAP.put( "PALEGOLDENROD"            ,Color.decode( "#EEE8AA" )      );
    198                CLR_MAP.put( "PALEGREEN"                        ,Color.decode( "#98FB98" )      );
    199                CLR_MAP.put( "PALETURQUOISE"            ,Color.decode( "#AFEEEE" )      );
    200                CLR_MAP.put( "PALEVIOLETRED"            ,Color.decode( "#DB7093" )      );
    201                CLR_MAP.put( "PAPAYAWHIP"                       ,Color.decode( "#FFEFD5" )      );
    202                CLR_MAP.put( "PEACHPUFF"                        ,Color.decode( "#FFDAB9" )      );
    203                CLR_MAP.put( "PERU"                                     ,Color.decode( "#CD853F" )      );
    204                CLR_MAP.put( "PLUM"                                     ,Color.decode( "#DDA0DD" )      );
    205                CLR_MAP.put( "POWDERBLUE"                       ,Color.decode( "#B0E0E6" )      );
    206                CLR_MAP.put( "ROSYBROWN"                        ,Color.decode( "#BC8F8F" )      );
    207                CLR_MAP.put( "ROYALBLUE"                        ,Color.decode( "#4169E1" )      );
    208                CLR_MAP.put( "SADDLEBROWN"                      ,Color.decode( "#8B4513" )      );
    209                CLR_MAP.put( "SALMON"                           ,Color.decode( "#FA8072" )      );
    210                CLR_MAP.put( "SANDYBROWN"                       ,Color.decode( "#F4A460" )      );
    211                CLR_MAP.put( "SEAGREEN"                         ,Color.decode( "#2E8B57" )      );
    212                CLR_MAP.put( "SEASHELL"                         ,Color.decode( "#FFF5EE" )      );
    213                CLR_MAP.put( "SIENNA"                           ,Color.decode( "#A0522D" )      );
    214                CLR_MAP.put( "SKYBLUE"                          ,Color.decode( "#87CEEB" )      );
    215                CLR_MAP.put( "SLATEBLUE"                        ,Color.decode( "#6A5ACD" )      );
    216                CLR_MAP.put( "SLATEGRAY"                        ,Color.decode( "#708090" )      );
    217                CLR_MAP.put( "SNOW"                                     ,Color.decode( "#FFFAFA" )      );
    218                CLR_MAP.put( "SPRINGGREEN"                      ,Color.decode( "#00FF7F" )      );
    219                CLR_MAP.put( "STEELBLUE"                        ,Color.decode( "#4682B4" )      );
    220                CLR_MAP.put( "TAN"                                      ,Color.decode( "#D2B48C" )      );
    221                CLR_MAP.put( "THISTLE"                          ,Color.decode( "#D8BFD8" )      );
    222                CLR_MAP.put( "TOMATO"                           ,Color.decode( "#FF6347" )      );
    223                CLR_MAP.put( "TURQUOISE"                        ,Color.decode( "#40E0D0" )      );
    224                CLR_MAP.put( "VIOLET"                           ,Color.decode( "#EE82EE" )      );
    225                CLR_MAP.put( "WHEAT"                            ,Color.decode( "#F5DEB3" )      );
    226                CLR_MAP.put( "WHITESMOKE"                       ,Color.decode( "#F5F5F5" )      );
    227                CLR_MAP.put( "YELLOWGREEN"                      ,Color.decode( "#9ACD32" )      );
    228
    229//              // 6.4.4.1 (2016/03/18) 数字に対応する
    230//              for( int i=0; i<CLR_ARY.length; i++ ) {
    231//                      CLR_MAP.put( String.valueOf( i ) ,CLR_ARY[i] );                 // 0:BLUE , 1:CYAN , 2:GRAY ･･･ を、Mapに登録しておきます。
    232//              }
    233
    234                // 6.9.9.2 (2018/09/18) 数字に対応する(配列からリストに変更の対応)
    235                for( int i=0; i<CLR_LIST.size(); i++ ) {
    236                        CLR_MAP.put( String.valueOf( i ) ,CLR_LIST.get(i) );    // 0:BLUE , 1:CYAN , 2:GRAY ･･･ を、Mapに登録しておきます。
    237                }
    238        }
    239
    240        /**
    241         *      デフォルトコンストラクターをprivateにして、
    242         *      オブジェクトの生成をさせないようにする。
    243         *
    244         */
    245        private ColorMap() {}
    246
    247        /**
    248         * カラーキーワードより、Colorオブジェクトを作成します。
    249         *
    250         * 指定文字列は、java.awt.Color クラスのstatic フィールド名で指定します。
    251         * BLACK , BLUE , CYAN , DARK_GRAY , GRAY , GREEN , LIGHT_GRAY ,
    252         * MAGENTA , ORANGE , PINK , RED , WHITE , YELLOW , PURPLE , TRANSPARENT(透明) が指定できます。
    253         *
    254         * 6.0.2.1 (2014/09/26) 以降では、CSS1/HTML3–4/VGA の色名称として、
    255         * LIME , AQUA , SILVER , MAROON , OLIVE , TEAL , NAVY , FUCHSIA を追加。
    256         * それと、X11の色名称 を追加しました。
    257         *
    258         * また、先頭に、# を付ける事で、#XXXXXX形式の16bitRGB表記 でも指定可能です。
    259         * static フィールド名のMapを管理していますが、存在しない場合は、エラーになります。
    260         *
    261         * @og.rev 3.8.9.1 (2007/06/29) 新規作成
    262         * @og.rev 4.1.1.0 (2008/02/04) CLR_MAP に存在しない場合はエラーにします。
    263         * @og.rev 6.0.2.1 (2014/09/26) CSS1/HTML3–4/VGA の色名称 , X11の色名称 追加
    264         * @og.rev 6.3.9.0 (2015/11/06) valueのnullチェックの仕方が間違っていた。
    265         * @og.rev 6.4.6.1 (2016/06/03) 色番号の取得も対応しておきます。
    266         *
    267         * @param       value java.awt.Color フィールドを示す文字列または、#XXXXXX形式の16bitRGB表記
    268         *
    269         * @return      Colorオブジェクト
    270         * @see         java.awt.Color#BLACK
    271         */
    272        public static Color getColorInstance( final String value ) {
    273                // 6.3.9.0 (2015/11/06) valueのnullチェックの仕方が間違っていた。
    274                if( value == null || value.length() == 0 ) {
    275                        final String errMsg = "色コードが指定されていません。" + CR                    // 6.4.6.1 (2016/06/03)
    276                                                + "ColorMap=" + CLR_MAP.keySet().toString();
    277                        throw new OgRuntimeException( errMsg );
    278                }
    279
    280                Color clr = null ;                      // 6.4.6.1 (2016/06/03) 色番号で、再設定しているため、final をはずす。
    281
    282                if( value.charAt(0) == '#' ) {
    283                        try {
    284                                clr = Color.decode( value );
    285                        }
    286                        catch( final NumberFormatException ex ) {                       // 10進、8進、および16進の整数値に変換できない場合
    287                                final String errMsg = "指定の色コードのフォーマットが異なります Color=[" + value + "]" + CR
    288                                                        + "ColorMap=" + CLR_MAP.keySet().toString();
    289                                throw new OgRuntimeException( errMsg,ex );
    290                        }
    291                }
    292                else {
    293                        // "_"を削除するのは、LIGHT_GRAY などの表記を統一するため。
    294                        final String val = value.replaceAll( "_" , "" ).toUpperCase(Locale.JAPAN);
    295                        clr = CLR_MAP.get( val );
    296                        if( clr == null ) {
    297                                // 6.4.6.1 (2016/06/03) 色番号の取得も対応しておきます。
    298                                // 0 ～ 10 は登録済みなので、それ以降の数字の繰り返しが出来ない
    299                                try {
    300                                        clr = getColorInstance( Integer.parseInt( value ) );
    301                                }
    302                                catch( final NumberFormatException ex ) {                       // 数字ではない value をパースしているので、この、Exception は伝播不要。
    303                                        final String errMsg = "指定の色コードは使用できません Color=[" + value + "]" + CR
    304                                                                + "ColorMap=" + CLR_MAP.keySet().toString();
    305                                        throw new OgRuntimeException( errMsg,ex );
    306                                }
    307                        }
    308                }
    309
    310                return clr;
    311        }
    312
    313        /**
    314         * 指定の番号に対応した、色オブジェクトを返します。
    315         *
    316         * 以前は、ViewForm_ImageTimeBar#uniqColor() メソッドで、ユニークな色を
    317         * 返していました。配列を超えると、自動的にランダムな色を出していましたが、
    318         * 実質的にそのような色を出すのではなく、番号に応じて、繰り返すことにします。
    319         * 割り当てた色の番号は、0:BLUE,1:CYAN,2:GRAY,3:GREEN,4:LIGHT_GRAY,
    320         * 5:MAGENTA,6:DARK_GRAY,7:ORANGE,8:PINK,9:RED,10:YELLOW
    321         * となっており、それを超えると、0:BLUE に戻ります。
    322         *
    323         * @og.rev 6.4.3.3 (2016/03/04) ViewForm_ImageTimeBar#uniqColor() メソッドから移動。
    324         * @og.rev 6.9.9.2 (2018/09/18) 配列からリストに変更の対応
    325         *
    326         * @param       no 内部で管理している色番号
    327         * @return      色オブジェクト
    328         */
    329        public static Color getColorInstance( final int no ) {
    330//              return CLR_ARY[no % CLR_ARY.length];
    331                return CLR_LIST.get( no % CLR_LIST.size() );
    332        }
    333
    334        /**
    335         * 内部で管理している ColorMap のキー配列を返します。
    336         *
    337         * @og.rev 6.0.2.1 (2014/09/26) 新規追加
    338         *
    339         * @return      キー配列
    340         * @og.rtnNotNull
    341         */
    342        public static String[] getColorKeys() {
    343                return CLR_MAP.keySet().toArray( new String[CLR_MAP.size()] );
    344        }
    345
    346        /**
    347         * 指定の番号に対応した、パステルカラーの色オブジェクトを返します。
    348         *
    349         * #getColorInstance(int) とほぼ同じ機能で、返すのは、パステルカラーの色オブジェクトです。
    350         * https://www.colordic.org/p/
    351         *
    352         * １２色のパステルカラーを、指定の番号に応じて、返します。
    353         * 隣接する色は、できるだけ離れるようにしています。
    354         *
    355         * @og.rev 6.9.9.2 (2018/09/18) パステルカラーの色オブジェクト
    356         *
    357         * @param       no 内部で管理している色番号
    358         * @return      パステルカラーの色オブジェクト
    359         */
    360        public static Color getPastelColor( final int no ) {
    361                return Color.decode( PSTL_KEY[no % PSTL_KEY.length] );
    362        }
    363
    364        /**
    365         * 内部で管理している パステルカラー のキー配列を返します。
    366         *
    367         * @og.rev 6.9.9.2 (2018/09/18) パステルカラーの色オブジェクト
    368         *
    369         * @return      パステルカラーのキー配列
    370         */
    371        public static String[] getPastelColorKeys() {
    372                return PSTL_KEY.clone();
    373        }
    374}