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             *
067             */
068            public void executeQuery( final Connection con, final String query ) throws SQLException {
069    
070                    Statement statement = null;
071                    ResultSet resultSet = null;
072                    try {
073                            statement = con.createStatement();
074                            resultSet = statement.executeQuery(query);
075                            ResultSetMetaData metaData = resultSet.getMetaData();
076    
077                            int columnCount = metaData.getColumnCount();
078    
079                            if(columnCount < 4) {
080                                    String errMsg = "HybsTaskSeriesCollection.executeQuery() : 実行できません?n"
081                                                            + "select series,task,st(時間),ed(時間) は、最低?です?それ以降?無視します?"
082                                                            + " SQL=" + query ;
083                                    throw new SQLException( errMsg );
084                            }
085    
086                            String bkSeries = null;         // キーブレイクのための過去のSeries
087    
088                            TaskSeries taskseries = null;
089                            while (resultSet.next()) {
090                                    // first column contains the row key...
091                                    String seriVal  = resultSet.getString(1);                                       // シリーズ?
092                                    if( seriVal != null && !seriVal.equals( bkSeries ) ) {
093                                            if( taskseries != null ) { add( taskseries ); }                 // キーブレイクでTaskSeriesCollectionにセ?
094                                            taskseries = new TaskSeries( seriVal );
095                                            bkSeries = seriVal ;
096                                    }
097    
098                                    String taskVal          = resultSet.getString(2);                       // タスク?
099                                    String stDataVal        = resultSet.getString(3);                       // st(時間)
100                                    String edDateVal        = resultSet.getString(4);                       // ed(時間)
101    
102                                    Date stDate = HybsDateUtil.getCalendar( stDataVal ).getTime() ;
103                                    Date edDate = HybsDateUtil.getCalendar( edDateVal ).getTime() ;
104    
105                                    Task task = new Task( taskVal, stDate, edDate );
106    
107                                    taskseries.add( task );
108                            }
109                            if( taskseries != null ) { add( taskseries ); }         // キーブレイクでTaskSeriesCollectionにセ?
110                    }
111                    finally {
112                            Closer.resultClose( resultSet ) ;
113                            Closer.stmtClose( statement ) ;
114                    }
115            }
116    }