KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > eclipse > jdt > internal > ui > navigator > NonEssentialElementsFilter


1 /*******************************************************************************
2  * Copyright (c) 2000, 2007 IBM Corporation and others.
3  * All rights reserved. This program and the accompanying materials
4  * are made available under the terms of the Eclipse Public License v1.0
5  * which accompanies this distribution, and is available at
6  * http://www.eclipse.org/legal/epl-v10.html
7  *
8  * Contributors:
9  * IBM Corporation - initial API and implementation
10  *******************************************************************************/

11 package org.eclipse.jdt.internal.ui.navigator;
12
13
14 import org.eclipse.jface.viewers.IStructuredContentProvider;
15 import org.eclipse.jface.viewers.ITreeContentProvider;
16 import org.eclipse.jface.viewers.StructuredViewer;
17 import org.eclipse.jface.viewers.Viewer;
18 import org.eclipse.jface.viewers.ViewerFilter;
19
20 import org.eclipse.ui.navigator.CommonViewer;
21 import org.eclipse.ui.navigator.IExtensionStateModel;
22 import org.eclipse.ui.navigator.INavigatorContentService;
23
24 import org.eclipse.jdt.core.IPackageFragment;
25 import org.eclipse.jdt.core.JavaModelException;
26
27 /**
28  *
29  * This filter is only applicable to instances of the Common Navigator.
30  *
31  * This filter will not allow essential elements to be blocked.
32  */

33 public abstract class NonEssentialElementsFilter extends ViewerFilter {
34
35     private static final String JavaDoc JAVA_EXTENSION_ID = "org.eclipse.jdt.java.ui.javaContent"; //$NON-NLS-1$
36

37     private boolean isStateModelInitialized = false;
38     private IExtensionStateModel fStateModel = null;
39
40     private INavigatorContentService fContentService;
41
42     private ViewerFilter fDelegateFilter;
43
44     protected NonEssentialElementsFilter(ViewerFilter delegateFilter) {
45         fDelegateFilter = delegateFilter;
46     }
47
48     /* (non-Javadoc)
49      * @see org.eclipse.jface.viewers.ViewerFilter#select(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
50      */

51     public boolean select(Viewer viewer, Object JavaDoc parent, Object JavaDoc element) {
52         if (!isStateModelInitialized) {
53             initStateModel(viewer);
54         }
55         if (fContentService == null || fStateModel == null) {
56             return true;
57         } else if (element instanceof IPackageFragment) {
58             if (isApplicable() && viewer instanceof StructuredViewer) {
59                 boolean isHierarchicalLayout= !fStateModel.getBooleanProperty(IExtensionStateConstants.Values.IS_LAYOUT_FLAT);
60                 try {
61                     IPackageFragment fragment = (IPackageFragment) element;
62                     if (isHierarchicalLayout && !fragment.isDefaultPackage() && fragment.hasSubpackages()) {
63                         return hasFilteredChildren((StructuredViewer) viewer, fragment);
64                     }
65                 } catch (JavaModelException e) {
66                     return false;
67                 }
68             }
69         }
70         return doSelect(viewer, parent, element);
71     }
72
73     private boolean hasFilteredChildren(StructuredViewer viewer, IPackageFragment fragment) {
74         Object JavaDoc[] children= getRawChildren(viewer, fragment);
75         ViewerFilter[] filters= viewer.getFilters();
76         for (int i= 0; i < filters.length; i++) {
77             children= filters[i].filter(viewer, fragment, children);
78             if (children.length == 0)
79                 return false;
80         }
81         return true;
82     }
83     
84     private Object JavaDoc[] getRawChildren(StructuredViewer viewer, IPackageFragment fragment) {
85         IStructuredContentProvider provider = (IStructuredContentProvider) viewer.getContentProvider();
86         if (provider instanceof ITreeContentProvider) {
87             return ((ITreeContentProvider)provider).getChildren(fragment);
88         }
89         return provider.getElements(fragment);
90     }
91
92     protected boolean doSelect(Viewer viewer, Object JavaDoc parent, Object JavaDoc element) {
93         return fDelegateFilter.select(viewer, parent, element);
94     }
95
96     private boolean isApplicable() {
97         return fContentService != null && fContentService.isVisible(JAVA_EXTENSION_ID) && fContentService.isActive(JAVA_EXTENSION_ID);
98     }
99
100     private synchronized void initStateModel(Viewer viewer) {
101         if (!isStateModelInitialized) {
102             if (viewer instanceof CommonViewer) {
103
104                 CommonViewer commonViewer = (CommonViewer) viewer;
105                 fContentService = commonViewer.getNavigatorContentService();
106                 fStateModel = fContentService.findStateModel(JAVA_EXTENSION_ID);
107
108                 isStateModelInitialized = true;
109             }
110         }
111     }
112 }
113
Popular Tags