package com.faforever.client.chat; import javafx.beans.property.SimpleStringProperty; import javafx.beans.property.StringProperty; import javafx.collections.FXCollections; import javafx.collections.MapChangeListener; import javafx.collections.ObservableMap; import java.util.ArrayList; import java.util.Collections; import java.util.List; public class Channel { private final ObservableMap<String, ChatUser> users; private final StringProperty topic; private String name; public Channel(String name) { this.name = name; users = FXCollections.synchronizedObservableMap(FXCollections.observableHashMap()); topic = new SimpleStringProperty(); } public String getTopic() { return topic.get(); } public void setTopic(String topic) { this.topic.set(topic); } public StringProperty topicProperty() { return topic; } public void removeUser(String username) { users.remove(username); } public void addUsers(List<ChatUser> users) { users.forEach(user -> this.users.put(user.getUsername(), user)); } public void addUser(ChatUser chatUser) { users.put(chatUser.getUsername(), chatUser); } public void clearUsers() { users.clear(); } public void addUsersListeners(MapChangeListener<String, ChatUser> listener) { users.addListener(listener); } public void removeUserListener(MapChangeListener<String, ChatUser> listener) { users.removeListener(listener); } public void setModerator(String username) { ChatUser chatUser = users.get(username); if (chatUser != null) { chatUser.getModeratorInChannels().add(name); } } /** * Returns an unmodifiable copy of the current users. */ public List<ChatUser> getUsers() { return Collections.unmodifiableList(new ArrayList<>(users.values())); } public ChatUser getUser(String username) { return users.get(username); } public String getName() { return name; } }