/** 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; } }