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 }