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

Last change on this file since 4640 was 4640, checked in by kjdon, 21 years ago

indented some comments

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