@Nonnull private Collection<PathAwareEntity> childrenFactory (final @Nonnull MediaFolder parent) { return Arrays.asList(new VirtualMediaFolder(parent, PATH_MUSIC, "Music", this::musicFactory), new VirtualMediaFolder(parent, PATH_PHOTOS, "Photos", EMPTY), new VirtualMediaFolder(parent, PATH_VIDEOS, "Videos", EMPTY), new VirtualMediaFolder(parent, PATH_SERVICES, "Services", this::servicesFactory)); }
@Nonnull private Collection<PathAwareEntity> childrenFactory (final @Nonnull MediaFolder parent) { return Arrays.asList(new VirtualMediaFolder(parent, PATH_DIARY, "Diary", diaryProvider::findPhotos), new VirtualMediaFolder(parent, PATH_THEMES, "Themes", themesProvider::findPhotos)); } }
@Override @Nonnull public MediaFolder createRootFolder (final @Nonnull MediaFolder parent) { return new VirtualMediaFolder(parent, PATH_ROOT, "Stopping Down", this::childrenFactory); }
@PostConstruct private void initialize() { // FIXME: why is this called multiple times? log.info(">>>> discovered entity browsers: {}", entityBrowsers); log.info(">>>> discovered services: {}", services); root = new VirtualMediaFolder(Optional.empty(), PATH_ROOT, "", this::childrenFactory); }
/******************************************************************************************************************* * * {@inheritDoc} * ******************************************************************************************************************/ @Override @Nonnull public PathAwareFinder findPhotos (final @Nonnull MediaFolder parent) { return parent.finderOf(p -> Arrays.asList( new VirtualMediaFolder(p, PATH_PLACES, "Places", this::placesFactory), new VirtualMediaFolder(p, PATH_SUBJECTS, "Subjects", this::subjectsFactory))); }
/******************************************************************************************************************* * * Creates a {@link MediaFolder} with the given parent and the children provided by a factory. * * @param parent the parent folder * @param entitiesFactory a function which, given the parent and a URL, provides the entities * @return the folder * ******************************************************************************************************************/ // FIXME: even though the finder is retrieved later, through the factory, the translation to DIDL does compute // the finder because it calls the count() for the children count @Nonnull public PathAwareEntity createFolder (final @Nonnull MediaFolder parent, final @Nonnull BiFunction<MediaFolder, String, Collection<PathAwareEntity>> entitiesFactory) { final Path path = Paths.get(url.replaceAll("^.*(themes|diary\\/[0-9]{4})\\/(.*)\\/images\\.xml", "$2")); final EntityCollectionFactory ecf = p -> entitiesFactory.apply(p, url); return new VirtualMediaFolder(parent, path, displayName, ecf); } }
/******************************************************************************************************************* * ******************************************************************************************************************/ @Override @Nonnull public PathAwareFinder findPhotos(final @Nonnull MediaFolder parent) { return parent.finderOf( p1 -> IntStream.range(1999, 2016 + 1) // FIXME: use current year .mapToObj(x -> x) .map(year -> new VirtualMediaFolder(p1, Paths.get("" + year), "" + year, (EntityCollectionFactory)(p2 -> entriesFactory(p2, year)))) .collect(toList())); }
/******************************************************************************************************************* * ******************************************************************************************************************/ @Nonnull protected static List<String> dump (final @Nonnull PathAwareFinder finder) { VirtualMediaFolder.EntityFinderFactory fff = t -> finder; final VirtualMediaFolder md = new VirtualMediaFolder(Optional.empty(), Paths.get("/"), "xxx", fff); return TestUtilities.dump(md); } // protected static void dumpAndAssertResults (final @Nonnull String fileName, final @Nonnull Collection<?> data)