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 }