/**
     * Whether the element has children.
     *
     * @param element to identify, either a SystemInfo or FileInfo
     * @return true if element has non-empty children list, otherwise false
     */
    public boolean hasChildren(Object element) {
      if (element instanceof ExampleContributions) {
        ExampleContributions si = (ExampleContributions) element;
        if (si.getCategories().isEmpty() == false) return true;
      }

      if (element instanceof ExampleCategory) {
        ExampleCategory si = (ExampleCategory) element;
        if (si.getExamples().isEmpty() == false) return true;
      }

      return false;
    }
    /**
     * Get the category or example name as the label text.
     *
     * @param obj object to label
     * @return category or example name
     */
    public String getText(Object obj) {

      if (obj instanceof ExampleCategory) {
        ExampleCategory c = (ExampleCategory) obj;
        return c.getName();
      }

      if (obj instanceof Example) {
        Example e = (Example) obj;
        return MessageFormat.format("{0} {1}", e.getName(), e.getVersion());
      }

      return obj.toString();
    }
    /** Gets the array of elements based on input. */
    public Object[] getElements(Object inputElement) {

      // individual example contributions
      if (inputElement instanceof ExampleContributions) {
        ExampleContributions input = (ExampleContributions) inputElement;
        return input.getCategoriesArray();
      }

      // example contribution categories
      if (inputElement instanceof ExampleCategory) {
        ExampleCategory input = (ExampleCategory) inputElement;
        return input.getExamplesArray();
      }

      return new Object[0];
    }