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