package org.rr.jeborker.metadata.comicbook;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
public class ComicBookDocument {
private final HashMap<String, Object> info = new HashMap<String, Object>();
private final List<ComicBookPageInfo> pages = new ArrayList<>();
private List<String> archiveEntries;
final byte[] comicInfoXml;
private byte[] cover = null;
private String xmlFilePath;
private IArchiveHandler archiveHandler;
ComicBookDocument(IArchiveHandler archiveHandler) {
this.archiveHandler = archiveHandler;
this.comicInfoXml = archiveHandler.getComicXmlData();
this.xmlFilePath = archiveHandler.getComicXmlFilename();
this.archiveEntries = archiveHandler.getArchiveEntries();
}
public String getTitle() {
return (String) info.get("Title");
}
public void setTitle(String title) {
info.put("Title", title);
}
public String getRating() {
return (String) info.get("Rating");
}
public void setRating(String rating) {
info.put("Rating", rating);
}
public String getSeries() {
return (String) info.get("Series");
}
public void setSeries(String series) {
info.put("Series", series);
}
public String getNumber() {
return (String) info.get("Number");
}
public void setNumber(String number) {
info.put("Number", number);
}
public Integer getCount() {
Object value = info.get("Count");
return ComicBookUtils.getAsInteger(value);
}
public void setCount(Integer count) {
info.put("Count", count);
}
public Integer getVolume() {
Object value = info.get("Volume");
return ComicBookUtils.getAsInteger(value);
}
public void setVolume(Integer volume) {
info.put("Volume", volume);
}
public String getAlternateSeries() {
return (String) info.get("AlternateSeries");
}
public void setAlternateSeries(String alternateSeries) {
info.put("AlternateSeries", alternateSeries);
}
public String getAlternateNumber() {
return (String) info.get("AlternateNumber");
}
public void setAlternateNumber(String alternateNumber) {
info.put("AlternateNumber", alternateNumber);
}
public Integer getAlternateCount() {
Object value = info.get("AlternateCount");
return ComicBookUtils.getAsInteger(value);
}
public void setAlternateCount(Integer alternateCount) {
info.put("AlternateCount", alternateCount);
}
public String getSummary() {
return (String) info.get("Summary");
}
public void setSummary(String summary) {
info.put("Summary", summary);
}
public String getNotes() {
return (String) info.get("Notes");
}
public void setNotes(String notes) {
info.put("Notes", notes);
}
public Integer getYear() {
Object value = info.get("Year");
return ComicBookUtils.getAsInteger(value);
}
public void setYear(Integer year) {
info.put("Year", year);
}
public Integer getMonth() {
Object value = info.get("Month");
return ComicBookUtils.getAsInteger(value);
}
public void setMonth(Integer month) {
info.put("Month", month);
}
public String getWriter() {
return (String) info.get("Writer");
}
public void setWriter(String writer) {
info.put("Writer", writer);
}
public String getPenciller() {
return (String) info.get("Penciller");
}
public void setPenciller(String penciller) {
info.put("Penciller", penciller);
}
public String getInker() {
return (String) info.get("Inker");
}
public void setInker(String inker) {
info.put("Inker", inker);
}
public String getColorist() {
return (String) info.get("Colorist");
}
public void setColorist(String colorist) {
info.put("Colorist", colorist);
}
public String getLetterer() {
return (String) info.get("Letterer");
}
public void setLetterer(String letterer) {
info.put("Letterer", letterer);
}
public String getCoverArtist() {
return (String) info.get("CoverArtist");
}
public void setCoverArtist(String coverArtist) {
info.put("CoverArtist", coverArtist);
}
public String getEditor() {
return (String) info.get("Editor");
}
public void setEditor(String editor) {
info.put("Editor", editor);
}
public String getPublisher() {
return (String) info.get("Publisher");
}
public void setPublisher(String publisher) {
info.put("Publisher", publisher);
}
public String getImprint() {
return (String) info.get("Imprint");
}
public void setImprint(String imprint) {
info.put("Imprint", imprint);
}
public String getGenre() {
return (String) info.get("Genre");
}
public void setGenre(String genre) {
info.put("Genre", genre);
}
public String getWeb() {
return (String) info.get("Web");
}
public void setWeb(String web) {
info.put("Web", web);
}
public Integer getPageCount() {
Object value = info.get("PageCount");
return ComicBookUtils.getAsInteger(value);
}
public void setPageCount(Integer pageCount) {
info.put("PageCount", pageCount);
}
public String getLanguageISO() {
return (String) info.get("LanguageISO");
}
public void setLanguageISO(String languageISO) {
info.put("LanguageISO", languageISO);
}
public String getFormat() {
return (String) info.get("Format");
}
public void setFormat(String format) {
info.put("Format", format);
}
public YeyNoType getBlackAndWhite() {
Object value = info.get("BlackAndWhite");
return ComicBookUtils.getAsYesNoType(value);
}
public void setBlackAndWhite(YeyNoType blackAndWhite) {
info.put("BlackAndWhite", blackAndWhite);
}
public YeyNoType getManga() {
Object value = info.get("Manga");
return ComicBookUtils.getAsYesNoType(value);
}
public void setManga(YeyNoType manga) {
info.put("Manga", manga);
}
public HashMap<String, Object> getInfo() {
return info;
}
public List<ComicBookPageInfo> getPages() {
return pages;
}
public byte[] getCover() {
if(this.cover == null) {
//search for the page which specifies the cover image in the archive
for(ComicBookPageInfo page : pages) {
if(page.getType() != null && page.getType().equals(ComicPageType.TYPE_FRONTCOVER)) {
int index = page.getImage();
String archiveEntry = archiveEntries.get(index);
try {
this.cover = archiveHandler.getArchiveEntry(archiveEntry);
} catch (IOException e) {
}
break;
}
}
//simply get the first image as cover image
if(this.cover == null && !archiveEntries.isEmpty()) {
try {
this.cover = archiveHandler.getArchiveEntry(archiveEntries.get(0));
} catch (IOException e) {
}
}
}
return this.cover;
}
public byte[] getComicInfoXml() {
return comicInfoXml;
}
String getComicInfoFilePath() {
return this.xmlFilePath;
}
public List<String> getImageNames() {
return this.archiveEntries;
}
}