package envoy.client.data; import java.util.*; import envoy.data.IdGenerator; import envoy.data.Message; import envoy.data.User; import envoy.event.MessageStatusChangeEvent; /** * Stores information about the current {@link User} and their {@link Chat}s. * For message ID generation a {@link IdGenerator} is stored as well.
*
* Project: envoy-client
* File: LocalDB.java
* Created: 3 Feb 2020
* * @author Kai S. K. Engelbart * @since Envoy Client v0.3-alpha */ public abstract class LocalDB { protected User user; protected Map users = new HashMap<>(); protected List chats = new ArrayList<>(); protected IdGenerator idGenerator; protected Cache messageCache = new Cache<>(); protected Cache statusCache = new Cache<>(); /** * Initializes a storage space for a user-specific list of chats. * * @since Envoy Client v0.3-alpha */ public void initializeUserStorage() {} /** * Stores all users. If the client user is specified, their chats will be stored * as well. The message id generator will also be saved if present. * * @throws Exception if the saving process failed * @since Envoy Client v0.3-alpha */ public void save() throws Exception {} /** * Loads all user data. * * @throws Exception if the loading process failed * @since Envoy Client v0.3-alpha */ public void loadUsers() throws Exception {} /** * Loads all data of the client user. * * @throws Exception if the loading process failed * @since Envoy Client v0.3-alpha */ public void loadUserData() throws Exception {} /** * Loads the ID generator. Any exception thrown during this process is ignored. * * @since Envoy Client v0.3-alpha */ public void loadIdGenerator() {} /** * @return a {@code Map} of all users stored locally with their * user names as keys * @since Envoy Client v0.2-alpha */ public Map getUsers() { return users; } /** * @param users the users to set */ public void setUsers(Map users) { this.users = users; } /** * @return all saved {@link Chat} objects that list the client user as the * sender * @since Envoy Client v0.1-alpha **/ public List getChats() { return chats; } /** * @param chats the chats to set */ public void setChats(List chats) { this.chats = chats; } /** * @return the {@link User} who initialized the local database * @since Envoy Client v0.2-alpha */ public User getUser() { return user; } /** * @param user the user to set * @since Envoy Client v0.2-alpha */ public void setUser(User user) { this.user = user; } /** * @return the message ID generator * @since Envoy Client v0.3-alpha */ public IdGenerator getIdGenerator() { return idGenerator; } /** * @param idGenerator the message ID generator to set * @since Envoy Client v0.3-alpha */ public void setIdGenerator(IdGenerator idGenerator) { this.idGenerator = idGenerator; } /** * @return {@code true} if an {@link IdGenerator} is present * @since Envoy Client v0.3-alpha */ public boolean hasIdGenerator() { return idGenerator != null; } /** * @return the offline message cache * @since Envoy Client v0.3-alpha */ public Cache getMessageCache() { return messageCache; } /** * @param messageCache the offline message cache to set * @since Envoy Client v0.3-alpha */ public void setMessageCache(Cache messageCache) { this.messageCache = messageCache; } /** * @return the offline status cache * @since Envoy Client v0.3-alpha */ public Cache getStatusCache() { return statusCache; } /** * @param statusCache the offline status cache to set * @since Envoy Client v0.3-alpha */ public void setStatusCache(Cache statusCache) { this.statusCache = statusCache; } /** * Searches for a message by ID. * * @param id the ID of the message to search for * @return the message with the corresponding ID, or {@code null} if no message * has been found * @since Envoy Client v0.1-beta */ public Message getMessage(long id) { for (Chat c : chats) for (Message m : c.getModel()) if (m.getId() == id) return m; return null; } }