projects
/
Sone.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Ensure that an image is always set as album image, unless the album is empty.
[Sone.git]
/
src
/
main
/
java
/
net
/
pterodactylus
/
sone
/
data
/
Album.java
diff --git
a/src/main/java/net/pterodactylus/sone/data/Album.java
b/src/main/java/net/pterodactylus/sone/data/Album.java
index
d7df845
..
89823a8
100644
(file)
--- a/
src/main/java/net/pterodactylus/sone/data/Album.java
+++ b/
src/main/java/net/pterodactylus/sone/data/Album.java
@@
-18,7
+18,9
@@
package net.pterodactylus.sone.data;
import java.util.ArrayList;
package net.pterodactylus.sone.data;
import java.util.ArrayList;
+import java.util.LinkedHashMap;
import java.util.List;
import java.util.List;
+import java.util.Map;
import java.util.UUID;
import net.pterodactylus.util.validation.Validation;
import java.util.UUID;
import net.pterodactylus.util.validation.Validation;
@@
-40,7
+42,7
@@
public class Album implements Fingerprintable {
private final List<Album> albums = new ArrayList<Album>();
/** The images in this album. */
private final List<Album> albums = new ArrayList<Album>();
/** The images in this album. */
- private final
List<Image> images = new ArrayList<
Image>();
+ private final
Map<String, Image> images = new LinkedHashMap<String,
Image>();
/** The parent album. */
private Album parent;
/** The parent album. */
private Album parent;
@@
-51,8
+53,8
@@
public class Album implements Fingerprintable {
/** The description of this album. */
private String description;
/** The description of this album. */
private String description;
- /** The
index
of the album picture. */
- private
int albumImage = -1
;
+ /** The
ID
of the album picture. */
+ private
String albumImage
;
/**
* Creates a new album with a random ID.
/**
* Creates a new album with a random ID.
@@
-103,7
+105,7
@@
public class Album implements Fingerprintable {
* @return This album
*/
public Album setSone(Sone sone) {
* @return This album
*/
public Album setSone(Sone sone) {
- Validation.begin().isN
ull("Current Album Owner", this.sone).isNotNull("New Album Owner"
, sone).check();
+ Validation.begin().isN
otNull("New Album Owner", sone).isEither("Old Album Owner", this.sone, null
, sone).check();
this.sone = sone;
return this;
}
this.sone = sone;
return this;
}
@@
-124,9
+126,11
@@
public class Album implements Fingerprintable {
* The album to add
*/
public void addAlbum(Album album) {
* The album to add
*/
public void addAlbum(Album album) {
- Validation.begin().isNotNull("Album", album).check().isEqual("Album Owner", album.sone, sone).isNull("Album Parent", album.parent).check();
- albums.add(album);
+ Validation.begin().isNotNull("Album", album).check().isEqual("Album Owner", album.sone, sone).isEither("Old Album Parent", this.parent, null, album.parent).check();
album.setParent(this);
album.setParent(this);
+ if (!albums.contains(album)) {
+ albums.add(album);
+ }
}
/**
}
/**
@@
-147,7
+151,7
@@
public class Album implements Fingerprintable {
* @return The images in this album
*/
public List<Image> getImages() {
* @return The images in this album
*/
public List<Image> getImages() {
- return new ArrayList<Image>(images);
+ return new ArrayList<Image>(images
.values()
);
}
/**
}
/**
@@
-158,8
+162,16
@@
public class Album implements Fingerprintable {
*/
public void addImage(Image image) {
Validation.begin().isNotNull("Image", image).check().isNotNull("Image Owner", image.getSone()).check().isEqual("Image Owner", image.getSone(), sone).check();
*/
public void addImage(Image image) {
Validation.begin().isNotNull("Image", image).check().isNotNull("Image Owner", image.getSone()).check().isEqual("Image Owner", image.getSone(), sone).check();
+ if (image.getAlbum() != null) {
+ image.getAlbum().removeImage(image);
+ }
image.setAlbum(this);
image.setAlbum(this);
- images.add(image);
+ if (images.isEmpty()) {
+ albumImage = image.getId();
+ }
+ if (!images.containsKey(image.getId())) {
+ images.put(image.getId(), image);
+ }
}
/**
}
/**
@@
-171,6
+183,13
@@
public class Album implements Fingerprintable {
public void removeImage(Image image) {
Validation.begin().isNotNull("Image", image).check().isEqual("Image Owner", image.getSone(), sone).check();
images.remove(image);
public void removeImage(Image image) {
Validation.begin().isNotNull("Image", image).check().isEqual("Image Owner", image.getSone(), sone).check();
images.remove(image);
+ if (image.getId().equals(albumImage)) {
+ if (images.isEmpty()) {
+ albumImage = null;
+ } else {
+ albumImage = images.values().iterator().next().getId();
+ }
+ }
}
/**
}
/**
@@
-180,13
+199,25
@@
public class Album implements Fingerprintable {
* @return The image to show when this album is listed
*/
public Image getAlbumImage() {
* @return The image to show when this album is listed
*/
public Image getAlbumImage() {
- if (albumImage ==
-1
) {
+ if (albumImage ==
null
) {
return null;
}
return images.get(albumImage);
}
/**
return null;
}
return images.get(albumImage);
}
/**
+ * Sets the ID of the album image.
+ *
+ * @param id
+ * The ID of the album image
+ * @return This album
+ */
+ public Album setAlbumImage(String id) {
+ this.albumImage = id;
+ return this;
+ }
+
+ /**
* Returns whether this album contains any other albums or images.
*
* @return {@code true} if this album is empty, {@code false} otherwise
* Returns whether this album contains any other albums or images.
*
* @return {@code true} if this album is empty, {@code false} otherwise
@@
-224,7
+255,6
@@
public class Album implements Fingerprintable {
* @return This album
*/
protected Album removeParent() {
* @return This album
*/
protected Album removeParent() {
- Validation.begin().isNotNull("Album Parent", parent).check();
this.parent = null;
return this;
}
this.parent = null;
return this;
}
@@
-297,8
+327,10
@@
public class Album implements Fingerprintable {
/* add images. */
fingerprint.append("Images(");
/* add images. */
fingerprint.append("Images(");
- for (Image image : images) {
- fingerprint.append(image.getFingerprint());
+ for (Image image : images.values()) {
+ if (image.isInserted()) {
+ fingerprint.append(image.getFingerprint());
+ }
}
fingerprint.append(')');
}
fingerprint.append(')');