/*
   * (non-Javadoc)
   *
   * @see
   * org.eclipse.jdt.ui.StandardJavaElementContentProvider#getPackageFragmentRoots
   * (org.eclipse.jdt.core.IJavaProject)
   */
  protected Object[] getProjectFragments(final IScriptProject project) throws ModelException {
    if (!project.getProject().isOpen()) {
      return StandardModelElementContentProvider.NO_CHILDREN;
    }

    List<Object> result = new ArrayList<Object>();

    boolean addZIPContainer = false;

    IProjectFragment[] roots = project.getProjectFragments();
    for (int i = 0; i < roots.length; i++) {
      IProjectFragment root = roots[i];
      IBuildpathEntry classpathEntry = root.getRawBuildpathEntry();
      if (classpathEntry == null) {
        continue;
      }
      int entryKind = classpathEntry.getEntryKind();
      if (entryKind == IBuildpathEntry.BPE_CONTAINER) {
        // all ClassPathContainers are added later
      } else if (fShowLibrariesNode && (entryKind == IBuildpathEntry.BPE_LIBRARY /*
																 * || entryKind
																 * ==
																 * IBuildpathEntry
																 * .BPE_VARIABLE
																 */)) {
        addZIPContainer = true;
      } else {
        if (isProjectProjectFragment(root)) {
          // filter out package fragments that correspond to projects
          // and
          // replace them with the package fragments directly
          Object[] fragments = getProjectFragmentContent(root);
          for (int j = 0; j < fragments.length; j++) {
            result.add(fragments[j]);
          }
        } else {
          result.add(root);
        }
      }
    }

    if (addZIPContainer) {
      result.add(new LibraryContainer(project));
    }

    // separate loop to make sure all containers are on the classpath
    IBuildpathEntry[] rawBuidspath = project.getRawBuildpath();
    for (int i = 0; i < rawBuidspath.length; i++) {
      IBuildpathEntry classpathEntry = rawBuidspath[i];
      if (classpathEntry.getEntryKind() == IBuildpathEntry.BPE_CONTAINER) {
        result.add(new BuildPathContainer(project, classpathEntry));
      }
    }
    Object[] resources = project.getForeignResources();
    for (int i = 0; i < resources.length; i++) {
      result.add(resources[i]);
    }
    return result.toArray();
  }