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.taglib;
017
018 import static org.opengion.fukurou.util.StringUtil.nval ;
019 import org.opengion.hayabusa.common.HybsSystem;
020 import org.opengion.hayabusa.common.HybsSystemException;
021 import org.opengion.hayabusa.io.ChartCreate;
022 import org.opengion.hayabusa.io.ChartDataset;
023 import org.opengion.hayabusa.io.HybsURLTagFragmentGenerator;
024
025 import java.io.File;
026 import java.io.IOException;
027 import java.io.ObjectOutputStream;
028 import java.io.ObjectInputStream;
029 import java.util.List;
030 import java.util.ArrayList;
031 import java.util.Map ;
032 import java.util.HashMap ;
033
034 import org.jfree.chart.JFreeChart;
035 import org.jfree.chart.ChartUtilities;
036
037 import org.jfree.chart.ChartRenderingInfo;
038 import org.jfree.chart.entity.StandardEntityCollection;
039 import org.jfree.chart.imagemap.ImageMapUtilities;
040 import org.jfree.chart.imagemap.StandardToolTipTagFragmentGenerator;
041 import org.jfree.chart.imagemap.ToolTipTagFragmentGenerator;
042 import org.jfree.chart.imagemap.URLTagFragmentGenerator;
043
044 /**
045 * BODY部にæŒ?®šã?SQLの検索結果をチャーãƒ?å†??棒ã?ç·?で表示するタグですã?
046 *
047 * チャート化には、JFreeChart (http://www.jfree.org/jfreechart/) を使用してã�?�¾すã?
048 * チャートã?種類ã?、chartDataset タグでæŒ?®šしますã?これは、è¤?•°の異なるチャートを
049 * 合æ?表示する機è?がã?JFreeChart にある為ですã?ただしã?専門çš?�«は、CategoryDataset のみ
050 * ã�?�¾は、合成が可能ですã?
051 * 処ç�??実行にあたりã?キャãƒ?‚·ュが有効(useCache="true")であれば、キャãƒ?‚·ュãƒ??タã‚?
052 * 使用しますã?キャãƒ?‚·ュは、masterKey 属æ?でæŒ?®šされたキーワード毎に、JFreeChart
053 * オブジェクトをキャãƒ?‚·ュしますã?またã?seriesPikup 違いの場合ã?、å?検索せずにã€?
054 * キャãƒ?‚·ュが使用できますã?さらに、seriesPikup が同じå?å�?masterKey も同ã�?はã€?
055 * すでに画像ファイルが作æ?済みなので、画像ファイルのみを返しますã?
056 *
057 * å�?±žæ?は、{@XXXX} 変数が使用できますã?
058 * これは、ServletRequest から、XXXX をキーに値を取りå?ã�?こã?変数に割り当てますã?
059 * つまりã?こã?XXXXをキーにリクエストすれã?、この変数に値をセãƒ?ƒˆすることができますã?
060 *
061 * @og.formSample
062 * ●形式ï¼?lt;og:chartCreate title="…" … />
063 * ●body?šあã‚?EVAL_BODY_BUFFERED:BODYを評価しã?{@XXXX} を解析しまã�?
064 *
065 * ●Tag定義??
066 * <og:chartCreate
067 * title 【TAG】チャートã?タイトルをセãƒ?ƒˆしまã�?
068 * width 【TAG】チャートã?横å¹?‚’セãƒ?ƒˆしまã�?初期値:200)
069 * height 【TAG】チャートã?縦å¹?‚’セãƒ?ƒˆしまã�?初期値:200)
070 * domainLabel 【TAG】チャートã?ドメインラベルを指定しまã�?
071 * showLegend 【TAG】チャートã?凡例ã?表示可否[true/false]をセãƒ?ƒˆしまã�?初期値:true[表示する])
072 * rectangleEdge 【TAG】チャートã?表示ç®?‰€をã?[TOP/BOTTOM/RIGHT/LEFT]でæŒ?®šしまã�?初期値:BOTTOM)
073 * plotOrientation 【TAG】チャートã?プロãƒ?ƒˆ(Plot)表示方向を、[VERTICAL(or V),HORIZONTAL(or H)]でæŒ?®šしまã�?
074 * chartBackColor 【TAG】チャートã?背景色を指定しまã�?
075 * plotBackColor 【TAG】チャートã?描画領域の色を指定しまã�?
076 * rotationLabel 【TAG】チャートã?カãƒ?‚´リーラベルの方向をæŒ?®šします[1:180度 ã€?:90度 ã€?:60度 ã€?:45度 ã€?:30度 ?¥?¥?¥ ](初期値:3:60度)
077 * useVerticalLabels 【TAG】横軸ラベルの表示向きを縦にするかどã�?�‹[false/true]を指定しまã�?初期値:false)
078 * domainMarker 【TAG】チャートã?横軸の値(ドメイン)に合è?する位置にマã?カーラインを設定しまã�?
079 * useDomainLabel 【TAG】横軸ラベルのラベルを表示するかどã�?�‹[true/false]を指定しまã�?初期値:true)
080 * useMarkerLabel 【TAG】ã?ーカーラインに、その設定å?を表示するかどã�?�‹[true/false]を指定しまã�?初期値:true)
081 * useCache 【TAG】JFreeChart オブジェクトをキャãƒ?‚·ュするかどã�?�‹[true/false]を指定しまã�?初期値:false)
082 * masterKey 【TAG】キャãƒ?‚·ュ用マスタキーを指定しまã�?
083 * seriesPikup 【TAG】è¤?•°シリーズのピックアãƒ??を行う場合ã?シリーズ番号を指定しまã�?
084 * imageMapUrl 【TAG】クリãƒ?‚«ブル・マップ用URLを指定しまã�?
085 * imageMapTarget 【TAG】クリãƒ?‚«ブル・マップ用TARGETを指定しまã�?
086 * categoryMargin 【TAG】カãƒ?‚´リマã?ジン(0.0??.0)を指定しまã�?
087 * lowerMargin 【TAG】下方マã?ジン(0.0??.0)を指定しまã�?
088 * upperMargin 【TAG】上方マã?ジン(0.0??.0)を指定しまã�?
089 * useDomainLine 【TAG】横軸のグリãƒ?ƒ‰表示有無(垂直ç·?を指定しまã�?初期値:false)
090 * domainLineColor 【TAG】横軸のグリãƒ?ƒ‰線ã?色を指定しまã�?
091 * categorySkip 【TAG】横軸ラベルをスキãƒ??する間隔を指定しまã�?
092 * categoryCutNo 【TAG】横軸ラベルのæ–?—位置æŒ?®šã?キーブレイクを指定しまã�?
093 * categoryAnchor 【TAG】横軸のグリãƒ?ƒ‰(垂直ç·?の書きå?し位置(START,MIDDLE,END)を指定しまã�?
094 * useRangeLine 【TAG】縦軸のグリãƒ?ƒ‰表示有無(水平ç·?を指定しまã�?初期値:true)
095 * useToolTip 【TAG】ツールチップスの使用可否[true:利用する/false:利用しない]を指定しまã�?初期値:false)
096 * rangeLineColor 【TAG】縦軸のグリãƒ?ƒ‰線ã?色を指定しまã�?
097 * rangeSkip 【TAG】縦軸のグリãƒ?ƒ‰ç·?水平ç·?をスキãƒ??する間隔を指定しまã�?
098 * dateAxisFormat 【TAG】Time,XYTime Polt関係ã?時間軸を表すå?合ã?フォーマットをæŒ?®šしまã�?初期値:MM/dd)
099 * debug 【TAG】デバッグæƒ??をå?力するかどã�?�‹[true/false]を指定しまã�?初期値:false)
100 * > ... Body ...
101 * </og:chartCreate>
102 *
103 * ●使用ä¾?
104 * <og:chartCreate
105 * title = "JFreeChart Test" チャートタイトル
106 * domainLabel = "ドメインラベル" 横軸ラベル
107 * width = "200" チャート表示å¹?
108 * height = "200" チャート表示高さ
109 * showLegend = "[true/false]" 凡例ã?表示可否[true/false]
110 * rectangleEdge = "[TOP|BOTTOM|RIGHT|LEFT]" 凡例ã?表示ç®?‰€
111 * plotOrientation = "[VERTICAL|HORIZONTAL]" チャートã?軸表示方å�?
112 * chartBackColor = "WHITE" 背景色
113 * plotBackColor = "LIGHT_GRAY" 描画領域色
114 * rotationLabel = "3" 横軸ラベルの傾ã�?
115 * useVerticalLabels = "false" 横軸ラベルの向き(true:縦/false:横)
116 * domainMarker = "KING" 横軸のマã?カーライン(縦æ£?
117 * useMarkerLabel = "[true/false]" マã?カーラインのæ–?—有無
118 * useDomainLabel = "[true/false]" 横軸ラベルの表示有無
119 * categorySkip = "3" 横軸ラベルをスキãƒ??する間隔
120 * categoryCutNo = "6" 横軸ラベルのæ–?—位置æŒ?®šã?キーブレイク
121 * categoryAnchor = "[START|MIDDLE|END]" 横軸のグリãƒ?ƒ‰(垂直ç·?の書きå?し位置
122 * useDomainLine = "[false/true]" 横軸のグリãƒ?ƒ‰表示有無(垂直ç·?
123 * domainLineColor = "LIGHT_GRAY" 横軸のグリãƒ?ƒ‰線ã?色
124 * useRangeLine = "[true/false]" 縦軸のグリãƒ?ƒ‰表示有無(水平ç·?
125 * rangeLineColor = "LIGHT_GRAY" 縦軸のグリãƒ?ƒ‰線ã?色
126 * rangeSkip = "-5" 縦軸のグリãƒ?ƒ‰(水平ç·?をスキãƒ??する間隔
127 * useCache = "[false|true]" キャãƒ?‚·ュの有無
128 * masterKey = "{@XXXX}" キャãƒ?‚·ュ用マスタキー
129 * seriesPikup = "2" ピックアãƒ??するシリーズNo
130 * imageMapUrl = "link.jsp,BLOCK" クリãƒ?‚«ブル・マップ用URL
131 * imageMapTarget = "CONTENTS" クリãƒ?‚«ブル・マップ用TARGET
132 * categoryMargin = "[0.0??.0]" カãƒ?‚´リマã?ジン(0.0??.0)
133 * lowerMargin = "[0.0??.0]" 下方マã?ジン(0.0??.0)
134 * upperMargin = "[0.0??.0]" 上方マã?ジン(0.0??.0)
135 * >
136 * <og:chartDataset
137 * chartType = "{@chartType}"
138 * valueLabel = "{@valueLabel}"
139 * lowerBound = "{@lowerBound}"
140 * upperBound = "{@upperBound}"
141 * markValues = "{@markValues}"
142 * markColors = "{@markColors}"
143 * useGradient = "{@useGradient}"
144 * shapesVisible = "{@shapesVisible}"
145 * useDottedLine = "{@useDottedLine}"
146 * seriesColors = "{@seriesColors}"
147 * valueLabelsVisible = "[true|false]"
148 * valueMarksVisible = "[true|false]"
149 * >
150 * {@SQL}
151 * </og:chartDataset>
152 * </og:chartCreate>
153 *
154 * è¤?•°のグラフを重ã?合わせる場合ã?、chartDataset タグã‚?chartCreate のBODY部に
155 * è¤?•°記述しますã?
156 * <og:chartCreate
157 * title = "{@title}"
158 * domainLabel = "{@domainLabel}"
159 * width = "{@width}"
160 * height = "{@height}" >
161 * <og:chartDataset
162 * chartType = "{@chartType1}"
163 * valueLabel = "{@valueLabel1}"
164 * lowerBound = "{@lowerBound1}"
165 * upperBound = "{@upperBound1}"
166 * markValues = "{@markValues1}"
167 * markColors = "{@markColors1}"
168 * >
169 * {@SQL1}
170 * </og:chartDataset>
171 * <og:chartDataset
172 * chartType = "{@chartType2}"
173 * valueLabel = "{@valueLabel2}"
174 * lowerBound = "{@lowerBound2}"
175 * upperBound = "{@upperBound2}"
176 * markValues = "{@markValues2}"
177 * markColors = "{@markColors2}"
178 * >
179 * {@SQL2}
180 * </og:chartDataset>
181 * </og:chartCreate>
182 *
183 * rectangleEdge属æ? は、å?例ã?表示ç®?‰€を示すã?RectangleEdge クラスの値を設定しますã?
184 * [rectangleEdge属æ?]
185 * TOP 上å?
186 * BOTTOM 下å?
187 * RIGHT 右側
188 * LEFT 左側
189 *
190 * plotOrientation属æ? は、チャートã?軸表示方向を設定しますã?
191 * [renderer属æ?]
192 * VERTICAL 縦方å�?
193 * HORIZONTAL 横方å�?
194 *
195 * @og.group 画面表示
196 *
197 * @version 0.9.0 2007/06/19
198 * @author Nakamura
199 * @since JDK1.4,
200 */
201 public class ChartCreateTag extends CommonTagSupport {
202 //* こã?プログラãƒ??VERSIONæ–?—å?を設定しますã? {@value} */
203 private static final String VERSION = "5.6.4.3 (2013/05/24)" ;
204
205 private static final long serialVersionUID = 564320130524L ; // 5.6.4.3 (2013/05/24)
206
207 private static final String FILE_URL = HybsSystem.sys( "CHART_TEMP_DIR" );
208
209 private List<ChartDataset> chartDataset = null;
210
211 private static final String CHART_CACHE_KEY = HybsSystem.JF_CHART_CACHE_KEY;
212
213 private String title = null;
214 private int width = 200;
215 private int height = 200;
216 private String domainLabel = null;
217 private boolean showLegend = true;
218 private String rectangleEdge = "BOTTOM";
219 private String plotOrientation = "VERTICAL";
220 private String chartBackColor = null; // 背景色の設å®?
221 private String plotBackColor = null; // 描画領域の設å®?
222 private int rotationLabel = 3; // 横軸ラベルの傾ã�?1:180度 ã€?:90度 ã€?:60度 ã€?:45度 ã€?:30度 ?¥?¥?¥ )
223 private boolean useVerticalLabels = false; // 5.6.4.3 (2013/05/24) 横軸ラベルの表示向き(横書ã�?false/縦書ã�?true)
224 private String domainMarker = null; // 横軸のマã?カーライン
225 private boolean useDomainLabel = true; // 横軸ラベルの表示有無
226 private boolean useMarkerLabel = true; // マã?カーライン時ã?æ–?—有無
227 private boolean useCache = false; // JFreeChart オブジェクトをキャãƒ?‚·ュするかどã�?�‹
228 private int seriesPikup = -1; // ピックアãƒ??するシリーズ番号
229 private String masterKey = null; // キャãƒ?‚·ュ用マスタキー
230 private transient Map<String,ChartCache> map = null; // キャãƒ?‚·ュ用マッãƒ?
231 private transient ChartCache cache = null; // キャãƒ?‚·ュ
232 private String imgTag = null; // キャãƒ?‚·ュ用画像ファイル
233 private String imageMapUrl = null; // クリãƒ?‚«ブル・マップ用URL
234 private String imageMapTarget = null; // クリãƒ?‚«ブル・マップ用TARGET
235 // 3.5.4.7 (2004/02/06) 実行時間測定用のDIV要ç´?‚’出力しますã?
236 private long dyStart = 0;
237
238 // 4.0.2.0 (2007/12/20)
239 private String categoryMargin = null; // カãƒ?‚´リマã?ジン(0.0??.0)
240 private String lowerMargin = null; // 下方マã?ジン(0.0??.0)
241 private String upperMargin = null; // 上方マã?ジン(0.0??.0)
242 // private String[] shapeColors = null; // 4.0.3.0 (2008/01/07) ãƒ??タ毎にShapeをå?り替える時ã?色æŒ?®?
243
244 private boolean useDomainLine = false; // 4.0.3.0 (2008/01/07) 横軸のグリãƒ?ƒ‰表示有無(垂直ç·?
245 private String domainLineColor = null; // 4.0.3.0 (2008/01/07) 横軸のグリãƒ?ƒ‰線ã?色
246 private boolean useRangeLine = true; // 4.0.3.0 (2008/01/07) 縦軸のグリãƒ?ƒ‰表示有無(水平ç·?
247 private String rangeLineColor = null; // 4.0.3.0 (2008/01/07) 縦軸のグリãƒ?ƒ‰線ã?色
248 private int categorySkip = 1; // 4.0.3.0 (2008/01/07) 横軸ラベルをスキãƒ??する間隔
249 private int categoryCutNo = -1; // 4.1.1.0 (2008/02/04) 横軸ラベルのæ–?—位置æŒ?®šã?キーブレイク
250 private String categoryAnchor = null; // 4.1.1.0 (2008/02/14) 横軸のグリãƒ?ƒ‰(垂直ç·?の書きå?し位置(START,MIDDLE,END)
251 // private double lineOffset = 0.0; // 4.1.1.0 (2008/02/04) DomainLineの書きå?し位置
252 private int rangeSkip = 1; // 4.1.1.0 (2008/02/04) 縦軸のグリãƒ?ƒ‰をスキãƒ??する間隔
253 private boolean useToolTip = false; // 4.3.1.0 (2008/08/09) ãƒ??ルチップスを利用するã�?
254
255 private String dateAxisFormat = "MM/dd"; // 5.6.1.0 (2013/02/01) Time,XYTime Polt関係ã?時間軸を表すå?合ã?フォーマッãƒ?
256
257 /**
258 * Taglibの開始タグが見つかったときに処ç�?�™ã‚?doStartTag() ã‚?オーバã?ライドしますã?
259 *
260 * @return 後続å?ç�??æŒ?¤º
261 */
262 @SuppressWarnings(value={"unchecked"})
263 @Override
264 public int doStartTag() {
265 dyStart = System.currentTimeMillis();
266
267 if( useCache ) {
268 // キャãƒ?‚·ュから、取りå?すã?
269 map = (Map<String,ChartCache>)getSessionAttribute( CHART_CACHE_KEY );
270 if( map != null ) {
271 cache = map.get( masterKey );
272 if( cache != null && cache.isAvailable() ) { // キャãƒ?‚·ュ有効
273 String subKey = String.valueOf( seriesPikup );
274 // キャãƒ?‚·ュから、イメージを取りå?すã?存在しなければ、null
275 imgTag = cache.getFileAddress( subKey );
276 return(SKIP_BODY); // キャãƒ?‚·ュ使用
277 }
278 }
279 }
280
281 return EVAL_BODY_BUFFERED;
282 }
283
284 /**
285 * Taglibの終äº?‚¿グが見つかったときに処ç�?�™ã‚?doEndTag() ã‚?オーバã?ライドしますã?
286 *
287 * @og.rev 5.2.1.0 (2010/10/01) debugPrint() メソãƒ?ƒ‰の処ç�?�¡件見直ã�?
288 *
289 * @return 後続å?ç�??æŒ?¤º
290 */
291 @Override
292 public int doEndTag() {
293 // if( isDebug() ) { debugPrint(); }
294 debugPrint(); // 5.2.1.0 (2010/10/01) debugPrint() メソãƒ?ƒ‰自体に、isDebug() がçµ?�¿込まれてã�?‚‹ã€?
295
296 long queryEnd = System.currentTimeMillis();
297 jspPrint( "<div id=\"queryTime\" value=\"" + (queryEnd-dyStart) + "\"></div>" ); // 3.5.6.3 (2004/07/12)
298
299 // 画像ファイルのキャãƒ?‚·ュがあれã?、それを返すã€?
300 if( imgTag != null ) {
301 jspPrint( imgTag );
302 }
303 else {
304 JFreeChart chart ;
305 if( cache != null ) {
306 // キャãƒ?‚·ュがあれã?、チャートを取り出すã?
307 chart = cache.getJFreeChart() ;
308 // チャートã?、変更(modifying)のみ行うã€?
309 chart = ChartCreate.modifying( chart,seriesPikup );
310 }
311 else {
312 // チャートがなã�??またã?、無効になってã�?‚‹場合ã?、新規作æ?するã€?
313 ChartCreate chartCreate = create();
314 chart = chartCreate.getChart();
315 }
316
317 File file = getTempFile( FILE_URL );
318 try {
319 // クリãƒ?‚«ブル・マッãƒ?
320 String fname = file.getName();
321 String filename = getContextPath() + "/" + FILE_URL + fname;
322 String keyword = fname.substring( 0, fname.length() - 4 ); // ".png" åˆ?‚’削除
323 ToolTipTagFragmentGenerator toolTipGen = null;
324 URLTagFragmentGenerator urlGen = null;
325 // 4.3.1.0 (2008/08/09) ãƒ??ルチップスのマップ情報取å¾?
326 if( useToolTip ) {
327 toolTipGen = new StandardToolTipTagFragmentGenerator();
328 }
329 if( imageMapUrl != null ) {
330 urlGen = new HybsURLTagFragmentGenerator( imageMapTarget );
331 }
332 if( ( imageMapUrl != null ) || ( useToolTip ) ) {
333 ChartRenderingInfo objCri = new ChartRenderingInfo( new StandardEntityCollection() );
334 ChartUtilities.saveChartAsPNG( file, chart, width, height, objCri );
335 imgTag = ImageMapUtilities.getImageMap( keyword, objCri, toolTipGen, urlGen ) + makeTag2( filename, keyword );
336 }
337 else {
338 ChartUtilities.saveChartAsPNG( file, chart, width, height );
339 imgTag = makeTag2( filename, null );
340 }
341 }
342 catch(IOException ex) {
343 String errMsg = "ファイル I/O が実行できませんでしたã€?
344 + HybsSystem.CR + file + HybsSystem.CR
345 + ex.getMessage();
346 throw new HybsSystemException( errMsg,ex );
347 }
348
349 jspPrint( imgTag );
350
351 // キャãƒ?‚·ュ時にセーブするã?
352 if( useCache ) {
353 if( cache == null ) {
354 cache = new ChartCache( masterKey );
355 cache.setJFreeChart( chart );
356 }
357 String subKey = String.valueOf( seriesPikup );
358 cache.putFileAddress( subKey,imgTag );
359 if( map == null ) {
360 map = new HashMap<String,ChartCache>();
361 }
362 map.put( masterKey,cache );
363 setSessionAttribute( CHART_CACHE_KEY,map );
364 }
365 else {
366 // map = (Map<String,ChartCache>)getSessionAttribute( CHART_CACHE_KEY );
367 // if( map != null ) { map.clear() ; }
368 removeSessionAttribute( CHART_CACHE_KEY );
369 }
370 }
371
372 // 3.5.4.7 (2004/02/06)
373 long dyEnd = System.currentTimeMillis();
374 jspPrint( "<div id=\"viewTime\" value=\"" + (dyEnd-dyStart) + "\"></div>" ); // 3.5.6.3 (2004/07/12)
375 return EVAL_PAGE;
376 }
377
378 /**
379 * タグリブオブジェクトをリリースしますã?
380 * キャãƒ?‚·ュされて再利用されるã?で、フィールドã?初期設定を行いますã?
381 *
382 * @og.rev 4.0.1.0 (2007/12/13) categoryMargin、lowerMargin、upperMargin 属æ?を追åŠ?
383 * @og.rev 4.1.1.0 (2008/02/04) categoryCutNo , categoryAnchor , rangeSkip 属æ?を追åŠ?
384 * @og.rev 5.6.1.0 (2013/02/01) dateAxisFormat 属æ?を追åŠ?
385 * @og.rev 5.6.4.3 (2013/05/24) useVerticalLabels 属æ?を追åŠ?
386 */
387 @Override
388 protected void release2() {
389 super.release2();
390 chartDataset = null;
391 title = null;
392 width = 200;
393 height = 200;
394 domainLabel = null;
395 showLegend = true;
396 rectangleEdge = "BOTTOM";
397 plotOrientation = "VERTICAL";
398 chartBackColor = null; // 背景色の設å®?
399 plotBackColor = null; // 描画領域の設å®?
400 rotationLabel = 3; // 横軸ラベルの傾ã�?1:180度 ã€?:90度 ã€?:60度 ã€?:45度 ã€?:30度 ?¥?¥?¥ )
401 useVerticalLabels = false; // 5.6.4.3 (2013/05/24) 横軸ラベルの表示向き(横書ã�?false/縦書ã�?true)
402 domainMarker = null; // 横軸のマã?カーライン
403 useDomainLabel = true; // 横軸ラベルの表示有無
404 useMarkerLabel = true; // マã?カーライン時ã?æ–?—有無
405 useCache = false; // キャãƒ?‚·ュするかどã�?�‹
406 seriesPikup = -1; // ピックアãƒ??するシリーズ番号
407 masterKey = null; // キャãƒ?‚·ュ用マスタキー
408 map = null; // キャãƒ?‚·ュ用マッãƒ?
409 cache = null; // キャãƒ?‚·ュ
410 imgTag = null; // キャãƒ?‚·ュ用画像ファイル
411 imageMapUrl = null; // クリãƒ?‚«ブル・マッãƒ?
412 imageMapTarget = null; // クリãƒ?‚«ブル・マップ用TARGET
413 categoryMargin = null; // 4.0.2.0 (2007/12/20) カãƒ?‚´リマã?ジン(0.0??.0)
414 lowerMargin = null; // 4.0.2.0 (2007/12/20) 下方マã?ジン(0.0??.0)
415 upperMargin = null; // 4.0.2.0 (2007/12/20) 上方マã?ジン(0.0??.0)
416 // shapeColors = null; // 4.0.3.0 (2008/01/07) ãƒ??タ毎にShapeをå?り替える時ã?色æŒ?®?
417 useDomainLine = false; // 4.0.3.0 (2008/01/07) 横軸のグリãƒ?ƒ‰表示有無(垂直ç·?
418 domainLineColor = null; // 4.0.3.0 (2008/01/07) 横軸のグリãƒ?ƒ‰線ã?色
419 useRangeLine = true; // 4.0.3.0 (2008/01/07) 縦軸のグリãƒ?ƒ‰表示有無(水平ç·?
420 rangeLineColor = null; // 4.0.3.0 (2008/01/07) 縦軸のグリãƒ?ƒ‰線ã?色
421 categorySkip = 1; // 4.0.3.0 (2008/01/07) 横軸ラベルをスキãƒ??する間隔
422 categoryCutNo = -1; // 4.1.1.0 (2008/02/04) 横軸ラベルのæ–?—位置æŒ?®šã?キーブレイク
423 categoryAnchor = null; // 4.1.1.0 (2008/02/14) 横軸のグリãƒ?ƒ‰(垂直ç·?の書きå?し位置(START,MIDDLE,END)
424 // lineOffset = 0.0; // 4.1.1.0 (2008/02/04) DomainLineの書きå?し位置
425 rangeSkip = 1; // 4.1.1.0 (2008/02/04) 縦軸のグリãƒ?ƒ‰をスキãƒ??する間隔
426 dateAxisFormat = "MM/dd"; // 5.6.1.0 (2013/02/01) Time,XYTime Polt関係ã?時間軸を表すå?合ã?フォーマッãƒ?
427 }
428
429 /**
430 * チャートを表示するためのタグを作æ?しますã?
431 *
432 * @param filename 画像ファイル
433 * @param keyword クリãƒ?‚«ブル・マップã?対応づける為のキーワーãƒ?
434 *
435 * @return タグæ–?—å?
436 */
437 private String makeTag2( final String filename,final String keyword ) {
438 StringBuilder rtn = new StringBuilder( HybsSystem.BUFFER_MIDDLE );
439
440 rtn.append( "<img" );
441 if( keyword != null ) {
442 rtn.append( " usemap=\"#").append( keyword ).append( "\"");
443 }
444 rtn.append( " width=\"" ).append( width ).append( "px\"");
445 rtn.append( " height=\"" ).append( height ).append( "px\"");
446 rtn.append( " src=\"" ).append( filename ).append( "\" /> ");
447
448 return rtn.toString();
449 }
450
451 /**
452 * ChartCreate のオブジェクトを生æ?しますã?
453 *
454 * @og.rev 4.1.1.0 (2008/02/04) categoryCutNo , categoryAnchor 属æ?を追åŠ?
455 * @og.rev 5.6.1.0 (2013/02/01) dateAxisFormat 属æ?を追åŠ?
456 * @og.rev 5.6.1.0 (2013/02/01) useVerticalLabels 属æ?を追åŠ?
457 *
458 * @return ChartCreateオブジェクãƒ?
459 */
460 private ChartCreate create() {
461 ChartCreate tempCreate = new ChartCreate();
462
463 tempCreate.setTitle( title );
464 tempCreate.setDomainLabel( domainLabel );
465 tempCreate.setShowLegend( showLegend );
466 tempCreate.setRectangleEdge( rectangleEdge );
467 tempCreate.setPlotOrientation( plotOrientation );
468 tempCreate.setChartBackColor( chartBackColor ); // 背景色の設å®?
469 tempCreate.setPlotBackColor( plotBackColor ); // 描画領域の設å®?
470 tempCreate.setRotationLabel( rotationLabel ); // 横軸ラベルの傾ã�?
471 tempCreate.setUseVerticalLabels( useVerticalLabels ); // 5.6.4.3 (2013/05/24)) ラベルの表示向き
472 tempCreate.setDomainMarker( domainMarker ); // ドメインマã?カー
473 tempCreate.setUseDomainLabel( useDomainLabel ); // 横軸ラベルの表示有無
474 tempCreate.setUseMarkerLabel( useMarkerLabel ); // マã?カーの設定å?表示
475 tempCreate.setSeriesPikup( seriesPikup ); // ピックアãƒ??するシリーズ番号
476 tempCreate.setImageMapUrl( imageMapUrl ); // クリãƒ?‚«ブル・マップ用URL
477 tempCreate.setCategoryMargin( categoryMargin ); // 4.0.2.0 (2007/12/20) カãƒ?‚´リマã?ジン(0.0??.0)
478 tempCreate.setLowerMargin( lowerMargin ); // 4.0.2.0 (2007/12/20) 下方マã?ジン(0.0??.0)
479 tempCreate.setUpperMargin( upperMargin ); // 4.0.2.0 (2007/12/20) 上方マã?ジン(0.0??.0)
480 // tempCreate.setShapeColors( shapeColors ); // 4.0.2.0 (2007/12/20) 上方マã?ジン(0.0??.0)
481 tempCreate.setUseDomainLine( useDomainLine ); // 4.0.3.0 (2008/01/07) 横軸のグリãƒ?ƒ‰表示有無(垂直ç·?
482 tempCreate.setDomainLineColor( domainLineColor ); // 4.0.3.0 (2008/01/07) 横軸のグリãƒ?ƒ‰線ã?色
483 tempCreate.setUseRangeLine( useRangeLine ); // 4.0.3.0 (2008/01/07) 縦軸のグリãƒ?ƒ‰表示有無(水平ç·?
484 tempCreate.setRangeLineColor( rangeLineColor ); // 4.0.3.0 (2008/01/07) 縦軸のグリãƒ?ƒ‰線ã?色
485 tempCreate.setCategorySkip( categorySkip ); // 4.0.3.0 (2008/01/07) 横軸ラベルをスキãƒ??する間隔
486 tempCreate.setCategoryCutNo( categoryCutNo ); // 4.1.1.0 (2008/02/04) 横軸ラベルのæ–?—位置æŒ?®šã?キーブレイク
487 tempCreate.setCategoryAnchor( categoryAnchor ); // 4.1.1.0 (2008/02/04) 横軸ラベルのæ–?—位置æŒ?®šã?キーブレイク
488 // tempCreate.setDomainLineOffset( lineOffset ); // 4.1.1.0 (2008/02/14) 横軸のグリãƒ?ƒ‰(垂直ç·?の書きå?し位置(START,MIDDLE,END)
489 tempCreate.setRangeSkip( rangeSkip ); // 4.1.1.0 (2008/02/04) 縦軸のグリãƒ?ƒ‰ç·?水平ç·?をスキãƒ??する間隔
490 tempCreate.setUseToolTip( useToolTip ); // 4.3.1.0 (2008/08/09) ãƒ??ルチップスの利用
491 tempCreate.setDateAxisFormat( dateAxisFormat ); // 5.6.1.0 (2013/02/01) Time,XYTime Polt関係ã?時間軸を表すå?合ã?フォーマット指å®?
492
493 if( isDebug() ) { tempCreate.setDebug( true ); } // 4.0.2.0 (2007/12/20)
494
495 tempCreate.setDatasetList( chartDataset );
496
497 return tempCreate ;
498 }
499
500 /**
501 * ãƒ?ƒ³ポラリFile を取得しますã?
502 *
503 * ここでは、ä¸?ˆ¬çš?�ªファイル出力をè€??した ãƒ?ƒ³ポラリFile を作æ?しますã?
504 *
505 * @param fileURL ファイルを作æ?するãƒ?‚£レクトリ
506 *
507 * @return ãƒ?ƒ³ポラリFile
508 */
509 private File getTempFile( final String fileURL ) {
510 final File file ;
511
512 String directory = HybsSystem.url2dir( fileURL );
513 File dir = new File( directory );
514 if( ! dir.exists() && ! dir.mkdirs() ) {
515 String errMsg = "ãƒ?‚£レクトリの作æ?に失敗しましたã€?" + directory + "]";
516 throw new HybsSystemException( errMsg );
517 }
518
519 try {
520 file = File.createTempFile( "JFree",".png",dir );
521 file.deleteOnExit();
522 }
523 catch( IOException ex ) {
524 String errMsg = "ファイル名がオープン出来ませんでしたã€?
525 + HybsSystem.CR
526 + "Url:" + fileURL ;
527 throw new HybsSystemException( errMsg,ex );
528 }
529
530 return file ;
531 }
532
533 /**
534 * 【TAG】コマンド[NEW/RENEW]をセãƒ?ƒˆしまã�?初期値:NEW)ã€?
535 *
536 * @og.tag
537 * コマンドã?,HTMLから(get/post)æŒ?®šされますã?で,CMD_xxx で設定される
538 * フィールド定数値のã�?�¥れかをã?æŒ?®šできますã?
539 * command がã?NEW またã?、RENEW の場合ã?み、新規にオブジェクトã?構築を行いますã?
540 *
541 * @param cmd コマンãƒ?public static final 宣è¨?�•れてã�?‚‹æ–?—å?)
542 * @see <a href="../../../../constant-values.html#org.opengion.hayabusa.taglib.ChartCreateTag.CMD_NEW">コマンド定数</a>
543 */
544 // public void setCommand( String cmd ) {
545 // String cmd2 = getRequestParameter( cmd );
546 // if( cmd2 != null && cmd2.length() != 0 ) { command = cmd2.toUpperCase(Locale.JAPAN); }
547 // }
548
549 /**
550 * 【TAG】チャートã?タイトルをセãƒ?ƒˆしますã?
551 *
552 * @og.tag チャートã?タイトルをセãƒ?ƒˆしますã?
553 *
554 * @param ttl タイトル
555 */
556 public void setTitle( final String ttl ) {
557 title = nval( getRequestParameter( ttl ),title );
558 }
559
560 /**
561 * 【TAG】チャートã?横å¹?‚’セãƒ?ƒˆしまã�?初期値:200)ã€?
562 *
563 * @og.tag
564 * タイトルã‚??例も含んだ大きさですã?ãƒ??タ領域は自動計算されますã?
565 *
566 * @og.rev 4.0.1.0 (2007/12/13) 引数に "px" を使用できるようにするã€?
567 *
568 * @param wd 横å¹?
569 */
570 public void setWidth( final String wd ) {
571 // 引数にã€?px" が使用されてã�?�Ÿ場合ã?、それを取り除くã?
572 if( wd != null && wd.length() >= 3 && wd.endsWith( "px" ) ) {
573 width = Integer.valueOf( wd.substring( 0,wd.length()-2 ) );
574 }
575 else {
576 width = nval( getRequestParameter( wd ),width );
577 }
578 }
579
580 /**
581 * 【TAG】チャートã?縦å¹?‚’セãƒ?ƒˆしまã�?初期値:200)ã€?
582 *
583 * @og.tag
584 * タイトルã‚??例も含んだ大きさですã?ãƒ??タ領域は自動計算されますã?
585 *
586 * @og.rev 4.0.1.0 (2007/12/13) 引数に "px" を使用できるようにするã€?
587 *
588 * @param ht 縦å¹?
589 */
590 public void setHeight( final String ht ) {
591 // 引数にã€?px" が使用されてã�?�Ÿ場合ã?、それを取り除くã?
592 if( ht != null && ht.length() >= 3 && ht.endsWith( "px" ) ) {
593 height = Integer.valueOf( ht.substring( 0,ht.length()-2 ) );
594 }
595 else {
596 height = nval( getRequestParameter( ht ),height );
597 }
598 }
599
600 /**
601 * 【TAG】チャートã?ドメインラベルを指定しますã?
602 *
603 * @og.tag
604 * チャートã?ドメインラベルを指定しますã?
605 *
606 * @param dmLbl チャートã?ドメインラベル
607 */
608 public void setDomainLabel( final String dmLbl ) {
609 domainLabel = nval( getRequestParameter( dmLbl ),domainLabel );
610 }
611
612 /**
613 * 【TAG】チャートã?凡例ã?表示可否[true/false]をセãƒ?ƒˆしまã�?初期値:true[表示する])ã€?
614 *
615 * @og.tag
616 * 初期値は、表示する(true) ですã?
617 *
618 * @param swLegend 凡例ã?表示可否 [true:表示する/それ以å¤?しない]
619 */
620 public void setShowLegend( final String swLegend ) {
621 showLegend = nval( getRequestParameter( swLegend ),showLegend );
622 }
623
624 /**
625 * 【TAG】チャートã?表示ç®?‰€をã?[TOP/BOTTOM/RIGHT/LEFT]でæŒ?®šしまã�?初期値:BOTTOM)ã€?
626 *
627 * @og.tag
628 * 表示ç®?‰€は、org.jfree.ui.RectangleEdge クラスの設定å?を使用しますã?
629 * æŒ?®šできるのは、TOP、BOTTOM、RIGHT、LEFT で、各æ–?—ã?頭ä¸?–‡字で
630 * 判定してますã?つまりã?T,B,R,L で、判定を行い、それ以外ã?エラーになりますã?
631 * 初期値は、BOTTOM ですã?
632 *
633 * @param rectEdge 凡例表示方å�???(TOP、BOTTOM、RIGHT、LEFT)
634 */
635 public void setRectangleEdge( final String rectEdge ) {
636 rectangleEdge = nval( getRequestParameter( rectEdge ),rectangleEdge );
637 }
638
639 /**
640 * 【TAG】チャートã?プロãƒ?ƒˆ(Plot)表示方向を、[VERTICAL(or V),HORIZONTAL(or H)]でæŒ?®šしまã�?初期値:VERTICAL)ã€?
641 *
642 * @og.tag
643 * 軸表示方向ã?、org.jfree.chart.plot.PlotOrientation クラスの設定å?を使用しますã?
644 * æŒ?®šできるのは、VERTICAL、HORIZONTALで、各æ–?—ã?頭ä¸?–‡字で
645 * 判定してますã?つまりã?V,H で、判定を行い、それ以外ã?エラーになりますã?
646 * 初期値は、VERTICAL ですã?
647 *
648 * @param orientation プロãƒ?ƒˆ表示方å�???VERTICAL(or V) , HORIZONTAL(or H)
649 */
650 public void setPlotOrientation( final String orientation ) {
651 plotOrientation = nval( getRequestParameter( orientation ),plotOrientation );
652 }
653
654 /**
655 * 【TAG】チャートã?背景色を指定しますã?
656 *
657 * @og.tag
658 * æŒ?®š文字å?は、java.awt.Color クラスのstatic フィールド名でæŒ?®šしますã?
659 * BLACK , BLUE , CYAN , DARK_GRAY , GRAY , GREEN , LIGHT_GRAY ,
660 * MAGENTA , ORANGE , PINK , RED , WHITE , YELLOW , (PURPLE) が指定できますã?
661 * またã?#XXXXXX形式ã?16bitRGB表è¨?でも指定可能ですã?
662 *
663 * @param chBackClr チャートã?背景色
664 * @see java.awt.Color#BLACK
665 */
666 public void setChartBackColor( final String chBackClr ) {
667 chartBackColor = nval( getRequestParameter( chBackClr ),chartBackColor );
668 }
669
670 /**
671 * 【TAG】チャートã?描画領域の色を指定しますã?
672 *
673 * @og.tag
674 * æŒ?®š文字å?は、java.awt.Color クラスのstatic フィールド名でæŒ?®šしますã?
675 * BLACK , BLUE , CYAN , DARK_GRAY , GRAY , GREEN , LIGHT_GRAY ,
676 * MAGENTA , ORANGE , PINK , RED , WHITE , YELLOW , (PURPLE) が指定できますã?
677 * またã?#XXXXXX形式ã?16bitRGB表è¨?でも指定可能ですã?
678 *
679 * @param plBackClr チャートã?描画領域色
680 * @see java.awt.Color#BLACK
681 */
682 public void setPlotBackColor( final String plBackClr ) {
683 plotBackColor = nval( getRequestParameter( plBackClr ),plotBackColor );
684 }
685
686 /**
687 * 【TAG】チャートã?カãƒ?‚´リーラベルの方向をæŒ?®šしまã�?3:60度)ã€?
688 *
689 * @og.tag
690 * 方向ã?、上方向に対してã€?PI / æŒ?¤º数) で求まるå?に設定しますã?
691 * こã?æŒ?¤º数に相当するå?を設定しますã?
692 * 1:180度 ã€?:90度 ã€?:60度 ã€?:45度 ã€?:30度 ?¥?¥?¥
693 * マイナスは、した方向に回転させますã?
694 * 0 を指定したå?合ã?、何も設定しませんã€?
695 * 初期値はã€?:60度ですã?
696 *
697 * @param rttLabel カãƒ?‚´リーラベルの方å�?
698 */
699 public void setRotationLabel( final String rttLabel ) {
700 rotationLabel = nval( getRequestParameter( rttLabel ),rotationLabel );
701 }
702
703 /**
704 * 【TAG】ラベルの表示向きを縦にするかどã�?�‹[false/true]を指定しまã�?初期値:false)ã€?
705 *
706 * @og.tag
707 * ChartCreate の rotationLabel は、角度を指定できましたがã?NumberAxis,DateAxis ではã€?
708 * 縦にするかどã�?�‹のæŒ?®šしかできませんã€?
709 * ここでは、true を指定するとラベルは、縦書きになりますã?
710 * 初期値は、false(横書ã�?ですã?
711 *
712 * @og.rev 5.6.4.3 (2013/05/24)) 新規追åŠ?
713 *
714 * @param useVLavels ラベルの表示向き [false:横書ã�?true:縦書き]
715 */
716 public void setUseVerticalLabels( final String useVLavels ) {
717 useVerticalLabels = nval( getRequestParameter( useVLavels ),useVerticalLabels );
718 }
719
720 /**
721 * 【TAG】チャートã?横軸の値(ドメイン)に合è?する位置にマã?カーラインを設定しますã?
722 *
723 * @og.tag
724 * こã?属æ?には、ã?ーカーラインを設定するå?を記述しますã?
725 *
726 * @param marker ドメインのマã?カーライン
727 */
728 public void setDomainMarker( final String marker ) {
729 domainMarker = nval( getRequestParameter( marker ),domainMarker );
730 }
731
732 /**
733 * 【TAG】横軸ラベルのラベルを表示するかどã�?�‹[true/false]を指定しまã�?初期値:true)ã€?
734 *
735 * @og.tag
736 * ドメイン(横軸)がã?多数存在する場合ã?ドメインラベルが見えにくくなりますã?
737 * そã?ようなケースで、横軸のラベルそã?もã?を表示しなã�??合に、false ã‚?
738 * 設定しますã?
739 * 初期値は、表示する(true)ですã?
740 *
741 * @param flag 横軸ラベルの表示有無 [true:表示する/false:表示しない]
742 */
743 public void setUseDomainLabel( final String flag ) {
744 useDomainLabel = nval( getRequestParameter( flag ),useDomainLabel );
745 }
746
747 /**
748 * 【TAG】ã?ーカーラインに、その設定å?を表示するかどã�?�‹[true/false]を指定しまã�?初期値:true)ã€?
749 *
750 * @og.tag
751 * ドメイン(横軸)がã?多数存在する場合ã?ドメインラベルが見えなã�??合がありますã?
752 * そã?ようなケースで、見たã�??にマã?カーラインを設定し、その横に、ドメインラベル
753 * を表示する事で、ピãƒ?‚¯アãƒ??してã�?‚‹軸の値を容易に知ることが可能ですã?
754 * 初期値は、表示する(true)ですã?
755 *
756 * @param flag マã?カーラインの設定å?表示 true:表示する/false:表示しない]
757 */
758 public void setUseMarkerLabel( final String flag ) {
759 useMarkerLabel = nval( getRequestParameter( flag ),useMarkerLabel );
760 }
761
762 /**
763 * 【TAG】JFreeChart オブジェクトをキャãƒ?‚·ュするかどã�?�‹[true/false]を指定しまã�?初期値:false)ã€?
764 *
765 * @og.tag
766 * useCache="true" を設定すると、session に、HybsSystem.JF_CHART_CACHE_KEY
767 * キーで、キャãƒ?‚·ュされますã?
768 * そã?ときに、domainMarker 属æ?と、seriesPikup 属æ?ã�?�‘、å?設定可能になってã�?�¾すã?
769 *
770 * 初期値は、キャãƒ?‚·ュしなã�?false)ですã?
771 *
772 * @param flag JFreeChartをキャãƒ?‚·ュするかどã�?�‹ true:キャãƒ?‚·ュする/false:キャãƒ?‚·ュしない]
773 * @see #setDomainMarker( String )
774 * @see #setSeriesPikup( String )
775 */
776 public void setUseCache( final String flag ) {
777 useCache = nval( getRequestParameter( flag ),useCache );
778 }
779
780 /**
781 * 【TAG】è¤?•°シリーズのピックアãƒ??を行う場合ã?シリーズ番号を指定しますã?
782 *
783 * @og.tag
784 * è¤?•°シリーズ(検索時にè¤?•°é ?›®を同時に検索する場å�?では、チャート上に
785 * è¤?•°のグラフが表示されますが、その中のä¸?�¤をピãƒ?‚¯アãƒ??する場合にã€?
786 * シリーズ番号を指定しますã?
787 * シリーズ番号はã€? から始まる数字ですã?
788 * ここでは、ピãƒ?‚¯アãƒ??されたシリーズは、赤色で表示されますã?
789 * それ以外ã?、グレー色での表示になりますã?
790 * seriesPikup を使用すると、chartDataset タグの useValueVisible 属æ?ã�?
791 * 影響を受けますã?こã?属æ?は、データの値(itemText)を表示しますがã€?
792 * seriesPikup が指定された場合ã?、そのシリーズのみにラベル表示しますã?
793 *
794 * @param pikup シリーズ番号
795 */
796 public void setSeriesPikup( final String pikup ) {
797 seriesPikup = nval( getRequestParameter( pikup ),seriesPikup );
798 }
799
800 /**
801 * 【TAG】キャãƒ?‚·ュ用マスタキーを指定しますã?
802 *
803 * @og.tag
804 * useCache="true" に設定したå?合ã?キャãƒ?‚·ュを使用できるか確認しますã?
805 * こã?場合ã?seriesPikup 違いの場合ã?、JFreeChart オブジェクトそのもã?ã‚?
806 * キャãƒ?‚·ュしておけば、データベã?スアクセスなしで、グラフを再描画
807 * させることが可能ですã?
808 * こã?、同ä¸?JFreeChart を指定するためã?キーをã?ここで設定しますã?
809 * こã?キーの個数ã�?�‘、JFreeChart がキャãƒ?‚·ュされますã?
810 * なおã?キャãƒ?‚·ュ保持時間はã€?¼•å?固定ですã?
811 *
812 * @param mkey キャãƒ?‚·ュ用マスタキー
813 */
814 public void setMasterKey( final String mkey ) {
815 masterKey = nval( getRequestParameter( mkey ),masterKey );
816 }
817
818 /**
819 * 【TAG】クリãƒ?‚«ブル・マップ用URLを指定しますã?
820 *
821 * @og.tag
822 * 画像に、クリãƒ?‚«ブル・マップを作æ?する場合ã?、URL を指定しますã?
823 * これは、画像上にエリアæŒ?®šでリンク引数を作æ?することが可能ですã?
824 * URL 自身はã€? 付きで固定å?の引数をé?結することが可能ですã?
825 * クリãƒ?‚¯したエリアのカãƒ?‚´リã‚?‚¤ンãƒ?ƒƒクスの値(引数)は、è?動的に
826 * 設定されますã?(æŒ?®šしなã�??合ã?チャートによって異なりまã�?
827 * <pre>
828 * ・Pie ?šcategory、pieIndex
829 * ・XY ?šseries、item
830 * ・Category ?šseries、category
831 * </pre>
832 * こã?引数の URL の名称を変更したã�??合ã?、URL に続けて、カンãƒ?,) でã€?
833 * 名称を記述してくださいã€?
834 * 例:link.jsp,BLOCK
835 *
836 * @param imap クリãƒ?‚«ブル・マップ用URL
837 * @see #setImageMapTarget( String )
838 */
839 public void setImageMapUrl( final String imap ) {
840 imageMapUrl = nval( getRequestParameter( imap ),imageMapUrl );
841 }
842
843 /**
844 * 【TAG】クリãƒ?‚«ブル・マップ用TARGETを指定しますã?
845 *
846 * @og.tag
847 * 画像に、クリãƒ?‚«ブル・マップを作æ?する場合ã?、TARGET を指定しますã?
848 * これは、画像上にエリアæŒ?®šでリンクを作æ?する場合ã?フレーãƒ?Œ‡定ですã?
849 *
850 * @param target クリãƒ?‚«ブル・マップ用TARGET
851 * @see #setImageMapUrl( String )
852 */
853 public void setImageMapTarget( final String target ) {
854 imageMapTarget = nval( getRequestParameter( target ),imageMapTarget );
855 }
856
857 /**
858 * 【TAG】カãƒ?‚´リマã?ジン(0.0??.0)を指定しますã?
859 *
860 * @og.tag
861 * カãƒ?‚´リ(グラフã?横軸に相å½?の表示間隔(マã?ジン)の比率を指定しますã?
862 * こã?比率はã€?¼?ではなくã?数å?double)での設定になりますã?
863 * 何もæŒ?®šしなã�??合ã?、デフォルトで自動調整されますã?
864 *
865 * @og.rev 4.0.2.0 (2007/12/20) 新規追åŠ?
866 *
867 * @param margin カãƒ?‚´リマã?ジン(0.0??.0)
868 */
869 public void setCategoryMargin( final String margin ) {
870 categoryMargin = nval( getRequestParameter( margin ),categoryMargin );
871 }
872
873 /**
874 * 【TAG】下方マã?ジン(0.0??.0)を指定しますã?
875 *
876 * @og.tag
877 * カãƒ?‚´リ(グラフã?横軸に相å½?の下方側(左側)のマã?ジンの比率を指定しますã?
878 * こã?比率はã€?¼?ではなくã?数å?double)での設定になりますã?
879 * 何もæŒ?®šしなã�??合ã?、デフォルトで自動調整されますã?
880 *
881 * @og.rev 4.0.2.0 (2007/12/20) 新規追åŠ?
882 *
883 * @param margin 下方マã?ジン(0.0??.0)
884 */
885 public void setLowerMargin( final String margin ) {
886 lowerMargin = nval( getRequestParameter( margin ),lowerMargin );
887 }
888
889 /**
890 * 【TAG】上方マã?ジン(0.0??.0)を指定しますã?
891 *
892 * @og.tag
893 * カãƒ?‚´リ(グラフã?横軸に相å½?の上方側(右側)のマã?ジンの比率を指定しますã?
894 * こã?比率はã€?¼?ではなくã?数å?double)での設定になりますã?
895 * 何もæŒ?®šしなã�??合ã?、デフォルトで自動調整されますã?
896 *
897 * @og.rev 4.0.2.0 (2007/12/20) 新規追åŠ?
898 *
899 * @param margin 上方マã?ジン(0.0??.0)
900 */
901 public void setUpperMargin( final String margin ) {
902 upperMargin = nval( getRequestParameter( margin ),upperMargin );
903 }
904
905 /**
906 * 【TAG】横軸のグリãƒ?ƒ‰表示有無(垂直ç·?を指定しまã�?初期値:false)ã€?
907 *
908 * @og.tag
909 * ドメイン(横軸)に対する、グリãƒ?ƒ‰ラインを表示するかどã�?�‹æŒ?®šしますã?
910 *
911 * 何もæŒ?®šしなã�??合ã?、表示しませんã€?false)
912 *
913 * @og.rev 4.0.3.0 (2008/01/07) 新規追åŠ?
914 *
915 * @param useLine 横軸のグリãƒ?ƒ‰表示有無(垂直ç·?
916 */
917 public void setUseDomainLine( final String useLine ) {
918 useDomainLine = nval( getRequestParameter( useLine ),useDomainLine );
919 }
920
921 /**
922 * 【TAG】横軸のグリãƒ?ƒ‰線ã?色を指定しますã?
923 *
924 * @og.tag
925 * ドメイン(横軸)に対する、グリãƒ?ƒ‰ラインの表示色を指定しますã?
926 * 何もæŒ?®šしなã�??合ã?、デフォルトで自動設定されますã?
927 *
928 * @og.rev 4.0.3.0 (2008/01/07) 新規追åŠ?
929 *
930 * @param color 横軸のグリãƒ?ƒ‰線ã?色
931 */
932 public void setDomainLineColor( final String color ) {
933 domainLineColor = nval( getRequestParameter( color ),domainLineColor );
934 }
935
936 /**
937 * 【TAG】横軸ラベルをスキãƒ??する間隔を指定しますã?
938 *
939 * @og.tag
940 * 横軸ラベル(カãƒ?‚´リラベル表示)する際に、スキãƒ??する間隔を指定しますã?
941 * "1" (初期値)ではã€?¼‘つづつ表示(つまりã?すべて表示する)しますã?
942 * "2" とするとã€?¼‘つおきにã€?3" とするとã€?¼’つおきに表示しますã?
943 * 初期値はã€?1" (すべて表示)ですã?
944 * なおã?先é?から表示を開始しますã?
945 *
946 * 注意:これとは別に、ラベル先é?に "_" を付けたå?合ã?、ラベルを表示しませんã€?
947 * またã?categoryCutNo が指定された場合ã?、categorySkip は使用されませんã€?
948 *
949 * @param step スキãƒ??する間隔
950 * @see #setCategoryCutNo( String )
951 */
952 public void setCategorySkip( final String step ) {
953 categorySkip = nval( getRequestParameter( step ),categorySkip );
954 }
955
956 /**
957 * 【TAG】横軸ラベルのæ–?—位置æŒ?®šã?キーブレイクを指定しますã?
958 *
959 * @og.tag
960 * 横軸ラベル(カãƒ?‚´リラベル表示)する際に、ラベルの先é?から、このæŒ?®š文字数ã�?�‘
961 * カãƒ?ƒˆして、表示しますã?
962 * そã?際ã?前回作æ?したカãƒ?ƒˆラベルと、同ä¸?ƒ©ベルの場合ã?、表示しませんã€?
963 * 例えば、データは、年月日で、年と月ã?み(先é??–文å?を指定するとã€?
964 * 日のãƒ??タは、ラベルが表示されませんã€?
965 * æŒ?®šされる数字ã?ã€?¼‘以上ã?整数としてくださいã€?
966 * 初期値は、すべて表示ですã?
967 *
968 * 注意:これとは別に、ラベル先é?に "_" を付けたå?合ã?、ラベルを表示しませんã€?
969 *
970 * @og.rev 4.1.1.0 (2008/02/04) 新規追åŠ?
971 *
972 * @param cutNo キーブレイク位置
973 * @see #setCategorySkip( String )
974 */
975 public void setCategoryCutNo( final String cutNo ) {
976 categoryCutNo = nval( getRequestParameter( cutNo ),categoryCutNo );
977 }
978
979 /**
980 * 【TAG】横軸のグリãƒ?ƒ‰(垂直ç·?の書きå?し位置(START,MIDDLE,END)を指定しますã?
981 *
982 * @og.tag
983 * 横軸のグリãƒ?ƒ‰(垂直ç·?をã?グラフã?どの位置に記述するかをæŒ?®šしますã?
984 * 具体的な値は、CategoryAnchor オブジェクトã?値になりますã?
985 * ここでは、文字å?で(START,MIDDLE,END)を指定しますã?(先é?ä¸?–‡字で判å®?
986 * 何もæŒ?®šしなã�??合ã?、デフォルãƒ?MIDDLE)ですã?
987 *
988 * @og.rev 4.1.1.0 (2008/02/14) 新規追åŠ?
989 *
990 * @param anchor 横軸のグリãƒ?ƒ‰(垂直ç·?の書きå?し位置(START,MIDDLE,END)
991 */
992 public void setCategoryAnchor( final String anchor ) {
993 categoryAnchor = nval( getRequestParameter( anchor ),categoryAnchor );
994
995 if( categoryAnchor != null && categoryAnchor.length() > 0 ) {
996 if( ! "START".equals( categoryAnchor ) &&
997 ! "MIDDLE".equals( categoryAnchor ) &&
998 ! "END".equals( categoryAnchor ) ) {
999 String errMsg = "æŒ?®šã?Anchorは適用できませんã€?" + anchor + "]"
1000 + HybsSystem.CR
1001 + "START,MIDDLE,END の中から、指定してくださいã€? ;
1002 throw new HybsSystemException( errMsg );
1003 }
1004 }
1005 }
1006
1007 /**
1008 * 【TAG】DomainLineの書きå?し位置Offsetを指定しますã?
1009 *
1010 * @og.tag
1011 * 横軸ライン(カãƒ?‚´リライン表示)する際に、ラインの描画位置をã?
1012 * 先é?から、このæŒ?®š数ã�?�‘ずらしますã?
1013 * プラスの場合ã?、右へ、ã?イナスの場合ã?、左へずらしますã?
1014 *
1015 * これにより、ライン(縦ç·?の位置をã?グラフã?中å¿?�‹らã?ずらす事が
1016 * 可能になりますã?
1017 *
1018 * @og.rev 4.1.1.0 (2008/02/04) 新規追åŠ?
1019 *
1020 * @param domainLineOffset DomainLineの書きå?し位置Offset
1021 */
1022 // public void setDomainLineOffset( final String domainLineOffset ) {
1023 // String offset = StringUtil.nval( getRequestParameter( domainLineOffset ),null );
1024 // if( offset != null ) {
1025 // lineOffset = Double.parseDouble( offset );
1026 // }
1027 // }
1028
1029 /**
1030 * 【TAG】縦軸のグリãƒ?ƒ‰表示有無(水平ç·?を指定しまã�?初期値:true)ã€?
1031 *
1032 * @og.tag
1033 * レンジ(縦軸)に対する、グリãƒ?ƒ‰ラインを表示するかどã�?�‹æŒ?®šしますã?
1034 *
1035 * 何もæŒ?®šしなã�??合ã?、表示しませんã€?false)
1036 *
1037 * @og.rev 4.0.3.0 (2008/01/07) 新規追åŠ?
1038 *
1039 * @param useLine 横軸のグリãƒ?ƒ‰表示有無(垂直ç·?
1040 */
1041 public void setUseRangeLine( final String useLine ) {
1042 useRangeLine = nval( getRequestParameter( useLine ),useRangeLine );
1043 }
1044
1045 /**
1046 * 【TAG】縦軸のグリãƒ?ƒ‰線ã?色を指定しますã?
1047 *
1048 * @og.tag
1049 * レンジ(縦軸)に対する、グリãƒ?ƒ‰ラインの表示色を指定しますã?
1050 * 何もæŒ?®šしなã�??合ã?、デフォルトで自動設定されますã?
1051 *
1052 * @og.rev 4.0.3.0 (2008/01/07) 新規追åŠ?
1053 *
1054 * @param color 縦軸のグリãƒ?ƒ‰線ã?色
1055 */
1056 public void setRangeLineColor( final String color ) {
1057 rangeLineColor = nval( getRequestParameter( color ),rangeLineColor );
1058 }
1059
1060 /**
1061 * 【TAG】縦軸のグリãƒ?ƒ‰ç·?水平ç·?をスキãƒ??する間隔を指定しますã?
1062 *
1063 * @og.tag
1064 * 縦軸のグリãƒ?ƒ‰ç·?水平ç·?を表示する際に、スキãƒ??する間隔を指定しますã?
1065 * 通常は、ラベルと同じã�?�‘のグリãƒ?ƒ‰線が掛かれますが、ラベルよりã‚?
1066 * 少なã�?•°のグリãƒ?ƒ‰ç·?例えばã€?¼’つおき)をå?すå?合に、å?を設定しますã?
1067 * "1" (初期値)ではã€?¼‘つづつ表示(つまりã?すべて表示する)しますã?
1068 * "2" とするとã€?¼‘つおきにã€?3" とするとã€?¼’つおきに表示しますã?
1069 * 初期値はã€?1" (すべて表示)ですã?
1070 * なおã?先é?から表示を開始しますã?
1071 *
1072 * @og.rev 4.1.1.0 (2008/02/04) 新規追åŠ?
1073 *
1074 * @param rngSkip 縦軸のグリãƒ?ƒ‰ç·?水平ç·?をスキãƒ??する間隔
1075 */
1076 public void setRangeSkip( final String rngSkip ) {
1077 rangeSkip = nval( getRequestParameter( rngSkip ),rangeSkip );
1078 }
1079
1080 /**
1081 * 【TAG】ツールチップスの使用可否[true:利用する/false:利用しない]を指定しまã�?初期値:false)ã€?
1082 *
1083 * @og.tag
1084 * ラベルを利用する際に、ラベルと図面ã€?š£のラベル同士が重なることがありますã?
1085 * こã?場合ã?ãƒ??ルチップスの利用をお勧めしますã?
1086 * 初期値は'false'ですã?
1087 *
1088 * @og.rev 4.3.1.0 (2008/08/09) 新規追åŠ?
1089 *
1090 * @param toolTip ãƒ??ルチップス [true:利用/false:利用しない]
1091 */
1092 public void setUseToolTip( final String toolTip ) {
1093 useToolTip = nval( getRequestParameter( toolTip ), useToolTip );
1094 }
1095
1096 /**
1097 * 【TAG】Time,XYTime Polt関係ã?時間軸を表すå?合ã?フォーマットをæŒ?®šしまã�?初期値:MM/dd)ã€?
1098 *
1099 * @og.tag
1100 * TimeSeries 関連のãƒ??タを扱ã�??合ã?横軸の日付フォーマットをæŒ?®šしますã?
1101 * 日付フォーマットã?、java.text.SimpleDateFormat で使われã‚?yyyy/MM/dd HH:mm:ss 表記ですã?
1102 *
1103 * 初期値はã€?MM/dd" ですã?
1104 *
1105 * @og.rev 5.6.1.0 (2013/02/01) 新規追åŠ?
1106 * @og.rev 5.6.1.0 (2013/02/01) 新規追åŠ?
1107 *
1108 * @param dtFormat Time,XYTime Polt関係ã?時間軸を表すå?合ã?フォーマッãƒ?
1109 */
1110 public void setDateAxisFormat( final String dtFormat ) {
1111 dateAxisFormat = nval( getRequestParameter( dtFormat ), dateAxisFormat );
1112 // if( dtFormat != null && dtFormat.length() > 0 ) {
1113 // dateAxisFormat = dtFormat;
1114 // }
1115 }
1116
1117 /**
1118 * BODY要ç´?�«記述した、chartDataset タグの属æ?設定クラスをListに追åŠ?�—ますã?
1119 *
1120 * BODY部に記述されたã?chartDataset タグの属æ?は、チャートã?ãƒ??タ取得Queryã‚??
1121 * チャートã?種類などのæƒ??を管ç�?�—てã�?�¾すã?
1122 * チャートã?種é¡?Category系)によっては、チャートを合æ?して表示させることが可能ですã?
1123 * それらã?è¤?•°のチャートã?æŒ?®šが、chartDataset タグ で行われますã?
1124 *
1125 * @param chDataset chartDatasetタグの属æ?設定クラス
1126 */
1127 protected void addChartDataset( final ChartDataset chDataset ) {
1128 if( chartDataset == null ) { chartDataset = new ArrayList<ChartDataset>(); }
1129 chartDataset.add( chDataset );
1130 }
1131
1132 /**
1133 * シリアライズ用のカスタãƒ?‚·リアライズ書き込みメソãƒ?ƒ‰
1134 *
1135 * @og.rev 4.0.0.0 (2007/11/29) 新規追åŠ?
1136 * @serialData ä¸?ƒ¨のオブジェクãƒ?Map<String,ChartCache>,ChartCache)は、シリアライズされませんã€?
1137 *
1138 * @param strm ObjectOutputStreamオブジェクãƒ?
1139 * @throws IOException シリアライズに関する入出力エラーが発生したå?å�?
1140 */
1141 private void writeObject( final ObjectOutputStream strm ) throws IOException {
1142 strm.defaultWriteObject();
1143 }
1144
1145 /**
1146 * シリアライズ用のカスタãƒ?‚·リアライズ読み込みメソãƒ?ƒ‰
1147 *
1148 * ここでは、transient 宣è¨?�•れたå†?ƒ¨変数のå†??初期化がå¿?¦�なフィールドã?み設定しますã?
1149 *
1150 * @og.rev 4.0.0.0 (2007/11/29) 新規追åŠ?
1151 * @serialData ä¸?ƒ¨のオブジェクãƒ?Map<String,ChartCache>,ChartCache)は、読み込まれませんã€?
1152 *
1153 * @param strm ObjectInputStreamオブジェクãƒ?
1154 * @see #release2()
1155 * @throws IOException シリアライズに関する入出力エラーが発生したå?å�?
1156 * @throws ClassNotFoundException クラスを見つけることができなかったå?å�?
1157 */
1158 private void readObject( final ObjectInputStream strm ) throws IOException , ClassNotFoundException {
1159 strm.defaultReadObject();
1160 }
1161
1162 /**
1163 * こã?オブジェクトã?æ–?—å?表現を返しますã?
1164 * 基本çš?�«ãƒ?ƒ�ãƒ?‚°目çš?�«使用しますã?
1165 *
1166 * @return こã?クラスのæ–?—å?表現
1167 */
1168 @Override
1169 public String toString() {
1170 StringBuilder rtn = new StringBuilder( HybsSystem.BUFFER_MIDDLE );
1171
1172 rtn.append( "[" ).append( this.getClass().getName() ).append( "]" ).append( HybsSystem.CR );
1173 rtn.append( "title [" ).append( title ).append( "]" ).append( HybsSystem.CR );
1174 rtn.append( "width [" ).append( width ).append( "]" ).append( HybsSystem.CR );
1175 rtn.append( "height [" ).append( height ).append( "]" ).append( HybsSystem.CR );
1176 rtn.append( "domainLabel [" ).append( domainLabel ).append( "]" ).append( HybsSystem.CR );
1177 rtn.append( "showLegend [" ).append( showLegend ).append( "]" ).append( HybsSystem.CR );
1178 rtn.append( "rectangleEdge [" ).append( rectangleEdge ).append( "]" ).append( HybsSystem.CR );
1179 rtn.append( "plotOrientation [" ).append( plotOrientation ).append( "]" ).append( HybsSystem.CR );
1180 rtn.append( "chartBackColor [" ).append( chartBackColor ).append( "]" ).append( HybsSystem.CR );
1181 rtn.append( "plotBackColor [" ).append( plotBackColor ).append( "]" ).append( HybsSystem.CR );
1182
1183 return rtn.toString();
1184 }
1185
1186 /**
1187 * JFreeChart ã‚?画像ファイルのアドレスをキャãƒ?‚·ュするクラスですã?
1188 * こã?キャãƒ?‚·ュは、JFreeChart 単位に保持されますã?
1189 * JFreeChart と、画像ファイルのキャãƒ?‚·ュを行いますã?
1190 * JFreeChart オブジェクトをキャãƒ?‚·ュしなおしたタイミングでã€?
1191 * 画像ファイルのキャãƒ?‚·ュは初期åŒ?クリア)されますã?
1192 * キャãƒ?‚·ュの有効期間は、シスãƒ?ƒ リソースの CHART_CACHE_TIME で定義しますã?
1193 */
1194 private static final class ChartCache {
1195 private static final int CACHE_TIME = HybsSystem.sysInt( "CHART_CACHE_TIME" );
1196 private static final long MAX_CACHE_TIME = CACHE_TIME * 1000L;
1197
1198 private final Map<String,String> fileAdrs = new HashMap<String,String>();
1199 private final String mkey ;
1200 private long createLimitTime = 0L;
1201 private JFreeChart chart = null ;
1202
1203 /**
1204 * コンストラクター
1205 * JFreeChart オブジェクトをキャãƒ?‚·ュするキーを指定しますã?
1206 * å†?ƒ¨çš?�«は、このキー(mkey)で、比è¼?‚„ hashCode が計算されてã�?�¾すã?
1207 *
1208 * @param mkey キャãƒ?‚·ュするキー
1209 */
1210 public ChartCache( final String mkey ) {
1211 this.mkey = mkey;
1212 }
1213
1214 /**
1215 * JFreeChart オブジェクトをキャãƒ?‚·ュしますã?
1216 * 画像ファイルのキャãƒ?‚·ュは初期åŒ?クリア)されますã?
1217 * こã?キャãƒ?‚·ュのタイミングで、キャãƒ?‚·ュ時間をå?期化しますã?
1218 *
1219 * @param chart JFreeChartオブジェクãƒ?
1220 */
1221 public void setJFreeChart( final JFreeChart chart ) {
1222 this.chart = chart;
1223 fileAdrs.clear();
1224 createLimitTime = System.currentTimeMillis() + MAX_CACHE_TIME;
1225 }
1226
1227 /**
1228 * JFreeChart オブジェクトを返しますã?
1229 * キャãƒ?‚·ュされてã�?‚Œば、そのキャãƒ?‚·ュをã?そうでなければ、null ã‚?
1230 * 返しますã?
1231 * キャãƒ?‚·ュの有効期間は、シスãƒ?ƒ リソースの CHART_CACHE_TIME で定義しますã?
1232 * オブジェクトã?作æ?時間がã?それをè¶?�ˆるå?合ã?、キャãƒ?‚·ュをå?期化しますã?
1233 *
1234 * @return JFreeChart JFreeChartオブジェクãƒ?
1235 */
1236 public JFreeChart getJFreeChart() {
1237 return chart;
1238 }
1239
1240 /**
1241 * 画像ファイルをキャãƒ?‚·ュしますã?
1242 * 画像ファイルのキャãƒ?‚·ュはサブキー単位に行われますã?
1243 * つまりã?こã?オブジェクトã?中に、è¤?•°の画像ファイルのアドレスã�?
1244 * キャãƒ?‚·ュされてã�?�¾すã?
1245 *
1246 * @param chart JFreeChartオブジェクãƒ?
1247 */
1248 public void putFileAddress( final String skey,final String adrs ) {
1249 fileAdrs.put( skey,adrs );
1250 }
1251
1252 /**
1253 * 画像ファイルのアドレスを返しますã?
1254 * キャãƒ?‚·ュされてã�?‚Œば、そのキャãƒ?‚·ュをã?そうでなければ、null ã‚?
1255 * 返しますã?
1256 * キャãƒ?‚·ュの有効期間は、シスãƒ?ƒ リソースの CHART_CACHE_TIME で定義しますã?
1257 * オブジェクトã?作æ?時間がã?それをè¶?�ˆるå?合ã?、キャãƒ?‚·ュをå?期化しますã?
1258 *
1259 * @return JFreeChart JFreeChartオブジェクãƒ?
1260 */
1261 public String getFileAddress( final String skey ) {
1262 return fileAdrs.get( skey ) ;
1263 }
1264
1265 /**
1266 * キャãƒ?‚·ュがã?有効かどã�?�‹を返しますã?(有効:true)
1267 * キャãƒ?‚·ュは、シスãƒ?ƒ リソースの CHART_CACHE_TIME (ç§?パラメータ
1268 * æŒ?®šされた時間が経過すると、無効と判断されますã?
1269 * 有効であれば、true を返しますã?
1270 *
1271 * @return 有効かどã�?�‹(有効:true/無効:false)
1272 */
1273 public boolean isAvailable() {
1274 return ( System.currentTimeMillis() < createLimitTime ) ;
1275 }
1276
1277 /**
1278 * こã?オブジェクトと他ã?オブジェクトが等しã�?�‹どã�?�‹を示しますã?
1279 * キャãƒ?‚·ュのキーが等しã�?�‹どã�?�‹で判断しますã?
1280 *
1281 * @param object 比è¼?¯¾象の参ç?オブジェクãƒ?
1282 * @return obj 引数にæŒ?®šされたオブジェクトとこã?オブジェクトが等しã�??合ã? true、そã�?�§なã�??合ã? false
1283 */
1284 public boolean equals( final Object object ) {
1285 if( object instanceof ChartCache ) {
1286 return this.mkey.equals( ((ChartCache)object).mkey );
1287 }
1288 return false ;
1289 }
1290
1291 /**
1292 * オブジェクトã?ハッシュコードå?を返しますã?
1293 * こã?メソãƒ?ƒ‰は、java.util.Hashtable によって提供されるような
1294 * ハッシュãƒ??ブルで使用するために用意されてã�?�¾すã?
1295 * equals( Object ) メソãƒ?ƒ‰をオーバã?ライトしたå?合ã?、hashCode() メソãƒ?ƒ‰ã‚?
1296 * å¿?�š 記述するå¿?¦�がありますã?
1297 * こã?実è£?�§は、mkey.hashCode() と同å?を返しますã?
1298 *
1299 * @return こã?オブジェクトã?ハッシュコードå?
1300 */
1301 public int hashCode() {
1302 return mkey.hashCode() ;
1303 }
1304 }
1305 }