- * Filter that removes all albums that do not have any images in any album
- * below it.
- */
- public static final Predicate<Album> NOT_EMPTY = new Predicate<Album>() {
-
- @Override
- public boolean apply(Album album) {
- /* so, we flatten all albums below the given one and check whether at least one album… */
- return FluentIterable.from(asList(album)).transformAndConcat(FLATTENER).anyMatch(new Predicate<Album>() {
-
- @Override
- public boolean apply(Album album) {
- /* …contains any inserted images. */
- return !album.getImages().isEmpty() && FluentIterable.from(album.getImages()).allMatch(new Predicate<Image>() {
-
- @Override
- public boolean apply(Image input) {
- return input.isInserted();
- }
- });
- }
- });
- }
- };
-
- /** The ID of this album. */
- private final String id;
-
- /** The Sone this album belongs to. */
- private Sone sone;
-
- /** Nested albums. */
- private final List<Album> albums = new ArrayList<Album>();
-
- /** The image IDs in order. */
- private final List<String> imageIds = new ArrayList<String>();
-
- /** The images in this album. */
- private final Map<String, Image> images = new HashMap<String, Image>();
-
- /** The parent album. */
- private Album parent;
-
- /** The title of this album. */
- private String title;
-
- /** The description of this album. */
- private String description;
-
- /** The ID of the album picture. */
- private String albumImage;
-
- /**
- * Creates a new album with a random ID.
- */
- public Album() {
- this(UUID.randomUUID().toString());
- }
-
- /**
- * Creates a new album with the given ID.
- *
- * @param id
- * The ID of the album
- */
- public Album(String id) {
- this.id = checkNotNull(id, "id must not be null");
- }
-
- //
- // ACCESSORS
- //
-
- /**