/* * QuerySpanGridModel.java * * Copyright 2000 Eliad Technologies, Inc. All Rights Reserved. * * This software is the proprietary information of Eliad Technologies, Inc. */ package example08; import java.util.*; import java.sql.*; import com.eliad.model.*; /** * This class implements a procedural span model. * @author Daniel Rosenblatt * @version 1.0 */ public class QuerySpanGridModel extends GenericGridModel { private Connection connection_; private Statement statement_; private String query_; private AbstractGridModel columnHeaderModel_; private AbstractSpanModel spanModel_=new SpannedViewSpanModel(); private boolean spanned_; private TreeSet spannedRows_ = new TreeSet(); public QuerySpanGridModel(String url,String driverName) throws ClassNotFoundException, SQLException { this(url,driverName,"",""); } public QuerySpanGridModel(String url,String driverName,String user,String passwd) throws ClassNotFoundException, SQLException { Class.forName(driverName); connection_ = DriverManager.getConnection(url, user, passwd); statement_ = connection_.createStatement(); } public void setQuery(String query) { if (connection_ == null || statement_ == null) throw new IllegalStateException("There is no database or statement to execute the query."); try { query_ = query; ResultSet resultSet = statement_.executeQuery(query); ResultSetMetaData metaData = resultSet.getMetaData(); final int colCount = metaData.getColumnCount(); final String[] colNames = new String[colCount]; for (int i = 0; i < colCount; i++) colNames[i] = metaData.getColumnName(i+1); columnHeaderModel_ = new AbstractGridModel () { public int getRowCount() { return 1; } public int getColumnCount() { if (spanned_) return colCount - 1; return colCount; } public Object getValueAt(int row, int column) { if (spanned_) column++; return colNames[column]; } }; // Get all rows. Vector rows = new Vector(); while (resultSet.next()) { Vector newRow = new Vector(colCount); for (int i = 0; i < colCount; i++) newRow.add(resultSet.getObject(i+1)); rows.add(newRow); } setDataVector(rows); resultSet.close(); } catch (SQLException ex) { System.err.println(ex); } } public int getColumnCount() { if (spanned_) return super.getColumnCount() - 1; return super.getColumnCount(); } public Object getValueAt(int row, int column) { if (spanned_) column++; return super.getValueAt(row, column); } public boolean isSpanned() { return spanned_; } public void setSpanned(boolean spanned) { if (spanned_ != spanned) { String label=(String)columnHeaderModel_.getValueAt(0,0); spanned_ = spanned; if (spanned) { Object spanValue = null; for (int row = 0; row < getRowCount(); row++) { Object curValue = super.getValueAt(row, 0); if (spanValue!=null && !spanValue.equals(curValue) || spanValue==null && curValue!=null) { spanValue = curValue; Vector newRow = new Vector(); for (int j=0;j