From b704f4eeb7b2c9be4205dd378bbb7ccecc032c7a Mon Sep 17 00:00:00 2001 From: Noah Levitt Date: Tue, 4 Sep 2012 17:49:01 -0700 Subject: [PATCH] Fix HER-2021 usedBaseForVia annotation repeated many times * CrawlURI.java getAnnotations() - use LinkedHashSet data structure for new annotations object to prevent duplicates * Link.java addRelativeToVia() - only log use of base for via the first time, before the annotation has been added --- .../src/main/java/org/archive/modules/CrawlURI.java | 11 ++++++----- .../java/org/archive/modules/extractor/Link.java | 13 +++++++------ 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/modules/src/main/java/org/archive/modules/CrawlURI.java b/modules/src/main/java/org/archive/modules/CrawlURI.java index 66fb5fb1..318b7fd7 100644 --- a/modules/src/main/java/org/archive/modules/CrawlURI.java +++ b/modules/src/main/java/org/archive/modules/CrawlURI.java @@ -66,6 +66,7 @@ import java.util.Collection; import java.util.HashMap; import java.util.HashSet; import java.util.LinkedHashMap; +import java.util.LinkedHashSet; import java.util.List; import java.util.Map; import java.util.Set; @@ -651,12 +652,12 @@ implements Reporter, Serializable, OverlayContext { */ public Collection getAnnotations() { @SuppressWarnings("unchecked") - List list = (List)getData().get(A_ANNOTATIONS); - if (list == null) { - list = new ArrayList(); - getData().put(A_ANNOTATIONS, list); + Collection annotations = (Collection)getData().get(A_ANNOTATIONS); + if (annotations == null) { + annotations = new LinkedHashSet(); + getData().put(A_ANNOTATIONS, annotations); } - return list; + return annotations; } /** diff --git a/modules/src/main/java/org/archive/modules/extractor/Link.java b/modules/src/main/java/org/archive/modules/extractor/Link.java index 15897251..a8f5f3ee 100644 --- a/modules/src/main/java/org/archive/modules/extractor/Link.java +++ b/modules/src/main/java/org/archive/modules/extractor/Link.java @@ -133,19 +133,20 @@ public class Link implements Serializable, Comparable { } - public static void addRelativeToVia(CrawlURI uri, int max, - String newUri, LinkContext context, Hop hop) throws URIException { + public static void addRelativeToVia(CrawlURI uri, int max, String newUri, + LinkContext context, Hop hop) throws URIException { UURI relTo = uri.getVia(); - if(relTo==null) { - LOGGER.info("no via where expected; using base instead: "+uri); - uri.getAnnotations().add("usedBaseForVia"); + if (relTo == null) { + if (!uri.getAnnotations().contains("usedBaseForVia")) { + LOGGER.info("no via where expected; using base instead: " + uri); + uri.getAnnotations().add("usedBaseForVia"); + } relTo = uri.getBaseURI(); } UURI dest = UURIFactory.getInstance(relTo, newUri); add2(uri, max, dest, context, hop); } - public static void add(CrawlURI uri, int max, String newUri, LinkContext context, Hop hop) throws URIException { UURI dest = UURIFactory.getInstance(newUri);