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&lt;String,ChartCache&gt;,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&lt;String,ChartCache&gt;,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    }