1 package org.paneris.bibliomania.metasearch;
2
3 import java.io.File;
4 import java.io.FileNotFoundException;
5 import java.io.IOException;
6
7 import org.paneris.bibliomania.BookStocking;
8 import org.paneris.bibliomania.fti.StringDbHash;
9
10 import com.sleepycat.db.DatabaseException;
11
12 public abstract class BOLAndBOBBackendBase implements BookshopBackend {
13
14 protected final StringDbHash isbnAndImageOfPrdid;
15 protected final String thumbnailURLPrefix;
16
17 public BOLAndBOBBackendBase(
18 File dbHome,
19 String dbName,
20 int isbnOfPrdidCacheSize,
21 String thumbnailURLPrefix)
22 throws FileNotFoundException, DatabaseException {
23 this.thumbnailURLPrefix = thumbnailURLPrefix;
24 isbnAndImageOfPrdid =
25 new StringDbHash(
26 new File(dbHome, dbName).getPath(),
27 isbnOfPrdidCacheSize);
28 }
29
30 protected abstract byte[] productPage_nonaffil(BookStocking stocking)
31 throws IOException;
32
33 protected abstract BookPageBase bookPage(byte[] text);
34
35 public String retrievedISBNAndImage(BookStocking stocking)
36 throws IOException {
37 BookPageBase bookPage = bookPage(productPage_nonaffil(stocking));
38
39 if (bookPage.isbn == null)
40 return null;
41
42 return bookPage.imageURL == null
43 ? bookPage.isbn
44 : bookPage.isbn + "\u00b7" + bookPage.imageURL;
45 }
46
47 public void resolve(BookStocking stocking) {
48 if (stocking.getIsbn_unsafe() == null) {
49 String vendorProductID = stocking.getVendorproductid_unsafe();
50 String isbnAndImage = isbnAndImageOfPrdid.get(vendorProductID);
51 if (isbnAndImage == null) {
52 try {
53 isbnAndImage = retrievedISBNAndImage(stocking);
54 } catch (IOException e) {
55 return;
56 }
57
58 if (isbnAndImage == null)
59 isbnAndImage = "";
60
61 isbnAndImageOfPrdid.put(vendorProductID, isbnAndImage);
62 isbnAndImageOfPrdid.flush();
63 }
64
65 int sep = isbnAndImage.indexOf("\u00b7");
66 if (sep == -1) {
67 stocking.setIsbn_unsafe(isbnAndImage);
68 stocking.setThumbnailurl_unsafe(null);
69 } else {
70 stocking.setIsbn_unsafe(isbnAndImage.substring(0, sep));
71 String tup = isbnAndImage.substring(sep + 1);
72 stocking.setThumbnailurl_unsafe(
73 tup.startsWith("http:") ? tup : thumbnailURLPrefix + tup);
74 }
75 }
76 }
77 }