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 }