package scrum.client.collaboration; import ilarkesto.gwt.client.AGwtEntity; import java.util.ArrayList; import java.util.List; import java.util.Set; import scrum.client.DataTransferObject; import scrum.client.UsersStatusData; import scrum.client.admin.User; import scrum.client.communication.ServerDataReceivedEvent; import scrum.client.communication.ServerDataReceivedHandler; import scrum.client.workspace.BlockCollapsedEvent; import scrum.client.workspace.BlockCollapsedHandler; import scrum.client.workspace.BlockExpandedEvent; import scrum.client.workspace.BlockExpandedHandler; import scrum.client.workspace.VisibleDataChangedEvent; public class UsersStatus extends GUsersStatus implements ServerDataReceivedHandler, BlockCollapsedHandler, BlockExpandedHandler { private UsersStatusData usersStatus = new UsersStatusData(); public void onBlockExpanded(BlockExpandedEvent event) { Object object = event.getObject(); if (object instanceof AGwtEntity) { addSelectedEntityId(((AGwtEntity) object).getId()); } } public void onBlockCollapsed(BlockCollapsedEvent event) { Object object = event.getObject(); if (object instanceof AGwtEntity) { removeSelectedEntityId(((AGwtEntity) object).getId()); } } public void onServerDataReceived(ServerDataReceivedEvent event) { DataTransferObject data = event.getData(); if (data.usersStatus != null) { usersStatus = data.usersStatus; log.debug("usersStatus updated:", usersStatus); new VisibleDataChangedEvent().fireInCurrentScope(); } } public List<User> getOnlineUsers() { List<User> ret = new ArrayList<User>(); for (User user : project.getParticipants()) { if (isOnline(user)) ret.add(user); } return ret; } public boolean isOnline(User user) { return usersStatus.get(user.getId()).isOnline(); } public Set<String> getSelectedEntitysIds(User user) { return usersStatus.get(user.getId()).getSelectedEntitysIds(); } private void addSelectedEntityId(String id) { String userId = getCurrentUser().getId(); boolean added = usersStatus.addSelectedEntityId(userId, id); if (added) new SetSelectedEntitysIdsServiceCall(usersStatus.get(userId).getSelectedEntitysIds()).execute(); } private void removeSelectedEntityId(String id) { String userId = getCurrentUser().getId(); boolean removed = usersStatus.removeSelectedEntityId(userId, id); if (removed) new SetSelectedEntitysIdsServiceCall(usersStatus.get(userId).getSelectedEntitysIds()).execute(); } private User getCurrentUser() { return auth.getUser(); } }