package com.gmail.dpierron.calibre.configuration; import com.gmail.dpierron.calibre.datamodel.DataModel; import com.gmail.dpierron.calibre.opds.Constants; import com.gmail.dpierron.calibre.opds.indexer.Index; import com.gmail.dpierron.tools.Helper; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import java.io.File; import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; public class ConfigurationHolder extends PropertiesBasedConfiguration implements SetConfigurationInterface { final static String PROPERTY_NAME_VERSIONCHIP = "VERSIONCHIP"; final static String PATTERN_CUSTOMCATALOG_ID = "customCatalog"; final static String PATTERN_CUSTOMCATALOG_TITLE_ID = "title"; final static String PATTERN_CUSTOMCATALOG_SEARCH_ID = "search"; final static String PATTERN_CUSTOMCATALOG_ATTOP_ID = "attop"; final static Pattern PATTERN_CUSTOMCATALOG = Pattern.compile("\\[" + PATTERN_CUSTOMCATALOG_ID + "\\](.+?)\\[/" + PATTERN_CUSTOMCATALOG_ID + "\\]"); final static Pattern PATTERN_CUSTOMCATALOG_TITLE = Pattern.compile("\\[" + PATTERN_CUSTOMCATALOG_TITLE_ID + "\\](.+?)\\[/" + PATTERN_CUSTOMCATALOG_TITLE_ID + "\\]"); final static Pattern PATTERN_CUSTOMCATALOG_SEARCH = Pattern.compile("\\[" + PATTERN_CUSTOMCATALOG_SEARCH_ID + "\\](.+?)\\[/" + PATTERN_CUSTOMCATALOG_SEARCH_ID + "\\]"); final static Pattern PATTERN_CUSTOMCATALOG_ATTOP = Pattern.compile("\\[" + PATTERN_CUSTOMCATALOG_ATTOP_ID + "\\](.+?)\\[/" + PATTERN_CUSTOMCATALOG_ATTOP_ID + "\\]"); private final static String PROPERTY_NAME_WINDOW_HEIGHT = "WindowHeight"; private final static String PROPERTY_NAME_WINDOW_WIDTH = "WindowWidth"; private final static String PROPERTY_NAME_FAVICON = "Favicon"; private final static String PROPERTY_NAME_DATABASEFOLDER = "DatabaseFolder"; private final static String PROPERTY_NAME_TARGETFOLDER = "TargetFolder"; private final static String PROPERTY_NAME_LANGUAGE = "Language"; private final static String PROPERTY_NAME_CATALOGFOLDERNAME = "CatalogFolderName"; private final static String PROPERTY_NAME_ONLY_CATALOG_AT_TARGRET = "OnlyCatalogAtTarget"; private final static String PROPERTY_NAME_CATALOGTITLE = "CatalogTitle"; private final static String PROPERTY_NAME_CRYPTFILENAMES = "CryptFilenames"; private final static String PROPERTY_NAME_DISABLEOPTIMIZER = "DisableOptimizer"; private final static String PROPERTY_NAME_MAXBEFOREPAGINATE = "MaxBeforePaginate"; private final static String PROPERTY_NAME_MAXBEFORESPLIT = "MaxBeforeSplit"; private final static String PROPERTY_NAME_MAXSPLITLEVELS = "MaxSplitLevels"; private final static String PROPERTY_NAME_BOOKSINRECENTADDITIONS = "BooksInRecentAdditions"; private final static String PROPERTY_NAME_WIKIPEDIALANGUAGE = "WikipediaLanguage"; private final static String PROPERTY_NAME_INCLUDEDFORMATSLIST = "IncludedFormatsList"; private final static String PROPERTY_NAME_THUMBNAILGENERATE = "ThumbnailGenerate"; private final static String PROPERTY_NAME_THUMBNAILHEIGHT = "ThumbnailHeight"; private final static String PROPERTY_NAME_GENERATEHTML = "GenerateHtml"; private final static String PROPERTY_NAME_GENERATEOPDS = "GenerateOpds"; private final static String PROPERTY_NAME_GENERATEOPDSDOWNLOADS = "GenerateOpdsDownloads"; private final static String PROPERTY_NAME_GENERATEHTMLDOWNLOADS = "GenerateHtmlDownloads"; private final static String PROPERTY_NAME_SUPRESSRATINGSINTITLES = "SuppressRatingsInTitles"; private final static String PROPERTY_NAME_SPLITTAGSON = "SplitTagsOn"; private final static String PROPERTY_NAME_NO_SPLITTAGSON = "DontSplitTagsOn"; private final static String PROPERTY_NAME_INCLUDEBOOKSWITHNOFILE = "IncludeBooksWithNoFile"; private final static String PROPERTY_NAME_MINIMIZECHANGEDFILES = "MinimizeChangedFiles"; private final static String PROPERTY_NAME_LANGUAGEASTAG = "LanguageAsTag"; private final static String PROPERTY_NAME_TAGSTOIGNORE = "TagsToIgnore"; private final static String PROPERTY_NAME_EXTERNALICONS = "ExternalIcons"; private final static String PROPERTY_NAME_EXTERNAL_IMAGES = "ExternalImages"; private final static String PROPERTY_NAME_SHOWSERIESINAUTHORCATALOG = "ShowSeriesInAuthorCatalog"; private final static String PROPERTY_NAME_CATALOGFILTER = "CatalogFilter"; private final static String PROPERTY_NAME_TAGSTOMAKEDEEP = "TagsToMakeDeep"; private final static String PROPERTY_NAME_MAXSUMMARYLENGTH = "MaxSummaryLength"; private final static String PROPERTY_NAME_MAXBOOKSUMMARYLENGTH = "MaxBookSummaryLength"; private final static String PROPERTY_NAME_GENERATEAUTHORS = "GenerateAuthors"; private final static String PROPERTY_NAME_GENERATETAGS = "GenerateTags"; private final static String PROPERTY_NAME_GENERATESERIES = "GenerateSeries"; private final static String PROPERTY_NAME_GENERATERECENT = "GenerateRecent"; private final static String PROPERTY_NAME_GENERATERATINGS = "GenerateRatings"; private final static String PROPERTY_NAME_GENERATEALLBOOKS = "GenerateAllbooks"; private final static String PROPERTY_NAME_GENERATEINDEX = "GenerateIndex"; private final static String PROPERTY_NAME_DEVICEMODE = "DeviceMode"; private final static String PROPERTY_NAME_COPYTODATABASEFOLDER = "CopyToDatabaseFolder"; private final static String PROPERTY_NAME_BROWSEBYCOVER = "BrowseByCover"; private final static String PROPERTY_NAME_SPLITBYAUTHORINITIALGOTOBOOK = "SplitByAuthorInitialGoToBooks"; private final static String PROPERTY_NAME_INCLUDEABOUTLINK = "IncludeAboutLink"; private final static String PROPERTY_NAME_BROWSEBYCOVERWITHOUTSPLIT = "BrowseByCoverWithoutSplit"; private final static String PROPERTY_NAME_MINBOOKSTOMAKEDEEPLEVEL = "MinBooksToMakeDeepLevel"; private final static String PROPERTY_NAME_COVERRESIZE = "CoverResize"; private final static String PROPERTY_NAME_COVERHEIGHT = "CoverHeight"; private final static String PROPERTY_NAME_INCLUDEONLYONEFILE = "IncludeOnlyOneFile"; private final static String PROPERTY_NAME_ZIPTROOKCATALOG = "ZipTrookCatalog"; private final static String PROPERTY_NAME_REPROCESSEPUBMETADATA = "ReprocessEpubMetadata"; private final static String PROPERTY_NAME_ORDERALLBOOKSBYSERIES = "OrderAllBooksBySeries"; private final static String PROPERTY_NAME_MAXMOBILERESOLUTION = "MaxMobileResolution"; private final static String PROPERTY_NAME_WIKIPEDIAURL = "WikipediaUrl"; private final static String PROPERTY_NAME_AMAZONAUTHORURL = "AmazonAuthorUrl"; private final static String PROPERTY_NAME_AMAZONISBNURL = "AmazonIsbnUrl"; private final static String PROPERTY_NAME_AMAZONTITLEURL = "AmazonTitleUrl"; private final static String PROPERTY_NAME_GOODREADAUTHORURL = "GoodreadAuthorUrl"; private final static String PROPERTY_NAME_GOODREADISBNURL = "GoodreadIsbnUrl"; private final static String PROPERTY_NAME_GOODREADTITLEURL = "GoodreadTitleUrl"; private final static String PROPERTY_NAME_GOODREADREVIEWISBNURL = "GoodreadReviewIsbnUrl"; private final static String PROPERTY_NAME_ISFDBAUTHORURL = "IsfdbAuthorUrl"; private final static String PROPERTY_NAME_LIBRARYTHINGAUTHORURL = "LibrarythingAuthorUrl"; private final static String PROPERTY_NAME_LIBRARYTHINGISBNURL = "LibrarythingIsbnUrl"; private final static String PROPERTY_NAME_LIBRARYTHINGTITLEURL = "LibrarythingTitleUrl"; private final static String PROPERTY_NAME_INDEXCOMMENTS = "IndexComments"; private final static String PROPERTY_NAME_MAXKEYWORDS = "MaxKeywords"; private final static String PROPERTY_NAME_INDEXFILTERALGORITHM = "IndexFilterAlgorithm"; private final static String PROPERTY_NAME_URLBOOKS = "UrlBooks"; private final static String PROPERTY_NAME_FEATUREDCATALOGTITLE = "FeaturedCatalogTitle"; private final static String PROPERTY_NAME_FEATUREDCATALOGSAVEDSEARCHNAME = "FeaturedCatalogSavedSearchName"; private final static String PROPERTY_NAME_CUSTOMCATALOGS = "CustomCatalogs"; private final static String PROPERTY_NAME_CATALOGCUSTOMCOLUMNS = "CatalogCustomColumns"; /* Catalog Structure */ private final static String PROPERTY_NAME_SortUsingAuthor = "SortUsingAuthor"; private final static String PROPERTY_NAME_SortUsingTitle = "SortUsingTitle"; private final static String PROPERTY_NAME_SortSeriesUsingLibrarySort = "SortSeriesUsingLibrarySort"; private final static String PROPERTY_NAME_SortTagsByAuthor = "SortTagsByAuthor"; private final static String PROPERTY_NAME_TagBooksNoSplit = "TagBooksNoSplit"; /* Book Details */ private final static String PROPERTY_NAME_INCLUDETITLEINBOOKDETAILS = "IncludeTitleInBookDetails"; private final static String PROPERTY_NAME_INCLUDEAUTHORINBOOKDETAILS = "IncludeAuthorInBookDetails"; private final static String PROPERTY_NAME_INCLUDESERIESINBOOKDETAILS = "IncludeSeriesInBookDetails"; private final static String PROPERTY_NAME_INCLUDERATINGINBOOKDETAILS = "IncludeRatingInBookDetails"; private final static String PROPERTY_NAME_INCLUDETAGSINBOOKDETAILS = "IncludeTagsInBookDetails"; private final static String PROPERTY_NAME_INCLUDEPUBLISHERINBOOKDETAILS = "IncludePublisherInBookDetails"; private final static String PROPERTY_NAME_INCLUDEPUBLISHEDINBOOKDETAILS = "IncludePublishedInBookDetails"; private final static String PROPERTY_NAME_PUBLISHEDDATEASYEAR = "PublishDateAsYear"; private final static String PROPERTY_NAME_IncludeAddedInBookDetailst = "IncludeAddedInBookDetailst"; private final static String PROPERTY_NAME_IncludeModifiedInBookDetails = "IncludeModifiedInBookDetails"; private final static String PROPERTY_NAME_IncludeSizeOfDownloads = "IncludeSizeOfDownloads"; private final static String PROPERTY_NAME_DisplayAuthorSort = "DisplayAuthorSort"; private final static String PROPERTY_NAME_DisplayTitleSort = "DisplayTitleSort"; private final static String PROPERTY_NAME_DisplaySeriesSort = "DisplaySeriesSort"; private final static String PROPERTY_NAME_BookDetailsCustomFields = "BookDetailsCustomFields"; private final static String PROPERTY_NAME_BookDetailsCustomFieldsAlways = "BookDetailsCustomFieldsAlways"; private final static String PROPERTY_NAME_GenerateCrossLinks = "GenerateCrossLinks"; private final static String PROPERTY_NAME_SingleBookCrossReferences = "SingleBookCrossReferences"; private final static String PROPERTY_NAME_IncludeAuthorCrossReferences = "IncludeAuthorCrossReferences"; private final static String PROPERTY_NAME_IncludeSerieCrossReferences = "IncludeSerieCrossReferences"; private final static String PROPERTY_NAME_IncludeTagCrossReferences = "IncludeTagCrossReferences"; private final static String PROPERTY_NAME_IncludeRatingCrossReferences = "IncludeRatingCrossReferences"; private final static String PROPERTY_NAME_GenerateExternalReferences = "GenerateExternalReferences"; private final static String PROPERTY_NAME_NewWindowForExternalReferences = "NewWindowForExternalReferences"; private final static String PROPERTY_NAME_NewWindowForCustomCExternalLinks = "NewWindowForCustomExternalLinks"; /* Advanced */ private final static String PROPERTY_NAME_INCLUDE_COVERS_IN_CATALOG = "IncludeCoversInCatalog"; private final static String PROPERTY_NAME_USE_THUMBNAILS_AS_COVERS = "UseThumbnsilsAsCovers"; private final static String PROPERTY_NAME_ZIP_CATALOG = "ZipCatalog"; private final static String PROPERTY_NAME_ZIP_OMIT_XML = "ZipOmitXml"; private final static String PROPERTY_NAME_SecurityCode = "SecurityCode"; final static Logger logger = LogManager.getLogger(ConfigurationHolder.class); private DefaultConfigurationSettings defaults = new DefaultConfigurationSettings(); // Variables used to store cached values // These should all be cleared on a reset private List<String> tokenizedCatalogCustomColumns; private List<String> regexTagsToIgnore; private List<String> tokenizedTagsToMakeDeep; private List<String> tokenizedBookDetailsCustomColumns; public ConfigurationHolder(File propertiesFile) { super(propertiesFile); try { load(); } catch (IOException e) { reset(); } } public void resetReadOnly() { Set<Object> keys = new TreeSet<Object>(properties.keySet()); for (Object key : keys) { String name = (String) key; if (name.endsWith("_ReadOnly")) properties.remove(name); } } public void reset() { tokenizedTagsToMakeDeep = null; tokenizedBookDetailsCustomColumns = null; tokenizedCatalogCustomColumns = null; regexTagsToIgnore = null; DefaultConfigurationSettings defaults = new DefaultConfigurationSettings(); for (Method getter : GetConfigurationInterface.class.getMethods()) { String getterName = getter.getName(); String setterName = "set" + getterName.substring(3); //try { Class returnType = getter.getReturnType(); Method setter = null; try { setter = this.getClass().getMethod(setterName, returnType); Object result = getter.invoke(defaults); setter.invoke(this, result); } catch (NoSuchMethodException e) { logger.warn("", e); } catch (InvocationTargetException e) { logger.warn("", e); } catch (IllegalAccessException e) { logger.warn("", e); } } setDeviceMode(getDeviceMode()); } public Boolean isObsolete() { // check for the version chip String versionChip = getProperty(PROPERTY_NAME_VERSIONCHIP); if (versionChip == null) { return false; } else { return (versionChip.compareTo(Constants.CONFIGURATION_COMPATIBILITY_VERSIONCHIP) == -1) ? true : false; } } @Override public void save() { // check for the version chip properties.setProperty(PROPERTY_NAME_VERSIONCHIP, Constants.CONFIGURATION_COMPATIBILITY_VERSIONCHIP); super.save(); } /** * * SPECIFIC CONFIGURATION GETTERS AND SETTERS ARE BELOW THIS LINE *** */ public Integer getWindowHeight() { Integer i = getInteger(PROPERTY_NAME_WINDOW_HEIGHT); return (i == null) ?defaults.getWindowHeight() : i; } public void setWindowHeight(Integer height) { setProperty(PROPERTY_NAME_WINDOW_HEIGHT, height); } public Integer getWindowWidth() { Integer i = getInteger(PROPERTY_NAME_WINDOW_WIDTH); return (i == null) ?defaults.getWindowWidth() : i; } public void setWindowWidth(Integer width) { setProperty(PROPERTY_NAME_WINDOW_WIDTH, width); } public DeviceMode getDeviceMode() { String s = getProperty(PROPERTY_NAME_DEVICEMODE); return (s == null) ? defaults.getDeviceMode() : DeviceMode.fromName(s); } public void setDeviceMode(DeviceMode mode) { setProperty(PROPERTY_NAME_DEVICEMODE, mode); if (mode != null) { resetReadOnly(); mode.setModeSpecificOptions(this); } else { reset(); } } public String getFavicon() { String s = getProperty(PROPERTY_NAME_FAVICON); return (Helper.isNullOrEmpty(s)) ? defaults.getFavicon() : s; } public void setFavicon(String Favicon) { setProperty(PROPERTY_NAME_FAVICON, Favicon); } public Boolean isDatabaseFolderReadOnly() { return isPropertyReadOnly(PROPERTY_NAME_DATABASEFOLDER); } public File getDatabaseFolder() { String s = getProperty(PROPERTY_NAME_DATABASEFOLDER); return (Helper.isNotNullOrEmpty(s)) ? new File(s) : null; } public void setDatabaseFolder(File databaseFolder) { DataModel.reset(); // reset the datamodel when the database changes ! setProperty(PROPERTY_NAME_DATABASEFOLDER, Helper.isNullOrEmpty(databaseFolder) ? "" : databaseFolder.getAbsolutePath()); } public Boolean isTargetFolderReadOnly() { return isPropertyReadOnly(PROPERTY_NAME_TARGETFOLDER); } public File getTargetFolder() { String s = getProperty(PROPERTY_NAME_TARGETFOLDER); return (Helper.isNotNullOrEmpty(s)) ? new File(s) : null; } public void setTargetFolder(File targetFolder) { setProperty(PROPERTY_NAME_TARGETFOLDER, Helper.isNullOrEmpty(targetFolder) ? "" : targetFolder.getAbsolutePath()); } public Boolean isLanguageReadOnly() { return isPropertyReadOnly(PROPERTY_NAME_LANGUAGE); } public Locale getLanguage() { String s = getProperty(PROPERTY_NAME_LANGUAGE); return Helper.getLocaleFromLanguageString((Helper.isNullOrEmpty(s) ? defaults.getLanguage().getLanguage() : s)); } /* public Language getLanguage() { String s = getLanguage()[] } */ public void setLanguage(Locale language) { setProperty(PROPERTY_NAME_LANGUAGE, language.getLanguage()); } public Boolean isWikipediaLanguageReadOnly() { return isPropertyReadOnly(PROPERTY_NAME_WIKIPEDIALANGUAGE); } public Locale getWikipediaLanguage() { String s = getProperty(PROPERTY_NAME_WIKIPEDIALANGUAGE); return Helper.getLocaleFromLanguageString ((s == null) ? defaults.getWikipediaLanguage().getLanguage() : s); } public void setWikipediaLanguage(Locale wikipediaLanguage) { setProperty(PROPERTY_NAME_WIKIPEDIALANGUAGE, wikipediaLanguage.getLanguage()); } public Boolean isCatalogFolderNameReadOnly() { return isPropertyReadOnly(PROPERTY_NAME_CATALOGFOLDERNAME); } public String getCatalogFolderName() { String s = getProperty(PROPERTY_NAME_CATALOGFOLDERNAME); return (s == null) ? defaults.getCatalogFolderName() : s; } public void setCatalogFolderName(String catalogFolderName) { setProperty(PROPERTY_NAME_CATALOGFOLDERNAME, catalogFolderName); } public Boolean isCatalogTitleReadOnly() { return isPropertyReadOnly(PROPERTY_NAME_CATALOGTITLE); } public String getCatalogTitle() { String s = getProperty(PROPERTY_NAME_CATALOGTITLE); return (s == null) ? defaults.getCatalogTitle() : s; } public void setCatalogTitle(String catalogTitle) { setProperty(PROPERTY_NAME_CATALOGTITLE, catalogTitle); } public Boolean isCryptFilenamesReadOnly() { return isPropertyReadOnly(PROPERTY_NAME_CRYPTFILENAMES); } public Boolean getCryptFilenames() { Boolean b = getBoolean(PROPERTY_NAME_CRYPTFILENAMES); return (b == null) ? defaults.getCryptFilenames() : b; } public void setCryptFilenames(Boolean value) { setProperty(PROPERTY_NAME_CRYPTFILENAMES, value); } public Boolean isDisableOptimizerReadOnly() { return isPropertyReadOnly(PROPERTY_NAME_DISABLEOPTIMIZER); } public Boolean getDisableOptimizer() { Boolean b = getBoolean(PROPERTY_NAME_DISABLEOPTIMIZER); return (b == null) ? defaults.getDisableOptimizer() : b; } public void setDisableOptimizer(Boolean value) { setProperty(PROPERTY_NAME_DISABLEOPTIMIZER, value); } public Boolean isMaxBeforePaginateReadOnly() { return isPropertyReadOnly(PROPERTY_NAME_MAXBEFOREPAGINATE); } public Integer getMaxBeforePaginate() { Integer i = getInteger(PROPERTY_NAME_MAXBEFOREPAGINATE); return (i == null) ? defaults.getMaxBeforePaginate() : i; } public void setMaxBeforePaginate(Integer maxBeforePaginate) { setProperty(PROPERTY_NAME_MAXBEFOREPAGINATE, maxBeforePaginate); } public Boolean isMaxBeforeSplitReadOnly() { return isPropertyReadOnly(PROPERTY_NAME_MAXBEFORESPLIT); } public Integer getMaxBeforeSplit() { Integer i = getInteger(PROPERTY_NAME_MAXBEFORESPLIT); return (i == null) ? defaults.getMaxBeforeSplit() : ((i < 1) ? 1 : i); } public void setMaxBeforeSplit(Integer maxBeforeSplit) { setProperty(PROPERTY_NAME_MAXBEFORESPLIT, maxBeforeSplit); } public Boolean isMaxSplitLevelsReadOnly() { return isPropertyReadOnly(PROPERTY_NAME_MAXSPLITLEVELS); } public Integer getMaxSplitLevels() { Integer i = getInteger(PROPERTY_NAME_MAXSPLITLEVELS); return (i == null) ?defaults.getMaxSplitLevels() : i; } public void setMaxSplitLevels(Integer maxSplitLevels) { setProperty(PROPERTY_NAME_MAXSPLITLEVELS, maxSplitLevels); } public Boolean isMaxMobileResolutionReadOnly() { return isPropertyReadOnly(PROPERTY_NAME_MAXMOBILERESOLUTION); } public Integer getMaxMobileResolution() { Integer i = getInteger(PROPERTY_NAME_MAXMOBILERESOLUTION); return (i == null) ? defaults.getMaxMobileResolution() : i; } public void setMaxMobileResolution(Integer maxMobileResolution) { setProperty(PROPERTY_NAME_MAXMOBILERESOLUTION, maxMobileResolution); } public Boolean isBooksInRecentAdditionsReadOnly() { return isPropertyReadOnly(PROPERTY_NAME_BOOKSINRECENTADDITIONS); } public Integer getBooksInRecentAdditions() { Integer i = getInteger(PROPERTY_NAME_BOOKSINRECENTADDITIONS); return (i == null) ? defaults.getBooksInRecentAdditions() : i; } public void setBooksInRecentAdditions(Integer booksInRecentAdditions) { setProperty(PROPERTY_NAME_BOOKSINRECENTADDITIONS, booksInRecentAdditions); } public Boolean isIncludedFormatsListReadOnly() { return isPropertyReadOnly(PROPERTY_NAME_INCLUDEDFORMATSLIST); } public String getIncludedFormatsList() { String s = getProperty(PROPERTY_NAME_INCLUDEDFORMATSLIST); return (s == null) ? defaults.getIncludedFormatsList() : s; } public void setIncludedFormatsList(String includedFormatsList) { setProperty(PROPERTY_NAME_INCLUDEDFORMATSLIST, includedFormatsList); } public Boolean isBookDetailsCustomFieldsReadOnly() { return isPropertyReadOnly(PROPERTY_NAME_BookDetailsCustomFields); } public String getBookDetailsCustomFields() { String s = getProperty(PROPERTY_NAME_BookDetailsCustomFields); return (s == null) ? defaults.getBookDetailsCustomFields() : s; } public void setBookDetailsCustomFields(String fieldList) { setProperty(PROPERTY_NAME_BookDetailsCustomFields, fieldList); } public Boolean isBookDetailsCustomFieldsAlwaysReadOnly() { return isPropertyReadOnly(PROPERTY_NAME_BookDetailsCustomFieldsAlways); } public Boolean getBookDetailsCustomFieldsAlways() { Boolean b = getBoolean(PROPERTY_NAME_BookDetailsCustomFieldsAlways); return (b == null) ? defaults.getBookDetailsCustomFieldsAlways() : b; } public void setBookDetailsCustomFieldsAlways(Boolean value) { setProperty(PROPERTY_NAME_BookDetailsCustomFieldsAlways, value); } public Boolean isOnlyCatalogAtTargetReadOnly() { return isPropertyReadOnly(PROPERTY_NAME_ONLY_CATALOG_AT_TARGRET); } public Boolean getOnlyCatalogAtTarget() { Boolean b = getBoolean(PROPERTY_NAME_ONLY_CATALOG_AT_TARGRET); return (b == null) ? defaults.getOnlyCatalogAtTarget() : b; } public void setOnlyCatalogAtTarget(Boolean value) { setProperty(PROPERTY_NAME_ONLY_CATALOG_AT_TARGRET, value); } public Boolean isExternalIconsReadOnly() { return isPropertyReadOnly(PROPERTY_NAME_EXTERNALICONS); } public Boolean getExternalIcons() { Boolean b = getBoolean(PROPERTY_NAME_EXTERNALICONS); return (b == null) ? defaults.getExternalIcons() : b; } public void setExternalIcons(Boolean externalIcons) { setProperty(PROPERTY_NAME_EXTERNALICONS, externalIcons); } public Boolean isExternalImagesReadOnly() { return isPropertyReadOnly(PROPERTY_NAME_EXTERNAL_IMAGES); } public Boolean getExternalImages() { Boolean b = getBoolean(PROPERTY_NAME_EXTERNAL_IMAGES); return (b == null) ? defaults.getExternalImages() : b; } public void setExternalImages(Boolean b) { setProperty(PROPERTY_NAME_EXTERNAL_IMAGES, b); } public Boolean isGenerateOpdsReadOnly() { return isPropertyReadOnly(PROPERTY_NAME_GENERATEOPDS); } public Boolean getGenerateOpds() { Boolean b = getBoolean(PROPERTY_NAME_GENERATEOPDS); return (b == null) ? defaults.getGenerateOpds() : b; } public void setGenerateOpds(Boolean value) { setProperty(PROPERTY_NAME_GENERATEOPDS, value); } public Boolean isGenerateHtmlReadOnly() { return isPropertyReadOnly(PROPERTY_NAME_GENERATEHTML); } public Boolean getGenerateHtml() { Boolean b = getBoolean(PROPERTY_NAME_GENERATEHTML); return (b == null) ? defaults.getGenerateHtml() : b; } public void setGenerateHtml(Boolean getGenerateHtml) { setProperty(PROPERTY_NAME_GENERATEHTML, getGenerateHtml); } public Boolean isGenerateOpdsDownloadsReadOnly() { return isPropertyReadOnly(PROPERTY_NAME_GENERATEOPDSDOWNLOADS); } public Boolean getGenerateOpdsDownloads() { Boolean b = getBoolean(PROPERTY_NAME_GENERATEOPDSDOWNLOADS); return (b == null) ? defaults.getGenerateOpdsDownloads() : b; } public void setGenerateOpdsDownloads(Boolean getGenerateOpdsDownloads) { setProperty(PROPERTY_NAME_GENERATEOPDSDOWNLOADS, getGenerateOpdsDownloads); } public Boolean isGenerateHtmlDownloadsReadOnly() { return isPropertyReadOnly(PROPERTY_NAME_GENERATEHTMLDOWNLOADS); } public Boolean getGenerateHtmlDownloads() { Boolean b = getBoolean(PROPERTY_NAME_GENERATEHTMLDOWNLOADS); return (b == null) ? defaults.getGenerateHtmlDownloads() : b; } public void setGenerateHtmlDownloads(Boolean getGenerateHtmlDownloads) { setProperty(PROPERTY_NAME_GENERATEHTMLDOWNLOADS, getGenerateHtmlDownloads); } public void setPublishedDateAsYear(Boolean value) { setProperty(PROPERTY_NAME_PUBLISHEDDATEASYEAR, value); } public Boolean isPublishedDateAsYearReadOnly() { return isPropertyReadOnly(PROPERTY_NAME_PUBLISHEDDATEASYEAR); } public Boolean getPublishedDateAsYear() { Boolean b = getBoolean(PROPERTY_NAME_PUBLISHEDDATEASYEAR); return (b == null) ? defaults.getPublishedDateAsYear() : b; } public void setLanguageAsTag(Boolean value) { setProperty(PROPERTY_NAME_LANGUAGEASTAG, value); } public Boolean isLanguageAsTagReadOnly() { return isPropertyReadOnly(PROPERTY_NAME_LANGUAGEASTAG); } public Boolean getLanguageAsTag() { Boolean b = getBoolean(PROPERTY_NAME_LANGUAGEASTAG); return (b == null) ? defaults.getLanguageAsTag() : b; } public void setSuppressRatingsInTitles(Boolean supressRatingsInTitles) { setProperty(PROPERTY_NAME_SUPRESSRATINGSINTITLES, supressRatingsInTitles); } public Boolean isSupressRatingsInTitlesReadyOnly() { return isPropertyReadOnly(PROPERTY_NAME_SUPRESSRATINGSINTITLES); } public Boolean getSuppressRatingsInTitles() { Boolean b = getBoolean(PROPERTY_NAME_SUPRESSRATINGSINTITLES); return (b == null) ? defaults.getSuppressRatingsInTitles() : b; } public Boolean isThumbnailGenerateReadOnly() { return isPropertyReadOnly(PROPERTY_NAME_THUMBNAILGENERATE); } public Boolean getThumbnailGenerate() { Boolean b = getBoolean(PROPERTY_NAME_THUMBNAILGENERATE); return (b == null) ? defaults.getThumbnailGenerate() : b; } public void setThumbnailGenerate(Boolean thumbnailGenerate) { setProperty(PROPERTY_NAME_THUMBNAILGENERATE, thumbnailGenerate); } public Boolean isThumbnailHeightReadOnly() { return isPropertyReadOnly(PROPERTY_NAME_THUMBNAILHEIGHT); } public Integer getThumbnailHeight() { Integer i = getInteger(PROPERTY_NAME_THUMBNAILHEIGHT); return (i == null) ? defaults.getThumbnailHeight() : i; } public void setThumbnailHeight(Integer thumbnailHeight) { setProperty(PROPERTY_NAME_THUMBNAILHEIGHT, thumbnailHeight); } public Boolean isSplitTagsOnReadOnly() { return isPropertyReadOnly(PROPERTY_NAME_SPLITTAGSON); } public String getSplitTagsOn() { String s = getProperty(PROPERTY_NAME_SPLITTAGSON); return (s == null) ? defaults.getSplitTagsOn() : s; } public void setSplitTagsOn(String splitTagsOn) { setProperty(PROPERTY_NAME_SPLITTAGSON, splitTagsOn); } public Boolean isDontSplitTagsOnReadOnly() { return isPropertyReadOnly(PROPERTY_NAME_NO_SPLITTAGSON); } public Boolean getDontSplitTagsOn() { Boolean b = getBoolean(PROPERTY_NAME_NO_SPLITTAGSON); return (b == null) ? defaults.getDontSplitTagsOn() : b; } public void setDontSplitTagsOn(Boolean dontSplitTagsOn) { setProperty(PROPERTY_NAME_NO_SPLITTAGSON, dontSplitTagsOn); } public Boolean isIncludeBooksWithNoFileReadOnly() { return isPropertyReadOnly(PROPERTY_NAME_INCLUDEBOOKSWITHNOFILE); } public Boolean getIncludeBooksWithNoFile() { Boolean b = getBoolean(PROPERTY_NAME_INCLUDEBOOKSWITHNOFILE); return (b == null) ? defaults.getIncludeBooksWithNoFile() : b; } public void setIncludeBooksWithNoFile(Boolean value) { setProperty(PROPERTY_NAME_INCLUDEBOOKSWITHNOFILE, value); } public Boolean isShowSeriesInAuthorCatalogReadOnly() { return isPropertyReadOnly(PROPERTY_NAME_SHOWSERIESINAUTHORCATALOG); } public Boolean getShowSeriesInAuthorCatalog() { Boolean b = getBoolean(PROPERTY_NAME_SHOWSERIESINAUTHORCATALOG); return (b == null) ? defaults.getShowSeriesInAuthorCatalog() : b; } public void setShowSeriesInAuthorCatalog(Boolean value) { setProperty(PROPERTY_NAME_SHOWSERIESINAUTHORCATALOG, value); } public Boolean isCatalogFilterReadOnly() { return isPropertyReadOnly(PROPERTY_NAME_CATALOGFILTER); } public String getCatalogFilter() { String s = getProperty(PROPERTY_NAME_CATALOGFILTER); return (s == null) ? defaults.getCatalogFilter() : s; } public void setCatalogFilter(String value) { setProperty(PROPERTY_NAME_CATALOGFILTER, value); } public Boolean isMaxSummaryLengthReadOnly() { return isPropertyReadOnly(PROPERTY_NAME_MAXSUMMARYLENGTH); } public Integer getMaxSummaryLength() { Integer i = getInteger(PROPERTY_NAME_MAXSUMMARYLENGTH); return (i == null) ? defaults.getMaxSummaryLength() : i; } public void setMaxSummaryLength(Integer value) { setProperty(PROPERTY_NAME_MAXSUMMARYLENGTH, value); } public void setMaxBookSummaryLength(Integer value) { setProperty(PROPERTY_NAME_MAXBOOKSUMMARYLENGTH, value); } public Boolean isMaxBookSummaryLengthReadOnly() { return isPropertyReadOnly(PROPERTY_NAME_MAXBOOKSUMMARYLENGTH); } public Integer getMaxBookSummaryLength() { Integer i = getInteger(PROPERTY_NAME_MAXBOOKSUMMARYLENGTH); return (i == null) ? defaults.getMaxBookSummaryLength() : i; } public Boolean isGenerateAuthorsReadOnly() { return isPropertyReadOnly(PROPERTY_NAME_GENERATEAUTHORS); } public Boolean getGenerateAuthors() { Boolean b = getBoolean(PROPERTY_NAME_GENERATEAUTHORS); return (b == null) ? defaults.getGenerateAuthors() : b; } public void setGenerateAuthors(Boolean value) { setProperty(PROPERTY_NAME_GENERATEAUTHORS, value); } public Boolean isGenerateTagsReadOnly() { return isPropertyReadOnly(PROPERTY_NAME_GENERATETAGS); } public Boolean getGenerateTags() { Boolean b = getBoolean(PROPERTY_NAME_GENERATETAGS); return (b == null) ? defaults.getGenerateTags() : b; } public void setGenerateTags(Boolean value) { setProperty(PROPERTY_NAME_GENERATETAGS, value); } public Boolean isGenerateSeriesReadOnly() { return isPropertyReadOnly(PROPERTY_NAME_GENERATESERIES); } public Boolean getGenerateSeries() { Boolean b = getBoolean(PROPERTY_NAME_GENERATESERIES); return (b == null) ? defaults.getGenerateSeries() : b; } public void setGenerateSeries(Boolean value) { setProperty(PROPERTY_NAME_GENERATESERIES, value); } public Boolean isGenerateRecentReadOnly() { return isPropertyReadOnly(PROPERTY_NAME_GENERATERECENT); } public Boolean getGenerateRecent() { Boolean b = getBoolean(PROPERTY_NAME_GENERATERECENT); return (b == null) ? defaults.getGenerateRecent() : b; } public void setGenerateRecent(Boolean value) { setProperty(PROPERTY_NAME_GENERATERECENT, value); } public Boolean isGenerateRatingsReadOnly() { return isPropertyReadOnly(PROPERTY_NAME_GENERATERATINGS); } public Boolean getGenerateRatings() { Boolean b = getBoolean(PROPERTY_NAME_GENERATERATINGS); return (b == null) ? defaults.getGenerateRatings() : b; } public void setGenerateRatings(Boolean value) { setProperty(PROPERTY_NAME_GENERATERATINGS, value); } public Boolean isGenerateAllbooksReadOnly() { return isPropertyReadOnly(PROPERTY_NAME_GENERATEALLBOOKS); } public Boolean getGenerateAllbooks() { Boolean b = getBoolean(PROPERTY_NAME_GENERATEALLBOOKS); return (b == null) ? defaults.getGenerateAllbooks() : b; } public void setGenerateAllbooks(Boolean value) { setProperty(PROPERTY_NAME_GENERATEALLBOOKS, value); } public Boolean isGenerateIndexReadOnly() { return isPropertyReadOnly(PROPERTY_NAME_GENERATEINDEX); } public Boolean getGenerateIndex() { Boolean b = getBoolean(PROPERTY_NAME_GENERATEINDEX); return (b == null) ? defaults.getGenerateIndex() : b; } public void setGenerateIndex(Boolean value) { setProperty(PROPERTY_NAME_GENERATEINDEX, value); } public Boolean isCopyToDatabaseFolderReadOnly() { return isPropertyReadOnly(PROPERTY_NAME_COPYTODATABASEFOLDER); } public Boolean getCopyToDatabaseFolder() { Boolean b = getBoolean(PROPERTY_NAME_COPYTODATABASEFOLDER); return (b == null)? defaults.getCopyToDatabaseFolder() : b; } public void setCopyToDatabaseFolder(Boolean value) { setProperty(PROPERTY_NAME_COPYTODATABASEFOLDER, value); } public Boolean isBrowseByCoverReadOnly() { return isPropertyReadOnly(PROPERTY_NAME_BROWSEBYCOVER); } public Boolean getBrowseByCover() { Boolean b = getBoolean(PROPERTY_NAME_BROWSEBYCOVER); return (b == null) ? defaults.getBrowseByCover() : b; } public void setBrowseByCover(Boolean value) { setProperty(PROPERTY_NAME_BROWSEBYCOVER, value); } public Boolean isSplitByAuthorInitialGoToBooksReadOnly() { return isPropertyReadOnly(PROPERTY_NAME_SPLITBYAUTHORINITIALGOTOBOOK); } public Boolean getSplitByAuthorInitialGoToBooks() { Boolean b = getBoolean(PROPERTY_NAME_SPLITBYAUTHORINITIALGOTOBOOK); return (b == null) ? defaults.getSplitByAuthorInitialGoToBooks() : b; } public void setSplitByAuthorInitialGoToBooks(Boolean value) { setProperty(PROPERTY_NAME_SPLITBYAUTHORINITIALGOTOBOOK, value); } public Boolean isIncludeAboutLinkReadOnly() { return isPropertyReadOnly(PROPERTY_NAME_INCLUDEABOUTLINK); } public Boolean getIncludeAboutLink() { Boolean b = getBoolean(PROPERTY_NAME_INCLUDEABOUTLINK); return (b == null) ? defaults.getIncludeAboutLink() : b; } public void setIncludeAboutLink(Boolean value) { setProperty(PROPERTY_NAME_INCLUDEABOUTLINK, value); } public Boolean isTagsToIgnoreReadOnly() { return isPropertyReadOnly(PROPERTY_NAME_TAGSTOIGNORE); } public List<String> getRegExTagsToIgnore() { if (regexTagsToIgnore == null) { regexTagsToIgnore = new LinkedList<String>(); for (String tagName : Helper.tokenize(getTagsToIgnore().toUpperCase(), ",", true)) { regexTagsToIgnore.add(Helper.convertGlobToRegEx(tagName)); } } return regexTagsToIgnore; } public Boolean isTagsToMakeDeepReadOnly() { return isPropertyReadOnly(PROPERTY_NAME_TAGSTOMAKEDEEP); } public String getTagsToIgnore() { String s = getProperty(PROPERTY_NAME_TAGSTOIGNORE); return (s == null) ? defaults.getTagsToIgnore() : s; } public void setTagsToIgnore(String value) { setProperty(PROPERTY_NAME_TAGSTOIGNORE, value); regexTagsToIgnore = null; } public List<String> getTokenizedTagsToMakeDeep() { if (tokenizedTagsToMakeDeep == null) { tokenizedTagsToMakeDeep = Helper.tokenize(getTagsToMakeDeep().toUpperCase(), ",", true); } return tokenizedTagsToMakeDeep; } public List<String> getTokenizedBookDetailsCustomColumns() { if (tokenizedBookDetailsCustomColumns == null) { tokenizedBookDetailsCustomColumns = Helper.tokenize(getBookDetailsCustomFields(), ",", true); } return tokenizedBookDetailsCustomColumns; } /** * Get the full list of custom column names that have been asked for. * This can be used both for checking if they exist on the database, * and subsequently we can load only the ones that are required. * * @return */ public List<String> getCustomColumnsWanted() { List<String> result = getTokenizedBookDetailsCustomColumns(); result.addAll(getTokenizedCatalogCustomColumns()); return result; } public String getTagsToMakeDeep() { String s = getProperty(PROPERTY_NAME_TAGSTOMAKEDEEP); return (s == null) ? defaults.getTagsToMakeDeep() : s; } public void setTagsToMakeDeep(String value) { setProperty(PROPERTY_NAME_TAGSTOMAKEDEEP, value); tokenizedTagsToMakeDeep = null; } public Boolean isMinBooksToMakeDeepLevelReadOnly() { return isPropertyReadOnly(PROPERTY_NAME_MINBOOKSTOMAKEDEEPLEVEL); } public Integer getMinBooksToMakeDeepLevel() { Integer i = getInteger(PROPERTY_NAME_MINBOOKSTOMAKEDEEPLEVEL); return (i == null) ? defaults.getMinBooksToMakeDeepLevel() : i; } public void setMinBooksToMakeDeepLevel(Integer value) { setProperty(PROPERTY_NAME_MINBOOKSTOMAKEDEEPLEVEL, value); } public Boolean isBrowseByCoverWithoutSplitReadOnly() { return isPropertyReadOnly(PROPERTY_NAME_BROWSEBYCOVERWITHOUTSPLIT); } public Boolean getBrowseByCoverWithoutSplit() { Boolean b = getBoolean(PROPERTY_NAME_BROWSEBYCOVERWITHOUTSPLIT); return (b == null) ? defaults.getBrowseByCoverWithoutSplit() : b; } public void setBrowseByCoverWithoutSplit(Boolean value) { setProperty(PROPERTY_NAME_BROWSEBYCOVERWITHOUTSPLIT, value); } public Boolean isCoverHeightReadOnly() { return isPropertyReadOnly(PROPERTY_NAME_COVERHEIGHT); } public Integer getCoverHeight() { Integer i = getInteger(PROPERTY_NAME_COVERHEIGHT); return (i == null) ? defaults.getCoverHeight() : i; } public void setCoverHeight(Integer value) { setProperty(PROPERTY_NAME_COVERHEIGHT, value); } public Boolean getCoverResize() { Boolean b = getBoolean(PROPERTY_NAME_COVERRESIZE); return (b == null) ? defaults.getCoverResize() : b; } public void setCoverResize(Boolean value) { setProperty(PROPERTY_NAME_COVERRESIZE, value); } public Boolean isIncludeOnlyOneFileReadOnly() { return isPropertyReadOnly(PROPERTY_NAME_INCLUDEONLYONEFILE); } public Boolean getIncludeOnlyOneFile() { Boolean b = getBoolean(PROPERTY_NAME_INCLUDEONLYONEFILE); return (b == null) ? defaults.getIncludeOnlyOneFile() : b; } public void setIncludeOnlyOneFile(Boolean value) { setProperty(PROPERTY_NAME_ZIPTROOKCATALOG, value); } public Boolean isZipTrookCatalogReadOnly() { return isPropertyReadOnly(PROPERTY_NAME_ZIPTROOKCATALOG); } public Boolean getZipTrookCatalog() { Boolean b = getBoolean(PROPERTY_NAME_ZIPTROOKCATALOG); return (b == null) ? defaults.getZipTrookCatalog() : b; } public void setZipTrookCatalog(Boolean value) { setProperty(PROPERTY_NAME_INCLUDEONLYONEFILE, value); } public Boolean isReprocessEpubMetadataReadOnly() { return isPropertyReadOnly(PROPERTY_NAME_REPROCESSEPUBMETADATA); } public Boolean getReprocessEpubMetadata() { Boolean b = getBoolean(PROPERTY_NAME_REPROCESSEPUBMETADATA); return (b == null) ? defaults.getReprocessEpubMetadata() : b; } public void setReprocessEpubMetadata(Boolean value) { setProperty(PROPERTY_NAME_REPROCESSEPUBMETADATA, value); } public Boolean isOrderAllBooksBySeriesReadOnly() { return isPropertyReadOnly(PROPERTY_NAME_ORDERALLBOOKSBYSERIES); } public Boolean getOrderAllBooksBySeries() { Boolean b = getBoolean(PROPERTY_NAME_ORDERALLBOOKSBYSERIES); return (b == null) ? defaults.getOrderAllBooksBySeries() : b; } public void setOrderAllBooksBySeries(Boolean value) { setProperty(PROPERTY_NAME_ORDERALLBOOKSBYSERIES, value); } /* external links */ public Boolean isWikipediaUrlReadOnly() { return isPropertyReadOnly(PROPERTY_NAME_WIKIPEDIAURL); } public String getWikipediaUrl() { String s = getProperty(PROPERTY_NAME_WIKIPEDIAURL); return (s == null) ? defaults.getWikipediaUrl() : s; } public void setWikipediaUrl(String value) { setProperty(PROPERTY_NAME_WIKIPEDIAURL, value); } public Boolean isAmazonAuthorUrlReadOnly() { return isPropertyReadOnly(PROPERTY_NAME_AMAZONAUTHORURL); } public String getAmazonAuthorUrl() { String s = getProperty(PROPERTY_NAME_AMAZONAUTHORURL); return (s == null) ? defaults.getAmazonAuthorUrl() : s; } public void setAmazonAuthorUrl(String value) { setProperty(PROPERTY_NAME_AMAZONAUTHORURL, value); } public Boolean isAmazonIsbnUrlReadOnly() { return isPropertyReadOnly(PROPERTY_NAME_AMAZONISBNURL); } public String getAmazonIsbnUrl() { String s = getProperty(PROPERTY_NAME_AMAZONISBNURL); return (s == null) ? defaults.getAmazonIsbnUrl() : s; } public void setAmazonIsbnUrl(String value) { setProperty(PROPERTY_NAME_AMAZONISBNURL, value); } public Boolean isAmazonTitleUrlReadOnly() { return isPropertyReadOnly(PROPERTY_NAME_AMAZONTITLEURL); } public String getAmazonTitleUrl() { String s = getProperty(PROPERTY_NAME_AMAZONTITLEURL); return (s == null) ? defaults.getAmazonTitleUrl() : s; } public void setAmazonTitleUrl(String value) { setProperty(PROPERTY_NAME_AMAZONTITLEURL, value); } public Boolean isGoodreadAuthorUrlReadOnly() { return isPropertyReadOnly(PROPERTY_NAME_GOODREADAUTHORURL); } public String getGoodreadAuthorUrl() { String s = getProperty(PROPERTY_NAME_GOODREADAUTHORURL); return (s == null) ? defaults.getGoodreadAuthorUrl() : s; } public void setGoodreadAuthorUrl(String value) { setProperty(PROPERTY_NAME_GOODREADAUTHORURL, value); } public Boolean isGoodreadIsbnUrlReadOnly() { return isPropertyReadOnly(PROPERTY_NAME_GOODREADISBNURL); } public String getGoodreadIsbnUrl() { String s = getProperty(PROPERTY_NAME_GOODREADISBNURL); return (s == null) ? defaults.getGoodreadIsbnUrl() : s; } public void setGoodreadIsbnUrl(String value) { setProperty(PROPERTY_NAME_GOODREADISBNURL, value); } public Boolean isGoodreadTitleUrlReadOnly() { return isPropertyReadOnly(PROPERTY_NAME_GOODREADTITLEURL); } public String getGoodreadTitleUrl() { String s = getProperty(PROPERTY_NAME_GOODREADTITLEURL); return (s == null) ? defaults.getGoodreadTitleUrl() : s; } public void setGoodreadTitleUrl(String value) { setProperty(PROPERTY_NAME_GOODREADTITLEURL, value); } public Boolean isGoodreadReviewIsbnUrlReadOnly() { return isPropertyReadOnly(PROPERTY_NAME_GOODREADREVIEWISBNURL); } public String getGoodreadReviewIsbnUrl() { String s = getProperty(PROPERTY_NAME_GOODREADREVIEWISBNURL); return (s == null) ? defaults.getGoodreadReviewIsbnUrl() : s; } public void setGoodreadReviewIsbnUrl(String value) { setProperty(PROPERTY_NAME_GOODREADREVIEWISBNURL, value); } public Boolean isIsfdbAuthorUrlReadOnly() { return isPropertyReadOnly(PROPERTY_NAME_ISFDBAUTHORURL); } public String getIsfdbAuthorUrl() { String s = getProperty(PROPERTY_NAME_ISFDBAUTHORURL); return (s == null) ? defaults.getIsfdbAuthorUrl() : s; } public void setIsfdbAuthorUrl(String value) { setProperty(PROPERTY_NAME_ISFDBAUTHORURL, value); } public Boolean isLibrarythingAuthorUrlReadOnly() { return isPropertyReadOnly(PROPERTY_NAME_LIBRARYTHINGAUTHORURL); } public String getLibrarythingAuthorUrl() { String s = getProperty(PROPERTY_NAME_LIBRARYTHINGAUTHORURL); return (s == null) ? defaults.getLibrarythingAuthorUrl() : s; } public void setLibrarythingAuthorUrl(String value) { setProperty(PROPERTY_NAME_LIBRARYTHINGAUTHORURL, value); } public Boolean isLibrarythingIsbnUrlReadOnly() { return isPropertyReadOnly(PROPERTY_NAME_LIBRARYTHINGISBNURL); } public String getLibrarythingIsbnUrl() { String s = getProperty(PROPERTY_NAME_LIBRARYTHINGISBNURL); return (s == null) ? defaults.getLibrarythingIsbnUrl() : s; } public void setLibrarythingIsbnUrl(String value) { setProperty(PROPERTY_NAME_LIBRARYTHINGISBNURL, value); } public Boolean isLibrarythingTitleUrlReadOnly() { return isPropertyReadOnly(PROPERTY_NAME_LIBRARYTHINGTITLEURL); } public String getLibrarythingTitleUrl() { String s = getProperty(PROPERTY_NAME_LIBRARYTHINGTITLEURL); return (s == null) ? defaults.getLibrarythingTitleUrl() : s; } public void setLibrarythingTitleUrl(String value) { setProperty(PROPERTY_NAME_LIBRARYTHINGTITLEURL, value); } public Boolean isIndexFilterAlgorithmReadOnly() { return isPropertyReadOnly(PROPERTY_NAME_INDEXFILTERALGORITHM); } public Index.FilterHintType getIndexFilterAlgorithm() { String s = getProperty(PROPERTY_NAME_INDEXFILTERALGORITHM); return (s == null) ? defaults.getIndexFilterAlgorithm() :Index.FilterHintType.valueOf(s); } public void setIndexFilterAlgorithm(Index.FilterHintType value) { setProperty(PROPERTY_NAME_INDEXFILTERALGORITHM, value); } public Boolean getIndexComments() { Boolean b = getBoolean(PROPERTY_NAME_INDEXCOMMENTS); return (b == null) ? defaults.getIndexComments() : b; } public Boolean isIndexCommentsReadOnly() { return isPropertyReadOnly(PROPERTY_NAME_INDEXCOMMENTS); } public void setIndexComments(Boolean value) { setProperty(PROPERTY_NAME_INDEXCOMMENTS, value); } public Integer getMaxKeywords() { Integer i = getInteger(PROPERTY_NAME_MAXKEYWORDS); return (i == null) ?defaults.getMaxKeywords() : i; } public void setMaxKeywords(Integer value) { setProperty(PROPERTY_NAME_MAXKEYWORDS, value); } public Boolean isMaxKeywordsReadOnly() { return isPropertyReadOnly(PROPERTY_NAME_MAXKEYWORDS); } public Boolean isUrlBooksReadOnly() { return isPropertyReadOnly(PROPERTY_NAME_URLBOOKS); } /** * Get the Base URL for this library * If set it is always returned with the trailing '/' present * @return */ public String getUrlBooks() { String s = getProperty(PROPERTY_NAME_URLBOOKS); if (s == null) { s = defaults.getUrlBooks(); } else { if (s.length() > 0 && (! s.endsWith(Constants.FOLDER_SEPARATOR))) { s+= Constants.FOLDER_SEPARATOR; } // Ignore a simple / as the base Url if (s.equals(Constants.FOLDER_SEPARATOR)) { s = ""; } } return s; } public void setUrlBooks(String value) { // correct the value if needed if (Helper.isNotNullOrEmpty(value) && value.charAt(value.length() - 1) != '/') value += "/"; setProperty(PROPERTY_NAME_URLBOOKS, value); } public Boolean isFeaturedCatalogSavedSearchNameReadOnly() { return isPropertyReadOnly(PROPERTY_NAME_FEATUREDCATALOGSAVEDSEARCHNAME); } public String getFeaturedCatalogSavedSearchName() { String s = getProperty(PROPERTY_NAME_FEATUREDCATALOGSAVEDSEARCHNAME); if (s == null) return defaults.getFeaturedCatalogSavedSearchName(); else return s; } public void setFeaturedCatalogSavedSearchName(String value) { setProperty(PROPERTY_NAME_FEATUREDCATALOGSAVEDSEARCHNAME, value); } public Boolean isFeaturedCatalogTitleReadOnly() { return isPropertyReadOnly(PROPERTY_NAME_FEATUREDCATALOGTITLE); } public String getFeaturedCatalogTitle() { String s = getProperty(PROPERTY_NAME_FEATUREDCATALOGTITLE); if (s == null) return defaults.getFeaturedCatalogTitle(); else return s; } public void setFeaturedCatalogTitle(String value) { setProperty(PROPERTY_NAME_FEATUREDCATALOGTITLE, value); } public Boolean isCustomCatalogsReadOnly() { return isPropertyReadOnly(PROPERTY_NAME_CUSTOMCATALOGS); } public List<CustomCatalogEntry> getCustomCatalogs() { List<CustomCatalogEntry> result = new LinkedList<CustomCatalogEntry>(); String s = getProperty(PROPERTY_NAME_CUSTOMCATALOGS); try { if (Helper.isNotNullOrEmpty(s)) { Matcher matcher = PATTERN_CUSTOMCATALOG.matcher(s); while (matcher.find()) { String string = matcher.group(); Matcher titleMatcher = PATTERN_CUSTOMCATALOG_TITLE.matcher(string); String title = titleMatcher.find() ? titleMatcher.group() : null; Matcher searchMatcher = PATTERN_CUSTOMCATALOG_SEARCH.matcher(string); String search = searchMatcher.find() ? searchMatcher.group() : null; Matcher atTopMatcher = PATTERN_CUSTOMCATALOG_ATTOP.matcher(string); String atTopString = atTopMatcher.find() ? atTopMatcher.group() : null; if (Helper.isNotNullOrEmpty(title) && Helper.isNotNullOrEmpty(search)) { title = title.substring(7, title.length() - 8); search = search.substring(8, search.length() - 9); Boolean atTop = false; if (Helper.isNotNullOrEmpty(atTopString)) { atTopString = atTopString.substring(7, atTopString.length() - 8); atTop = atTopString.equals("true") ? true : false; } result.add(new CustomCatalogEntry(title, search, atTop)); } } } } catch (RuntimeException e) { logger.warn("error while decoding custom catalogs : " + s, e); } return result; } public void setCustomCatalogs(List<CustomCatalogEntry> values) { String s; StringBuffer mainsb = new StringBuffer(); if (Helper.isNotNullOrEmpty(values)) { for ( CustomCatalogEntry value : values) { StringBuffer sb = new StringBuffer(); sb.append("[" + PATTERN_CUSTOMCATALOG_ID + "]"); sb.append("[" + PATTERN_CUSTOMCATALOG_TITLE_ID + "]"); sb.append(value.getLabel() == null ? "" : value.getLabel()); sb.append("[/" + PATTERN_CUSTOMCATALOG_TITLE_ID + "]"); sb.append("[" + PATTERN_CUSTOMCATALOG_SEARCH_ID + "]"); sb.append(value.getValue() == null ? "" : value.getValue()); sb.append("[/" + PATTERN_CUSTOMCATALOG_SEARCH_ID + "]"); sb.append("[" + PATTERN_CUSTOMCATALOG_ATTOP_ID + "]"); sb.append(value.getAtTop().toString()); sb.append("[/" + PATTERN_CUSTOMCATALOG_ATTOP_ID + "]"); sb.append("[/" + PATTERN_CUSTOMCATALOG_ID + "]"); mainsb.append(sb.toString()); } s = mainsb.toString(); } else s=""; setProperty(PROPERTY_NAME_CUSTOMCATALOGS, s); } public String getCatalogCustomColumns() { String s = getProperty(PROPERTY_NAME_CATALOGCUSTOMCOLUMNS); return (s == null) ? defaults.getCatalogCustomColumns() : s; } public void setCatalogCustomColumns(String value) { setProperty(PROPERTY_NAME_CATALOGCUSTOMCOLUMNS, value); } public List<String> getTokenizedCatalogCustomColumns() { if (tokenizedCatalogCustomColumns == null) { tokenizedCatalogCustomColumns = Helper.tokenize(getCatalogCustomColumns().toUpperCase(), ",", true); } return tokenizedCatalogCustomColumns; } /* Catalog Structure */ public Boolean isGenerateCrossLinksReadOnly() { return isPropertyReadOnly(PROPERTY_NAME_GenerateCrossLinks); } public Boolean getGenerateCrossLinks() { Boolean b = getBoolean(PROPERTY_NAME_GenerateCrossLinks); return (b == null) ? defaults.getGenerateCrossLinks() : b; } public void setGenerateCrossLinks(Boolean value) { setProperty(PROPERTY_NAME_GenerateCrossLinks, value); } public Boolean getSingleBookCrossReferences() { Boolean b = getBoolean(PROPERTY_NAME_SingleBookCrossReferences); return (b == null) ? defaults.getGenerateCrossLinks() : b; } public void setSingleBookCrossReferences(Boolean value) { setProperty(PROPERTY_NAME_SingleBookCrossReferences, value); } public Boolean getIncludeAuthorCrossReferences() { Boolean b = getBoolean(PROPERTY_NAME_IncludeAuthorCrossReferences); return (b == null) ? defaults.getGenerateCrossLinks() : b; } public void setIncludeAuthorCrossReferences(Boolean value) { setProperty(PROPERTY_NAME_IncludeAuthorCrossReferences, value); } public Boolean getIncludeSerieCrossReferences() { Boolean b = getBoolean(PROPERTY_NAME_IncludeSerieCrossReferences); return (b == null) ? defaults.getGenerateCrossLinks() : b; } public void setIncludeSerieCrossReferences(Boolean value) { setProperty(PROPERTY_NAME_IncludeSerieCrossReferences, value); } public Boolean getIncludeTagCrossReferences() { Boolean b = getBoolean(PROPERTY_NAME_IncludeTagCrossReferences); return (b == null) ? defaults.getIncludeTagCrossReferences() : b; } public void setIncludeTagCrossReferences(Boolean value) { setProperty(PROPERTY_NAME_IncludeTagCrossReferences, value); } public Boolean getIncludeRatingCrossReferences() { Boolean b = getBoolean(PROPERTY_NAME_IncludeRatingCrossReferences); return (b == null) ? defaults.getIncludeTagCrossReferences() : b; } public void setIncludeRatingCrossReferences(Boolean value) { setProperty(PROPERTY_NAME_IncludeRatingCrossReferences, value); } public Boolean getDisplayAuthorSort() { Boolean b = getBoolean(PROPERTY_NAME_DisplayAuthorSort); return (b == null) ? defaults.getDisplayAuthorSort() : b; } public void setDisplayAuthorSort(Boolean value) { setProperty(PROPERTY_NAME_DisplayAuthorSort, value); } public Boolean getDisplayTitleSort() { Boolean b = getBoolean(PROPERTY_NAME_DisplayTitleSort); return (b == null) ? defaults.getDisplayTitleSort() : b; } public void setDisplayTitleSort(Boolean value) { setProperty(PROPERTY_NAME_DisplayTitleSort, value); } public Boolean getDisplaySeriesSort() { Boolean b = getBoolean(PROPERTY_NAME_DisplaySeriesSort); return (b == null) ? defaults.getDisplaySeriesSort() : b; } public void setDisplaySeriesSort(Boolean value) { setProperty(PROPERTY_NAME_DisplaySeriesSort, value); } public Boolean isSortUsingAuthorReadOnly() { return isPropertyReadOnly(PROPERTY_NAME_SortUsingAuthor); } public Boolean getSortUsingAuthor() { Boolean b = getBoolean(PROPERTY_NAME_SortUsingAuthor); return (b == null) ? defaults.getSortUsingAuthor() : b; } public Boolean isSortTagsByAuthorReadOnly() { return isPropertyReadOnly(PROPERTY_NAME_SortTagsByAuthor); } public Boolean getSortTagsByAuthor() { Boolean b = getBoolean(PROPERTY_NAME_SortTagsByAuthor); return (b == null) ? defaults.getSortTagsByAuthor() : b; } public void setSortUsingAuthor(Boolean value) { setProperty(PROPERTY_NAME_SortUsingAuthor, value); } public Boolean isTagBooksNoSplitReadOnly() { return isPropertyReadOnly(PROPERTY_NAME_TagBooksNoSplit); } public Boolean getTagBooksNoSplit() { Boolean b = getBoolean(PROPERTY_NAME_TagBooksNoSplit); return (b == null) ? defaults.getTagBooksNoSplit() : b; } public void setTagBooksNoSplit(Boolean value) { setProperty(PROPERTY_NAME_TagBooksNoSplit, value); } public void setSortTagsByAuthor(Boolean value) { setProperty(PROPERTY_NAME_SortTagsByAuthor, value); } public Boolean getSortUsingTitle() { Boolean b = getBoolean(PROPERTY_NAME_SortUsingTitle); return (b == null) ? defaults.getSortUsingTitle() : b; } public void setSortUsingTitle(Boolean value) { setProperty(PROPERTY_NAME_SortUsingTitle, value); } public Boolean getSortSeriesUsingLibrarySort() { Boolean b = getBoolean(PROPERTY_NAME_SortSeriesUsingLibrarySort); return (b == null) ? defaults.getSortSeriesUsingLibrarySort() : b; } public void setSortSeriesUsingLibrarySort(Boolean value) { setProperty(PROPERTY_NAME_SortSeriesUsingLibrarySort, value); } // Book Details public Boolean isIncludeTitleInBookDetailsReadOnly() { return isPropertyReadOnly(PROPERTY_NAME_INCLUDETITLEINBOOKDETAILS); } public Boolean getIncludeTitleInBookDetails() { Boolean b = getBoolean(PROPERTY_NAME_INCLUDETITLEINBOOKDETAILS); return (b == null) ? defaults.getIncludeTitleInBookDetails() : b; } public void setIncludeTitleInBookDetails(Boolean value) { setProperty(PROPERTY_NAME_INCLUDETITLEINBOOKDETAILS, value); } public Boolean getIncludeAuthorInBookDetails() { Boolean b = getBoolean(PROPERTY_NAME_INCLUDEAUTHORINBOOKDETAILS); return (b == null) ? defaults.getIncludeAuthorInBookDetails() : b; } public void setIncludeAuthorInBookDetails(Boolean value) { setProperty(PROPERTY_NAME_INCLUDEAUTHORINBOOKDETAILS, value); } public Boolean getIncludeSeriesInBookDetails() { Boolean b = getBoolean(PROPERTY_NAME_INCLUDESERIESINBOOKDETAILS); return (b == null) ? defaults.getIncludeSeriesInBookDetails() : b; } public void setIncludeSeriesInBookDetails(Boolean value) { setProperty(PROPERTY_NAME_INCLUDESERIESINBOOKDETAILS, value); } public Boolean getIncludeRatingInBookDetails() { Boolean b = getBoolean(PROPERTY_NAME_INCLUDERATINGINBOOKDETAILS); return (b == null) ? defaults.getIncludeRatingInBookDetails() : b; } public void setIncludeRatingInBookDetails(Boolean value) { setProperty(PROPERTY_NAME_INCLUDERATINGINBOOKDETAILS, value); } public Boolean getIncludeTagsInBookDetails() { Boolean b = getBoolean(PROPERTY_NAME_INCLUDETAGSINBOOKDETAILS); return (b == null) ? defaults.getIncludeTagsInBookDetails() : b; } public void setIncludeTagsInBookDetails(Boolean value) { setProperty(PROPERTY_NAME_INCLUDETAGSINBOOKDETAILS, value); } public Boolean getIncludePublisherInBookDetails() { Boolean b = getBoolean(PROPERTY_NAME_INCLUDEPUBLISHERINBOOKDETAILS); return (b == null) ? defaults.getIncludePublisherInBookDetails() : b; } public void setIncludePublisherInBookDetails(Boolean value) { setProperty(PROPERTY_NAME_INCLUDEPUBLISHERINBOOKDETAILS, value); } public Boolean isIncludeCoversInCatalogReadOnly() { return isPropertyReadOnly(PROPERTY_NAME_INCLUDE_COVERS_IN_CATALOG); } public Boolean getIncludeCoversInCatalog() { Boolean b = getBoolean(PROPERTY_NAME_INCLUDE_COVERS_IN_CATALOG); return (b == null) ? defaults.getIncludeCoversInCatalog() : b; } public void setIncludeCoversInCatalog(Boolean value) { setProperty(PROPERTY_NAME_INCLUDE_COVERS_IN_CATALOG, value); } public Boolean isUseThumbnailsAsCoversReadOnly() { return isPropertyReadOnly(PROPERTY_NAME_USE_THUMBNAILS_AS_COVERS); } public Boolean getUseThumbnailsAsCovers() { Boolean b = getBoolean(PROPERTY_NAME_USE_THUMBNAILS_AS_COVERS); return (b == null) ? defaults.getUseThumbnailsAsCovers() : b; } public void setUseThumbnailsAsCovers(Boolean value) { setProperty(PROPERTY_NAME_USE_THUMBNAILS_AS_COVERS, value); } public Boolean isZipCatalogReadOnly() { return isPropertyReadOnly(PROPERTY_NAME_ZIP_CATALOG); } public Boolean getZipCatalog() { Boolean b = getBoolean(PROPERTY_NAME_ZIP_CATALOG); return (b == null) ? defaults.getZipCatalog() : b; } public void setZipCatalog(Boolean value) { setProperty(PROPERTY_NAME_ZIP_CATALOG, value); } public Boolean getZipOmitXml() { Boolean b = getBoolean(PROPERTY_NAME_ZIP_OMIT_XML); return (b == null) ?defaults.getZipOmitXml() : b; } public void setZipOmitXml(Boolean value) { setProperty(PROPERTY_NAME_ZIP_OMIT_XML, value); } public Boolean getIncludePublishedInBookDetails() { Boolean b = getBoolean(PROPERTY_NAME_INCLUDEPUBLISHEDINBOOKDETAILS); return (b == null) ? defaults.getIncludePublishedInBookDetails() : b; } public void setIncludePublishedInBookDetails(Boolean value) { setProperty(PROPERTY_NAME_INCLUDEPUBLISHEDINBOOKDETAILS, value); } public Boolean getIncludeAddedInBookDetails() { Boolean b = getBoolean(PROPERTY_NAME_IncludeAddedInBookDetailst); return (b == null) ? defaults.getIncludeAddedInBookDetails() : b; } public void setIncludeAddedInBookDetails(Boolean value) { setProperty(PROPERTY_NAME_IncludeAddedInBookDetailst, value); } public Boolean getIncludeModifiedInBookDetails() { Boolean b = getBoolean(PROPERTY_NAME_IncludeModifiedInBookDetails); return (b == null) ? defaults.getIncludeModifiedInBookDetails() : b; } public void setIncludeModifiedInBookDetails(Boolean value) { setProperty(PROPERTY_NAME_IncludeModifiedInBookDetails, value); } public Boolean getIncludeSizeOfDownloads() { Boolean b = getBoolean(PROPERTY_NAME_IncludeSizeOfDownloads); return (b == null) ? defaults.getIncludeSizeOfDownloads() : b; } public void setIncludeSizeOfDownloads(Boolean value) { setProperty(PROPERTY_NAME_IncludeSizeOfDownloads, value); } public String getSecurityCode() { String s = getProperty(PROPERTY_NAME_SecurityCode); return Helper.isNullOrEmpty(s) ? defaults.getSecurityCode() : s; } public void setSecurityCode(String code) { setProperty(PROPERTY_NAME_SecurityCode, code); } public Boolean getGenerateExternalReferences() { Boolean b = getBoolean(PROPERTY_NAME_GenerateExternalReferences); return (b == null) ? defaults.getGenerateExternalReferences() : b; } public void setGenerateExternalReferences(Boolean value) { setProperty(PROPERTY_NAME_GenerateExternalReferences, value); } public Boolean getNewWindowForExternalReferences() { Boolean b = getBoolean(PROPERTY_NAME_NewWindowForExternalReferences); return (b == null) ? defaults.getNewWindowForExternalReferences() : b; } public void setNewWindowForExternalReferences(Boolean value) { setProperty(PROPERTY_NAME_NewWindowForExternalReferences, value); } public Boolean getNewWindowForCustomExternalLinks() { Boolean b = getBoolean(PROPERTY_NAME_NewWindowForCustomCExternalLinks); return (b == null) ? defaults.getNewWindowForCustomExternalLinks() : b; } public void setNewWindowForCustomExternalLinks(Boolean value) { setProperty(PROPERTY_NAME_NewWindowForCustomCExternalLinks, value); } }