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

Last change on this file since 8243 was 8243, checked in by mdewsnip, 20 years ago

Removed all occurrences of classes explicitly importing other classes in the same package.

  • Property svn:keywords set to Author Date Id Revision
File size: 6.0 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.file.FileNode;
46
47/**
48 * @author John Thompson, Greenstone Digital Library, University of Waikato
49 * @version 2.3
50 */
51public class MetaAuditTable
52 extends JTable
53 implements TableModelSorterListener {
54
55 private boolean initial_state;
56
57 private boolean ready;
58
59 private Filter filter;
60
61 private HeaderRenderer header_renderer;
62
63 private MetaAuditFrame parent_frame;
64
65 private MetaAuditModel model;
66
67 private SortedTableHelper helper;
68
69 static final private int MARGIN = 10;
70
71 public MetaAuditTable(MetaAuditFrame parent_frame) {
72 super();
73 this.header_renderer = new HeaderRenderer();
74 this.parent_frame = parent_frame;
75 getTableHeader().addMouseListener(new HeaderListener(parent_frame, this));
76 setAutoResizeMode(AUTO_RESIZE_OFF);
77 setDefaultRenderer(ArrayList.class, new MetaAuditRenderer());
78 ready = true;
79 }
80
81 public Filter getFilter() {
82 return filter;
83 }
84
85 public MetaAuditModel getOriginalModel() {
86 return model;
87 }
88
89 public TableModelSorter getSorter() {
90 return helper.getTableModelSorter();
91 }
92
93 public boolean isFiltered(int column) {
94 if(filter == null) {
95 return false;
96 }
97 return filter.isFiltered(column);
98 }
99
100 public void newModel(FileNode records[]) {
101 if(records == null || records.length == 0) {
102 setModel(new DefaultTableModel());
103 return;
104 }
105 wait(true);
106 initial_state = true;
107 ///ystem.err.println("Build new Model - should only be called once per click!");
108 model = new MetaAuditModel(records);
109 setModel(model);
110 filter = new Filter(model.getColumnCount());
111 helper = new SortedTableHelper (this, filter, new DefaultTableModelSorter(), header_renderer, null);
112 helper.prepareTable();
113 // Add renderer to columns.
114 TableColumnModel column_model = getColumnModel();
115 for(int i = 0; i < column_model.getColumnCount(); i++) {
116 column_model.getColumn(i).setHeaderRenderer(header_renderer);
117 }
118 wait(false);
119 initial_state = false;
120 }
121
122 public void tableChanged(TableModelEvent e) {
123 wait(true);
124 super.tableChanged(e);
125 if(ready) {
126 // Create storage area
127 ArrayList heights[] = new ArrayList[dataModel.getRowCount()];
128 int widths_value[] = new int[dataModel.getColumnCount()];
129 ArrayList widths[] = new ArrayList[dataModel.getColumnCount()];
130 // Iterate through cell values finding tallest and widest for each row and column respectively.
131 for(int j = 0; j < dataModel.getRowCount(); j++) {
132 for(int k = 0; k < dataModel.getColumnCount(); k++) {
133 Object object = dataModel.getValueAt(j, k);
134 if(object instanceof ArrayList) {
135 ArrayList data = (ArrayList) object;
136 if(heights[j] == null || data.size() > heights[j].size()) {
137 heights[j] = data;
138 }
139 String longest = "";
140 for(int i = 0; i < data.size(); i++) {
141 String temp = data.get(i).toString();
142 if(temp.length() > longest.length()) {
143 longest = temp;
144 }
145 temp = null;
146 }
147 if(widths[k] == null || longest.length() > widths_value[k]) {
148 widths_value[k] = longest.length();
149 widths[k] = data;
150 }
151 longest = null;
152 data = null;
153 }
154 }
155 }
156 // Now assign the dimensions we have determined to be the largest.
157 TableCellRenderer renderer = getDefaultRenderer(ArrayList.class);
158 for(int l = 0; l < heights.length; l++) {
159 if(heights[l] != null) {
160 Component component = renderer.getTableCellRendererComponent(this, heights[l], false, false, 0, 0);
161 Dimension size = component.getPreferredSize();
162 setRowHeight(l, size.height);
163 size = null;
164 component = null;
165 }
166 }
167 heights = null;
168 for(int m = 0; m < widths.length; m++) {
169 if(widths[m] != null) {
170 Component component = renderer.getTableCellRendererComponent(this, widths[m], false, false, 0, 0);
171 Dimension size = component.getPreferredSize();
172 int width = size.width + MARGIN;
173 if(width > (2 * parent_frame.getSize().width) / 3) {
174 width = (2 * parent_frame.getSize().width) / 3;
175 }
176 Component header = header_renderer.getTableCellRendererComponent(this, dataModel.getColumnName(m), false, false, 0, 0);
177 if(header.getPreferredSize().width + MARGIN > width) {
178 width = header.getPreferredSize().width + MARGIN;
179 }
180 columnModel.getColumn(m).setPreferredWidth(width);
181 size = null;
182 component = null;
183 }
184 }
185 widths = null;
186 renderer = null;
187 }
188 wait(initial_state);
189 }
190
191 public void sortOrderChanged(TableModelSorterEvent event) {
192 }
193
194 private void wait(boolean waiting) {
195 if(parent_frame != null) {
196 parent_frame.wait(waiting);
197 }
198 }
199}
Note: See TracBrowser for help on using the repository browser.