Changeset 8432


Ignore:
Timestamp:
2004-11-03T11:31:46+13:00 (19 years ago)
Author:
mdewsnip
Message:

Fixed the problem where filtering empty values causes NPEs, and now displays all the values assigned to a metadata element, not just the last.

Location:
trunk/gli/src/org/greenstone/gatherer
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/gli/src/org/greenstone/gatherer/gui/metaaudit/MetaAuditTable.java

    r8313 r8432  
    5757    private boolean initial_state;
    5858
    59     private boolean ready;
    60 
    6159    private Filter filter;
    6260
     
    6462
    6563    private MetaAuditFrame parent_frame;
     64
     65    private MetaAuditRenderer cell_renderer;
    6666
    6767    private MetadataAuditTableModel metadata_audit_table_model;
     
    7373    public MetaAuditTable(MetaAuditFrame parent_frame) {
    7474    super();
     75    this.cell_renderer = new MetaAuditRenderer();
    7576    this.header_renderer = new HeaderRenderer();
    7677    this.parent_frame = parent_frame;
    7778    getTableHeader().addMouseListener(new HeaderListener(parent_frame, this));
    7879    setAutoResizeMode(AUTO_RESIZE_OFF);
    79     setDefaultRenderer(ArrayList.class, new MetaAuditRenderer());
    80     ready = true;
    8180    }
    8281
     
    120119    TableColumnModel column_model = getColumnModel();
    121120    for(int i = 0; i < column_model.getColumnCount(); i++) {
     121        column_model.getColumn(i).setCellRenderer(cell_renderer);
    122122        column_model.getColumn(i).setHeaderRenderer(header_renderer);
    123123    }
     
    129129    wait(true);
    130130    super.tableChanged(e);
    131     if(ready) {
    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         // Iterate through cell values finding tallest and widest for each row and column respectively.
    137         for(int j = 0; j < dataModel.getRowCount(); j++) {
    138         for(int k = 0; k < dataModel.getColumnCount(); k++) {
    139             Object object = dataModel.getValueAt(j, k);
    140             if(object instanceof ArrayList) {
    141             ArrayList data = (ArrayList) object;
    142             if(heights[j] == null || data.size() > heights[j].size()) {
    143                 heights[j] = data;
     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;
    144151            }
    145             String longest = "";
    146             for(int i = 0; i < data.size(); i++) {
    147                 String temp = data.get(i).toString();
    148                 if(temp.length() > longest.length()) {
    149                 longest = temp;
    150                 }
    151                 temp = null;
    152             }
    153             if(widths[k] == null || longest.length() > widths_value[k]) {
    154                 widths_value[k] = longest.length();
    155                 widths[k] = data;
    156             }
    157             longest = null;
    158             data = null;
     152            }
     153            if (widths[k] == null || longest.length() > widths_value[k]) {
     154            widths_value[k] = longest.length();
     155            widths[k] = data;
    159156            }
    160157        }
    161158        }
    162         // Now assign the dimensions we have determined to be the largest.
    163         TableCellRenderer renderer = getDefaultRenderer(ArrayList.class);
    164         for(int l = 0; l < heights.length; l++) {
    165         if(heights[l] != null) {
    166             Component component = renderer.getTableCellRendererComponent(this, heights[l], false, false, 0, 0);
    167             Dimension size = component.getPreferredSize();
    168             setRowHeight(l, size.height);
    169             size = null;
    170             component = null;
     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;
    171176        }
     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);
    172183        }
    173         heights = null;
    174         for(int m = 0; m < widths.length; m++) {
    175         if(widths[m] != null) {
    176             Component component = renderer.getTableCellRendererComponent(this, widths[m], false, false, 0, 0);
    177             Dimension size = component.getPreferredSize();
    178             int width = size.width + MARGIN;
    179             if(width > (2 * parent_frame.getSize().width) / 3) {
    180             width = (2 * parent_frame.getSize().width) / 3;
    181             }
    182             Component header = header_renderer.getTableCellRendererComponent(this, dataModel.getColumnName(m), false, false, 0, 0);
    183             if(header.getPreferredSize().width + MARGIN > width) {
    184             width = header.getPreferredSize().width + MARGIN;
    185             }
    186             columnModel.getColumn(m).setPreferredWidth(width);
    187             size = null;
    188             component = null;
    189         }
    190         }
    191         widths = null;
    192         renderer = null;
    193184    }
     185
    194186    wait(initial_state);
    195187    }
     188
    196189
    197190    public void sortOrderChanged(TableModelSorterEvent event) {
  • trunk/gli/src/org/greenstone/gatherer/metadata/MetadataAuditTableModel.java

    r8240 r8432  
    3434import javax.swing.table.*;
    3535import org.greenstone.gatherer.Configuration;
    36 import org.greenstone.gatherer.DebugStream;
    3736import org.greenstone.gatherer.file.FileNode;
    3837
     
    7473    for (int i = 0; i < metadata_audit_table_entries.size(); i++) {
    7574        MetadataAuditTableEntry metadata_audit_table_entry = (MetadataAuditTableEntry) metadata_audit_table_entries.get(i);
    76         MetadataValueTreeNode metadata_value_tree_node = metadata_audit_table_entry.getMetadataValueTreeNode(col);
    77         column_values.add(metadata_value_tree_node.toString());
     75        MetadataValueTreeNode[] metadata_value_tree_nodes = metadata_audit_table_entry.getMetadataValueTreeNodes(col);
     76        if (metadata_value_tree_nodes != null) {
     77        for (int j = 0; j < metadata_value_tree_nodes.length; j++) {
     78            column_values.add(metadata_value_tree_nodes[j].toString());
     79        }
     80        }
    7881    }
    7982
     
    97100    }
    98101
     102    ArrayList cell_values = new ArrayList();
    99103    MetadataAuditTableEntry metadata_audit_table_entry = (MetadataAuditTableEntry) metadata_audit_table_entries.get(row);
    100     return metadata_audit_table_entry.getMetadataValueTreeNode(col);
     104    MetadataValueTreeNode[] metadata_value_tree_nodes = metadata_audit_table_entry.getMetadataValueTreeNodes(col);
     105    if (metadata_value_tree_nodes != null) {
     106        for (int j = 0; j < metadata_value_tree_nodes.length; j++) {
     107        cell_values.add(metadata_value_tree_nodes[j].toString());
     108        }
     109    }
     110
     111    return cell_values;
    101112    }
    102113
     
    144155    {
    145156    private File file = null;
    146     private MetadataValue[] metadata_values = null;
     157    private ArrayList[] metadata_values = null;
    147158
    148159
     
    151162        this.file = file;
    152163
    153         metadata_values = new MetadataValue[metadata_elements.size()];
     164        metadata_values = new ArrayList[metadata_elements.size()];
     165        for (int i = 0; i < metadata_values.length; i++) {
     166        metadata_values[i] = new ArrayList();
     167        }
     168
    154169        for (int i = 0; i < metadata_values_list.size(); i++) {
    155170        MetadataValue metadata_value = (MetadataValue) metadata_values_list.get(i);
     
    159174        for (int j = 0; j < metadata_elements.size(); j++) {
    160175            if (metadata_element.equals(metadata_elements.get(j))) {
    161             metadata_values[j] = metadata_value;
     176            metadata_values[j].add(metadata_value);
    162177            break;
    163178            }
     
    167182
    168183
    169     public MetadataValueTreeNode getMetadataValueTreeNode(int col)
    170     {
    171         if (metadata_values[col] == null) {
    172         return null;
     184    public MetadataValueTreeNode[] getMetadataValueTreeNodes(int col)
     185    {
     186        ArrayList metadata_values_list = metadata_values[col];
     187        if (metadata_values_list == null) {
     188        return null;
     189        }
     190
     191        MetadataValueTreeNode[] metadata_value_tree_nodes = new MetadataValueTreeNode[metadata_values_list.size()];
     192        for (int i = 0; i < metadata_values_list.size(); i++) {
     193        metadata_value_tree_nodes[i] = ((MetadataValue) metadata_values_list.get(i)).getMetadataValueTreeNode();
    173194        }
    174195
    175         return metadata_values[col].getMetadataValueTreeNode();
    176     }
     196        return metadata_value_tree_nodes;
     197    }
    177198    }
    178199}
Note: See TracChangeset for help on using the changeset viewer.