/**
  * Generate a {@link SnapshotDiffReport} based on detailed diff information.
  *
  * @return A {@link SnapshotDiffReport} describing the difference
  */
 public SnapshotDiffReport generateReport() {
   List<DiffReportEntry> diffReportList = new ArrayList<DiffReportEntry>();
   for (INode node : diffMap.keySet()) {
     diffReportList.add(new DiffReportEntry(DiffType.MODIFY, diffMap.get(node)));
     if (node.isDirectory()) {
       ChildrenDiff dirDiff = dirDiffMap.get(node);
       List<DiffReportEntry> subList =
           dirDiff.generateReport(
               diffMap.get(node), (INodeDirectoryWithSnapshot) node, isFromEarlier());
       diffReportList.addAll(subList);
     }
   }
   return new SnapshotDiffReport(
       snapshotRoot.getFullPathName(),
       Snapshot.getSnapshotName(from),
       Snapshot.getSnapshotName(to),
       diffReportList);
 }