X-Git-Url: https://git.pterodactylus.net/?p=Sone.git;a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fsone%2Fcore%2FConfigurationSoneParser.java;h=aa387e924635f1bd9c9d8f88e61b704a31584d4d;hp=7b7be9ff421107bd366dfb4bad3ba88c19cb3385;hb=62573c314957b1851f4fbe693b8746686caa940a;hpb=ffb2ea1773cf7e3d1b7fc41ab0e9c3c1eed514e0 diff --git a/src/main/java/net/pterodactylus/sone/core/ConfigurationSoneParser.java b/src/main/java/net/pterodactylus/sone/core/ConfigurationSoneParser.java index 7b7be9f..aa387e9 100644 --- a/src/main/java/net/pterodactylus/sone/core/ConfigurationSoneParser.java +++ b/src/main/java/net/pterodactylus/sone/core/ConfigurationSoneParser.java @@ -1,5 +1,7 @@ package net.pterodactylus.sone.core; +import static java.util.Collections.unmodifiableMap; + import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; @@ -10,11 +12,13 @@ import java.util.Set; import javax.annotation.Nullable; import net.pterodactylus.sone.data.Album; +import net.pterodactylus.sone.data.Image; import net.pterodactylus.sone.data.Post; import net.pterodactylus.sone.data.PostReply; import net.pterodactylus.sone.data.Profile; import net.pterodactylus.sone.data.Sone; import net.pterodactylus.sone.database.AlbumBuilderFactory; +import net.pterodactylus.sone.database.ImageBuilderFactory; import net.pterodactylus.sone.database.PostBuilder; import net.pterodactylus.sone.database.PostBuilderFactory; import net.pterodactylus.sone.database.PostReplyBuilder; @@ -23,14 +27,15 @@ import net.pterodactylus.util.config.Configuration; /** * Parses a {@link Sone}’s data from a {@link Configuration}. - * - * @author David ‘Bombe’ Roden */ public class ConfigurationSoneParser { private final Configuration configuration; private final Sone sone; private final String sonePrefix; + private final Map albums = new HashMap(); + private final List topLevelAlbums = new ArrayList(); + private final Map images = new HashMap(); public ConfigurationSoneParser(Configuration configuration, Sone sone) { this.configuration = configuration; @@ -183,8 +188,6 @@ public class ConfigurationSoneParser { public List parseTopLevelAlbums( AlbumBuilderFactory albumBuilderFactory) { - Map albums = new HashMap(); - List topLevelAlbums = new ArrayList(); int albumCounter = 0; while (true) { String albumPrefix = "/Albums/" + albumCounter++; @@ -196,8 +199,6 @@ public class ConfigurationSoneParser { String albumDescription = getString(albumPrefix + "/Description", null); String albumParentId = getString(albumPrefix + "/Parent", null); - String albumImageId = - getString(albumPrefix + "/AlbumImage", null); if ((albumTitle == null) || (albumDescription == null)) { throw new InvalidAlbumFound(); } @@ -208,7 +209,6 @@ public class ConfigurationSoneParser { .modify() .setTitle(albumTitle) .setDescription(albumDescription) - .setAlbumImage(albumImageId) .update(); if (albumParentId != null) { Album parentAlbum = albums.get(albumParentId); @@ -224,6 +224,64 @@ public class ConfigurationSoneParser { return topLevelAlbums; } + public Map getAlbums() { + return unmodifiableMap(albums); + } + + public void parseImages(ImageBuilderFactory imageBuilderFactory) { + int imageCounter = 0; + while (true) { + String imagePrefix = "/Images/" + imageCounter++; + String imageId = getString(imagePrefix + "/ID", null); + if (imageId == null) { + break; + } + String albumId = getString(imagePrefix + "/Album", null); + String key = getString(imagePrefix + "/Key", null); + String title = getString(imagePrefix + "/Title", null); + String description = + getString(imagePrefix + "/Description", null); + Long creationTime = getLong(imagePrefix + "/CreationTime", null); + Integer width = getInt(imagePrefix + "/Width", null); + Integer height = getInt(imagePrefix + "/Height", null); + if (albumAttributesAreInvalid(albumId, key, title, description, + creationTime, + width, height)) { + throw new InvalidImageFound(); + } + Album album = albums.get(albumId); + if (album == null) { + throw new InvalidParentAlbumFound(albumId); + } + Image image = imageBuilderFactory.newImageBuilder() + .withId(imageId) + .build() + .modify() + .setSone(sone) + .setCreationTime(creationTime) + .setKey(key) + .setTitle(title) + .setDescription(description) + .setWidth(width) + .setHeight(height) + .update(); + album.addImage(image); + images.put(image.getId(), image); + } + } + + public Map getImages() { + return images; + } + + private boolean albumAttributesAreInvalid(String albumId, String key, + String title, String description, Long creationTime, + Integer width, Integer height) { + return (albumId == null) || (key == null) || (title == null) || ( + description == null) || (creationTime == null) || (width + == null) || (height == null); + } + public static class InvalidPostFound extends RuntimeException { } public static class InvalidPostReplyFound extends RuntimeException { } @@ -244,4 +302,6 @@ public class ConfigurationSoneParser { } + public static class InvalidImageFound extends RuntimeException { } + }