001/*
002 * Copyright (c) 2009 The openGion Project.
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 *     http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
013 * either express or implied. See the License for the specific language
014 * governing permissions and limitations under the License.
015 */
016package org.opengion.hayabusa.taglib;
017
018import org.opengion.fukurou.db.ConnectionFactory;
019import org.opengion.fukurou.util.StringUtil;
020import org.opengion.hayabusa.common.HybsSystem;
021import org.opengion.hayabusa.common.HybsSystemException;
022import org.opengion.hayabusa.io.ChartDataset;
023import org.opengion.hayabusa.db.DBTableModel;
024import static org.opengion.fukurou.util.StringUtil.nval ;               // 6.1.0.0 (2014/12/26)
025
026import java.sql.SQLException;
027import java.sql.Connection;
028import java.io.ObjectInputStream;
029import java.io.IOException;
030
031/**
032 * BODY部に指定のSQLの検索結果をグラフ(円、棒、線)で表示するタグです。
033 *
034 * グラフ化には、JFreeChart (http://www.jfree.org/jfreechart/) を使用しています。
035 * chartType 属性には、ChartFactoryクラスで定義された変換表に基づく、チャートの
036 * 種類を指定します。このキーから、レンデラーやデータセットクラスを求めます。
037 * それぞれのクラス毎に細かい設定値がありますが、初期レベルとしましては、主要チャートの
038 * 主要属性のみサポートします。また、指定の chartType では使用しない属性を指定した場合でも
039 * 単に無視するだけで、警告等はありませんので、ご注意ください。
040 *
041 * 各属性は、{@XXXX} 変数が使用できます。
042 * これは、ServletRequest から、XXXX をキーに値を取り出し,この変数に割り当てます。
043 * つまり、このXXXXをキーにリクエストすれば、この変数に値をセットすることができます。
044 *
045 * useTableData="false"(初期値)の場合は、BODY部に書かれた SQL 文を実行してデータを取得します。
046 * useTableData="true" にすると、その前の query タグ等で作成した DBTableModel を利用して
047 * グラフ化します。その場合は、BODY部の SQL 文は、無視されます。
048 * 利用する DBTableModel は、tableId と scope 属性から取得します。
049 *
050 * select category,series1,series2,・・・・,seriesN from table になります。
051 * seriesLabels で指定するのは、series1,series2,・・・・,seriesN の部分になります。
052 * ここで指定したキーで、ラベルリソースを取得します。
053 *
054 * @og.formSample
055 * ●形式:<og:chartDataset renderer="…" … />
056 * ●body:あり(EVAL_BODY_BUFFERED:BODYを評価し、{@XXXX} を解析します)
057 *
058 * ●Tag定義:
059 *   <og:chartDataset
060 *       chartType        ○【TAG】ChartDataset のデータタイプを指定します(必須)。
061 *       dbid               【TAG】(通常は使いません)Datasetオブジェクトを作成する時のDB接続IDを指定します
062 *       useTableData       【TAG】グラフ化するデータを DBTableModel から作成するかどうか(初期値:false)
063 *       tableId            【TAG】(通常は使いません)sessionから所得する DBTableModelオブジェクトの ID (初期値:HybsSystem#TBL_MDL_KEY[=h_tblmdl])
064 *       scope              【TAG】キャッシュする場合のスコープ[request/page/session/application]を指定します(初期値:session)
065 *       baseLegend         【TAG】シリーズ単位の凡例 の表示可否を設定します
066 *       valueLabel         【TAG】縦軸の表示名称を指定します
067 *       markValues         【TAG】マーカーラインの設定値をCSV形式で複数指定します
068 *       markColors         【TAG】マーカーラインの色をCSV形式で複数指定します
069 *       markOverColors     【TAG】マーカーラインの超過時のShape色をCSV形式で複数指定します
070 *       dynamicOCNo        【TAG】動的なマーカーラインの基準シリーズ番号を設定します(初期値:null)
071 *       useMarkAnchor      【TAG】マーカーライン描画時に、その設定値を表示します
072 *       lowerBound         【TAG】チャートの縦軸の最小値をセットします(初期値:自動計算)
073 *       upperBound         【TAG】チャートの縦軸の最大値をセットします(初期値:自動計算)
074 *       tickSize           【TAG】チャートの縦軸の目盛の幅をセットします(初期値:自動計算)
075 *       useGradient        【TAG】バーチャートのグラデーション処理を行うかどうか[true/false]を指定します(初期値:false)
076 *       shapesVisible      【TAG】ラインチャートのポイントを四角表示するかどうかを指定します(初期値:true)
077 *       shapeColors        【TAG】データ毎にShapeを切り替える時の色の繰返しパターンを文字列配列で指定します
078 *       shapeScale         【TAG】shapeの大きさを倍率指定で変更します(初期値:null)
079 *       useDottedLine      【TAG】ラインチャートの線をドットラインにするかどうか[true/false]を指定します(初期値:false 線分)
080 *       seriesColors       【TAG】複数チャート(series)描画時のチャート色の繰返しパターンをCSV形式で複数指定します
081 *       seriesLabels       【TAG】複数チャート(series)描画時のラベル名を指定します。
082 *       valueLabelsVisible 【TAG】Value(縦軸)のラベルを表示するかどうかを指定します(初期値:true[表示する])
083 *       valueMarksVisible  【TAG】Value(縦軸)のマーカーを表示するかどうかを指定します(初期値:true[表示する])
084 *       itemLabelVisible   【TAG】データの値(itemText)を表示するかどうか[true/false/last]を指定します(初期値:false[表示しない])
085 *       useItemLabelSep    【TAG】データの値(itemText)の表示に、桁区切り文字を使用するかどうか[true/false]を指定します(初期値:true[使用する])
086 *       valueInset         【TAG】縦軸の表示領域INSET値(double)を指定します
087 *       barMaxWidth        【TAG】BOXチャートのバー幅の最大値(0.0~1.0)を指定します
088 *       barItemMargin      【TAG】BOXチャートのバーアイテムのマージン(0.0~1.0)を指定します
089 *       barWidth           【TAG】BOXチャートのバー幅(double)を指定します
090 *       visibleLimit       【TAG】表示下限値(これ以下のデータは未表示)の値(double)を指定します
091 *       domainMargin       【TAG】グラフの書き出し位置の調整比率を指定します
092 *       timeFormatType     【TAG】時刻を表す場合の表現の仕方[E1/E2/E3/H1/H2/H3]を指定します(初期値:null)
093 *       useVerticalLabels  【TAG】ラベルの表示向きを縦にするかどうか[false/true]を指定します(初期値:false)
094 *       useCategoryColor   【TAG】カテゴリのカラー名指定があるかどうか[true/false]を指定します(初期値:false)
095 *       caseKey            【TAG】このタグ自体を利用するかどうかの条件キーを指定します(初期値:null)
096 *       caseVal            【TAG】このタグ自体を利用するかどうかの条件値を指定します(初期値:null)
097 *       caseNN             【TAG】指定の値が、null/ゼロ文字列 でない場合(Not Null=NN)は、このタグは使用されます(初期値:判定しない)
098 *       caseNull           【TAG】指定の値が、null/ゼロ文字列 の場合は、このタグは使用されます(初期値:判定しない)
099 *       caseIf             【TAG】指定の値が、true/TRUE文字列の場合は、このタグは使用されます(初期値:判定しない)
100 *       debug              【TAG】デバッグ情報を出力するかどうか[true/false]を指定します(初期値:false)
101 *   >   ... Body ...
102 *   </og:chartDataset>
103 *
104 * ●使用例
105 *      <og:chartCreate
106 *          command     = "{@command}"
107 *          title       = "{@title}"
108 *          domainLabel = "{@domainLabel}"
109 *          width       = "{@width}"
110 *          height      = "{@height}"
111 *          rectangleEdge   = "{@rectangleEdge}"
112 *          plotOrientation = "{@plotOrientation}"
113 *          chartBackColor  = "{@chartBackColor}"
114 *          plotBackColor   = "{@plotBackColor}"
115 *          domainMarker    = "{@domainMarker}"
116 *          useMarkerLabel  = "{@useMarkerLabel}" >
117 *              <og:chartDataset
118 *                  chartType   = "[Bar|LineAndShape|・・・]"      チャートの種類
119 *                  baseLegend  = "[true|false]"                シリーズ単位の凡例 の表示可否
120 *                  valueLabel  = "縦軸"                        縦軸のラベル
121 *                  lowerBound  = "0"                           下限値
122 *                  upperBound  = "5000"                        上限値
123 *                  tickSize    = "1000"                        縦軸の目盛の幅
124 *                  markValues  = "2500,2800"                   縦軸設定値(横棒)
125 *                  markColors  = "RED,GREEN"                   縦軸設定ライン色
126 *                  markOverColors = "BLUE,YELLOW,RED"          マーカーラインの超過時のShape色
127 *                  dynamicOCNo   = "2"                         動的なマーカーラインの基準シリーズ番号
128 *                  useMarkAnchor = "[true|false]"              縦軸設定値(横棒)を表示するかどうか
129 *                  useGradient   = "[false|true]"              バーチャートのグラデーション処理
130 *                  shapesVisible = "[true|false]"              ラインの四角表示
131 *                  shapeColors   = "RED,GREEN,BLUE"            データ毎のShapeの色
132 *                  shapeScale    = "0.8"                       shapeの大きさの倍率(double)
133 *                  useDottedLine = "[false|true]"              点線使用有無
134 *                  seriesColors  = "RED,GREEN,BLUE"            シリーズの色サイクル指定
135 *                  seriesLabels  = "AAA,BBB,CCC"               シリーズのラベル名を指定
136 *                  valueLabelsVisible = "[true|false]"         縦軸のラベルの表示有無
137 *                  valueMarksVisible  = "[true|false]"         縦軸のマーカーの表示有無
138 *                  itemLabelVisible   = "[false|true|last]"    データの値の表示有無
139 *                  useItemLabelSep    = "[true|false]"         データの桁区切り文字の使用有無
140 *                  valueInset         = "15"                   縦軸の表示領域INSET値
141 *                  barMaxWidth        = "[0.0~1.0]"           バー幅の最大値(0.0~1.0)
142 *                  barItemMargin      = "[0.0~1.0]"           バーアイテムのマージン(0.0~1.0)
143 *                  barWidth           = "10"                   バー幅の実幅(double)
144 *                  visibleLimit       = "0"                    表示下限値(これ以下のデータは未表示))
145 *                  domainMargin       = "1.0"                  グラフの書き出し位置の調整比率
146 *                  useTableData       = "[false|true]"         SQLではなく、DBTableModelからグラフを作成するかどうか
147 *                  timeFormatType     = "[1|2]"                時間軸の設定(00:00表示)
148 *                  useVerticalLabels  = "[false|true]"         時間軸の設定(ラベルの縦書き)
149 *                  useCategoryColor   = "[false|true]"         カテゴリのカラー名指定があるかどうか
150 *                  tableId            = "AAA"                  useTableData="true"の場合のDBTableModelの取得先ID
151 *                  scope              = "[session|request]"    useTableData="true"の場合のDBTableModelの取得先scope
152 *              >
153 *                         {@SQL}
154 *              </og:chartDataset>
155 *      </og:chartCreate>
156 *
157 *    複数のグラフを重ね合わせる場合は、chartDataset タグを chartCreate のBODY部に
158 *    複数記述します。
159 *      <og:chartCreate
160 *          title       = "{@title}"
161 *          domainLabel = "{@domainLabel}"
162 *          width       = "{@width}"
163 *          height      = "{@height}" >
164 *          rectangleEdge   = "{@rectangleEdge}" >
165 *          plotOrientation = "{@plotOrientation}" >
166 *              <og:chartDataset
167 *                  chartType   = "{@chartType1}"
168 *                  valueLabel  = "{@valueLabel1}"
169 *                  lowerBound  = "{@lowerBound1}"
170 *                  upperBound  = "{@upperBound1}"
171 *                  markValues  = "{@markValues1}"
172 *                  markColors  = "{@markColors1}"
173 *              >
174 *                         {@SQL1}
175 *              </og:chartDataset>
176 *              <og:chartDataset
177 *                  chartType   = "{@chartType2}"
178 *                  valueLabel  = "{@valueLabel2}"
179 *                  lowerBound  = "{@lowerBound2}"
180 *                  upperBound  = "{@upperBound2}"
181 *                  markValues  = "{@markValues2}"
182 *                  markColors  = "{@markColors2}"
183 *              >
184 *                         {@SQL2}
185 *              </og:chartDataset>
186 *      </og:chartCreate>
187 *
188 *    chartType属性 は、チャートの種類を指定する、固有IDです。
189 *    [chartType属性]
190 *      Area                     ,  Bar                    , Bar3D          , CategoryStep   , ClusteredXYBarV
191 *      Compass                  ,  CyclicXYItem           , DeviationV     , Gantt          , GroupedStackedBar
192 *      HighLow                  ,  HybsBar                , HybsLine       , HybsParetoLine , HybsStackedBar
193 *      LayeredBar               ,  Level                  , Line3D         , LineAndShape   , Meter
194 *      MinMax                   ,  MultiplePie            , Pie            , Pie3D          , PolarItem
195 *      Ring                     ,  SpiderWeb              , StackedArea    , StackedBar     , StackedBar3D
196 *      StackedTimeSeriesLineH   ,  StackedTimeSeriesLineV , StackedXYArea  , StackedXYArea2 , StandardXYItem
197 *      StatisticalLineAndShape  ,  Thermometer            , TimeSeriesBarH , TimeSeriesBarV , TimeSeriesLineH
198 *      TimeSeriesLineV          ,  WaterfallBar           , XYArea         , XYArea2        , XYBarV
199 *      XYBlock                  ,  XYBubble               , XYDifference   , XYDot          , XYError
200 *      XYLine3D                 ,  XYLineAndShape         , XYStep         , XYStepArea     , YIntervalV
201 *
202 *    markColors属性 は、マーカーラインの色を指定します
203 *    java.awt.Color クラスのstatic フィールド名の文字列で指定します。
204 *    [renderer属性]
205 *      BLACK   , BLUE   , CYAN , DARK_GRAY , GRAY  , GREEN , LIGHT_GRAY ,
206 *      MAGENTA , ORANGE , PINK , RED       , WHITE , YELLOW
207 *      #XXXXXX形式の16bitRGB表記
208 *
209 * @og.group 画面表示
210 *
211 * @version  0.9.0      2007/06/19
212 * @author       Nakamura
213 * @since        JDK1.4,
214 */
215public class ChartDatasetTag extends CommonTagSupport {
216        /** このプログラムのVERSION文字列を設定します。   {@value} */
217        private static final String VERSION = "7.0.1.6 (2018/12/25)" ;
218        private static final long serialVersionUID = 701620181225L ;
219
220        private transient ChartDataset chDataset = new ChartDataset();
221
222        // 4.0.0.0 (2007/10/10) dbid の初期値を、"DEFAULT" から null に変更
223        private String  dbid    ;
224        private String  sql             ;
225
226        // 5.3.0.0 (2010/12/01) DBTableModel を利用して、グラフを作成します。
227        private boolean useTableData    ;               // 互換性の関係から
228        private String  tableId                 = HybsSystem.TBL_MDL_KEY;
229
230        /**
231         * デフォルトコンストラクター
232         *
233         * @og.rev 6.4.2.0 (2016/01/29) PMD refactoring. Each class should declare at least one constructor.
234         */
235        public ChartDatasetTag() { super(); }           // これも、自動的に呼ばれるが、空のメソッドを作成すると警告されるので、明示的にしておきます。
236
237        /**
238         * Taglibの開始タグが見つかったときに処理する doStartTag() を オーバーライドします。
239         *
240         * @og.rev 5.3.0.0 (2010/12/01) useTableDataによるデータ取得方法の機能追加
241         * @og.rev 6.3.4.0 (2015/08/01) caseKey,caseVal,caseNN,caseNull,caseIf 属性対応
242         * @og.rev 7.0.1.6 (2018/12/25) tableId から取得する対応漏れ
243         *
244         * @return      後続処理の指示( EVAL_BODY_BUFFERED )
245         */
246        @Override
247        public int doStartTag() {
248                if( !useTag() ) { return SKIP_BODY ; }  // 6.3.4.0 (2015/08/01)
249
250                // 5.3.0.0 (2010/12/01) useTableDataによるデータ取得方法の機能追加
251                if( useTableData ) {    // DBTableModel から取得する。
252//                      final DBTableModel table = (DBTableModel)getObject( HybsSystem.TBL_MDL_KEY );
253                        final DBTableModel table = (DBTableModel)getObject( tableId );                                          // 7.0.1.6 (2018/12/25)
254                        chDataset.makeDataset( table );
255
256                        return SKIP_BODY ;                      // Body を評価しない
257                }
258                else {
259                        return EVAL_BODY_BUFFERED ;     // Body を評価する。( extends BodyTagSupport 時)
260                }
261        }
262
263        /**
264         * Taglibのタグ本体を処理する doAfterBody() を オーバーライドします。
265         *
266         * @og.rev 5.3.0.0 (2010/12/01) データベース検索処理を、doEndTag() メソッドから移動
267         *
268         * @return      後続処理の指示(SKIP_BODY)
269         */
270        @Override
271        public int doAfterBody() {
272                sql = getBodyString();
273                if( sql != null && sql.length() > 0 ) {
274                        sql = sql.trim();
275                }
276
277                // 5.3.0.0 (2010/12/01) doEndTag() メソッドから移動
278                boolean errFlag = true;
279                Connection conn = null;
280                try {
281                        conn = ConnectionFactory.connection( dbid,getApplicationInfo() );
282                        chDataset.makeDataset( conn,sql );
283                        errFlag = false;                // エラーではない
284                }
285                catch( final SQLException ex ) {
286                        final String errMsg = "データセット作成時にエラーが発生しました。" + CR
287                                                + " SQL=" + sql + CR
288                                                + ex.getMessage();                      // 5.1.8.0 (2010/07/01) errMsg 修正
289                        throw new HybsSystemException( errMsg,ex );
290                }
291                finally {
292                        if( errFlag ) { ConnectionFactory.remove( conn,dbid ); }        // 削除
293                        else {                  ConnectionFactory.close( conn,dbid );  }        // 返却
294                }
295
296                return SKIP_BODY ;
297        }
298
299        /**
300         * Taglibの終了タグが見つかったときに処理する doEndTag() を オーバーライドします。
301         *
302         * @og.rev 4.0.0.1 (2007/12/03) try ~ catch ~ finally をきちんと行う。
303         * @og.rev 5.2.1.0 (2010/10/01) debugPrint() メソッド追加
304         * @og.rev 5.3.0.0 (2010/12/01) データベース検索処理を、doAfterBody() へ移動
305         * @og.rev 6.3.4.0 (2015/08/01) caseKey,caseVal,caseNN,caseNull,caseIf 属性対応
306         *
307         * @return      後続処理の指示
308         */
309        @Override
310        public int doEndTag() {
311                debugPrint();           // 5.2.1.0 (2010/10/01) debugPrint() メソッド追加
312                if( useTag() ) {        // 6.3.4.0 (2015/08/01)
313                        // 理屈上、ChartCreateTag の存在チェックがここで行われるが、DB検索処理は、先に行っている。
314                        // つまり、無駄なQUERYが実行される可能性が出てきたが、開発段階のみの話であるのでここに残しておく。
315                        final ChartCreateTag chartTag = (ChartCreateTag)findAncestorWithClass( this,ChartCreateTag.class );
316
317                        if( chartTag == null ) {
318                                final String errMsg = "chartCreate タグが見つかりませんでした。";
319                                throw new HybsSystemException( errMsg );
320                        }
321
322                        chartTag.addChartDataset( chDataset );
323                }
324
325                return EVAL_PAGE;
326        }
327
328        /**
329         * タグリブオブジェクトをリリースします。
330         * キャッシュされて再利用されるので、フィールドの初期設定を行います。
331         *
332         * @og.rev 4.0.0.0 (2007/10/10) dbid の初期値を、"DEFAULT" から null に変更
333         * @og.rev 5.3.0.0 (2010/12/01) useTableData,tableId 属性追加
334         */
335        @Override
336        protected void release2() {
337                super.release2();
338                chDataset       = new ChartDataset();
339                dbid            = null;
340                sql                     = null;
341                useTableData    = false;                                        // 5.3.0.0 (2010/12/01)
342                tableId                 = HybsSystem.TBL_MDL_KEY;       // 5.3.0.0 (2010/12/01)
343        }
344
345        /**
346         * 【TAG】(通常は使いません)Datasetオブジェクトを作成する時のDB接続IDを指定します(初期値:null)。
347         *
348         * @og.tag
349         * Datasetオブジェクトを作成する時のDB接続IDを指定します。
350         * これは、システムリソースで、DEFAULT_DB_URL 等で指定している データベース接続先
351         * 情報に、XX_DB_URL を定義することで、 dbid="XX" とすると、この 接続先を使用して
352         * データベースにアクセスできます。
353         *
354         * @param       id      データベース接続ID
355         */
356        public void setDbid( final String id ) {
357                dbid = nval( getRequestParameter( id ),dbid );
358        }
359
360        /**
361         * 【TAG】ChartDataset のデータタイプを指定します。
362         *
363         * @og.tag
364         * チャートタイプ は、外部からチャートを指定するのに便利なように、キー化
365         * されています。このキーに基づいて、ChartFactory クラスの
366         * チャートタイプ変換表に基づいて、レンデラーや、データセットを作成します。
367         * 基本的には、チャートタイプ は、この、レンデラー名称から決定しています。
368         *
369         * <table class="plain">
370         *   <caption>各種オブジェクトの組み合わせ一覧</caption>
371         *   <tr><th> チャートタイプ          </th><th> レンデラー(org.jfree.chart.renderer.)    </th><th> Dataset     </th></tr>
372         *   <tr><td> HybsLine                </td><td> HybsLineRenderer                         </td><td> Category    </td></tr>
373         *   <tr><td> LineAndShape            </td><td> category.LineAndShapeRenderer            </td><td> Category    </td></tr>
374         *   <tr><td> Line3D                  </td><td> category.LineRenderer3D                  </td><td> Category    </td></tr>
375         *   <tr><td> StatisticalLineAndShape </td><td> category.StatisticalLineAndShapeRenderer </td><td> Category    </td></tr>
376         *   <tr><td> HybsBar                 </td><td> HybsBarRenderer                          </td><td> Category    </td></tr>
377         *   <tr><td> Bar                     </td><td> category.BarRenderer                     </td><td> Category    </td></tr>
378         *   <tr><td> Bar3D                   </td><td> category.BarRenderer3D                   </td><td> Category    </td></tr>
379         *   <tr><td> Area                    </td><td> category.AreaRenderer                    </td><td> Category    </td></tr>
380         *   <tr><td> HybsStackedBar          </td><td> HybsStackedBarRenderer                   </td><td> Category    </td></tr>
381         *   <tr><td> StackedBar              </td><td> category.StackedBarRenderer              </td><td> Category    </td></tr>
382         *   <tr><td> StackedBar3D            </td><td> category.StackedBarRenderer3D            </td><td> Category    </td></tr>
383         *   <tr><td> StackedArea             </td><td> category.StackedAreaRenderer             </td><td> Category    </td></tr>
384         *   <tr><td> GroupedStackedBar       </td><td> category.GroupedStackedBarRenderer       </td><td> Category    </td></tr>
385         *   <tr><td> LayeredBar              </td><td> category.LayeredBarRenderer              </td><td> Category    </td></tr>
386         *   <tr><td> CategoryStep            </td><td> category.CategoryStepRenderer            </td><td> Category    </td></tr>
387         *   <tr><td> Level                   </td><td> category.LevelRenderer                   </td><td> Category    </td></tr>
388         *   <tr><td> MinMax                  </td><td> category.MinMaxCategoryRenderer          </td><td> Category    </td></tr>
389         *   <tr><td> WaterfallBar            </td><td> category.WaterfallBarRenderer            </td><td> Category    </td></tr>
390         *   <tr><td> MultiplePie             </td><td> null                                     </td><td> Category    </td></tr>
391         *   <tr><td> SpiderWeb               </td><td> null                                     </td><td> Category    </td></tr>
392         *   <tr><td> Pie                     </td><td> null                                     </td><td> Pie         </td></tr>
393         *   <tr><td> Pie3D                   </td><td> null                                     </td><td> Pie         </td></tr>
394         *   <tr><td> Ring                    </td><td> null                                     </td><td> Pie         </td></tr>
395         *   <tr><td> XYArea                  </td><td> xy.XYAreaRenderer                        </td><td> XY          </td></tr>
396         *   <tr><td> XYArea2                 </td><td> xy.XYAreaRenderer2                       </td><td> XY          </td></tr>
397         *   <tr><td> XYBlock                 </td><td> xy.XYBlockRenderer                       </td><td> XY          </td></tr>
398         *   <tr><td> CyclicXYItem            </td><td> xy.CyclicXYItemRenderer                  </td><td> XY          </td></tr>
399         *   <tr><td> HighLow                 </td><td> xy.HighLowRenderer                       </td><td> XY          </td></tr>
400         *   <tr><td> StackedXYArea           </td><td> xy.StackedXYAreaRenderer                 </td><td> XY          </td></tr>
401         *   <tr><td> StackedXYArea2          </td><td> xy.StackedXYAreaRenderer2                </td><td> XY          </td></tr>
402         *   <tr><td> StandardXYItem          </td><td> xy.StandardXYItemRenderer                </td><td> XY          </td></tr>
403         *   <tr><td> XYBubble                </td><td> xy.XYBubbleRenderer                      </td><td> XY          </td></tr>
404         *   <tr><td> XYDifference            </td><td> xy.XYDifferenceRenderer                  </td><td> XY          </td></tr>
405         *   <tr><td> XYDot                   </td><td> xy.XYDotRenderer                         </td><td> XY          </td></tr>
406         *   <tr><td> XYError                 </td><td> xy.XYErrorRenderer                       </td><td> XY          </td></tr>
407         *   <tr><td> XYLine3D                </td><td> xy.XYLine3DRenderer                      </td><td> XY          </td></tr>
408         *   <tr><td> XYLineAndShape          </td><td> xy.XYLineAndShapeRenderer                </td><td> XY          </td></tr>
409         *   <tr><td> XYStepArea              </td><td> xy.XYStepAreaRenderer                    </td><td> XY          </td></tr>
410         *   <tr><td> XYStep                  </td><td> xy.XYStepRenderer                        </td><td> XY          </td></tr>
411         *   <tr><td> PolarItem               </td><td> DefaultPolarItemRenderer                 </td><td> XY          </td></tr>
412         *   <tr><td> Meter                   </td><td> null                                     </td><td> Value       </td></tr>
413         *   <tr><td> Thermometer             </td><td> null                                     </td><td> Value       </td></tr>
414         *   <tr><td> Compass                 </td><td> null                                     </td><td> Value       </td></tr>
415         *   <tr><td> Gantt                   </td><td> category.GanttRenderer                   </td><td> TaskSeries  </td></tr>
416         *   <tr><td> XYBarV                  </td><td> xy.XYBarRenderer                         </td><td> TimeSeries  </td></tr>
417         *   <tr><td> ClusteredXYBarV         </td><td> xy.ClusteredXYBarRenderer                </td><td> TimeSeries  </td></tr>
418         *   <tr><td> YIntervalV              </td><td> xy.YIntervalRenderer                     </td><td> TimeSeries  </td></tr>
419         *   <tr><td> DeviationV              </td><td> xy.DeviationRenderer                     </td><td> TimeSeries  </td></tr>
420         *   <tr><td> TimeSeriesLineV         </td><td> xy.StandardXYItemRenderer                </td><td> TimeSeries  </td></tr>
421         *   <tr><td> TimeSeriesLineH         </td><td> xy.StandardXYItemRenderer                </td><td> TimeSeries  </td></tr>
422         *   <tr><td> TimeSeriesBarV          </td><td> xy.XYBarRenderer                         </td><td> TimeSeries  </td></tr>
423         *   <tr><td> TimeSeriesBarH          </td><td> xy.XYBarRenderer                         </td><td> TimeSeries  </td></tr>
424         *   <tr><td> StackedTimeSeriesLineV  </td><td> xy.StandardXYItemRenderer                </td><td> TimeSeries  </td></tr>
425         *   <tr><td> StackedTimeSeriesLineH  </td><td> xy.StandardXYItemRenderer                </td><td> TimeSeries  </td></tr>
426         *   <tr><td> TimeStepV               </td><td> xy.XYStepRenderer                        </td><td> TimeSeries  </td></tr>
427         *   <tr><td> TimeStepH               </td><td> xy.XYStepRenderer                        </td><td> TimeSeries  </td></tr>
428         * </table>
429         *
430         * Meter と Compass は、さらに、needleType が指定できます。
431         * これは、Meter_PIE や、Compass_Arrow などとすることで、形状を指定できます。
432         * Meter には、CHORD,CIRCLE(初期値),PIE
433         * Compass には、Arrow,Line,Long,Pin,Plum,Pointer(初期値),Ship,Wind,Arrow,MiddlePin が指定できます。
434         *
435         * @og.rev 5.7.8.0 (2014/07/04) needleType 対応
436         *
437         * @param       chartType       チャートタイプ
438         * @see         org.jfree.chart.renderer.category.CategoryItemRenderer
439         * @see         org.jfree.chart.renderer.xy.XYItemRenderer
440         */
441        public void setChartType( final String chartType ) {
442
443                // 5.7.8.0 (2014/07/04) needleType 対応
444                final String chType = getRequestParameter( chartType ) ;
445
446                final int adrs = chType.indexOf( '_' );
447                if( adrs < 0 ) {
448                        // 今まで通り chartType の設定
449                        chDataset.setChartType( chType );
450                }
451                else {
452                        chDataset.setChartType(  chType.substring(0,adrs) );
453                        chDataset.setNeedleType( chType.substring(adrs+1) );
454                }
455        }
456
457        /**
458         * 【TAG】グラフ化するデータを DBTableModel から作成するかどうか(初期値:false)。
459         *
460         * @og.tag
461         * useTableData="false"(初期値)の場合は、BODY部に書かれた SQL 文を実行してデータを取得します。
462         * useTableData="true" にすると、その前の query タグ等で作成した DBTableModel を利用して
463         * グラフ化します。その場合は、BODY部の SQL 文は、無視されます。
464         * 利用する DBTableModel は、tableId と scope 属性から取得します。
465         *
466         * @og.rev 5.3.0.0 (2010/12/01) 新規追加
467         *
468         * @param       flag    DBTableModelを利用 [true:する/false:しない]
469         */
470        public void setUseTableData( final String flag ) {
471                useTableData = nval( getRequestParameter( flag ),useTableData );
472        }
473
474        /**
475         * 【TAG】(通常は使いません)結果のDBTableModelを、sessionに登録するときのキーを指定します
476         *              (初期値:HybsSystem#TBL_MDL_KEY[={@og.value HybsSystem#TBL_MDL_KEY}])。
477         *
478         * @og.tag
479         * 検索結果より、DBTableModelオブジェクトを作成します。これを、下流のviewタグ等に
480         * 渡す場合に、通常は、session を利用します。その場合の登録キーです。
481         * query タグを同時に実行して、結果を求める場合、同一メモリに配置される為、
482         * この tableId 属性を利用して、メモリ空間を分けます。
483         *              (初期値:HybsSystem#TBL_MDL_KEY[={@og.value HybsSystem#TBL_MDL_KEY}])。
484         *
485         * @param       id テーブルID (sessionに登録する時のID)
486         */
487        public void setTableId( final String id ) {
488                tableId = nval( getRequestParameter( id ), tableId );
489        }
490
491        /**
492         * 【TAG】シリーズ単位の凡例 の表示可否を設定します(初期値:true 表示する)。
493         *
494         * @og.tag
495         * シリーズ単位の凡例 の表示可否を設定します。
496         *
497         * @param       baseLegend      シリーズ単位の凡例表示 [true:する/false:しない]
498         */
499        public void setBaseLegend( final String baseLegend ) {
500                final boolean flag = nval( getRequestParameter( baseLegend ),true );
501                chDataset.setBaseLegend( flag );
502        }
503
504        /**
505         * 【TAG】縦軸の表示名称を指定します。
506         *
507         * @og.tag
508         * 縦軸の表示名称を指定します。
509         *
510         * @param       valueLabel      縦軸の表示名称
511         */
512        public void setValueLabel( final String valueLabel ) {
513                chDataset.setValueLabel( getRequestParameter( valueLabel ) );
514        }
515
516        /**
517         * 【TAG】マーカーラインの設定値をCSV形式で複数指定します。
518         *
519         * @og.tag
520         * 指定の値にマーカーラインを引きます。
521         * 色は、setMarkColors( String ) で指定します。
522         * markColors と、個数をあわせて設定する必要があります。
523         * どちらかが、指定されていない場合は、マーカー表示されません。
524         * dynamicOCNo を使用する場合は、そのValues の並びの箇所に、
525         * "G"  という文字列を設定して下さい。
526         * 例:2000,G  基準1は、2000の直線、基準2は、グラフ という意味。
527         *
528         * @param       markValues      マーカーラインの設定値(CSV形式)
529         * @see         #setMarkColors( String )
530         */
531        public void setMarkValues( final String markValues ) {
532                final String vals = nval( getRequestParameter( markValues ),null );
533                if( vals != null ) {
534                        chDataset.setMarkValues( StringUtil.csv2Array( vals ) );
535                }
536        }
537
538        /**
539         * 【TAG】マーカーライン描画時に、その設定値を表示します。
540         *
541         * @og.tag
542         * マーカーラインの縦軸の設定値(markValues)に、設定値をラベル表示します。
543         * 位置は、TextAnchor.BASELINE_LEFT 固定です。
544         * 初期値は、表示する(true)です。
545         *
546         * @og.rev 4.1.1.0 (2008/02/04) 新規追加
547         *
548         * @param   useAnchor 設定値表示 [true:する/false:しない]
549         */
550        public void setUseMarkAnchor( final String useAnchor ) {
551                final boolean flag = nval( getRequestParameter( useAnchor ),true );
552                chDataset.setUseMarkAnchor( flag );
553        }
554
555        /**
556         * 【TAG】マーカーラインの色をCSV形式で複数指定します。
557         *
558         * @og.tag
559         * マーカーラインとは、縦軸設定のラインの事で、縦軸の設定値(markValues)に
560         * 横方向にラインを付与します。このラインの色を、CSV形式で
561         * 指定します。
562         * markValues と、あわせて設定する必要があります。
563         * 個数が異なる場合は、markValues が優先され、無指定の場合は、Color.REDで
564         * 表示されます。
565         *
566         * 指定文字列は、java.awt.Color クラスのstatic フィールド名で指定します。
567         * BLACK , BLUE , CYAN , DARK_GRAY , GRAY , GREEN , LIGHT_GRAY ,
568         * MAGENTA , ORANGE , PINK , RED , WHITE , YELLOW , (PURPLE) が指定できます。
569         * また、#XXXXXX形式の16bitRGB表記 でも指定可能です。
570         * <pre>
571         *      BLACK   , BLUE   , CYAN , DARK_GRAY , GRAY  , GREEN , LIGHT_GRAY ,
572         *      MAGENTA , ORANGE , PINK , RED       , WHITE , YELLOW , (PURPLE)
573         *      #XXXXXX形式の16bitRGB表記 でも指定可能です。
574         * </pre>
575         *
576         * @param       markColors      マーカーラインの色(CSV形式)
577         * @see         java.awt.Color#BLACK
578         * @see         #setMarkValues( String )
579         */
580        public void setMarkColors( final String markColors ) {
581                final String clrs = nval( getRequestParameter( markColors ),null );
582                if( clrs != null ) {
583                        chDataset.setMarkColors( StringUtil.csv2Array( clrs ) );
584                }
585        }
586
587        /**
588         * 【TAG】マーカーラインの超過時のShape色をCSV形式で複数指定します。
589         *
590         * @og.tag
591         * HybsLine,HybsBar でのみ使用可能です。
592         * マーカーラインを使用する場合に、そのラインを超えない色、超える色を指定します。
593         * この色の指定は、マーカーラインの色やマーカーラインの設定値の個数+1に
594         * なります。つまり、色1:設定値1:色2:設定値2:色3 となります。
595         * 色1は、設定値1より小さい場合に使用され、色2は、設定値1より大きく、
596         * 設定値2より小さい場合、色3は、設定値2より大きい場合になります。
597         *
598         * 指定文字列は、java.awt.Color クラスのstatic フィールド名で指定します。
599         * BLACK , BLUE , CYAN , DARK_GRAY , GRAY , GREEN , LIGHT_GRAY ,
600         * MAGENTA , ORANGE , PINK , RED , WHITE , YELLOW , (PURPLE) が指定できます。
601         * また、#XXXXXX形式の16bitRGB表記 でも指定可能です。
602         * markValues と、あわせて設定する必要があります。
603         * どちらかが、指定されていない場合は、マーカー表示されません。
604         * <pre>
605         *      BLACK   , BLUE   , CYAN , DARK_GRAY , GRAY  , GREEN , LIGHT_GRAY ,
606         *      MAGENTA , ORANGE , PINK , RED       , WHITE , YELLOW , (PURPLE)
607         *      #XXXXXX形式の16bitRGB表記 でも指定可能です。
608         * </pre>
609         *
610         * @og.rev 4.0.3.0 (2008/01/07) 新規追加
611         *
612         * @param       overColors      マーカーラインの超過時のShape色(CSV形式)
613         * @see         java.awt.Color#BLACK
614         */
615        public void setMarkOverColors( final String overColors ) {
616                final String clrs = nval( getRequestParameter( overColors ),null );
617                if( clrs != null ) {
618                        chDataset.setMarkOverColors( StringUtil.csv2Array( clrs ) );
619                }
620        }
621
622        /**
623         * 【TAG】動的なマーカーラインの基準シリーズ番号を設定します(初期値:null)。
624         *
625         * @og.tag
626         * 動的なマーカーラインを使用する場合は、基準値となるシリーズ番号を指定します。
627         *
628         * マーカーラインの最下位閾値に相当します。これは、グラフ化されますが、
629         * Shape は自動的に削除されます。
630         * この設定を使用する場合、最初のデータには、必ずShapeが付きます。それ以外の
631         * データに、Shape を付けるかどうかは、shapesVisible 属性で指定します。
632         * この線の色は、markColors で指定した、最下位の色になります。また、
633         * markValues で指定した、最下位の値は、使用されません。ただし、色指定の
634         * 関係上、設定しておく必要があります。
635         * また、isValueVisible == true で、設定値の値表示を行う場合も、最下位の
636         * 値は表示しないようにします。
637         * 初期値は、使用しない(null)です。
638         *
639         * @og.rev 4.1.1.0 (2008/02/04) 新規追加
640         * @og.rev 4.1.1.0 (2008/02/19) setUseDynamicOC ⇒ setDynamicOCNo
641         *
642         * @param   dynamicOCNo 基準シリーズ番号
643         */
644        public void setDynamicOCNo( final String dynamicOCNo ) {
645                final int ocNo = nval( getRequestParameter( dynamicOCNo ),-1 );
646                chDataset.setDynamicOCNo( ocNo );
647        }
648
649        /**
650         * 【TAG】チャートの縦軸の最小値をセットします(初期値:自動計算)。
651         *
652         * @og.tag
653         * 何も指定しない場合は、データの最小値から、自動的に計算します。
654         *
655         * @param       lowerBound      縦軸の最小値
656         */
657        public void setLowerBound( final String lowerBound ) {
658                chDataset.setLowerBound( getRequestParameter( lowerBound ) );
659        }
660
661        /**
662         * 【TAG】チャートの縦軸の最大値をセットします(初期値:自動計算)。
663         *
664         * @og.tag
665         * 何も指定しない場合は、データの最大値から、自動的に計算します。
666         *
667         * @param       upperBound      縦軸の最大値
668         */
669        public void setUpperBound( final String upperBound ) {
670                chDataset.setUpperBound( getRequestParameter( upperBound ) );
671        }
672
673        /**
674         * 【TAG】チャートの縦軸の目盛の幅をセットします(初期値:自動計算)。
675         *
676         * @og.tag
677         * 何も指定しない場合は、データの範囲から、自動的に計算します。
678         *
679         * @og.rev 4.0.3.0 (2008/01/07) 新規追加
680         *
681         * @param   size 縦軸のチック(目盛)の幅
682         */
683        public void setTickSize( final String size ) {
684                chDataset.setTickSize( getRequestParameter( size ) );
685        }
686
687        /**
688         * 【TAG】バーチャートのグラデーション処理を行うかどうか[true/false]を指定します(初期値:false)。
689         *
690         * @og.tag
691         * 通常のバーチャートは、単一色表示で表されますが、これにグラデーション効果を
692         * 付加するかどうかを指定します。
693         * 通常のバーチャートが、少しきれいに見えます。
694         * 初期値は、false(使用しない)です。
695         *
696         * @param       useGradient     グラデーション処理 [true:する/false:しない]
697         */
698        public void setUseGradient( final String useGradient ) {
699                final boolean flag = nval( getRequestParameter( useGradient ),false );
700                chDataset.setUseGradient( flag );
701        }
702
703        /**
704         * 【TAG】ラインチャートのポイントを四角表示するかどうか[true:する/false:しない]を指定します(初期値:true)。
705         *
706         * @og.tag
707         * ラインチャートは、通常、線分で表され、各ポイントについても、線分で接続されます。
708         * shapesVisible を true に設定すると、各ポイントが、線上に四角く表示され、
709         * そのポイントの位置を、容易に判断出来るようになります。
710         * 初期値は、true( LineAndShape )です。
711         *
712         * @param       shapesVisible   ポイントの四角表示 [true:する/false:しない]
713         */
714        public void setShapesVisible( final String shapesVisible ) {
715                final boolean flag = nval( getRequestParameter( shapesVisible ),true );
716                chDataset.setShapesVisible( flag );
717        }
718
719        /**
720         * 【TAG】データ毎にShapeを切り替える時の色の繰返しパターンをCSV文字列で指定します。
721         *
722         * @og.tag
723         * HybsLine でのみ使用可能です。
724         * これは、データそのものが、繰返し性のある場合に、その繰返し性に対応した
725         * 形状のShape を表示させる場合に使用します。
726         * 繰返しShapeの形状は、JFreeChart のシリーズ毎の繰返し標準形状を使用します。
727         * 現在のバージョンでは、10個までの繰返しに対応可能です。
728         * 繰返し色を、指定した分だけ、順に使用されていきます。
729         *
730         * 指定文字列は、java.awt.Color クラスのstatic フィールド名で指定します。
731         * BLACK , BLUE , CYAN , DARK_GRAY , GRAY , GREEN , LIGHT_GRAY ,
732         * MAGENTA , ORANGE , PINK , RED , WHITE , YELLOW , (PURPLE) が指定できます。
733         * また、#XXXXXX形式の16bitRGB表記 でも指定可能です。
734         *
735         * @og.rev 4.0.3.0 (2008/01/07) 新規追加
736         *
737         * @param       colors  データ毎の色の繰返しパターン(CSV文字列)
738         * @see         java.awt.Color#BLACK
739         */
740        public void setShapeColors( final String colors ) {
741                final String clrs = nval( getRequestParameter( colors ),null );
742                if( clrs != null ) {
743                        chDataset.setShapeColors( StringUtil.csv2Array( clrs ) );
744                }
745        }
746
747        /**
748         * 【TAG】shapeの大きさを倍率指定で変更します(初期値:null)。
749         *
750         * @og.tag
751         * ラインチャートのShape(各グラフのポイントのマーカー)の大きさは、通常は、
752         * 自動設定されます。
753         * この大きさを、倍率指定で、変更可能です。
754         * 指定は、double 型です。
755         * 初期値は、null は、スケール変更しません(自動設定のままの大きさ)
756         *
757         * @og.rev 4.1.1.0 (2008/02/04) 新規追加
758         *
759         * @param       scale   shapeの大きさの倍率
760         */
761        public void setShapeScale( final String scale ) {
762                final String shapeScale = nval( getRequestParameter( scale ),null );
763                if( shapeScale != null ) {
764                        chDataset.setShapeScale( shapeScale );
765                }
766        }
767
768        /**
769         * 【TAG】ラインチャートの線をドットラインにするかどうか[true/false]を指定します(初期値:false[線分])。
770         *
771         * @og.tag
772         * ラインチャートは、通常、線分で表されます。
773         * これに、点線で表すことで、グラフの違いを、色だけでなく形状でも識別
774         * しやすくすることが可能です。
775         * 初期値は、false(線分)です。
776         *
777         * @param       useDottedLine   ドットライン表示 [true:点線/false:線分]
778         */
779        public void setUseDottedLine( final String useDottedLine ) {
780                final boolean flag = nval( getRequestParameter( useDottedLine ),false );
781                chDataset.setUseDottedLine( flag );
782        }
783
784        /**
785         * 【TAG】複数チャート(series)描画時のチャート色の繰返しパターンをCSV形式で複数指定します。
786         *
787         * @og.tag
788         * 通常、複数のチャートを同時に表示させる場合は、縦軸が共通であれば、
789         * 1回のSelect分で複数データを取得します。
790         * この、データをシリーズと呼んでおり、これを区別する為に、色を分けます。
791         * 初期値は、JFreeChart が自動で割り振ります。
792         * これを、外部からCSV形式で、CSV形式で色コードを指定します。
793         * 指定データが多い場合は、多い分の色は使用されません。少ない場合は、
794         * 順番に繰り返して使用されます。
795         * 例えば、1色だけ指定した場合は、すべてのシリーズが同じ色で表されます。
796         *
797         * 指定文字列は、java.awt.Color クラスのstatic フィールド名で指定します。
798         * BLACK , BLUE , CYAN , DARK_GRAY , GRAY , GREEN , LIGHT_GRAY ,
799         * MAGENTA , ORANGE , PINK , RED , WHITE , YELLOW , (PURPLE) が指定できます。
800         *
801         * また、#XXXXXX形式の16bitRGB表記 でも指定可能です。
802         *
803         * @param       colors  チャート色の繰返しパターン(CSV形式)
804         * @see         java.awt.Color#BLACK
805         */
806        public void setSeriesColors( final String colors ) {
807                final String clrs = nval( getRequestParameter( colors ),null );
808                if( clrs != null ) {
809                        chDataset.setSeriesColors( StringUtil.csv2Array( clrs ) );
810                }
811        }
812
813        /**
814         * 【TAG】複数チャート(series)描画時のラベル名をCSV形式で複数指定します。
815         *
816         * @og.tag
817         * 通常、複数のチャートを同時に表示させる場合は、縦軸が共通であれば、
818         * 1回のSelect分で複数データを取得します。
819         * この、データをシリーズと呼んでおり、これの名称は、Select文のカラム名になります。
820         * 英文であれば問題ないのですが、日本語表示したい場合に、別名(as)に{&#064;XXXX}を
821         * 付けるなどの方法がありますが、firebird では、JDBCのResultSetMetaData#getColumnLabel(int)
822         * の取得で、文字コードがうまく処理されないようなので、外部から与える機能を用意します。
823         * 
824         * ここでは、select category,series1,series2,・・・・,seriesN from table の
825         * series1,series2,・・・・,seriesN の部分 を順番に与えます。
826         *
827         * @og.rev 6.0.2.0 (2014/09/19) 新規追加
828         *
829         * @param       labels  チャートのシリーズのラベル名(CSV形式)
830         */
831        public void setSeriesLabels( final String labels ) {
832                String[] lbls = StringUtil.csv2Array( getRequestParameter( labels ) );
833                if( lbls.length == 0 ) { return; }
834
835                for( int i=0; i<lbls.length; i++ ) {
836                        lbls[i] = getLabel( lbls[i] );                          // カンマ分解した後、ラベルリソースを取得する。
837                }
838
839                chDataset.setSeriesLabels( lbls );
840        }
841
842        /**
843         * 【TAG】Value(縦軸)のラベルを表示するかどうか[true:する/false:しない]を指定します(初期値:true[表示する])。
844         *
845         * @og.tag
846         * ValueAxis にて設定される、縦軸情報の、ラベルを表示するかどうか指定します。
847         * 初期値は、true(表示する)です。
848         *
849         * @og.rev 4.0.2.0 (2007/12/20) 新規追加
850         *
851         * @param       labelsVisible   ラベル表示 [true:する/false:しない]
852         */
853        public void setValueLabelsVisible( final String labelsVisible ) {
854                final boolean flag = nval( getRequestParameter( labelsVisible ),true );
855                chDataset.setValueLabelsVisible( flag );
856        }
857
858        /**
859         * 【TAG】Value(縦軸)のマーカーを表示するかどうか[true:する/false:しない]を指定します(初期値:true[表示する])。
860         *
861         * @og.tag
862         * ValueAxis にて設定される、縦軸情報の、マーカーを表示するかどうか指定します。
863         * 初期値は、true(表示する)です。
864         *
865         * @og.rev 4.0.2.0 (2007/12/20) 新規追加
866         *
867         * @param       marksVisible    マーカー表示 [true:する/false:しない]
868         */
869        public void setValueMarksVisible( final String marksVisible ) {
870                final boolean flag = nval( getRequestParameter( marksVisible ),true );
871                chDataset.setValueMarksVisible( flag );
872        }
873
874        /**
875         * 【TAG】データの値(itemText)を表示するかどうか[true/false/last]を指定します(初期値:false[表示しない])。
876         *
877         * @og.tag
878         * CategoryItemRenderer 関連のグラフの設定値をグラフ上に表示するかどうかを
879         * 指定します。
880         * true に設定した場合、通常の場合は、すべてのシリーズにラベル表示されます。
881         * false に設定すると、表示されません。
882         * last を設定すると、各シリーズの最後の値のみ表示されます。
883         * ChartCreate クラスに、seriesPikup が設定されている場合は、指定のシリーズ
884         * のみの設定値を表示し、他の値は、表示しません。
885         * 同様に、dynamicOCNo が指定されている場合(動的なマーカーライン)
886         * 最下位のシリーズは、閾値として使用されるため、設定値は表示されません。
887         * ラベルの表示位置は、表示する線グラフの傾きに応じてラベルの表示場所を
888         * 変えます。山形、右坂、谷形、左坂 に応じて、上中、下右、下中、上右 に
889         * 位置を設定します。右にずらすのは、10 ピクセル固定です。
890         * 初期値は、false(表示しない)です。
891         *
892         * @og.rev 4.1.1.0 (2008/02/04) 新規追加
893         * @og.rev 4.1.2.0 (2008/03/12) 文字列のまま、渡すように変更
894         *
895         * @param       itemLabelVisible        表示方法 [true:ラベル表示/false:非表示/last:最後の値のみ表示]
896         */
897        public void setItemLabelVisible( final String itemLabelVisible ) {
898                final String flag = nval( getRequestParameter( itemLabelVisible ),"false" );
899                chDataset.setItemLabelVisible( flag );
900        }
901
902        /**
903         * 【TAG】データの値(itemText)の表示に、桁区切り文字を使用するかどうか[true/false]を指定します(初期値:true[使用する])。
904         *
905         * @og.tag
906         * itemLabelVisible=true 時に、表示されるデータ値ラベルで、
907         * NumberFormat していますが、3桁区切り文字(123,456,789.0) の
908         * 区切り記号を表示するかどうかを指定します。
909         * true を指定すると、表示します。false では、表示しません。
910         * 初期値は、true(使用する)です。
911         *
912         * @og.rev 4.1.2.0 (2008/03/12) 新規追加
913         *
914         * @param       used    桁区切り文字使用 [true:使用する/false:使用しない]
915         */
916        public void setUseItemLabelSep( final String used ) {
917                final boolean useItemLabelSep = nval( getRequestParameter( used ),true );
918                chDataset.setUseItemLabelSep( useItemLabelSep );
919        }
920
921        /**
922         * 【TAG】縦軸の表示領域INSET値(double)を指定します(初期値:null)。
923         *
924         * @og.tag
925         * 縦軸文字表示領域(NumberAxis)の幅の追加値を設定します。
926         * これは、通常の表示領域の左側にスペースを挿入します。
927         * あくまで、追加する値なので、文字の長さは含まれません。
928         * 何も指定しない場合は、設定しません。
929         *
930         * @og.rev 4.0.3.0 (2008/01/07) 新規追加
931         *
932         * @param       inset   Value(縦軸)の表示領域INSET値
933         */
934        public void setValueInset( final String inset ) {
935                final String valueInset = nval( getRequestParameter( inset ),null );
936                chDataset.setValueInset( valueInset );
937        }
938
939        /**
940         * 【TAG】BOXチャートのバー幅(double)を指定します(初期値:null)。
941         *
942         * @og.tag
943         * BOXチャートのバー幅(double)を指定します。
944         * 設定されるのは、org.jfree.chart.renderer.category.BarRenderer を
945         * 使用した描画のみです。
946         * 棒グラフのバー幅指定は、直接、CategoryItemRendererState に設定しています。
947         * 通常は、barMaxWidth(0.0~1.0)とbarItemMargin(0.0~1.0)を用いて比率で指定します。
948         * 何も指定しない場合は、設定しません。
949         *
950         * @og.rev 4.0.3.0 (2008/01/07) 新規追加
951         *
952         * @param       width   BOXチャートのバー幅(double)
953         */
954        public void setBarWidth( final String width ) {
955                final String barWidth = nval( getRequestParameter( width ),null );
956                chDataset.setBarWidth( barWidth );
957        }
958
959        /**
960         * 【TAG】BOXチャートのバー幅の最大値(0.0~1.0)を指定します(初期値:null)。
961         *
962         * @og.tag
963         * BOXチャートのバー幅の比率の最大値を指定します。
964         * 表示領域を1として小数点以下の数値で棒の幅を設定します。
965         * 設定した幅に無理がある時は適当なサイズに調整されます。
966         * (小さくしたときには棒が線のようになる)
967         * 設定されるのは、org.jfree.chart.renderer.category.BarRenderer を
968         * 使用した描画のみです。
969         * 何も指定しない場合は、設定しません。
970         *
971         * @og.rev 4.0.2.0 (2007/12/20) 新規追加
972         *
973         * @param       barWidth        BOXチャートのバー幅の最大値(0.0~1.0)
974         */
975        public void setBarMaxWidth( final String barWidth ) {
976                final String maxBarWidth = nval( getRequestParameter( barWidth ),null );
977                chDataset.setBarMaxWidth( maxBarWidth );
978        }
979
980        /**
981         * 【TAG】BOXチャートのバーアイテムのマージン(0.0~1.0)を指定します(初期値:null)。
982         *
983         * @og.tag
984         * BOXチャートのバーアイテムのマージンの比率を指定します。
985         * 棒の間を表示領域を1として小数点以下の数値で幅を設定します。
986         * 無理がある時は適当なサイズに調整されます。
987         * barMaxWidth より優先されます。
988         * 設定されるのは、org.jfree.chart.renderer.category.BarRenderer を
989         * 使用した描画のみです。
990         * 何も指定しない場合は、設定しません。
991         *
992         * @og.rev 4.0.2.0 (2007/12/20) 新規追加
993         *
994         * @param       margin  BOXチャートのバーアイテムのマージン(0.0~1.0)
995         */
996        public void setBarItemMargin( final String margin ) {
997                final String itemMargin = nval( getRequestParameter( margin ),null );
998                chDataset.setBarItemMargin( itemMargin );
999        }
1000
1001        /**
1002         * 【TAG】表示下限値(これ以下のデータは未表示)の値(double)を指定します(初期値:null)。
1003         *
1004         * @og.tag
1005         * HybsLine でのみ使用可能です。
1006         * この設定値以下のデータは、存在しない扱いとします。
1007         * Lineを引くとき、このデータと、存在しているデータ間にラインは引かれません。
1008         * 何も指定しない場合は、設定しません。
1009         *
1010         * @og.rev 4.0.3.0 (2008/01/07) 新規追加
1011         *
1012         * @param       limit   表示下限値 (これ以下のデータは未表示)
1013         */
1014        public void setVisibleLimit( final String limit ) {
1015                final String visibleLimit = nval( getRequestParameter( limit ),null );
1016                chDataset.setVisibleLimit( visibleLimit );
1017        }
1018
1019        /**
1020         * 【TAG】グラフの書き出し位置の調整比率を指定します(初期値:null 0.0(真ん中:MIDDLE))。
1021         *
1022         * @og.tag
1023         * HybsStackedBar でのみ使用可能です。
1024         * グラフを描画する場合の、書き出し位置を少しずらします。
1025         * これは、グラフの幅に対して、比率で指定します。
1026         * 0.0(初期値)の場合は、初期描画位置である、CategoryAnchor.Middle と
1027         * 同じ箇所から、書き出されます。
1028         * 1.0 の場合、中心から、グラフ幅の半分が加算され、END位置に寄ります。
1029         * 同様に、-1.0 の場合は、グラフ幅の半分が減算され、START 位置になります。
1030         * つまり、中心から、グラフ幅の半分単位で、前方/後方にずらす事が出来ます。
1031         *   書き出し位置 = 中心(Middle) + (domainMargin)*幅/2
1032         * 初期値は、0.0(真ん中:MIDDLE)です。
1033         *
1034         * @og.rev 4.1.1.0 (2008/02/14) 新規追加
1035         *
1036         * @param   margin グラフの書き出し位置の調整比率
1037         */
1038        public void setDomainMargin( final String margin ) {
1039                final String domMgn = nval( getRequestParameter( margin ),null );
1040                if( domMgn != null ) {
1041                        final double domainMargin = Double.parseDouble( domMgn );
1042                        chDataset.setDomainMargin( domainMargin ) ;     // double margin
1043                }
1044        }
1045
1046        /**
1047         * 【TAG】時刻を表す場合の表現の仕方[E1/E2/E3/H1/H2/H3]を指定します(初期値:null)。
1048         *
1049         * @og.tag
1050         * HybsNumberAxis にオーバーライドする 時間を表示する DecimalFormat の内部クラスを利用するに当たり、
1051         * 時刻の表示方法を指定します。
1052         * 外部から与える数字は、連続している必要があるため、10進数です。
1053         * たとえば、1700 → 17:00 , 2150 → 21:30 という感じです。
1054         * 2400 を超えると日付違いになります。
1055         *
1056         * 英語表記(:)と日本語表記(時)の区別と、24時間を超える場合の表示方法によって、6種類のパターンが存在します。
1057         *  E1:そのまま、24:00 となり、加算されていく。
1058         *  E2:そのまま、0:00 に戻る。(日付は無視)
1059         *  E3:そのまま、1 00:00 と日付が付与される。
1060         *  H1:そのまま、24時00分 となり、加算されていく。
1061         *  H2:そのまま、00時00分 に戻る。(日付は無視)
1062         *  H3:そのまま、1日 00時00分 と日付が付与される。
1063         * 初期値は、使用しない(-1)です。
1064         *
1065         * @og.rev 5.5.2.1 (2012/05/07) 新規追加
1066         *
1067         * @param   type 表示方法 [E1/E2/E3/H1/H2/H3]
1068         */
1069        public void setTimeFormatType( final String type ) {
1070                final String timeFormatType = nval( getRequestParameter( type ),null );
1071                chDataset.setTimeFormatType( timeFormatType );
1072        }
1073
1074        /**
1075         * 【TAG】ラベルの表示向きを縦にするかどうか[false/true]を指定します(初期値:false[横書き])。
1076         *
1077         * @og.tag
1078         * ChartCreate の rotationLabel は、角度を指定できましたが、NumberAxis では、
1079         * 縦にするかどうかの指定しかできません。
1080         * ここでは、true を指定するとラベルは、縦書きになります。
1081         * 初期値は、false(横書き)です。
1082         *
1083         * @og.rev 5.5.2.1 (2012/05/07) 新規追加
1084         *
1085         * @param       useVLavels      ラベルの表示向き [false:横書き/true:縦書き]
1086         */
1087        public void setUseVerticalLabels( final String useVLavels ) {
1088                final boolean useVerticalLabels = nval( getRequestParameter( useVLavels ),false );
1089                chDataset.setUseVerticalLabels( useVerticalLabels );
1090        }
1091
1092        /**
1093         * 【TAG】カテゴリのカラー名指定があるかどうか[true/false]を指定します(初期値:false)。
1094         *
1095         * @og.tag
1096         * select category,series1,series2,series3,・・・,color from ・・・ の様に
1097         * 検索するSelect文の一番最後に、Color文字列を付けて、カテゴリのカラー名の指定を行う事が可能です。
1098         * つまり、useCategoryColor="true" を指定すると、最後のカラムは、Color文字列と認識して、
1099         * データ(シリーズとして)使われなくなります。
1100         * CategoryColor は、HybsColorBar と、HybsColorBar3D のみサポートされている機能ですが、
1101         * グラフ合成(例えば、HybsParetoLineなど)と同時に使用する場合、同じ select文や、DBTableModelを
1102         * 使った処理を行う場合、Color指定のカラムを無視する必要があります。
1103         * そういう場合(つまり、カテゴリカラーを使わない場合)に、共通のSelect文を指定する場合にも、true に
1104         * 設定して、Color文字列を無視するように指定します。
1105         *
1106         * 初期値は、false(指定しない)です。
1107         *
1108         * @og.rev 6.0.2.2 (2014/10/03) 新規追加
1109         *
1110         * @param       useCateColor    カテゴリのカラー名指定 [false:指定しない/true:指定する]
1111         */
1112        public void setUseCategoryColor( final String useCateColor ) {
1113                final boolean useCategoryColor = nval( getRequestParameter( useCateColor ),false );
1114                chDataset.setUseCategoryColor( useCategoryColor );
1115        }
1116
1117        /**
1118         * シリアライズ用のカスタムシリアライズ読み込みメソッド
1119         *
1120         * ここでは、transient 宣言された内部変数の内、初期化が必要なフィールドのみ設定します。
1121         *
1122         * @og.rev 4.0.0.0 (2006/09/31) 新規追加
1123         * @serialData 一部のオブジェクト(ChartDataset)は、読み込まれません。
1124         *
1125         * @param       strm    ObjectInputStreamオブジェクト
1126         * @see #release2()
1127         * @throws IOException  シリアライズに関する入出力エラーが発生した場合
1128         * @throws ClassNotFoundException       クラスを見つけることができなかった場合
1129         */
1130        private void readObject( final ObjectInputStream strm ) throws IOException , ClassNotFoundException {
1131                strm.defaultReadObject();
1132                chDataset = new ChartDataset();
1133        }
1134
1135        /**
1136         * このオブジェクトの文字列表現を返します。
1137         * 基本的にデバッグ目的に使用します。
1138         *
1139         * @return このクラスの文字列表現
1140         * @og.rtnNotNull
1141         */
1142        @Override
1143        public String toString() {
1144
1145                // 6.0.2.5 (2014/10/31) char を append する。
1146                final StringBuilder rtn = new StringBuilder( BUFFER_MIDDLE )
1147                        .append( '[' ).append( this.getClass().getName() ).append( ']' ).append( CR )
1148                        .append( "dbid        [" ).append( dbid       ).append( ']' ).append( CR )
1149                        .append( "sql         [" ).append( sql        ).append( ']' ).append( CR )
1150                        .append( "dataset     [" ).append( chDataset  ).append( ']' ).append( CR );
1151
1152                return rtn.toString();
1153        }
1154}