This Bugzilla instance is a read-only archive of historic NetBeans bug reports. To report a bug in NetBeans please follow the project's instructions for reporting issues.

View | Details | Raw Unified | Return to bug 44368
Collapse All | Expand All

(-)loaders/src/org/openide/loaders/FolderChildren.java (-1 / +19 lines)
Lines 15-20 Link Here
15
15
16
import java.beans.*;
16
import java.beans.*;
17
import java.util.*;
17
import java.util.*;
18
import javax.swing.event.ChangeEvent;
19
import javax.swing.event.ChangeListener;
18
20
19
import org.openide.ErrorManager;
21
import org.openide.ErrorManager;
20
import org.openide.filesystems.FileObject;
22
import org.openide.filesystems.FileObject;
Lines 29-35 Link Here
29
* @author Jaroslav Tulach
31
* @author Jaroslav Tulach
30
*/
32
*/
31
final class FolderChildren extends Children.Keys 
33
final class FolderChildren extends Children.Keys 
32
implements PropertyChangeListener {
34
implements PropertyChangeListener, ChangeListener {
33
    /** the folder */
35
    /** the folder */
34
    private DataFolder folder;
36
    private DataFolder folder;
35
    /** filter of objects */
37
    /** filter of objects */
Lines 95-100 Link Here
95
            return;
97
            return;
96
        }
98
        }
97
    }
99
    }
100
    
101
    public void stateChanged( ChangeEvent e ) {
102
        // Filtering changed need to recompute children
103
        setKeys( Collections.EMPTY_SET );
104
        refreshChildren().schedule(0);
105
        postClearTask();
106
        return;
107
    }
98
108
99
    /**
109
    /**
100
     * refreshRunnable holds references to the data object
110
     * refreshRunnable holds references to the data object
Lines 198-203 Link Here
198
    protected void addNotify () {
208
    protected void addNotify () {
199
        // add as a listener for changes on nodes
209
        // add as a listener for changes on nodes
200
        folder.addPropertyChangeListener (listener);
210
        folder.addPropertyChangeListener (listener);
211
        // add listener to the filter
212
        if ( filter instanceof ChangeableDataFilter ) {
213
            ((ChangeableDataFilter)filter).addChangeListener( this );
214
        }
201
        // 
215
        // 
202
        active = true;
216
        active = true;
203
        // start the refresh task to compute the children
217
        // start the refresh task to compute the children
Lines 209-214 Link Here
209
    protected void removeNotify () {
223
    protected void removeNotify () {
210
        // removes the listener
224
        // removes the listener
211
        folder.removePropertyChangeListener (listener);
225
        folder.removePropertyChangeListener (listener);
226
        // remove listener from filter
227
        if ( filter instanceof ChangeableDataFilter ) {
228
            ((ChangeableDataFilter)filter).removeChangeListener( this );
229
        }
212
        //
230
        //
213
        active = false;
231
        active = false;
214
        // we don't call the setKeys directly here because
232
        // we don't call the setKeys directly here because
(-)test/unit/src/org/openide/loaders/FolderChildrenTest.java (+79 lines)
Lines 16-21 Link Here
16
import java.io.IOException;
16
import java.io.IOException;
17
import java.util.*;
17
import java.util.*;
18
import javax.swing.SwingUtilities;
18
import javax.swing.SwingUtilities;
19
import javax.swing.event.ChangeEvent;
20
import javax.swing.event.ChangeListener;
19
21
20
import org.openide.filesystems.*;
22
import org.openide.filesystems.*;
21
import org.openide.loaders.*;
23
import org.openide.loaders.*;
Lines 25-30 Link Here
25
import org.netbeans.junit.*;
27
import org.netbeans.junit.*;
26
import java.util.Enumeration;
28
import java.util.Enumeration;
27
import org.openide.nodes.Node;
29
import org.openide.nodes.Node;
30
import org.openide.nodes.Children;
31
28
32
29
public class FolderChildrenTest extends NbTestCase {
33
public class FolderChildrenTest extends NbTestCase {
30
    public FolderChildrenTest() {
34
    public FolderChildrenTest() {
Lines 80-86 Link Here
80
        assertTrue ("Second one is the same", last[1] == arr[1]);
84
        assertTrue ("Second one is the same", last[1] == arr[1]);
81
        
85
        
82
    }
86
    }
87
    
88
    public void testChangeableDataFilter() throws Exception {
89
        setupSystemProperties();
90
        
91
        FileSystem fs = Repository.getDefault ().getDefaultFileSystem();
92
        FileUtil.createData (fs.getRoot (), "BB/A.txt");
93
        FileUtil.createData (fs.getRoot (), "BB/B.txt");
94
        FileUtil.createData (fs.getRoot (), "BB/AA.txt");
95
        FileUtil.createData (fs.getRoot (), "BB/BA.txt");
96
        
97
        
98
        FileObject bb = fs.findResource("/BB");
99
        
100
        Filter filter = new Filter();
101
        DataFolder folder = DataFolder.findFolder (bb);
102
        
103
        Children ch = folder.createNodeChildren( filter );        
104
        Node[] arr = ch.getNodes (true);
105
        
106
        assertNodes( arr, new String[] { "A.txt", "AA.txt" } );
107
        filter.fire();
108
        arr = ch.getNodes (true);        
109
        assertNodes( arr, new String[] { "B.txt", "BA.txt" } );
110
        
111
    }
83
112
113
    
84
    public static class N1 extends org.openide.nodes.AbstractNode 
114
    public static class N1 extends org.openide.nodes.AbstractNode 
85
    implements Node.Cookie {
115
    implements Node.Cookie {
86
        public N1 () {
116
        public N1 () {
Lines 111-114 Link Here
111
    
141
    
112
    public static final class N2 extends N1 {
142
    public static final class N2 extends N1 {
113
    }
143
    }
144
145
    
146
    private void assertNodes( Node[] nodes, String names[] ) {
147
        
148
        assertEquals( "Wrong number of nodes.", names.length, nodes.length );
149
        
150
        for( int i = 0; i < nodes.length; i++ ) {
151
            System.out.println("Display Name :" + nodes[i].getName() + ":");            
152
            assertEquals( "Wrong name at index " + i + ".", names[i], nodes[i].getName() );
153
        }
154
        
155
    }
156
    
157
    private static class Filter implements ChangeableDataFilter  {
158
159
        private boolean selectA = true;
160
                    
161
        ArrayList listeners = new ArrayList();
162
        
163
        public boolean acceptDataObject (DataObject obj) {
164
            String fileName = obj.getPrimaryFile().getName();
165
            boolean select = fileName.startsWith( "A" );            
166
            select = selectA ? select : !select;
167
            System.out.println("FILTERING " + fileName + " : " + select );
168
            return select;
169
        }
170
        
171
        public void addChangeListener( ChangeListener listener ) {
172
            listeners.add( listener );
173
        }
174
        
175
        public void removeChangeListener( ChangeListener listener ) {
176
            listeners.remove( listener );
177
        }
178
        
179
        public void fire( ) {
180
        
181
            selectA = !selectA;
182
            
183
            ChangeEvent che = new ChangeEvent( this );
184
            
185
            for( Iterator it = listeners.iterator(); it.hasNext(); ) {
186
                ChangeListener chl = (ChangeListener)it.next();
187
                chl.stateChanged( che );
188
            }
189
        }
190
        
191
    }
192
    
114
}
193
}

Return to bug 44368