@Override public Iterable<YContentFile> apply(YContentEntry input) { if (input instanceof YContentFile) { return Arrays.asList((YContentFile) input); } YContentDirectory directory = (YContentDirectory) input; return createIterable(directory.getEntries()); } };
private YContentDirectory findChapter(String id, YElement elements, List<String> chapters) { Queue<YContentEntry> fifo = new LinkedList<YContentEntry>(); YContentDirectory foundChapter = null; fifo.addAll(elements.getContents()); while (!fifo.isEmpty()) { YContentEntry e = fifo.poll(); if (e.isDirectory()) { YContentDirectory dir = (YContentDirectory) e; if (dir.getType().equals(YConstants.CONTENT_PAGED)) { chapters.add(dir.getId()); if (id == null) { if (foundChapter == null) { foundChapter = dir; } } else if (id.equals(dir.getId())) { foundChapter = dir; } } else { fifo.addAll(dir.getEntries()); } } } return foundChapter; } }
private boolean hasChapteredContent(List<YContentEntry> contentList) { for (YContentEntry<?> content : contentList) { if (content instanceof YContentDirectory) { YContentDirectory dir = (YContentDirectory) content; if ((ContentTypes.CONTENT_PAGED.equals(dir.getType()) && findIfContentExists(dir.getEntries(), null)) || hasChapteredContent(dir.getEntries())) { return true; } } } return false; }
private List<ContentChapterData> transformChaptersContent(List<YContentDirectory> chapters, Locale locale, String mainLevel) { List<ContentChapterData> chaptersData = new ArrayList<ContentChapterData>(); for (YContentDirectory chapter : chapters) { final List<ContentFileData> pages = findChapterPages(chapter.getEntries(), locale, mainLevel); if(!pages.isEmpty()){ chaptersData.add(new ContentChapterData(chapter.getId(), getDirectoryName(chapter), pages)); } } return chaptersData; }
private String getFolderName(YContentDirectory dir) { String result = dir.getId(); if (result.startsWith("r-")) { result = result.replace("r-", ""); } else if (result.equals("paged-dir")) { result = ""; } return result; }
private List<YContentDirectory> findChapters(List<YContentEntry> contentList, Locale locale) { List<YContentDirectory> result = new ArrayList<YContentDirectory>(); for (YContentEntry<?> content : contentList) { if (content instanceof YContentDirectory) { YContentDirectory dir = (YContentDirectory) content; if (ContentTypes.CONTENT_PAGED.equals(dir.getType())) { result.add(dir); } else { result.addAll(findChapters(dir.getEntries(), locale)); } } } return result; }
@SuppressWarnings("rawtypes") private void extractContents(String elementId, List<YContentEntry> contents, FileGrp currentFileGrp) { for (YContentEntry yContentEntry : contents) { if (yContentEntry instanceof YContentDirectory) { YContentDirectory directory = (YContentDirectory) yContentEntry; FileGrp fileGrp = new FileGrp(); fileGrp.setID(directory.getId()); currentFileGrp.getFileGrps().add(fileGrp); extractContents(elementId, directory.getEntries(), fileGrp); } else { YContentFile yfile = (YContentFile) yContentEntry; if (isFileAcceptable(yfile)) { FileType fileType = createFileType(elementId, yfile); currentFileGrp.getFiles().add(fileType); } } } }
private List<ContentInfo> getContentInfo(YContentDirectory directory){ return getContentInfo(directory.getEntries()); }
@SuppressWarnings("rawtypes") private boolean checkContentAvailable(List<YContentEntry> contentList, String mainLevel) { for (YContentEntry<?> content : contentList) { if (content instanceof YContentFile) { if (isFileAccepted((YContentFile) content, mainLevel)) { return true; } } else if (content instanceof YContentDirectory) { YContentDirectory dir = (YContentDirectory) content; if (acceptedDirectoryTypes.contains(dir.getType()) && checkContentAvailable(dir.getEntries(), mainLevel)) { return true; } } } return false; }
private List<ContentEntryData> translateContent(List<YContentEntry> contentList, Locale locale, String mainLevel) { List<ContentEntryData> result = new ArrayList<ContentEntryData>(); for (YContentEntry<?> content : contentList) { if (content instanceof YContentFile) { YContentFile file = (YContentFile) content; if (yModelPropertyExtractor.isFileAccepted(file, mainLevel)) { result.add(new ContentFileData(file.getId(), YModelUtils.getDefaultName(file), fetchName(file.getFormat(), locale), yModelPropertyExtractor.prepareLocation(file.getLocations()))); } } else if (content instanceof YContentDirectory) { YContentDirectory dir = (YContentDirectory) content; if (ContentTypes.CONTENT_PAGED.equals(dir.getType()) && findIfContentExists(dir.getEntries(), mainLevel)) { result.add(new ContentDirectoryData(dir.getId(), getDirectoryName(dir), dir.getType(), fetchName(dir.getType(), locale))); } else if(findIfContentExists(dir.getEntries(), mainLevel)) { result.add(new ContentDirectoryData(dir.getId(), getDirectoryName(dir), dir.getType(), fetchName(dir.getType(), locale), translateContent(dir.getEntries(), locale, mainLevel))); } } } return result; }
@SuppressWarnings("rawtypes") private static void processYContents(List<YContentEntry> entries, Predicate<YContentEntry<?>> shouldDeletePredicate) { Iterator<YContentEntry> entryIt = entries.iterator(); while (entryIt.hasNext()) { YContentEntry entry = entryIt.next(); if (entry instanceof YContentDirectory) { YContentDirectory directory = (YContentDirectory) entry; processYContents(directory.getEntries(), shouldDeletePredicate); } if (shouldDeletePredicate.test(entry)) { entryIt.remove(); } } } }
private Page resolveMultiFile(YContentDirectory dir) { Page result = new Page(); if (dir.getType().equals(YConstants.CONTENT_MULTI_TYPE)) { for (YContentEntry e : dir.getEntries()) { if (e.isFile()) { YContentFile file = (YContentFile) e; if (!file.getLocations().isEmpty()) { String location = file.getLocations().get(0) .replace("yar://", ""); if (file.getType().equals(YConstants.FT_PLAIN_TEXT)) { result.setText(location); } else { result.setScan(location); } } } } } return result; }
private YDirectory resolveDirectory(YContentDirectory dir, IFilteringContext filteringContext, ContentResolvingContext contentResolvingContext) { YDirectory result = new YDirectory(dir.getId(), dir.getType(), getFolderName(dir)); List<Content> cList = new LinkedList<Content>(); boolean containsAvailableFile = false; for (YContentEntry<?> entry : dir.getEntries()) { if (!entry.isFile()) { YDirectory toBeAdded = resolveDirectory((YContentDirectory) entry, filteringContext, contentResolvingContext); if (toBeAdded.isContainsAvailableFile()) { containsAvailableFile = true; } cList.add(toBeAdded); } else { YFile toBeAdded = resolveFile((YContentFile) entry, filteringContext, dir.getType(), contentResolvingContext); if (toBeAdded.isAvailable()) { containsAvailableFile = true; } cList.add(toBeAdded); } } result.setContents(cList); result.setContainsAvailableFile(containsAvailableFile); return result; }
private List<Page> resolveChapter(YContentDirectory dir) { List<Page> result = new LinkedList<Page>(); for (YContentEntry e : dir.getEntries()) { if (e.isFile()) { result.add(resolveFile((YContentFile) e)); } else { result.add(resolveMultiFile((YContentDirectory) e)); } } return result; }
private List<ContentFileData> findChapterPages(List<YContentEntry> chapterEntries, Locale locale, String mainLevel) { List<ContentFileData> result = new ArrayList<ContentFileData>(); for (YContentEntry<?> content : chapterEntries) { if (content instanceof YContentFile) { YContentFile file = (YContentFile) content; if (yModelPropertyExtractor.isFileAccepted(file, mainLevel)) { result.add(new ContentFileData(file.getId(), YModelUtils.getDefaultName(file), fetchName(file.getFormat(), locale), yModelPropertyExtractor.prepareLocation(file.getLocations()))); } } else if (content instanceof YContentDirectory) { YContentDirectory dir = (YContentDirectory) content; if (ContentTypes.CONTENT_MULTI_TYPE.equals(dir.getType())) { result.addAll(findChapterPages(dir.getEntries(), locale, mainLevel)); } } } return result; }
@SuppressWarnings("rawtypes") private YContentFile findYContentFileById(Iterable<YContentEntry> contents, String id) { for (YContentEntry<?> contentEntry : contents) { if (contentEntry instanceof YContentFile) { YContentFile contentFile = (YContentFile) contentEntry; if (contentFile.getId().equals(id)) { return contentFile; } } else { YContentDirectory directory = (YContentDirectory) contentEntry; return findYContentFileById(directory.getEntries(), id); } } return null; }
private List<YContentFile> processPlainTextEntry(final YContentEntry<?> yEntry) { final List<YContentFile> result = new ArrayList<YContentFile>(); if (yEntry.isDirectory()) { final YContentDirectory yDirectory = (YContentDirectory) yEntry; for (final YContentEntry<?> yChild : yDirectory.getEntries()) { result.addAll(processPlainTextEntry(yChild)); } } else if (yEntry.isFile() && YConstants.FT_PLAIN_TEXT.equals(((YContentFile) yEntry).getType())) { result.add((YContentFile) yEntry); } return result; }
private boolean findIfContentExists(List<YContentEntry> chapterEntries, String mainLevel) { for (YContentEntry<?> content : chapterEntries) { if (content instanceof YContentFile && yModelPropertyExtractor.isFileAccepted((YContentFile) content, mainLevel)) { return true; } else if (content instanceof YContentDirectory) { if (findIfContentExists(((YContentDirectory) content).getEntries(), mainLevel)) { return true; } } } return false; }
public void convertContentLocations(YContentEntry<?> entry) { if (entry instanceof YContentDirectory) { YContentDirectory dir = (YContentDirectory) entry; for (YContentEntry<?> e : dir.getEntries()) { convertContentLocations(e); } return; } YContentFile file = (YContentFile) entry; List<String> newLocations = new ArrayList<String>(); for (String location : file.getLocations()) { newLocations.add(location.replaceAll("^" + YConstants.MISC_PACK_RELATIVE_CONTENT_PREFIX + "archive/", YConstants.MISC_LOCAL_CONTENT_ADDRESS_PREFIX)); } file.setLocations(newLocations); }
protected YContentFile findCover(YContentEntry<?> entry) { if (entry instanceof YContentDirectory) { YContentDirectory directory = (YContentDirectory) entry; for (YContentEntry<?> child : directory.getEntries()) { YContentFile cover = findCover(child); if (cover != null) { return cover; } } } else if (entry instanceof YContentFile) { YContentFile file = (YContentFile) entry; if (FileTypes.FT_COVER.equals(file.getType()) || FileTypes.FT_THUMBNAIL.equals(file.getType())) { return file; } } return null; }