/******************************************************************************* * * Copyright (c) 2013 blinkbox Entertainment Limited. All rights reserved. * * *******************************************************************************/ package com.blinkbox.java.book.model; import com.blinkbox.java.book.factory.BBBEPubXMLFactory; import com.blinkbox.java.book.factory.BBBEPubZipFactory.BBBEZipEntry; import com.blinkbox.java.book.factory.BBBEPubZipFactory.BBBEZipParser; import com.blinkbox.java.book.json.BBBEPubBookInfo; import com.blinkbox.java.book.utils.BBBEPubBookUtils; import com.blinkbox.java.book.utils.ZipUtils; import java.util.HashMap; import java.util.List; /** * This class contains a Blinkbox Book ePub 2.0 book object created from a zip file. */ public class BBBEPub2Book extends BBBEPubBook { private BBBEZipParser mZipFile; private String mMimeType; private String mBaseUrl; private String mCoverUrl; private List<BBBEPubTOCReference> mTOCList; private BBBEPubNavigationNode mNavigationTree; private BBBEPubMetaData mMetaData; private BBBEPubBookInfo mBookInfo; private HashMap<String, String> mMimeTypeTable; /** * Create a new {@link BBBEPubBook} from an ePub 2.0 zip file * * @param zipFile * @param mMimeType * @param mTOCList * @param mNavigationTree * @param mMetaData * @param mMimeTypeTable */ public BBBEPub2Book(BBBEZipParser zipFile, String mMimeType, String baseUrl, String coverUrl, List<BBBEPubTOCReference> mTOCList, BBBEPubNavigationNode mNavigationTree, BBBEPubMetaData mMetaData, BBBEPubBookInfo mBookInfo, HashMap<String, String> mMimeTypeTable) { this.mZipFile = zipFile; this.mMimeType = mMimeType; this.mBaseUrl = baseUrl; this.mCoverUrl = coverUrl; this.mTOCList = mTOCList; this.mNavigationTree = mNavigationTree; this.mMetaData = mMetaData; this.mBookInfo = mBookInfo; this.mMimeTypeTable = mMimeTypeTable; } /* * (non-Javadoc) * @see com.blinkbox.java.book.model.BBBEPubBook#getMimeType() */ @Override public String getMimeType() { return mMimeType; } /* * (non-Javadoc) * @see com.blinkbox.java.book.model.BBBEPubBook#getVersion() */ @Override public String getVersion() { return "epub2"; } /* * (non-Javadoc) * @see com.blinkbox.java.book.model.BBBEPubBook#getTOCList() */ @Override public List<BBBEPubTOCReference> getTOCList() { return mTOCList; } /* * (non-Javadoc) * @see com.blinkbox.java.book.model.BBBEPubBook#getTOCList(int) */ @Override public List<BBBEPubTOCReference> getTOCList(int treeDepth) { return BBBEPubBookUtils.getListForDepth(mTOCList, treeDepth); } /* * (non-Javadoc) * @see com.blinkbox.java.book.model.BBBEPubBook#getNavigationTree() */ @Override public BBBEPubNavigationNode getNavigationTree() { return mNavigationTree; } /* * (non-Javadoc) * @see com.blinkbox.java.book.model.BBBEPubBook#getTitle() */ @Override public String getTitle() { return mMetaData == null ? "" : mMetaData.getAttribute(BBBEPubConstants.METADATA_TITLE); } /* * (non-Javadoc) * @see com.blinkbox.java.book.model.BBBEPubBook#getAuthor() */ @Override public String getAuthor() { return mMetaData == null ? "" : mMetaData.getAttribute(BBBEPubConstants.METADATA_AUTHOR); } /* * (non-Javadoc) * @see com.blinkbox.java.book.model.BBBEPubBook#getMetaData() */ @Override public BBBEPubMetaData getMetaData() { return mMetaData; } /* * (non-Javadoc) * @see com.blinkbox.java.book.model.BBBEPubBook#getContentAtUrl(java.lang.String) */ @Override public BBBEPubContent getContentAtUrl(String url) { if (url.startsWith("/")) { url = url.substring(1); } String stripAnchor = BBBEPubBookUtils.stripAnchor(url); BBBEZipEntry zipEntry = mZipFile.getZipFileInputStream(stripAnchor); if (zipEntry == null) { return null; } String mimeUrl = ZipUtils.stripBaseUrl(mBaseUrl, stripAnchor); String mimeType = mMimeTypeTable.get(mimeUrl); if (mimeType == null) { mimeType = BBBEPubXMLFactory.DEFAULT_MIMETYPE; } return new BBBEPubContent(mimeType, BBBEPubXMLFactory.DEFAULT_ENCODING, zipEntry.inputStream, zipEntry.contentLength); } /* * (non-Javadoc) * @see com.blinkbox.java.book.model.BBBEPubBook#getBaseUrl() */ @Override public String getBaseUrl() { return mBaseUrl; } /* * (non-Javadoc) * @see com.blinkbox.java.book.model.BBBEPubBook#getBaseUrl() */ @Override public String getCoverUrl() { if (mCoverUrl == null) { return null; } return mZipFile.getFileUrl() + "/" + mCoverUrl; } /* * (non-Javadoc) * @see com.blinkbox.java.book.model.BBBEPubBook#getBaseUrl() */ @Override public BBBEPubBookInfo getBookInfo() { return mBookInfo; } }