OSDN Git Service

Ver8.5.1.0
[opengion/opengionV8.git] / uap / webapps / gf / src / org / opengion / hayabusa / io / ValueMarkOverColors.java
1 /*
2  * Copyright (c) 2009 The openGion Project.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *     http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
13  * either express or implied. See the License for the specific language
14  * governing permissions and limitations under the License.
15  */
16 package org.opengion.hayabusa.io;
17
18 import org.opengion.fukurou.system.OgRuntimeException ;         // 6.4.2.0 (2016/01/29)
19 import java.awt.Color;
20
21 /**
22  * ValueMarkOverColors は、ChartDataset で設定される ValueMark用の色管理クラスです。
23  * JFreeChart の個別属性を管理しているデータ管理クラスです。
24  * このクラスは、JFreeChart に特化した、値の判定ロジックのみを提供していますので、
25  * パッケージスコープでの提供になります。
26  *
27  * マーカーラインの値と、超過時のShape色を配列で指定します。
28  *
29  * マーカーラインを使用する場合に、そのラインを超えない色、超える色を指定します。
30  * この色の指定は、マーカーラインの色やマーカーラインの設定値の個数+1に
31  * なります。つまり、色1:設定値1:色2:設定値2:色3 となります。
32  * 色1は、設定値1より小さい場合に使用され、色2は、設定値1より大きく、
33  * 設定値2より小さい場合、色3は、設定値2より大きい場合になります。
34  *
35  * Shape色は、java.awt.Color クラスのオブジェクトで指定します。
36  * BLACK , BLUE , CYAN , DARK_GRAY , GRAY , GREEN , LIGHT_GRAY ,
37  * MAGENTA , ORANGE , PINK , RED , WHITE , YELLOW , (PURPLE) が指定できます。
38  * また、#XXXXXX形式の16bitRGB表記 でも指定可能です。
39  * values と、あわせて設定する必要があります。
40  * どちらかが、指定されていない場合は、エラーになります。
41  *
42  * @og.rev 4.1.0.1 (2008/01/19) ChartDataset クラスから独立
43  *
44  * @version  0.9.0      2007/06/21
45  * @author       Kazuhiko Hasegawa
46  * @since        JDK1.1,
47  */
48 class ValueMarkOverColors {
49         private final double[]  markValues      ;               // doubleの配列
50         private final Color[]   markOverColors;         // マーカーラインの超過色
51         private final Color             markColor;                      // 動的マーカーライン色
52         private final int               dynamicOCadrs;          // 動的マーカーライン色
53
54         /**
55          * コンストラクター
56          *
57          * マーカーラインの値と、超過時のShape色を配列で指定します。
58          *
59          * マーカーラインを使用する場合に、そのラインを超えない色、超える色を指定します。
60          * この色の指定は、マーカーラインの色やマーカーラインの設定値の個数+1に
61          * なります。つまり、色1:設定値1:色2:設定値2:色3 となります。
62          * 色1は、設定値1より小さい場合に使用され、色2は、設定値1より大きく、
63          * 設定値2より小さい場合、色3は、設定値2より大きい場合になります。
64          *
65          * Shape色は、java.awt.Color クラスのオブジェクトで指定します。
66          * BLACK , BLUE , CYAN , DARK_GRAY , GRAY , GREEN , LIGHT_GRAY ,
67          * MAGENTA , ORANGE , PINK , RED , WHITE , YELLOW , (PURPLE) が指定できます。
68          * また、#XXXXXX形式の16bitRGB表記 でも指定可能です。
69          * values と、あわせて設定する必要があります。
70          * どちらかが、指定されていない場合は、エラーになります。
71          *
72          * @og.rev 4.1.0.1 (2008/01/19) 新規追加
73          *
74          * @param   values              マーカーラインの値配列
75          * @param   overColors  マーカーラインの超過時のShape色配列
76          * @param   dynMarkColor        動的なマーカーラインを使用時の動的ライン色
77          * @param       dynOCadrs       動的なマーカーラインの基準番号
78          */
79         public ValueMarkOverColors( final double[]      values ,
80                                                                 final Color[]   overColors ,
81                                                                 final Color             dynMarkColor ,
82                                                                 final int               dynOCadrs ) {
83                 markValues              = values;
84                 markOverColors  = overColors;
85                 markColor               = dynMarkColor;
86                 dynamicOCadrs   = dynOCadrs;
87
88                 if( markValues == null || markOverColors == null ||
89                         markValues.length + 1 != overColors.length ||
90                         markValues.length < 1 ) {
91
92                         final String errMsg = "ValueMarkOverColors が構築できません。\n"
93                                                 + " markValues が null か、markOverColors が null か、"
94                                                 + " markValuesの個数+1が、overColorsの個数に合致しません。" ;
95                         System.out.println( errMsg );
96                         throw new OgRuntimeException( errMsg );
97                 }
98         }
99
100         /**
101          * 動的マーカーラインのライン色を返します。
102          *
103          * 動的マーカーラインのライン色は、ChartDataset クラスの markValues
104          * 属性で、"G"  という文字列を設定されたアドレスが、使用されます。
105          *
106          * @og.rev 4.1.0.1 (2008/01/19) 新規追加
107          *
108          * @return      動的マーカーラインのライン色
109          */
110         protected Color getDynamicColor() {
111                 return markColor;
112         }
113
114         /**
115          * コンストラクタで指定された設定値配列と比べて、合致するShape色を返します。
116          * 動的なオーバーカラー(useDynamicOverColor)を使用しない場合のメソッドです。
117          *
118          * @og.rev 4.1.0.1 (2008/01/19) 新規追加
119          *
120          * @param       value     double マーカーラインと比較する値
121          *
122          * @return      指定の値に対する Shape色
123          */
124         protected Color getColor( final double value ) {
125                 return getColor( value,markValues[0] );
126         }
127
128         /**
129          * コンストラクタで指定された設定値配列と比べて、合致するShape色を返します。
130          * 動的なオーバーカラー(useDynamicOverColor)を使用する場合のメソッドです。
131          * ここでは、動的閾値の比較対照を、引数で指定します。
132          *
133          * @og.rev 4.1.1.0 (2008/02/04) 新規追加
134          *
135          * @param       value  double マーカーラインと比較する値
136          * @param       minNum Number 最下位の動的マーカーライン値
137          *
138          * @return      指定の値に対する Shape色
139          */
140         protected Color getColor( final double value, final Number minNum ) {
141                 Color rtnclr = null;
142
143                 double minVal = 0.0 ;
144                 if( minNum != null ) {
145                         minVal = minNum.doubleValue();
146                 }
147                 rtnclr = getColor( value,minVal );
148
149                 return rtnclr;
150         }
151
152         /**
153          * コンストラクタで指定された設定値配列と比べて、合致するShape色を返します。
154          * 動的なオーバーカラー(useDynamicOverColor)を使用する場合のメソッドです。
155          * ここでは、動的閾値の比較対照を、引数で指定します。
156          *
157          * 内部ロジック説明:
158          *  ・閾値[0]の値と比較して、下の場合は、色[0]を返す。(確定)
159          *  ・閾値[N-1]の値と比較して、上の場合は、色[N]を返す。(確定)
160          *  ・閾値[N-2]の値と比較して、上の場合は、色[N-1]を返す。(確定)
161          *  ・閾値[1]の値と比較して、上の場合は、色[2]を返す。(確定)
162          *  ・閾値[0]の値と比較して、上の場合は、色[1]を返す。(確定)
163          * 閾値のアドレスが、動的オーバーカラー(dynamicOCadrs)の場合は、
164          * 引数の markValue が、動的閾値として、閾値配列の代わりに使用されます。
165          *
166          * @og.rev 4.1.1.0 (2008/02/04) 新規追加
167          * @og.rev 4.1.1.0 (2008/02/21) dynamicOCadrs を考慮した処理を行う
168          *
169          * @param       value     double マーカーラインと比較する値
170          * @param       markValue double マーカーライン値
171          *
172          * @return      指定の値に対する Shape色
173          */
174         private Color getColor( final double value,final double markValue ) {
175                 Color rtnclr = null;
176
177                 if( dynamicOCadrs >= 0 ) {
178                         markValues[dynamicOCadrs] = markValue ;
179                 }
180
181                 // 閾値[0]の値と比較して、下の場合は、色[0]を返す
182                 if( value < markValues[0] ) {
183                         rtnclr = markOverColors[0];
184                 }
185                 else {
186                         // 閾値[N-1]の値と比較して、上の場合は、色[N]を返す。(確定)
187                         for( int i=markValues.length-1; i>=0; i-- ) {
188                                 if( value >= markValues[i] ) {
189                                         rtnclr = markOverColors[i+1];
190                                         break;
191                                 }
192                         }
193                 }
194                 return rtnclr;
195         }
196 }