/** Parse result into generator */
  private void parseResult() {
    groupmap = new TreeMap();
    if (!groupusk) pageset = new TreeMap(RelevanceComparator.comparator);
    relatedTerms = new TreeSet(RelevanceComparator.comparator);
    relatedIndexes = new TreeSet(RelevanceComparator.comparator);

    Iterator<TermEntry> it = result.iterator();
    while (it.hasNext()) {
      TermEntry o = (TermEntry) it.next();
      if (o instanceof TermPageEntry) {
        TermPageEntry pageEntry = (TermPageEntry) o;
        // Put pages into a group hirearchy : USK key/docnames --> USK editions --> Pages
        String sitebase;
        long uskEdition = Long.MIN_VALUE;
        // Get the key and name
        FreenetURI uri;
        uri = pageEntry.page;
        // convert usk's
        if (uri.isSSKForUSK()) {
          uri = uri.uskForSSK();
          // Get the USK edition
          uskEdition = uri.getEdition();
        }
        // Get the site base name, key + documentname - uskversion
        sitebase = uri.setMetaString(null).setSuggestedEdition(0).toString().replaceFirst("/0", "");
        Logger.minor(this, sitebase);

        // Add site
        if (!groupmap.containsKey(sitebase))
          groupmap.put(sitebase, new TermPageGroupEntry(sitebase));
        TermPageGroupEntry siteGroup = groupmap.get(sitebase);
        // Add page
        siteGroup.addPage(uskEdition, pageEntry);

      } else if (o instanceof TermTermEntry) {
        relatedTerms.add((TermTermEntry) o);
      } else if (o instanceof TermIndexEntry) {
        relatedIndexes.add((TermIndexEntry) o);
      } else Logger.error(this, "Unknown TermEntry type : " + o.getClass().getName());
    }

    if (!groupusk) { // Move entries from the groupmap to the pageset, marking whether thaey are the
                     // newest
      for (Iterator<TermPageGroupEntry> it2 = groupmap.values().iterator(); it2.hasNext(); ) {
        TermPageGroupEntry groupentry = it2.next();
        SortedMap<Long, SortedSet<TermPageEntry>> editions =
            groupentry.getEditions(); // The editions of each site
        SortedSet<TermPageEntry> newest =
            editions.get(editions.lastKey()); // get the newest edition
        for (Iterator<SortedSet<TermPageEntry>> editionIterator =
                groupentry.getEditions().values().iterator();
            editionIterator.hasNext(); ) {
          SortedSet<TermPageEntry> edition =
              editionIterator.next(); // Iterate through all the editions
          if (!showold && edition != newest) // If not showing old, skip all but newest
          continue;
          for (TermPageEntry termPageEntry : edition) {
            pageset.put(
                termPageEntry,
                edition == newest); // Add pages, marking whether they are from the newest edition
          }
        }
      }
      groupmap = null;
    }
  }