package com.masterofcode.android.EPubBook; import java.util.ArrayList; import org.xml.sax.SAXException; import android.util.Log; public class OPFInfoSpine { private String tocId = null; private ArrayList<OPFInfoSpineItem> items = null; public void addItem(String idRef, String lanscapeShotImagePath, String portraitShotImagePath, boolean fullScreenFlag, boolean coverPageFlag) { if(items == null)items = new ArrayList<OPFInfoSpineItem>(); OPFInfoSpineItem newItem = new OPFInfoSpineItem(idRef, lanscapeShotImagePath, portraitShotImagePath, fullScreenFlag, coverPageFlag); items.add(newItem); } public String getTocId() { return tocId; } public void setTocId(String tocId) { this.tocId = tocId; } public OPFInfoManifestItem getReferencedManifestItemByIndex(OPFInfoManifest manifest, int index) { if(index>=0 && index<items.size()) { return manifest.getItemById(items.get(index).getIdRef()); } return null; } public boolean getTopicFullscreenFlag(int index) { if(!itemIndexIsValid(index)) return false; OPFInfoSpineItem item = items.get(index); return item.isFullScreen(); } public void checkReferencedMediaTypes(OPFInfoManifest manifest) { ArrayList<String> invalidSpineItems = new ArrayList<String>(); for(int i=0; i<items.size(); i++) { OPFInfoManifestItem cur = manifest.getItemById(items.get(i).getIdRef()); String mediaType = cur.getMediaType(); if(!mediaType.equalsIgnoreCase("application/xhtml+xml")) { if(!mediaType.equalsIgnoreCase("application/x-dtbook+xml")) { if(!mediaType.equalsIgnoreCase("text/x-oeb1-document")) { invalidSpineItems.add(items.get(i).getIdRef()); } } } } if(invalidSpineItems.size()>0) { // Log.i("!!!", "BAD SPINES"); for(int i=0; i<invalidSpineItems.size(); i++) { items.remove(invalidSpineItems.get(i)); } } } public void checkToc(OPFInfoManifest manifest) throws SAXException { String errMsg = "EPub OPF has invalid 'toc' in spine section"; if (tocId==null) throw new SAXException(errMsg); OPFInfoManifestItem tocItem = manifest.getItemById(tocId); if (tocItem==null) throw new SAXException(errMsg); // Log.i("!!!", tocItem.getHref()); } public void strictCheck(OPFInfoManifest manifest) throws Exception { } public OPFInfoSpineItem getItemWithIndex(int index) { if(index>=0 && index<items.size()) return items.get(index); return null; } public int itemsSize() { return items.size(); } public boolean itemIndexIsValid(int index) { if(items==null) return false; if(index<0 || index>=items.size())return false; return true; } }