package net.pterodactylus.sone.data;
import java.util.ArrayList;
-import java.util.LinkedHashMap;
+import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import net.pterodactylus.util.collection.Mapper;
import net.pterodactylus.util.collection.Mappers;
+import net.pterodactylus.util.object.Default;
import net.pterodactylus.util.validation.Validation;
/**
private final List<String> imageIds = new ArrayList<String>();
/** The images in this album. */
- private final Map<String, Image> images = new LinkedHashMap<String, Image>();
+ private final Map<String, Image> images = new HashMap<String, Image>();
/** The parent album. */
private Album parent;
image.getAlbum().removeImage(image);
}
image.setAlbum(this);
- if (imageIds.isEmpty()) {
+ if (imageIds.isEmpty() && (albumImage == null)) {
albumImage = image.getId();
}
if (!imageIds.contains(image.getId())) {
}
/**
+ * Moves the given image up in this album’s images. If the image is already
+ * the first image, nothing happens.
+ *
+ * @param image
+ * The image to move up
+ */
+ public void moveImageUp(Image image) {
+ Validation.begin().isNotNull("Image", image).check().isEqual("Image Album", image.getAlbum(), this).isEqual("Album Owner", image.getAlbum().getSone(), sone).check();
+ int oldIndex = imageIds.indexOf(image.getId());
+ if (oldIndex <= 0) {
+ return;
+ }
+ imageIds.remove(image.getId());
+ imageIds.add(oldIndex - 1, image.getId());
+ }
+
+ /**
+ * Move the given image down in this album’s images. If the image is already
+ * the last image, nothing happens.
+ *
+ * @param image
+ * The image to move down
+ */
+ public void moveImageDown(Image image) {
+ Validation.begin().isNotNull("Image", image).check().isEqual("Image Album", image.getAlbum(), this).isEqual("Album Owner", image.getAlbum().getSone(), sone).check();
+ int oldIndex = imageIds.indexOf(image.getId());
+ if ((oldIndex == -1) || (oldIndex >= (imageIds.size() - 1))) {
+ return;
+ }
+ imageIds.remove(image.getId());
+ imageIds.add(oldIndex + 1, image.getId());
+ }
+
+ /**
* Returns the album image of this album, or {@code null} if no album image
* has been set.
*
if (albumImage == null) {
return null;
}
- return images.get(albumImage);
+ return Default.forNull(images.get(albumImage), images.values().iterator().next());
}
/**
fingerprint.append("ID(").append(id).append(')');
fingerprint.append("Title(").append(title).append(')');
fingerprint.append("Description(").append(description).append(')');
+ if (albumImage != null) {
+ fingerprint.append("AlbumImage(").append(albumImage).append(')');
+ }
/* add nested albums. */
fingerprint.append("Albums(");