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