From 396c96e6c3acaf39a78770eae307621162b9a6ad Mon Sep 17 00:00:00 2001 From: Oscar Gustafsson Date: Sun, 27 Dec 2015 21:25:43 +0100 Subject: [PATCH] Fixed the problem pointed out and improved some minor things --- .../importer/fetcher/ACMPortalFetcher.java | 25 +++++++++++-------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/src/main/java/net/sf/jabref/importer/fetcher/ACMPortalFetcher.java b/src/main/java/net/sf/jabref/importer/fetcher/ACMPortalFetcher.java index 153249b43e4..33c7582231f 100644 --- a/src/main/java/net/sf/jabref/importer/fetcher/ACMPortalFetcher.java +++ b/src/main/java/net/sf/jabref/importer/fetcher/ACMPortalFetcher.java @@ -85,8 +85,9 @@ public class ACMPortalFetcher implements PreviewEntryFetcher { private int piv; - private static final Pattern HITS_PATTERN = Pattern.compile("(\\d+) results found"); - private static final Pattern MAX_HITS_PATTERN = Pattern.compile("Result \\d+ – \\d+ of (\\d+)"); + private static final Pattern HITS_PATTERN = Pattern.compile("(\\d+,*\\d*) results found"); + private static final Pattern MAX_HITS_PATTERN = Pattern + .compile("Result \\d+,*\\d* – \\d+,*\\d* of (\\d+,*\\d*)"); private static final Pattern FULL_CITATION_PATTERN = Pattern.compile("", ACMPortalFetcher.HITS_PATTERN); + String resultsFound = "
"; + int hits = getNumberOfHits(page, resultsFound, ACMPortalFetcher.HITS_PATTERN); - int index = page.indexOf("
"); + int index = page.indexOf(resultsFound); if (index >= 0) { - page = page.substring(index + 5); - index = page.indexOf("
"); - if (index >= 0) { - page = page.substring(index); - } + page = page.substring(index + resultsFound.length()); } if (hits == 0) { @@ -147,6 +145,11 @@ public boolean processQueryGetPreview(String query, FetcherPreviewDialog preview terms), Localization.lang("Search ACM Portal"), JOptionPane.INFORMATION_MESSAGE); return false; + } else if (hits > 20) { + status.showMessage( + Localization.lang("%0 entries found. To reduce server load, only %1 will be downloaded.", + String.valueOf(hits), String.valueOf(PER_PAGE)), + Localization.lang("Search ACM Portal"), JOptionPane.INFORMATION_MESSAGE); } hits = getNumberOfHits(page, "
", ACMPortalFetcher.MAX_HITS_PATTERN); @@ -389,7 +392,9 @@ private static int getNumberOfHits(String page, String marker, Pattern pattern) Matcher m = pattern.matcher(substring); if (m.find()) { try { - return Integer.parseInt(m.group(1)); + String number = m.group(1); + number = number.replaceAll(",", ""); // Remove , as in 1,234 + return Integer.parseInt(number); } catch (IllegalStateException | NumberFormatException ex) { throw new IOException("Cannot parse number of hits"); }