source: trunk/gli/src/org/greenstone/gatherer/gui/metaaudit/MetaAuditTable.java@ 8783

Last change on this file since 8783 was 8783, checked in by mdewsnip, 19 years ago

Big tidy up of the workspace and collection trees (Gather/Enrich panes). Still a few more changes and bug fixes to come.

  • Property svn:keywords set to Author Date Id Revision
File size: 5.9 KB
Line 
1/**
2 *#########################################################################
3 *
4 * A component of the Gatherer application, part of the Greenstone digital
5 * library suite from the New Zealand Digital Library Project at the
6 * University of Waikato, New Zealand.
7 *
8 * <BR><BR>
9 *
10 * Author: John Thompson, Greenstone Digital Library, University of Waikato
11 *
12 * <BR><BR>
13 *
14 * Copyright (C) 1999 New Zealand Digital Library Project
15 *
16 * <BR><BR>
17 *
18 * This program is free software; you can redistribute it and/or modify
19 * it under the terms of the GNU General Public License as published by
20 * the Free Software Foundation; either version 2 of the License, or
21 * (at your option) any later version.
22 *
23 * <BR><BR>
24 *
25 * This program is distributed in the hope that it will be useful,
26 * but WITHOUT ANY WARRANTY; without even the implied warranty of
27 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
28 * GNU General Public License for more details.
29 *
30 * <BR><BR>
31 *
32 * You should have received a copy of the GNU General Public License
33 * along with this program; if not, write to the Free Software
34 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
35 *########################################################################
36 */
37package org.greenstone.gatherer.gui.metaaudit;
38
39import de.qfs.lib.gui.*;
40import java.awt.*;
41import java.util.ArrayList;
42import javax.swing.JTable;
43import javax.swing.event.TableModelEvent;
44import javax.swing.table.*;
45import org.greenstone.gatherer.collection.CollectionTreeNode;
46import org.greenstone.gatherer.metadata.MetadataAuditTableModel;
47
48
49/**
50 * @author John Thompson, Greenstone Digital Library, University of Waikato
51 * @version 2.3
52 */
53public class MetaAuditTable
54 extends JTable
55 implements TableModelSorterListener {
56
57 private boolean initial_state;
58
59 private Filter filter;
60
61 private HeaderRenderer header_renderer;
62
63 private MetaAuditFrame parent_frame;
64
65 private MetaAuditRenderer cell_renderer;
66
67 private MetadataAuditTableModel metadata_audit_table_model;
68
69 private SortedTableHelper helper;
70
71 static final private int MARGIN = 10;
72
73 public MetaAuditTable(MetaAuditFrame parent_frame) {
74 super();
75 this.cell_renderer = new MetaAuditRenderer();
76 this.header_renderer = new HeaderRenderer();
77 this.parent_frame = parent_frame;
78 getTableHeader().addMouseListener(new HeaderListener(parent_frame, this));
79 setAutoResizeMode(AUTO_RESIZE_OFF);
80 }
81
82 public Filter getFilter() {
83 return filter;
84 }
85
86
87 public MetadataAuditTableModel getOriginalModel()
88 {
89 return metadata_audit_table_model;
90 }
91
92
93 public TableModelSorter getSorter() {
94 return helper.getTableModelSorter();
95 }
96
97 public boolean isFiltered(int column) {
98 if(filter == null) {
99 return false;
100 }
101 return filter.isFiltered(column);
102 }
103
104 public void newModel(CollectionTreeNode records[]) {
105 if(records == null || records.length == 0) {
106 setModel(new DefaultTableModel());
107 return;
108 }
109 wait(true);
110 initial_state = true;
111 // System.err.println("Build new Model - should only be called once per click!");
112 metadata_audit_table_model = new MetadataAuditTableModel();
113 metadata_audit_table_model.rebuild(records);
114 setModel(metadata_audit_table_model);
115 filter = new Filter(metadata_audit_table_model.getColumnCount());
116 helper = new SortedTableHelper (this, filter, new DefaultTableModelSorter(), header_renderer, null);
117 helper.prepareTable();
118 // Add renderer to columns.
119 TableColumnModel column_model = getColumnModel();
120 for(int i = 0; i < column_model.getColumnCount(); i++) {
121 column_model.getColumn(i).setCellRenderer(cell_renderer);
122 column_model.getColumn(i).setHeaderRenderer(header_renderer);
123 }
124 wait(false);
125 initial_state = false;
126 }
127
128 public void tableChanged(TableModelEvent e) {
129 wait(true);
130 super.tableChanged(e);
131
132 // Create storage area
133 ArrayList heights[] = new ArrayList[dataModel.getRowCount()];
134 int widths_value[] = new int[dataModel.getColumnCount()];
135 ArrayList widths[] = new ArrayList[dataModel.getColumnCount()];
136
137 // Iterate through cell values finding tallest and widest for each row and column respectively.
138 for (int j = 0; j < dataModel.getRowCount(); j++) {
139 for (int k = 0; k < dataModel.getColumnCount(); k++) {
140 Object object = dataModel.getValueAt(j, k);
141 if (object instanceof ArrayList) {
142 ArrayList data = (ArrayList) object;
143 if (heights[j] == null || data.size() > heights[j].size()) {
144 heights[j] = data;
145 }
146 String longest = "";
147 for (int i = 0; i < data.size(); i++) {
148 String temp = data.get(i).toString();
149 if (temp.length() > longest.length()) {
150 longest = temp;
151 }
152 }
153 if (widths[k] == null || longest.length() > widths_value[k]) {
154 widths_value[k] = longest.length();
155 widths[k] = data;
156 }
157 }
158 }
159 }
160
161 // Now assign the dimensions we have determined to be the largest.
162 for (int l = 0; l < heights.length; l++) {
163 if (heights[l] != null) {
164 Component component = cell_renderer.getTableCellRendererComponent(this, heights[l], false, false, 0, 0);
165 Dimension size = component.getPreferredSize();
166 setRowHeight(l, size.height);
167 }
168 }
169 for (int m = 0; m < widths.length; m++) {
170 if (widths[m] != null) {
171 Component component = cell_renderer.getTableCellRendererComponent(this, widths[m], false, false, 0, 0);
172 Dimension size = component.getPreferredSize();
173 int width = size.width + MARGIN;
174 if (width > (2 * parent_frame.getSize().width) / 3) {
175 width = (2 * parent_frame.getSize().width) / 3;
176 }
177
178 Component header = header_renderer.getTableCellRendererComponent(this, dataModel.getColumnName(m), false, false, 0, 0);
179 if (header.getPreferredSize().width + MARGIN > width) {
180 width = header.getPreferredSize().width + MARGIN;
181 }
182 columnModel.getColumn(m).setPreferredWidth(width);
183 }
184 }
185
186 wait(initial_state);
187 }
188
189
190 public void sortOrderChanged(TableModelSorterEvent event) {
191 }
192
193 private void wait(boolean waiting) {
194 if(parent_frame != null) {
195 parent_frame.wait(waiting);
196 }
197 }
198}
Note: See TracBrowser for help on using the repository browser.