001: /*******************************************************************************
002: * Copyright (c) 2000, 2006 IBM Corporation and others.
003: * All rights reserved. This program and the accompanying materials
004: * are made available under the terms of the Eclipse Public License v1.0
005: * which accompanies this distribution, and is available at
006: * http://www.eclipse.org/legal/epl-v10.html
007: *
008: * Contributors:
009: * IBM Corporation - initial API and implementation
010: *******************************************************************************/package org.eclipse.jdt.internal.ui.browsing;
011:
012: import java.util.ArrayList;
013: import java.util.Iterator;
014: import java.util.List;
015:
016: import org.eclipse.core.runtime.Assert;
017:
018: import org.eclipse.jface.viewers.IStructuredSelection;
019:
020: import org.eclipse.jdt.core.IJavaProject;
021: import org.eclipse.jdt.core.IPackageFragmentRoot;
022: import org.eclipse.jdt.core.JavaModelException;
023:
024: class ProjectAndSourceFolderContentProvider extends
025: JavaBrowsingContentProvider {
026:
027: ProjectAndSourceFolderContentProvider(JavaBrowsingPart browsingPart) {
028: super (false, browsingPart);
029: }
030:
031: /* (non-Javadoc)
032: * Method declared on ITreeContentProvider.
033: */
034: public Object[] getChildren(Object element) {
035: if (!exists(element))
036: return NO_CHILDREN;
037:
038: try {
039: startReadInDisplayThread();
040: if (element instanceof IStructuredSelection) {
041: Assert.isLegal(false);
042: Object[] result = new Object[0];
043: Class clazz = null;
044: Iterator iter = ((IStructuredSelection) element)
045: .iterator();
046: while (iter.hasNext()) {
047: Object item = iter.next();
048: if (clazz == null)
049: clazz = item.getClass();
050: if (clazz == item.getClass())
051: result = concatenate(result, getChildren(item));
052: else
053: return NO_CHILDREN;
054: }
055: return result;
056: }
057: if (element instanceof IStructuredSelection) {
058: Assert.isLegal(false);
059: Object[] result = new Object[0];
060: Iterator iter = ((IStructuredSelection) element)
061: .iterator();
062: while (iter.hasNext())
063: result = concatenate(result, getChildren(iter
064: .next()));
065: return result;
066: }
067: if (element instanceof IJavaProject)
068: return getPackageFragmentRoots((IJavaProject) element);
069: if (element instanceof IPackageFragmentRoot)
070: return NO_CHILDREN;
071:
072: return super .getChildren(element);
073:
074: } catch (JavaModelException e) {
075: return NO_CHILDREN;
076: } finally {
077: finishedReadInDisplayThread();
078: }
079: }
080:
081: protected Object[] getPackageFragmentRoots(IJavaProject project)
082: throws JavaModelException {
083: if (!project.getProject().isOpen())
084: return NO_CHILDREN;
085:
086: IPackageFragmentRoot[] roots = project
087: .getPackageFragmentRoots();
088: List list = new ArrayList(roots.length);
089: // filter out package fragments that correspond to projects and
090: // replace them with the package fragments directly
091: for (int i = 0; i < roots.length; i++) {
092: IPackageFragmentRoot root = roots[i];
093: if (!isProjectPackageFragmentRoot(root))
094: list.add(root);
095: }
096: return list.toArray();
097: }
098:
099: /*
100: *
101: * @see ITreeContentProvider
102: */
103: public boolean hasChildren(Object element) {
104: return element instanceof IJavaProject
105: && super.hasChildren(element);
106: }
107: }
|