private void updateStatus() {
    CPElement entryError = null;
    int nErrorEntries = 0;
    IStatus status = Status.OK_STATUS;
    List<CPElement> elements = getCPaths();
    for (int i = elements.size() - 1; i >= 0; i--) {
      CPElement currElement = elements.get(i);
      if (currElement.getStatus().getSeverity() != IStatus.OK) {
        nErrorEntries++;
        if (entryError == null) {
          entryError = currElement;
        }
      }
    }

    if (nErrorEntries > 0) {
      if (nErrorEntries == 1 && entryError != null) {
        status = entryError.getStatus();
      } else {
        status =
            new Status(
                IStatus.WARNING,
                CUIPlugin.PLUGIN_ID,
                -1,
                NLS.bind(
                    CPathEntryMessages.CPElement_status_multiplePathErrors,
                    String.valueOf(nErrorEntries)),
                null);
      }
    }
    fContext.statusChanged(status);
  }
 @Override
 public Image getImage(Object element) {
   if (element instanceof CPElement) {
     CPElement cpentry = (CPElement) element;
     ImageDescriptor imageDescriptor = getCPElementBaseImage(cpentry);
     if (imageDescriptor != null) {
       switch (cpentry.getStatus().getSeverity()) {
         case IStatus.WARNING:
           imageDescriptor =
               new CPListImageDescriptor(
                   imageDescriptor, CPListImageDescriptor.WARNING, SMALL_SIZE);
           break;
         case IStatus.ERROR:
           imageDescriptor =
               new CPListImageDescriptor(imageDescriptor, CPListImageDescriptor.ERROR, SMALL_SIZE);
           break;
       }
       if (cpentry.getInherited() != null) {
         imageDescriptor =
             new CPListImageDescriptor(
                 imageDescriptor, CPListImageDescriptor.PATH_INHERIT, SMALL_SIZE);
       }
       return fRegistry.get(imageDescriptor);
     }
   } else if (element instanceof CPElementAttribute) {
     String key = ((CPElementAttribute) element).getKey();
     if (key.equals(CPElement.SOURCEATTACHMENT)) {
       return fRegistry.get(
           CDTSharedImages.getImageDescriptor(CDTSharedImages.IMG_OBJS_SOURCE_ATTACH_ATTRIB));
     } else if (key.equals(CPElement.EXCLUSION)) {
       return CDTSharedImages.getImage(CDTSharedImages.IMG_OBJS_EXCLUSION_FILTER_ATTRIB);
     }
   } else if (element instanceof IPathEntry) {
     return getImage(CPElement.createFromExisting((IPathEntry) element, null));
   } else if (element instanceof CPElementGroup) {
     switch (((CPElementGroup) element).getEntryKind()) {
       case IPathEntry.CDT_INCLUDE:
         return CDTSharedImages.getImage(CDTSharedImages.IMG_OBJS_INCLUDES_CONTAINER);
       case IPathEntry.CDT_MACRO:
         return fRegistry.get(fMacroIcon);
       case IPathEntry.CDT_INCLUDE_FILE:
       case IPathEntry.CDT_MACRO_FILE:
         return CDTSharedImages.getImage(CDTSharedImages.IMG_OBJS_INCLUDE);
       case IPathEntry.CDT_LIBRARY:
         return CDTSharedImages.getImage(CDTSharedImages.IMG_OBJS_LIBRARY);
       case -1:
         IResource res = ((CPElementGroup) element).getResource();
         IWorkbenchAdapter adapter = (IWorkbenchAdapter) res.getAdapter(IWorkbenchAdapter.class);
         ImageDescriptor imageDescriptor = adapter.getImageDescriptor(res);
         if (!res.exists()) {
           imageDescriptor =
               new CPListImageDescriptor(
                   imageDescriptor, CPListImageDescriptor.WARNING, SMALL_SIZE);
         }
         return fRegistry.get(imageDescriptor);
     }
   }
   return null;
 }
 private void updateStatus(List<?> selected) {
   if (selected.size() != 1) {
     updateStatus();
     return;
   }
   CPElement element = null;
   if (selected.get(0) instanceof CPElement) {
     element = (CPElement) selected.get(0);
   } else if (selected.get(0) instanceof CPElementAttribute) {
     element = ((CPElementAttribute) selected.get(0)).getParent();
   }
   if (element != null && element.getStatus().getSeverity() != IStatus.OK) {
     fContext.statusChanged(element.getStatus());
   } else {
     updateStatus();
     return;
   }
 }
 public String getCPElementText(CPElement cpentry) {
   IPath path = cpentry.getPath();
   switch (cpentry.getEntryKind()) {
     case IPathEntry.CDT_LIBRARY:
       {
         IPath libPath = (IPath) cpentry.getAttribute(CPElement.LIBRARY);
         StringBuffer str = new StringBuffer();
         addBaseString(libPath, cpentry, str);
         addExport(cpentry, str);
         addParentInfo(cpentry, str);
         return str.toString();
       }
     case IPathEntry.CDT_PROJECT:
       return path.lastSegment();
     case IPathEntry.CDT_INCLUDE:
       {
         IPath incPath = ((IPath) cpentry.getAttribute(CPElement.INCLUDE));
         StringBuffer str = new StringBuffer();
         addBaseString(incPath, cpentry, str);
         addExport(cpentry, str);
         addParentInfo(cpentry, str);
         return str.toString();
       }
     case IPathEntry.CDT_INCLUDE_FILE:
       {
         IPath incFilePath = ((IPath) cpentry.getAttribute(CPElement.INCLUDE_FILE));
         StringBuffer str = new StringBuffer();
         addBaseString(incFilePath, cpentry, str);
         addExport(cpentry, str);
         addParentInfo(cpentry, str);
         return str.toString();
       }
     case IPathEntry.CDT_MACRO:
       {
         StringBuffer str =
             new StringBuffer(
                 (String) cpentry.getAttribute(CPElement.MACRO_NAME)
                     + "=" //$NON-NLS-1$
                     + (String) cpentry.getAttribute(CPElement.MACRO_VALUE));
         addBaseString(null, cpentry, str);
         addExport(cpentry, str);
         addParentInfo(cpentry, str);
         return str.toString();
       }
     case IPathEntry.CDT_MACRO_FILE:
       {
         IPath macroFilePath = ((IPath) cpentry.getAttribute(CPElement.MACROS_FILE));
         StringBuffer str = new StringBuffer();
         addBaseString(macroFilePath, cpentry, str);
         addExport(cpentry, str);
         addParentInfo(cpentry, str);
         return str.toString();
       }
     case IPathEntry.CDT_CONTAINER:
       {
         StringBuffer str = new StringBuffer(path.toString());
         try {
           IPathEntryContainer container =
               CoreModel.getPathEntryContainer(cpentry.getPath(), cpentry.getCProject());
           if (container != null) {
             str.setLength(0);
             str.append(container.getDescription());
           }
         } catch (CModelException e) {
         }
         addExport(cpentry, str);
         return str.toString();
       }
     case IPathEntry.CDT_SOURCE:
     case IPathEntry.CDT_OUTPUT:
       {
         StringBuffer buf = new StringBuffer(path.makeRelative().toString());
         IResource resource = cpentry.getResource();
         if (resource != null && !resource.exists()) {
           buf.append(' ');
           if (cpentry.getStatus().getSeverity()
               != IStatus.OK) { // only valid error for src/output would missing path...
             buf.append(fCreateLabel);
           } else {
             buf.append(fNewLabel);
           }
         }
         return buf.toString();
       }
     default:
       // pass
   }
   return CPathEntryMessages.CPElementLabelProvider_unknown_element_label;
 }