001: /*
002: * Created on 16/07/2004
003: *
004: * Swing Components - visit http://sf.net/projects/gfd
005: *
006: * Copyright (C) 2004 Igor Regis da Silva Simões
007: *
008: * This program is free software; you can redistribute it and/or
009: * modify it under the terms of the GNU General Public License
010: * as published by the Free Software Foundation; either version 2
011: * of the License, or (at your option) any later version.
012: *
013: * This program is distributed in the hope that it will be useful,
014: * but WITHOUT ANY WARRANTY; without even the implied warranty of
015: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
016: * GNU General Public License for more details.
017: *
018: * You should have received a copy of the GNU General Public License
019: * along with this program; if not, write to the Free Software
020: * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
021: *
022: */
023: package br.com.igor.beans.table;
024:
025: import java.sql.SQLException;
026: import java.util.Date;
027: import java.util.Map;
028:
029: import javax.swing.JTable;
030: import javax.swing.table.JTableHeader;
031: import javax.swing.table.TableColumn;
032: import javax.swing.table.TableColumnModel;
033: import javax.swing.table.TableModel;
034:
035: import br.com.igor.db.ControllerCreationException;
036: import br.com.igor.db.PersistentObject;
037:
038: /**
039: * Componente de Tabela capaz de realizar conexão com um banco de dados para reter os dados que irão
040: * preenche-lo. <BR>
041: * Pra usá-lo basta instanciá-lo passando o tipo de dado que desevrá ser carregado do banco. O tipo passado
042: * deverá ser um derivado de PersistentObject e a conexão com o banco de dados deverá estar devidamente
043: * configurada através do DataBaseManager.
044: *
045: * @see br.com.igor.db.PersistentObject br.com.igor.db.DataBaseManager
046: * @author Igor Regis da Silva Simoes
047: */
048: public class DBTable extends JTable {
049: /**
050: * Cria uma nova instância de DBTable
051: */
052: public DBTable() {
053: //Não fazemos nada
054: }
055:
056: /**
057: * Cria uma nova instância de DBTable
058: *
059: * @param dataType tipo de dados que deverão ser carregados pelo componente.
060: */
061: public DBTable(PersistentObject dataType) {
062: getDBModel().setDataType(dataType);
063: try {
064: getDBModel().filter();
065: } catch (ControllerCreationException e) {
066: // TODO Auto-generated catch block
067: e.printStackTrace();
068: } catch (SQLException e) {
069: // TODO Auto-generated catch block
070: e.printStackTrace();
071: }
072: createDefaultColumnsFromModel();
073: }
074:
075: /**
076: * Cria uma nova instância de DBTable
077: *
078: * @param dataType tipo de dados que deverão ser carregados pelo componente.
079: * @param tableHeaderRenderer Rendere para o Header da tabela
080: */
081: public DBTable(PersistentObject dataType,
082: SortableTabelHeaderRenderer tableHeaderRenderer) {
083: getDBModel().setDataType(dataType);
084: try {
085: getDBModel().filter();
086: } catch (ControllerCreationException e) {
087: // TODO Auto-generated catch block
088: e.printStackTrace();
089: } catch (SQLException e) {
090: // TODO Auto-generated catch block
091: e.printStackTrace();
092: }
093: createDefaultColumnsFromModel();
094: tableHeader.setDefaultRenderer(tableHeaderRenderer);
095: }
096:
097: /**
098: * Retona o modelo de dados que representa o conteúdo deste componente.
099: *
100: * @return modelo de dados que representa o conteúdo deste componente, do tipo DBTableModel.
101: * @see br.com.igor.beans.DBComboBoxModel
102: */
103: public DBTableModel getDBModel() {
104: return (DBTableModel) dataModel;
105: }
106:
107: /**
108: * @see javax.swing.JTable#createDefaultDataModel()
109: */
110: @Override
111: protected TableModel createDefaultDataModel() {
112: return new DBTableModel(null);
113: }
114:
115: /**
116: * @see javax.swing.JTable#createDefaultTableHeader()
117: */
118: @Override
119: protected JTableHeader createDefaultTableHeader() {
120: JTableHeader tableHeader = new JTableHeader(columnModel);
121: tableHeader
122: .setDefaultRenderer(new SortableTabelHeaderRenderer());
123: return tableHeader;
124: }
125:
126: /**
127: * @see javax.swing.JTable#createDefaultColumnsFromModel()
128: */
129: @Override
130: public void createDefaultColumnsFromModel() {
131: TableModel m = getModel();
132: if (m != null) {
133: // Remove todas as colunas atuais
134: TableColumnModel cm = getColumnModel();
135: while (cm.getColumnCount() > 0) {
136: cm.removeColumn(cm.getColumn(0));
137: }
138:
139: // Cria novas colunas a partir do DataBaseTableModel
140: for (int i = 0; i < m.getColumnCount(); i++) {
141: TableColumn newColumn = new TableColumn(i);
142:
143: if (m.getColumnClass(i).getName().equals(
144: Date.class.getName())) {
145: newColumn
146: .setCellRenderer(new ConfiguravelTableCellRenderer(
147: ConfiguravelTableCellRenderer.DATA,
148: -1));
149: } else if (m.getColumnClass(i).getName().equals(
150: Double.class.getName())) {
151: newColumn
152: .setCellRenderer(new ConfiguravelTableCellRenderer(
153: ConfiguravelTableCellRenderer.DINHEIRO,
154: -1));
155: } else if (m.getColumnClass(i).getName().equals(
156: Boolean.class.getName())) {
157: newColumn
158: .setCellRenderer(new ConfiguravelTableCellRenderer(
159: ConfiguravelTableCellRenderer.BOOLEANO,
160: -1));
161: } else
162: newColumn
163: .setCellRenderer(new ConfiguravelTableCellRenderer(
164: -1, -1));
165: addColumn(newColumn);
166: }
167: }
168: }
169:
170: /**
171: * Retorna o nome deste componente
172: *
173: * @return Nome do componente
174: */
175: @Override
176: public String getName() {
177: return "DBTable";
178: }
179:
180: /**
181: * Retrona os dados em uma determinada posição na lista da tabela
182: *
183: * @param index Posição onde estão os dados que se deseja recuperar
184: * @return Map contendo os dados
185: * @throws SQLException
186: */
187: public Map<String, Object> getDataAt(int index) throws SQLException {
188: return getDBModel().getDataAt(index);
189: }
190:
191: /**
192: * Retorna um PersistentObject representando os dados de uma determinada posição da coleção.
193: *
194: * @param index Posição da qual se deseja pegar os dados.
195: * @return PersistentObject representando os dados/
196: * @throws SQLException Caso ocorra um erro sql.
197: */
198: public PersistentObject getPersistentObject(int index)
199: throws SQLException {
200: return getDBModel().getPersistentObject(index);
201: }
202:
203: /**
204: * Determina o tipo de dados contidos nesta coleção assim como o filtro para o que será retido.
205: *
206: * @param dataType tipo de dados contidos nesta coleção assim como o filtro para o que será retido
207: */
208: public void setDataType(PersistentObject dataType) {
209: getDBModel().setDataType(dataType);
210: }
211:
212: /**
213: * Carrega os dados da colação a partir do banco de dados usando um critério para filtrar os dados
214: * carregados.
215: *
216: * @throws ControllerCreationException Quando houver qualquer problema referente a conexão com o banco de
217: * dados.
218: * @throws SQLException Quando houver problema na execução da query que retem os dados do banco.
219: */
220: public void filter() throws ControllerCreationException,
221: SQLException {
222: getDBModel().filter();
223: }
224:
225: /**
226: * Carrega os dados da coleção a partir do banco de dados.
227: *
228: * @throws ControllerCreationException Quando houver qualquer problema referente a conexão com o banco de
229: * dados.
230: * @throws SQLException Quando houver problema na execução da query que retem os dados do banco.
231: */
232: public void loadDados() throws ControllerCreationException,
233: SQLException {
234: try {
235: setDataType(getDBModel().getDataType().getClass()
236: .newInstance());
237: } catch (Exception e) {
238: // TODO Auto-generated catch block
239: e.printStackTrace();
240: }
241: getDBModel().loadDados();
242: }
243:
244: /**
245: * Oculta uma coluna da tebela
246: *
247: * @param columnName Nome da coluna a ser ocultada
248: */
249: public void hideColumn(String columnName) {
250: getColumn(columnName).setWidth(0);
251: getColumn(columnName).setMinWidth(0);
252: getColumn(columnName).setMaxWidth(0);
253: }
254:
255: /**
256: * Exibe uma coluna da tabla, caso esteja oculta
257: *
258: * @param columnName Nome da coluna a ser exibida
259: */
260: public void showColumn(String columnName) {
261: showColumn(columnName, 80);
262: }
263:
264: /**
265: * Exibe uma coluna da tabla, caso esteja oculta
266: *
267: * @param columnName Nome da coluna a ser exibida
268: * @param width Largura da coluna
269: */
270: public void showColumn(String columnName, int width) {
271: getColumn(columnName).setMinWidth(30);
272: getColumn(columnName).setMaxWidth(150);
273: getColumn(columnName).setWidth(width);
274: getColumn(columnName).setPreferredWidth(width);
275: }
276: }
|