001/* 002 * Copyright (c) 2004-2010 The Regents of the University of California. 003 * All rights reserved. 004 * 005 * '$Author: welker $' 006 * '$Date: 2010-05-06 05:21:26 +0000 (Thu, 06 May 2010) $' 007 * '$Revision: 24234 $' 008 * 009 * Permission is hereby granted, without written agreement and without 010 * license or royalty fees, to use, copy, modify, and distribute this 011 * software and its documentation for any purpose, provided that the above 012 * copyright notice and the following two paragraphs appear in all copies 013 * of this software. 014 * 015 * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY 016 * FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES 017 * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF 018 * THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF 019 * SUCH DAMAGE. 020 * 021 * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, 022 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 023 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE 024 * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF 025 * CALIFORNIA HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, 026 * ENHANCEMENTS, OR MODIFICATIONS. 027 * 028 */ 029 030package org.ecoinformatics.seek.ecogrid; 031 032import java.awt.Color; 033import java.awt.Component; 034import java.util.Vector; 035 036import javax.swing.JCheckBox; 037import javax.swing.JTable; 038import javax.swing.table.AbstractTableModel; 039import javax.swing.table.TableCellRenderer; 040import javax.swing.table.TableColumn; 041 042/** 043 * This class will render a table cell as another table. The cell of subtable 044 * will be rendered as checkbox render 045 * 046 * @author Jing Tao 047 * 048 */ 049 050public class TableTableCellRenderer implements TableCellRenderer { 051 protected static final String DOCUMENTTYPECOL = "documenType"; 052 private Vector selectedServiceList = null; 053 private JTable topTable = null; 054 private int topRowNum = CheckBoxTableCellRenderer.DEFAUTTOPROW; 055 056 /** 057 * Constructor with a vector(tableModel) 058 * 059 * @param selectedServiceList 060 * Vector 061 */ 062 public TableTableCellRenderer(JTable topTable, Vector selectedServiceList) { 063 this.topTable = topTable; 064 this.selectedServiceList = selectedServiceList; 065 066 }// TableTableCellRenderer 067 068 /** 069 * Method to render a cell with another table 070 * 071 * @param table 072 * JTable 073 * @param value 074 * Object 075 * @param isSelected 076 * boolean 077 * @param hasFocus 078 * boolean 079 * @param row 080 * int 081 * @param column 082 * int 083 * @return Component 084 */ 085 public Component getTableCellRendererComponent(JTable table, Object value, 086 boolean isSelected, boolean hasFocus, int row, int column) { 087 topRowNum = row;// top row number for store this table 088 SelectableDocumentType[] selectedTypeList = (SelectableDocumentType[]) value; 089 SelectableDocumentTypeTableModel tableModel = new SelectableDocumentTypeTableModel( 090 selectedTypeList); 091 JTable cellTable = new JTable(tableModel); 092 cellTable.setRowHeight(ServicesDisplayPanel.CELLHEIGHT); 093 // make the border is white for the cell 094 cellTable.setGridColor(Color.WHITE); 095 TableColumn columnOne = cellTable.getColumn(DOCUMENTTYPECOL); 096 columnOne.setPreferredWidth(ServicesDisplayPanel.CELLPREFERREDWIDTH); 097 CheckBoxTableCellRenderer checkboxRenderer = new CheckBoxTableCellRenderer( 098 topTable, selectedServiceList, topRowNum); 099 columnOne.setCellRenderer(checkboxRenderer); 100 CheckBoxTableCellEditor editor = new CheckBoxTableCellEditor(topTable, 101 new JCheckBox(), selectedServiceList, topRowNum); 102 columnOne.setCellEditor(editor); 103 TableTableCellEditor tableEditor = new TableTableCellEditor(topTable, 104 new JCheckBox(), selectedServiceList); 105 cellTable.setCellEditor(tableEditor); 106 return cellTable; 107 }// getTableCellRendererCompenent 108 109}// TableTableCellRenderer 110 111class SelectableDocumentTypeTableModel extends AbstractTableModel { 112 private SelectableDocumentType[] list = null; 113 114 /** 115 * Consturctor 116 * 117 * @param list 118 * DocumenType[] 119 */ 120 public SelectableDocumentTypeTableModel(SelectableDocumentType[] list) { 121 this.list = list; 122 } 123 124 /** 125 * Get the number of row 126 * 127 * @return int 128 */ 129 public int getRowCount() { 130 if (list != null) { 131 return list.length; 132 } else { 133 return 0; 134 } 135 } // getRowCount 136 137 /** 138 * Get the number of column 139 * 140 * @return int 141 */ 142 public int getColumnCount() { 143 return 1; 144 } // getColumnCount 145 146 /** 147 * Get the header for given column number 148 * 149 * @param column 150 * int 151 * @return String 152 */ 153 public String getColumnName(int column) { 154 return TableTableCellRenderer.DOCUMENTTYPECOL; 155 } // getCoumnName 156 157 /** 158 * Method to get value 159 * 160 * @param rowIndex 161 * int 162 * @param columnIndex 163 * int 164 * @return Object 165 */ 166 public Object getValueAt(int rowIndex, int columnIndex) { 167 Object value = null; 168 try { 169 if (list != null) { 170 SelectableDocumentType type = list[rowIndex]; 171 value = type; 172 }// if 173 174 }// try 175 catch (ArrayIndexOutOfBoundsException aioobe) { 176 value = null; 177 } catch (NullPointerException npe) { 178 value = null; 179 } catch (Exception e) { 180 value = null; 181 } 182 183 return value; 184 185 } // getValueAt 186 187 /** 188 * Make table editable 189 * 190 * @param row 191 * int 192 * @param column 193 * int 194 * @return boolean 195 */ 196 public boolean isCellEditable(int row, int column) { 197 return true; 198 }// isCellEditable 199 200}// SelectedDocumentTypeTableModel