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.hayabusa.io; 017 018import org.opengion.fukurou.system.OgRuntimeException ; // 6.4.2.0 (2016/01/29) 019import java.awt.Color; 020 021/** 022 * ValueMarkOverColors は、ChartDataset で設定される ValueMark用の色管理クラスです。 023 * JFreeChart の個別属性を管理しているデータ管理クラスです。 024 * このクラスは、JFreeChart に特化した、値の判定ロジックのみを提供していますので、 025 * パッケージスコープでの提供になります。 026 * 027 * マーカーラインの値と、超過時のShape色を配列で指定します。 028 * 029 * マーカーラインを使用する場合に、そのラインを超えない色、超える色を指定します。 030 * この色の指定は、マーカーラインの色やマーカーラインの設定値の個数+1に 031 * なります。つまり、色1:設定値1:色2:設定値2:色3 となります。 032 * 色1は、設定値1より小さい場合に使用され、色2は、設定値1より大きく、 033 * 設定値2より小さい場合、色3は、設定値2より大きい場合になります。 034 * 035 * Shape色は、java.awt.Color クラスのオブジェクトで指定します。 036 * BLACK , BLUE , CYAN , DARK_GRAY , GRAY , GREEN , LIGHT_GRAY , 037 * MAGENTA , ORANGE , PINK , RED , WHITE , YELLOW , (PURPLE) が指定できます。 038 * また、#XXXXXX形式の16bitRGB表記 でも指定可能です。 039 * values と、あわせて設定する必要があります。 040 * どちらかが、指定されていない場合は、エラーになります。 041 * 042 * @og.rev 4.1.0.1 (2008/01/19) ChartDataset クラスから独立 043 * 044 * @version 0.9.0 2007/06/21 045 * @author Kazuhiko Hasegawa 046 * @since JDK1.1, 047 */ 048class ValueMarkOverColors { 049 private final double[] markValues ; // doubleの配列 050 private final Color[] markOverColors; // マーカーラインの超過色 051 private final Color markColor; // 動的マーカーライン色 052 private final int dynamicOCadrs; // 動的マーカーライン色 053 054 /** 055 * コンストラクター 056 * 057 * マーカーラインの値と、超過時のShape色を配列で指定します。 058 * 059 * マーカーラインを使用する場合に、そのラインを超えない色、超える色を指定します。 060 * この色の指定は、マーカーラインの色やマーカーラインの設定値の個数+1に 061 * なります。つまり、色1:設定値1:色2:設定値2:色3 となります。 062 * 色1は、設定値1より小さい場合に使用され、色2は、設定値1より大きく、 063 * 設定値2より小さい場合、色3は、設定値2より大きい場合になります。 064 * 065 * Shape色は、java.awt.Color クラスのオブジェクトで指定します。 066 * BLACK , BLUE , CYAN , DARK_GRAY , GRAY , GREEN , LIGHT_GRAY , 067 * MAGENTA , ORANGE , PINK , RED , WHITE , YELLOW , (PURPLE) が指定できます。 068 * また、#XXXXXX形式の16bitRGB表記 でも指定可能です。 069 * values と、あわせて設定する必要があります。 070 * どちらかが、指定されていない場合は、エラーになります。 071 * 072 * @og.rev 4.1.0.1 (2008/01/19) 新規追加 073 * 074 * @param values マーカーラインの値配列 075 * @param overColors マーカーラインの超過時のShape色配列 076 * @param dynMarkColor 動的なマーカーラインを使用時の動的ライン色 077 * @param dynOCadrs 動的なマーカーラインの基準番号 078 */ 079 public ValueMarkOverColors( final double[] values , 080 final Color[] overColors , 081 final Color dynMarkColor , 082 final int dynOCadrs ) { 083 markValues = values; 084 markOverColors = overColors; 085 markColor = dynMarkColor; 086 dynamicOCadrs = dynOCadrs; 087 088 if( markValues == null || markOverColors == null || 089 markValues.length + 1 != overColors.length || 090 markValues.length < 1 ) { 091 092 final String errMsg = "ValueMarkOverColors が構築できません。\n" 093 + " markValues が null か、markOverColors が null か、" 094 + " markValuesの個数+1が、overColorsの個数に合致しません。" ; 095 System.out.println( errMsg ); 096 throw new OgRuntimeException( errMsg ); 097 } 098 } 099 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}