/*
- * Sone - Image.java - Copyright © 2011 David Roden
+ * Sone - Image.java - Copyright © 2011–2012 David Roden
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
/** The Sone the image belongs to. */
private Sone sone;
- /** The key of the image. */
+ /** The album this image belongs to. */
+ private Album album;
+
+ /** The request key of the image. */
private String key;
/** The creation time of the image. */
*/
public Image() {
this(UUID.randomUUID().toString());
+ setCreationTime(System.currentTimeMillis());
}
/**
* @return This image
*/
public Image setSone(Sone sone) {
- Validation.begin().isNull("Current Image Owner", this.sone).isNotNull("New Image Owner", sone);
+ Validation.begin().isNotNull("New Image Owner", sone).isEither("Old Image Owner", this.sone, null, sone).check();
this.sone = sone;
return this;
}
/**
- * Returns the key of this image.
+ * Returns the album this image belongs to.
*
- * @return The key of this image
+ * @return The album this image belongs to
+ */
+ public Album getAlbum() {
+ return album;
+ }
+
+ /**
+ * Sets the album this image belongs to. The album of an image can only be
+ * set once, and it is usually called by {@link Album#addImage(Image)}.
+ *
+ * @param album
+ * The album this image belongs to
+ * @return This image
+ */
+ public Image setAlbum(Album album) {
+ Validation.begin().isNotNull("New Album", album).check().isEqual("Album Owner and Image Owner", album.getSone(), getSone()).check();
+ this.album = album;
+ return this;
+ }
+
+ /**
+ * Returns the request key of this image.
+ *
+ * @return The request key of this image
*/
public String getKey() {
return key;
}
/**
- * Sets the key of this image. The key can only be set as long as no key has
- * yet been set.
+ * Sets the request key of this image. The request key can only be set as
+ * long as no request key has yet been set.
*
* @param key
- * The new key of this image
+ * The new request key of this image
* @return This image
*/
public Image setKey(String key) {
- Validation.begin().isNull("Current Image Key", this.key).isNotNull("New Image Key", key).check();
+ Validation.begin().isNotNull("New Image Key", key).isEither("Old Image Key", this.key, null, key).check();
this.key = key;
return this;
}
/**
+ * Returns whether the image has already been inserted. An image is
+ * considered as having been inserted it its {@link #getKey() key} is not
+ * {@code null}.
+ *
+ * @return {@code true} if there is a key for this image, {@code false}
+ * otherwise
+ */
+ public boolean isInserted() {
+ return key != null;
+ }
+
+ /**
* Returns the creation time of this image.
*
* @return The creation time of this image (in milliseconds since 1970, Jan
* @return This image
*/
public Image setCreationTime(long creationTime) {
- Validation.begin().isEqual("Current Image Creation Time", this.creationTime, 0).isGreater("New Image Creation Time", creationTime, 0).check();
+ Validation.begin().isGreater("New Image Creation Time", creationTime, 0).isEither("Old Image Creation Time", this.creationTime, 0L, creationTime).check();
this.creationTime = creationTime;
return this;
}
* @return This image
*/
public Image setWidth(int width) {
- Validation.begin().isEqual("Current Image Width", this.width, 0).isGreater("New Image Width", width, 0).check();
+ Validation.begin().isGreater("New Image Width", width, 0).isEither("Old Image Width", this.width, 0, width).check();
this.width = width;
return this;
}
* @return This image
*/
public Image setHeight(int height) {
- Validation.begin().isEqual("Current Image Height", this.height, 0).isGreater("New Image Height", height, 0);
+ Validation.begin().isGreater("New Image Height", height, 0).isEither("Old Image Height", this.height, 0, height).check();
this.height = height;
return this;
}
return fingerprint.toString();
}
+ //
+ // OBJECT METHODS
+ //
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public int hashCode() {
+ return id.hashCode();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public boolean equals(Object object) {
+ if (!(object instanceof Image)) {
+ return false;
+ }
+ return ((Image) object).id.equals(id);
+ }
+
}