X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fsone%2Fcore%2FConfigurationSoneParser.java;h=99c1c9d0e6a29733e0fb655852c9518934c5ce24;hb=6a3f1fede0cda5cd6ed56204aa1dd37a19813cb9;hp=01d32219d18c6e49cd86ab2f65b39f446f3320b5;hpb=fdc519da8a4d5c994c3b2233fc049e3be728bb76;p=Sone.git
diff --git a/src/main/java/net/pterodactylus/sone/core/ConfigurationSoneParser.java b/src/main/java/net/pterodactylus/sone/core/ConfigurationSoneParser.java
index 01d3221..99c1c9d 100644
--- a/src/main/java/net/pterodactylus/sone/core/ConfigurationSoneParser.java
+++ b/src/main/java/net/pterodactylus/sone/core/ConfigurationSoneParser.java
@@ -1,15 +1,24 @@
package net.pterodactylus.sone.core;
-import java.util.Collection;
+import static java.util.Collections.unmodifiableMap;
+
+import java.util.ArrayList;
+import java.util.HashMap;
import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
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;
@@ -18,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;
@@ -72,9 +82,9 @@ public class ConfigurationSoneParser {
.getValue(defaultValue);
}
- public Collection parsePosts(PostBuilderFactory postBuilderFactory)
+ public Set parsePosts(PostBuilderFactory postBuilderFactory)
throws InvalidPostFound {
- Set posts = new HashSet();
+ Set posts = new HashSet<>();
while (true) {
String postPrefix = "/Posts/" + posts.size();
String postId = getString(postPrefix + "/ID", null);
@@ -109,9 +119,9 @@ public class ConfigurationSoneParser {
return (postRecipientId != null) && (postRecipientId.length() == 43);
}
- public Collection parsePostReplies(
+ public Set parsePostReplies(
PostReplyBuilderFactory postReplyBuilderFactory) {
- Set replies = new HashSet();
+ Set replies = new HashSet<>();
while (true) {
String replyPrefix = "/Replies/" + replies.size();
String replyId = getString(replyPrefix + "/ID", null);
@@ -136,8 +146,162 @@ public class ConfigurationSoneParser {
return replies;
}
+ public Set parseLikedPostIds() {
+ Set likedPostIds = new HashSet<>();
+ while (true) {
+ String likedPostId =
+ getString("/Likes/Post/" + likedPostIds.size() + "/ID",
+ null);
+ if (likedPostId == null) {
+ break;
+ }
+ likedPostIds.add(likedPostId);
+ }
+ return likedPostIds;
+ }
+
+ public Set parseLikedPostReplyIds() {
+ Set likedPostReplyIds = new HashSet<>();
+ while (true) {
+ String likedReplyId = getString(
+ "/Likes/Reply/" + likedPostReplyIds.size() + "/ID", null);
+ if (likedReplyId == null) {
+ break;
+ }
+ likedPostReplyIds.add(likedReplyId);
+ }
+ return likedPostReplyIds;
+ }
+
+ public Set parseFriends() {
+ Set friends = new HashSet<>();
+ while (true) {
+ String friendId =
+ getString("/Friends/" + friends.size() + "/ID", null);
+ if (friendId == null) {
+ break;
+ }
+ friends.add(friendId);
+ }
+ return friends;
+ }
+
+ public List parseTopLevelAlbums(
+ AlbumBuilderFactory albumBuilderFactory) {
+ int albumCounter = 0;
+ while (true) {
+ String albumPrefix = "/Albums/" + albumCounter++;
+ String albumId = getString(albumPrefix + "/ID", null);
+ if (albumId == null) {
+ break;
+ }
+ String albumTitle = getString(albumPrefix + "/Title", null);
+ String albumDescription =
+ getString(albumPrefix + "/Description", null);
+ String albumParentId = getString(albumPrefix + "/Parent", null);
+ if ((albumTitle == null) || (albumDescription == null)) {
+ throw new InvalidAlbumFound();
+ }
+ Album album = albumBuilderFactory.newAlbumBuilder()
+ .withId(albumId)
+ .by(sone)
+ .build()
+ .modify()
+ .setTitle(albumTitle)
+ .setDescription(albumDescription)
+ .update();
+ if (albumParentId != null) {
+ Album parentAlbum = albums.get(albumParentId);
+ if (parentAlbum == null) {
+ throw new InvalidParentAlbumFound(albumParentId);
+ }
+ parentAlbum.addAlbum(album);
+ } else {
+ topLevelAlbums.add(album);
+ }
+ albums.put(albumId, album);
+ }
+ 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 { }
+ public static class InvalidAlbumFound extends RuntimeException { }
+
+ public static class InvalidParentAlbumFound extends RuntimeException {
+
+ private final String albumParentId;
+
+ public InvalidParentAlbumFound(String albumParentId) {
+ this.albumParentId = albumParentId;
+ }
+
+ public String getAlbumParentId() {
+ return albumParentId;
+ }
+
+ }
+
+ public static class InvalidImageFound extends RuntimeException { }
+
}