9480071b24a98717b8fe95ea7ddd9f5987588532
[Sone.git] / src / main / java / net / pterodactylus / sone / database / PostDatabase.java
1 /*
2  * Sone - PostDatabase.java - Copyright © 2013 David Roden
3  *
4  * This program is free software: you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation, either version 3 of the License, or
7  * (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
16  */
17
18 package net.pterodactylus.sone.database;
19
20 import java.util.Collection;
21
22 import net.pterodactylus.sone.data.Post;
23 import net.pterodactylus.sone.data.Sone;
24
25 import com.google.common.base.Function;
26 import com.google.common.base.Optional;
27
28 /**
29  * Database for handling {@link Post}s.
30  *
31  * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
32  */
33 public interface PostDatabase {
34
35         Function<String, Optional<Post>> getPost();
36
37         /**
38          * Returns the post with the given ID.
39          *
40          * @param postId
41          *            The ID of the post to return
42          * @return The post with the given ID, or {@code null}
43          */
44         Optional<Post> getPost(String postId);
45
46         /**
47          * Returns all posts from the given Sone.
48          *
49          * @param soneId
50          *            The ID of the Sone
51          * @return All posts from the given Sone
52          */
53         Collection<Post> getPosts(String soneId);
54
55         /**
56          * Returns all posts that have the given Sone as recipient.
57          *
58          * @see Post#getRecipient()
59          * @param recipientId
60          *            The ID of the recipient of the posts
61          * @return All posts that have the given Sone as recipient
62          */
63         Collection<Post> getDirectedPosts(String recipientId);
64
65         /**
66          * Adds the given post to the store.
67          *
68          * @param post
69          *            The post to store
70          */
71         void storePost(Post post);
72
73         /**
74          * Removes the given post.
75          *
76          * @param post
77          *            The post to remove
78          */
79         void removePost(Post post);
80
81         /**
82          * Stores the given posts as all posts of a single {@link Sone}. This method
83          * will removed all other posts from the Sone!
84          *
85          * @param sone
86          *            The Sone to store the posts for
87          * @param posts
88          *            The posts to store
89          * @throws IllegalArgumentException
90          *             if posts do not all belong to the same Sone
91          */
92         void storePosts(Sone sone, Collection<Post> posts) throws IllegalArgumentException;
93
94         /**
95          * Removes all posts of the given {@link Sone}
96          *
97          * @param sone
98          *            The Sone to remove all posts for
99          */
100         void removePosts(Sone sone);
101
102 }