001 /*
002 * Copyright (c) 2009 The openGion Project.
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
013 * either express or implied. See the License for the specific language
014 * governing permissions and limitations under the License.
015 */
016 package org.opengion.hayabusa.io;
017
018 import java.sql.Connection;
019 // import java.sql.Date;
020 import java.sql.ResultSet;
021 import java.sql.ResultSetMetaData;
022 import java.sql.SQLException;
023 import java.sql.Statement;
024 // import java.sql.Types;
025 // import java.util.Locale;
026
027 import java.util.Date;
028 import java.util.Calendar;
029
030 import org.opengion.fukurou.util.Closer;
031 import org.opengion.fukurou.util.LogWriter;
032 import org.opengion.fukurou.util.HybsDateUtil;
033
034 import org.jfree.data.gantt.TaskSeriesCollection;
035 import org.jfree.data.gantt.TaskSeries;
036 import org.jfree.data.gantt.Task;
037 // import org.jfree.data.time.SimpleTimePeriod;
038
039 /**
040 * HybsTaskSeriesCollection は、org.jfree.data.gantt.TaskSeriesCollection を継承したサブクラスでã€?
041 * オブジェクト作æ?とともに JDBC接続して、TaskSeries ãƒ??タを作æ?しã?セãƒ?ƒˆしますã?
042 * TaskSeriesCollection は、IntervalCategoryDataset, GanttCategoryDataset インターフェースを継承してã�?�¾すã?
043 *
044 * ãƒ??タ形式ã?、シリーズ名ã?タスク名ã?開始日時ã?終äº?—¥æ™?のé ?�§、シリーズ名でソートしておくå¿?¦�がありますã?
045 * シリーズå�?は、キーブレイクで、設定する為ですã?
046 *
047 * select series,task,st(時間),ed(時間) from XX order by series,task,st(時間)
048 *
049 * @og.rev 5.6.1.0 (2013/02/01) 新規作æ?
050 *
051 * @version 0.9.0 2001/05/05
052 * @author Kazuhiko Hasegawa
053 * @since JDK1.1,
054 */
055 public class HybsTaskSeriesCollection extends TaskSeriesCollection {
056 private static final long serialVersionUID = 561020130201L ;
057
058 /**
059 * HybsTaskSeriesCollection オブジェクトã?å†?ƒ¨に、DB検索結果のãƒ??タを設定しまã�?縦æŒ?ã€?
060 *
061 * select series,task,st(時間),ed(時間) from XX order by series,task,st(時間)
062 * シリーズå�?は、キーブレイクで、設定しますã?
063 *
064 * @param con the connection.
065 * @param query the query.
066 * @throws SQLException ãƒ??タベã?ス実行エラーが発生したå?å�?
067 *
068 */
069 public void executeQuery( final Connection con, final String query ) throws SQLException {
070
071 Statement statement = null;
072 ResultSet resultSet = null;
073 try {
074 statement = con.createStatement();
075 resultSet = statement.executeQuery(query);
076 ResultSetMetaData metaData = resultSet.getMetaData();
077
078 int columnCount = metaData.getColumnCount();
079
080 if(columnCount < 4) {
081 String errMsg = "HybsTaskSeriesCollection.executeQuery() : 実行できませんã€?n"
082 + "select series,task,st(時間),ed(時間) は、最低å¿?¦�ですã?それ以降ã?無視しますã?"
083 + " SQL=" + query ;
084 throw new SQLException( errMsg );
085 }
086
087 String bkSeries = null; // キーブレイクのための過去のSeries
088
089 TaskSeries taskseries = null;
090 while (resultSet.next()) {
091 // first column contains the row key...
092 String seriVal = resultSet.getString(1); // シリーズå�?
093 if( seriVal != null && !seriVal.equals( bkSeries ) ) {
094 if( taskseries != null ) { add( taskseries ); } // キーブレイクでTaskSeriesCollectionにセãƒ?ƒˆ
095 taskseries = new TaskSeries( seriVal );
096 bkSeries = seriVal ;
097 }
098
099 String taskVal = resultSet.getString(2); // タスクå�?
100 String stDataVal = resultSet.getString(3); // st(時間)
101 String edDateVal = resultSet.getString(4); // ed(時間)
102
103 Date stDate = HybsDateUtil.getCalendar( stDataVal ).getTime() ;
104 Date edDate = HybsDateUtil.getCalendar( edDateVal ).getTime() ;
105
106 Task task = new Task( taskVal, stDate, edDate );
107
108 taskseries.add( task );
109 }
110 if( taskseries != null ) { add( taskseries ); } // キーブレイクでTaskSeriesCollectionにセãƒ?ƒˆ
111 }
112 finally {
113 Closer.resultClose( resultSet ) ;
114 Closer.stmtClose( statement ) ;
115 }
116 }
117 }