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.io;
017
018 import java.awt.Color;
019
020 /**
021 * ValueMarkOverColors は、ChartDataset で設定される ValueMark用の色管ç�?‚¯ラスですã?
022 * JFreeChart の個別属æ?を管ç�?�—てã�?‚‹ãƒ??タ管ç�?‚¯ラスですã?
023 * こã?クラスは、JFreeChart に特化したã?値の判定ロジãƒ?‚¯のみを提供してã�?�¾すã?でã€?
024 * パッケージスコープでの提供になりますã?
025 *
026 * マã?カーラインの値と、è¶?�Ž時ã?Shape色をé?列でæŒ?®šしますã?
027 *
028 * マã?カーラインを使用する場合に、そのラインをè¶?�ˆなã�?‰²、è¶?�ˆる色を指定しますã?
029 * こã?色のæŒ?®šã?、ã?ーカーラインの色ã‚??ーカーラインの設定å?の個数?‹1に
030 * なりますã?つまりã?色?‘:設定å??‘:色?’:設定å??’:色??となりますã?
031 * 色?‘ã?、設定å??‘より小さã�??合に使用され、色?’ã?、設定å??‘より大きくã€?
032 * 設定å??’より小さã�??合ã?色?“ã?、設定å??’より大きい場合になりますã?
033 *
034 * Shape色は、java.awt.Color クラスのオブジェクトでæŒ?®šしますã?
035 * BLACK , BLUE , CYAN , DARK_GRAY , GRAY , GREEN , LIGHT_GRAY ,
036 * MAGENTA , ORANGE , PINK , RED , WHITE , YELLOW , (PURPLE) が指定できますã?
037 * またã?#XXXXXX形式ã?16bitRGB表è¨?でも指定可能ですã?
038 * values と、あわせて設定するå¿?¦�がありますã?
039 * どちらかがã?æŒ?®šされてã�?�ªã�??合ã?、エラーになりますã?
040 *
041 * @og.rev 4.1.0.1(2008/01/19) ChartDataset クラスから独ç«?
042 *
043 * @version 0.9.0 2007/06/21
044 * @author Kazuhiko Hasegawa
045 * @since JDK1.1,
046 */
047 class ValueMarkOverColors {
048 private final double[] markValues ; // doubleの配å?
049 private final Color[] markOverColors; // マã?カーラインのè¶?�Ž色
050 private final Color markColor; // 動的マã?カーライン色
051 private final int dynamicOCadrs; // 動的マã?カーライン色
052
053 /**
054 * コンストラクター
055 *
056 * マã?カーラインの値と、è¶?�Ž時ã?Shape色をé?列でæŒ?®šしますã?
057 *
058 * マã?カーラインを使用する場合に、そのラインをè¶?�ˆなã�?‰²、è¶?�ˆる色を指定しますã?
059 * こã?色のæŒ?®šã?、ã?ーカーラインの色ã‚??ーカーラインの設定å?の個数?‹1に
060 * なりますã?つまりã?色?‘:設定å??‘:色?’:設定å??’:色??となりますã?
061 * 色?‘ã?、設定å??‘より小さã�??合に使用され、色?’ã?、設定å??‘より大きくã€?
062 * 設定å??’より小さã�??合ã?色?“ã?、設定å??’より大きい場合になりますã?
063 *
064 * Shape色は、java.awt.Color クラスのオブジェクトでæŒ?®šしますã?
065 * BLACK , BLUE , CYAN , DARK_GRAY , GRAY , GREEN , LIGHT_GRAY ,
066 * MAGENTA , ORANGE , PINK , RED , WHITE , YELLOW , (PURPLE) が指定できますã?
067 * またã?#XXXXXX形式ã?16bitRGB表è¨?でも指定可能ですã?
068 * values と、あわせて設定するå¿?¦�がありますã?
069 * どちらかがã?æŒ?®šされてã�?�ªã�??合ã?、エラーになりますã?
070 *
071 * @og.rev 4.1.0.1(2008/01/19) 新規追åŠ?
072 *
073 * @param values double[] マã?カーラインの値配å?
074 * @param overColors Color[] マã?カーラインのè¶?�Ž時ã?Shape色配å?
075 * @param dynMarkColor Color 動的なマã?カーラインを使用時ã?動的ライン色
076 * @param dynOCadrs 動的なマã?カーラインの基準番号
077 */
078 public ValueMarkOverColors( final double[] values ,
079 final Color[] overColors ,
080 final Color dynMarkColor ,
081 final int dynOCadrs ) {
082 markValues = values;
083 markOverColors = overColors;
084 markColor = dynMarkColor;
085 dynamicOCadrs = dynOCadrs;
086
087 if( markValues == null || markOverColors == null ||
088 markValues.length + 1 != overColors.length ||
089 markValues.length < 1 ) {
090
091 String errMsg = "ValueMarkOverColors が構築できませんã€?n"
092 + " markValues ã�?null かã?markOverColors ã�?null かã?"
093 + " markValuesの個数?‹1が、overColorsの個数に合è?しませんã€? ;
094 System.out.println( errMsg );
095 throw new RuntimeException( errMsg );
096 }
097 }
098
099 /**
100 * 動的マã?カーラインのライン色を返しますã?
101 *
102 * 動的マã?カーラインのライン色は、ChartDataset クラスの markValues
103 * 属æ?でã€?G" とã�?�†æ–?—å?を設定されたアドレスがã?使用されますã?
104 *
105 * @og.rev 4.1.0.1(2008/01/19) 新規追åŠ?
106 *
107 * @return Color 動的マã?カーラインのライン色
108 */
109 protected Color getDynamicColor() {
110 return markColor;
111 }
112
113 /**
114 * コンストラクタでæŒ?®šされた設定å?配å?と比べて、合致するShape色を返しますã?
115 * 動的なオーバã?カラー(useDynamicOverColor)を使用しなã�??合ã?メソãƒ?ƒ‰ですã?
116 *
117 * @og.rev 4.1.0.1(2008/01/19) 新規追åŠ?
118 *
119 * @param value double マã?カーラインと比è¼?�™るå?
120 *
121 * @return Color æŒ?®šã?値に対する Shape色
122 */
123 protected Color getColor( final double value ) {
124 return getColor( value,markValues[0] );
125 }
126
127 /**
128 * コンストラクタでæŒ?®šされた設定å?配å?と比べて、合致するShape色を返しますã?
129 * 動的なオーバã?カラー(useDynamicOverColor)を使用する場合ã?メソãƒ?ƒ‰ですã?
130 * ここでは、動çš?–¾値の比è¼?¯¾照をã?引数でæŒ?®šしますã?
131 *
132 * @og.rev 4.1.1.0 (2008/02/04) 新規追åŠ?
133 *
134 * @param value double マã?カーラインと比è¼?�™るå?
135 * @param minNum Number æœ?¸‹位ã?動的マã?カーライン値
136 *
137 * @return Color æŒ?®šã?値に対する Shape色
138 */
139 protected Color getColor( final double value, final Number minNum ) {
140 Color rtnclr = null;
141
142 double minVal = 0.0 ;
143 if( minNum != null ) {
144 minVal = minNum.doubleValue();
145 }
146 rtnclr = getColor( value,minVal );
147
148 return rtnclr;
149 }
150
151 /**
152 * コンストラクタでæŒ?®šされた設定å?配å?と比べて、合致するShape色を返しますã?
153 * 動的なオーバã?カラー(useDynamicOverColor)を使用する場合ã?メソãƒ?ƒ‰ですã?
154 * ここでは、動çš?–¾値の比è¼?¯¾照をã?引数でæŒ?®šしますã?
155 *
156 * å†?ƒ¨ロジãƒ?‚¯説明ï¼?
157 * ・閾値[0]の値と比è¼?�—て、下ã?場合ã?、色[0]を返すã€?確å®?
158 * ・閾値[N-1]の値と比è¼?�—て、上ã?場合ã?、色[N]を返すã€?確å®?
159 * ・閾値[N-2]の値と比è¼?�—て、上ã?場合ã?、色[N-1]を返すã€?確å®?
160 * ・閾値[1]の値と比è¼?�—て、上ã?場合ã?、色[2]を返すã€?確å®?
161 * ・閾値[0]の値と比è¼?�—て、上ã?場合ã?、色[1]を返すã€?確å®?
162 * 閾値のアドレスがã?動的オーバã?カラー(dynamicOCadrs)の場合ã?ã€?
163 * 引数の markValue がã?動的閾値としてã€?–¾値配å?の代わりに使用されますã?
164 *
165 * @og.rev 4.1.1.0 (2008/02/04) 新規追åŠ?
166 * @og.rev 4.1.1.0 (2008/02/21) dynamicOCadrs をè?慮した処ç�?‚’行う
167 *
168 * @param value double マã?カーラインと比è¼?�™るå?
169 * @param markValue double マã?カーライン値
170 *
171 * @return Color æŒ?®šã?値に対する Shape色
172 */
173 private Color getColor( final double value,final double markValue ) {
174 Color rtnclr = null;
175
176 if( dynamicOCadrs >= 0 ) {
177 markValues[dynamicOCadrs] = markValue ;
178 }
179
180 // 閾値[0]の値と比è¼?�—て、下ã?場合ã?、色[0]を返す
181 if( value < markValues[0] ) {
182 rtnclr = markOverColors[0];
183 }
184 else {
185 // 閾値[N-1]の値と比è¼?�—て、上ã?場合ã?、色[N]を返すã€?確å®?
186 for( int i=markValues.length-1; i>=0; i-- ) {
187 if( value >= markValues[i] ) {
188 rtnclr = markOverColors[i+1];
189 break;
190 }
191 }
192 }
193 return rtnclr;
194 }
195 }