7bfa33a91fc9eafdd496f4dcd636f00c9c9d4c5f
[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.Optional;
26
27 /**
28  * Database for handling {@link Post}s.
29  *
30  * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
31  */
32 public interface PostDatabase {
33
34         /**
35          * Returns the post with the given ID.
36          *
37          * @param postId
38          *            The ID of the post to return
39          * @return The post with the given ID, or {@code null}
40          */
41         Optional<Post> getPost(String postId);
42
43         /**
44          * Returns all posts from the given Sone.
45          *
46          * @param soneId
47          *            The ID of the Sone
48          * @return All posts from the given Sone
49          */
50         Collection<Post> getPosts(String soneId);
51
52         /**
53          * Returns all posts that have the given Sone as recipient.
54          *
55          * @see Post#getRecipient()
56          * @param recipientId
57          *            The ID of the recipient of the posts
58          * @return All posts that have the given Sone as recipient
59          */
60         Collection<Post> getDirectedPosts(String recipientId);
61
62         /**
63          * Adds the given post to the store.
64          *
65          * @param post
66          *            The post to store
67          */
68         void storePost(Post post);
69
70         /**
71          * Removes the given post.
72          *
73          * @param post
74          *            The post to remove
75          */
76         void removePost(Post post);
77
78         /**
79          * Stores the given posts as all posts of a single {@link Sone}. This method
80          * will removed all other posts from the Sone!
81          *
82          * @param sone
83          *            The Sone to store the posts for
84          * @param posts
85          *            The posts to store
86          * @throws IllegalArgumentException
87          *             if posts do not all belong to the same Sone
88          */
89         void storePosts(Sone sone, Collection<Post> posts) throws IllegalArgumentException;
90
91         /**
92          * Removes all posts of the given {@link Sone}
93          *
94          * @param sone
95          *            The Sone to remove all posts for
96          */
97         void removePosts(Sone sone);
98
99 }