View Javadoc

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  }