X-Git-Url: https://git.pterodactylus.net/?p=Sone.git;a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fsone%2Fdata%2FImage.java;h=8414f3aeacbc46c1c05004868bba62ecc1ea32a8;hp=587c15ec24157184f02de774a15494f3a42cc25c;hb=faf66247a34f64946990a985d2ea3003465969cb;hpb=53fa8e56ea20c7f95901b32ce449ca6cc73e8cd4 diff --git a/src/main/java/net/pterodactylus/sone/data/Image.java b/src/main/java/net/pterodactylus/sone/data/Image.java index 587c15e..8414f3a 100644 --- a/src/main/java/net/pterodactylus/sone/data/Image.java +++ b/src/main/java/net/pterodactylus/sone/data/Image.java @@ -1,5 +1,5 @@ /* - * Sone - Image.java - Copyright © 2011 David Roden + * Sone - Image.java - Copyright © 2011–2020 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 @@ -17,248 +17,123 @@ package net.pterodactylus.sone.data; -import java.util.UUID; - -import net.pterodactylus.util.validation.Validation; - /** * Container for image metadata. - * - * @author David ‘Bombe’ Roden */ -public class Image implements Fingerprintable { - - /** The ID of the image. */ - private final String id; - - /** The Sone the image belongs to. */ - private Sone sone; - - /** The key of the image. */ - private String key; - - /** The creation time of the image. */ - private long creationTime; - - /** The width of the image. */ - private int width; - - /** The height of the image. */ - private int height; - - /** The title of the image. */ - private String title; - - /** The description of the image. */ - private String description; - - /** - * Creates a new image with a random ID. - */ - public Image() { - this(UUID.randomUUID().toString()); - } - - /** - * Creates a new image. - * - * @param id - * The ID of the image - */ - public Image(String id) { - Validation.begin().isNotNull("Image ID", id).check(); - this.id = id; - } - - // - // ACCESSORS - // +public interface Image extends Identified, Fingerprintable { /** * Returns the ID of this image. * * @return The ID of this image */ - public String getId() { - return id; - } + String getId(); /** * Returns the Sone this image belongs to. * * @return The Sone this image belongs to */ - public Sone getSone() { - return sone; - } + Sone getSone(); /** - * Sets the owner of this image. The owner can only be set if no owner has - * yet been set. + * Returns the album this image belongs to. * - * @param sone - * The new owner of this image - * @return This image + * @return The album this image belongs to */ - public Image setSone(Sone sone) { - Validation.begin().isNull("Current Image Owner", this.sone).isNotNull("New Image Owner", sone); - this.sone = sone; - return this; - } + Album getAlbum(); /** - * Returns the key of this image. + * 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)}. * - * @return The key of this image + * @param album + * The album this image belongs to + * @return This image */ - public String getKey() { - return key; - } + Image setAlbum(Album album); /** - * Sets the key of this image. The key can only be set as long as no key has - * yet been set. + * Returns the request key of this image. * - * @param key - * The new key of this image - * @return This image + * @return The request key of this image */ - public Image setKey(String key) { - Validation.begin().isNull("Current Image Key", this.key).isNotNull("New Image Key", key).check(); - this.key = key; - return this; - } + String getKey(); /** - * Returns the creation time of this image. + * 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 The creation time of this image (in milliseconds since 1970, Jan - * 1, UTC) + * @return {@code true} if there is a key for this image, {@code false} + * otherwise */ - public long getCreationTime() { - return creationTime; - } + boolean isInserted(); /** - * Sets the new creation time of this image. The creation time can only be - * set as long as no creation time has been set yet. + * Returns the creation time of this image. * - * @param creationTime - * The new creation time of this image - * @return This image + * @return The creation time of this image (in milliseconds since 1970, Jan + * 1, UTC) */ - public Image setCreationTime(long creationTime) { - Validation.begin().isEqual("Current Image Creation Time", this.creationTime, 0).isGreater("New Image Creation Time", creationTime, 0).check(); - this.creationTime = creationTime; - return this; - } + long getCreationTime(); /** * Returns the width of this image. * * @return The width of this image (in pixels) */ - public int getWidth() { - return width; - } - - /** - * Sets the width of this image. The width can only be set as long as no - * width has been set yet. - * - * @param width - * The new width of this image - * @return This image - */ - public Image setWidth(int width) { - Validation.begin().isEqual("Current Image Width", this.width, 0).isGreater("New Image Width", width, 0).check(); - this.width = width; - return this; - } + int getWidth(); /** * Returns the height of this image. * * @return The height of this image (in pixels) */ - public int getHeight() { - return height; - } - - /** - * Sets the new height of this image. The height can only be set as long as - * no height has yet been set. - * - * @param height - * The new height of this image - * @return This image - */ - public Image setHeight(int height) { - Validation.begin().isEqual("Current Image Height", this.height, 0).isGreater("New Image Height", height, 0); - this.height = height; - return this; - } + int getHeight(); /** * Returns the title of this image. * * @return The title of this image */ - public String getTitle() { - return title; - } - - /** - * Sets the title of this image. - * - * @param title - * The title of this image - * @return This image - */ - public Image setTitle(String title) { - Validation.begin().isNotNull("Image Title", title).check(); - this.title = title; - return this; - } + String getTitle(); /** * Returns the description of this image. * * @return The description of this image */ - public String getDescription() { - return description; - } - - /** - * Sets the description of this image. - * - * @param description - * The description of this image - * @return This image - */ - public Image setDescription(String description) { - Validation.begin().isNotNull("Image Description", description).check(); - this.description = description; - return this; - } - - // - // FINGERPRINTABLE METHODS - // + String getDescription(); /** * {@inheritDoc} */ @Override - public String getFingerprint() { - StringBuilder fingerprint = new StringBuilder(); - fingerprint.append("Image("); - fingerprint.append("ID(").append(id).append(')'); - fingerprint.append("Title(").append(title).append(')'); - fingerprint.append("Description(").append(description).append(')'); - fingerprint.append(')'); - return fingerprint.toString(); + String getFingerprint(); + + Modifier modify() throws IllegalStateException; + + interface Modifier { + + Modifier setSone(Sone sone); + + Modifier setCreationTime(long creationTime); + + Modifier setKey(String key); + + Modifier setTitle(String title); + + Modifier setDescription(String description); + + Modifier setWidth(int width); + + Modifier setHeight(int height); + + Image update() throws IllegalStateException; + + class ImageTitleMustNotBeEmpty extends IllegalStateException { } + } }