/*
  * Filter elements to avoid having files of directory traces listed as
  * separate traces.
  */
 private void filterElements(TracePackageElement parentElement) {
   for (TracePackageElement childElement : parentElement.getChildren()) {
     filterElements(childElement);
     if (childElement instanceof TracePackageTraceElement) {
       // no need to do length check here
       RemoteImportTraceFilesElement filesElement =
           (RemoteImportTraceFilesElement) childElement.getChildren()[0];
       IFileStore parentFile = filesElement.getRemoteFile().getParent();
       if (fDirectoryTraces.contains(
           TmfTraceCoreUtils.newSafePath(parentFile.toURI().getPath()))) {
         removeChild(childElement, parentElement);
         continue;
       }
       IFileStore grandParentFile = parentFile.getParent();
       if (grandParentFile != null
           && fDirectoryTraces.contains(
               TmfTraceCoreUtils.newSafePath(grandParentFile.toURI().getPath()))) {
         // ignore file if grandparent is a directory trace
         // for example: file is a index file of a LTTng kernel trace
         parentElement.removeChild(childElement);
         if (parentElement.getChildren().length == 0) {
           TracePackageElement grandParentElement = parentElement.getParent();
           removeChild(parentElement, grandParentElement);
         }
         continue;
       }
     } else if (childElement instanceof RemoteImportFolderElement) {
       if (childElement.getChildren().length == 0) {
         parentElement.removeChild(childElement);
       }
     }
   }
 }