[JIRA] Updated: (GLAZEDLISTS-475) IndexOutOfBoundsException when changing a filter using a JideTable under 1.8.0

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

[JIRA] Updated: (GLAZEDLISTS-475) IndexOutOfBoundsException when changing a filter using a JideTable under 1.8.0

JIRA jira-no-reply@java.net

     [ https://java.net/jira/browse/GLAZEDLISTS-475?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

brands updated GLAZEDLISTS-475:
-------------------------------

    Attachment: ThreadProxyEventList.java
                SwingThreadProxyEventList.java
                TestFilterBug.java

Java source files demonstrating the workaround.

> IndexOutOfBoundsException when changing a filter using a JideTable under 1.8.0
> ------------------------------------------------------------------------------
>
>                 Key: GLAZEDLISTS-475
>                 URL: https://java.net/jira/browse/GLAZEDLISTS-475
>             Project: glazedlists
>          Issue Type: Bug
>          Components: swing
>    Affects Versions: current
>         Environment: Operating System: other
> Platform: PC
>            Reporter: actualsystems
>            Assignee: jessewilson
>             Fix For: milestone 1
>
>         Attachments: SwingThreadProxyEventList.java, TestFilterBug.java, ThreadProxyEventList.java
>
>
> Our test case uses JideTable from the Jide grids package:
> (http://www.jidesoft.com/javadoc/com/jidesoft/grid/JideTable.html)
> (jide-grids.jar and jide-common.jar).
> Tested using Windows Vista and a 32-bit JVM (1.6) and Jide-grids.jar version
> (from the MANIFEST.MF) Jide-Version: 2.1.2.02
> The following test case reproduces the problem, and changing t from being a
> JideTable to a JTable causes it not to occur. This test case works under
> GlazedLists 1.7.0.
> import ca.odell.glazedlists.*;
> import ca.odell.glazedlists.gui.TableFormat;
> import ca.odell.glazedlists.swing.*;
> import com.jidesoft.grid.JideTable;
> import javax.swing.*;
> import javax.swing.text.JTextComponent;
> import java.awt.*;
> import java.lang.reflect.InvocationTargetException;
> import java.util.List;
> /**
>  * Test for a bug in Glazed Lists filtering
>  * If a selection is on the screen, and the filter changes so that the selected
> row index no longer exists,
>  * we get an IndexOutOfBoundsException
>  */
> public class TestFilterBug implements Runnable {
>     private static final EventList<String> base = new DebugList<String>();
>     public static void main(String[] args) throws InvocationTargetException,
> InterruptedException {
>         SwingUtilities.invokeLater(new TestFilterBug());
>         Thread.sleep(500); // show window
>         base.getReadWriteLock().writeLock().lock();
>         try {
>             base.add("C");
>             base.add("B");
>             base.add("A");
>         } finally {
>             base.getReadWriteLock().writeLock().unlock();
>         }
>     }
>     public void run() {
>         try {
>             JFrame f = new JFrame();
>             f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
>             JTable t = new JideTable();
>             f.getContentPane().setLayout(new BorderLayout());
>             JTextComponent filter = new JTextField();
>             f.getContentPane().add(filter, BorderLayout.NORTH);
>             f.getContentPane().add(new JScrollPane(t), BorderLayout.CENTER);
>             FilterList<String> filtered = new FilterList<String>(base, new
> TextComponentMatcherEditor<String>(filter, new TextFilterator<String>() {
>                 public void getFilterStrings(List<String> baseList, String
> element) {
>                     baseList.add(element);
>                 }
>             }));
>             f.pack();
>             t.setModel(new EventTableModel<String>(filtered, new
> TableFormat<String>() {
>                 public int getColumnCount() {
>                     return 3;
>                 }
>                 public String getColumnName(int column) {
>                     return "X";
>                 }
>                 public Object getColumnValue(String baseObject, int column) {
>                     return baseObject + column;
>                 }
>             }));
>             t.setSelectionModel(new EventSelectionModel<String>(filtered));
>             f.setVisible(true);
>             Thread.sleep(1000); // wait for list
>             t.getSelectionModel().setSelectionInterval(2, 2);
>             filter.setText("X");
>         } catch (Throwable t) {
>             System.out.println(t.getMessage());
>             t.printStackTrace();
>             System.exit(0);
>         }
>     }
> }
> Program output:
> Index: 2, Size: 0
> java.lang.IndexOutOfBoundsException: Index: 2, Size: 0
> at java.util.ArrayList.RangeCheck(ArrayList.java:547)
> at java.util.ArrayList.get(ArrayList.java:322)
> at
> ca.odell.glazedlists.impl.gui.ThreadProxyEventList.get(ThreadProxyEventList.java:136)
> at ca.odell.glazedlists.ListSelection.setAllColor(ListSelection.java:544)
> at ca.odell.glazedlists.ListSelection.deselectAll(ListSelection.java:524)
> at
> ca.odell.glazedlists.ListSelection.setAnchorSelectionIndex(ListSelection.java:799)
> at
> ca.odell.glazedlists.swing.EventSelectionModel.setAnchorSelectionIndex(EventSelectionModel.java:314)
> at com.jidesoft.grid.JideTable.d(Unknown Source)
> at com.jidesoft.grid.JideTable.b(Unknown Source)
> at com.jidesoft.grid.JideTable.tableChanged(Unknown Source)
> at
> javax.swing.table.AbstractTableModel.fireTableChanged(AbstractTableModel.java:280)
> at
> ca.odell.glazedlists.swing.EventTableModel.handleListChange(EventTableModel.java:189)
> at ca.odell.glazedlists.swing.EventTableModel.listChanged(EventTableModel.java:170)
> at
> ca.odell.glazedlists.event.ListEventAssembler$ListEventFormat.fire(ListEventAssembler.java:412)
> at
> ca.odell.glazedlists.event.ListEventAssembler$ListEventFormat.fire(ListEventAssembler.java:409)
> at
> ca.odell.glazedlists.event.SequenceDependenciesEventPublisher$SubjectAndListener.firePendingEvent(SequenceDependenciesEventPublisher.java:445)
> at
> ca.odell.glazedlists.event.SequenceDependenciesEventPublisher.fireEvent(SequenceDependenciesEventPublisher.java:344)
> at
> ca.odell.glazedlists.event.ListEventAssembler.commitEvent(ListEventAssembler.java:316)
> at ca.odell.glazedlists.FilterList.constrained(FilterList.java:389)
> at ca.odell.glazedlists.FilterList.changeMatcher(FilterList.java:286)
> at ca.odell.glazedlists.FilterList.changeMatcherWithLocks(FilterList.java:269)
> at ca.odell.glazedlists.FilterList.access$100(FilterList.java:51)
> at
> ca.odell.glazedlists.FilterList$PrivateMatcherEditorListener.changedMatcher(FilterList.java:443)
> at
> ca.odell.glazedlists.matchers.AbstractMatcherEditor.fireChangedMatcher(AbstractMatcherEditor.java:115)
> at
> ca.odell.glazedlists.matchers.AbstractMatcherEditor.fireConstrained(AbstractMatcherEditor.java:73)
> at
> ca.odell.glazedlists.matchers.TextMatcherEditor.setTextMatcher(TextMatcherEditor.java:321)
> at
> ca.odell.glazedlists.matchers.TextMatcherEditor.setFilterText(TextMatcherEditor.java:292)
> at
> ca.odell.glazedlists.swing.TextComponentMatcherEditor.refilter(TextComponentMatcherEditor.java:209)
> at
> ca.odell.glazedlists.swing.TextComponentMatcherEditor.access$100(TextComponentMatcherEditor.java:44)
> at
> ca.odell.glazedlists.swing.TextComponentMatcherEditor$FilterHandler.insertUpdate(TextComponentMatcherEditor.java:221)
> at javax.swing.text.AbstractDocument.fireInsertUpdate(AbstractDocument.java:185)
> at javax.swing.text.AbstractDocument.handleInsertString(AbstractDocument.java:734)
> at javax.swing.text.AbstractDocument.insertString(AbstractDocument.java:693)
> at javax.swing.text.PlainDocument.insertString(PlainDocument.java:114)
> at javax.swing.text.AbstractDocument.replace(AbstractDocument.java:655)
> at javax.swing.text.JTextComponent.setText(JTextComponent.java:1693)
> at
> com.actual_systems.p2.client.GUI.workordermanager.TestFilterBug.run(TestFilterBug.java:86)
> at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
> at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
> at
> java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
> at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
> at
> java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
> at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
> at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
> at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
> Process finished with exit code 0

--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: https://java.net/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira