Advertisement
Guest User

Untitled

a guest
Jan 22nd, 2017
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.33 KB | None | 0 0
  1. package setsAndMaps;
  2.  
  3. import java.lang.reflect.InvocationTargetException;
  4. import java.lang.reflect.Method;
  5. import java.util.Scanner;
  6. import java.util.Set;
  7. import java.util.StringJoiner;
  8. import java.util.TreeSet;
  9. import java.util.ArrayList;
  10. import java.util.HashSet;
  11. import java.util.LinkedList;
  12. import java.util.List;
  13. import java.util.Map;
  14. import java.util.TreeMap;
  15. import java.util.TreeSet;
  16.  
  17. public class ChatSystemTest {
  18.  
  19.     public static void main(String[] args)
  20.             throws IllegalArgumentException, IllegalAccessException, InvocationTargetException, NoSuchRoomException {
  21.         Scanner jin = new Scanner(System.in);
  22.         int k = jin.nextInt();
  23.         if (k == 0) {
  24.             ChatRoom cr = new ChatRoom(jin.next());
  25.             int n = jin.nextInt();
  26.             for (int i = 0; i < n; ++i) {
  27.                 k = jin.nextInt();
  28.                 if (k == 0)
  29.                     cr.addUser(jin.next());
  30.                 if (k == 1)
  31.                     cr.removeUser(jin.next());
  32.                 if (k == 2)
  33.                     System.out.println(cr.hasUser(jin.next()));
  34.             }
  35.             System.out.println("");
  36.             System.out.println(cr.toString());
  37.             n = jin.nextInt();
  38.             if (n == 0)
  39.                 return;
  40.             ChatRoom cr2 = new ChatRoom(jin.next());
  41.             for (int i = 0; i < n; ++i) {
  42.                 k = jin.nextInt();
  43.                 if (k == 0)
  44.                     cr2.addUser(jin.next());
  45.                 if (k == 1)
  46.                     cr2.removeUser(jin.next());
  47.                 if (k == 2)
  48.                     cr2.hasUser(jin.next());
  49.             }
  50.             System.out.println(cr2.toString());
  51.         }
  52.         if (k == 1) {
  53.             ChatSystem cs = new ChatSystem();
  54.             Method mts[] = cs.getClass().getMethods();
  55.             while (true) {
  56.                 String cmd = jin.next();
  57.                 if (cmd.equals("stop"))
  58.                     break;
  59.                 if (cmd.equals("print")) {
  60.                     System.out.println(cs.getRoom(jin.next()) + "\n");
  61.                     continue;
  62.                 }
  63.                 for (Method m : mts) {
  64.                     if (m.getName().equals(cmd)) {
  65.                         String params[] = new String[m.getParameterTypes().length];
  66.                         for (int i = 0; i < params.length; ++i)
  67.                             params[i] = jin.next();
  68.                         m.invoke(cs, params);
  69.                     }
  70.                 }
  71.             }
  72.         }
  73.     }
  74. }
  75.  
  76. class NoSuchRoomException extends Exception{
  77.     public NoSuchRoomException(String s) {
  78.         super(s);
  79.     }
  80. }
  81.  
  82. class NoSuchUserException extends Exception{
  83.         public NoSuchUserException(String userName){
  84.             super(userName);
  85.     }
  86. }
  87.  
  88. class ChatRoom implements Comparable<ChatRoom> {
  89.     private String name;
  90.     private Set<String> users;
  91.  
  92.     public ChatRoom(String n) {
  93.         name = n;
  94.         users = new TreeSet<>();
  95.     }
  96.  
  97.     public void addUser(String name) {
  98.         users.add(name);
  99.     }
  100.  
  101.     public void removeUser(String username) {
  102.         users.remove(username);
  103.     }
  104.  
  105.     @Override
  106.     public String toString() {
  107.         StringJoiner sj = new StringJoiner("\n");
  108.         sj.add(name);
  109.         for (String string : users) {
  110.             sj.add(string);
  111.         }
  112.         return sj.toString();
  113.     }
  114.  
  115.     public boolean hasUser(String username) {
  116.         return users.contains(username);
  117.     }
  118.  
  119.     public int numUsers() {
  120.         return users.size();
  121.     }
  122.  
  123.     @Override
  124.     public int compareTo(ChatRoom o) {
  125.         return name.compareTo(o.name);
  126.     }
  127.    
  128.     public int getSize(){
  129.         return users.size();
  130.     }
  131.    
  132.     public String getName() {
  133.         return name;
  134.     }
  135.    
  136.     public boolean contains(String name){
  137.         return users.contains(name);
  138.     }
  139.  
  140. }
  141.  
  142. class ChatSystem{
  143.     private Map<String, ChatRoom> rooms;
  144.     private Set<String> names;
  145.    
  146.     public ChatSystem() {
  147.         rooms = new TreeMap<>();
  148.         names = new HashSet<>();
  149.     }
  150.    
  151.     public void addRoom(String roomName){
  152.         rooms.put(roomName, new ChatRoom(roomName));
  153.     }
  154.     public ChatRoom getRoom(String roomName) throws NoSuchRoomException{
  155.         ChatRoom room = rooms.get(roomName);
  156.         if(room==null){
  157.             throw new NoSuchRoomException(roomName);
  158.         }
  159.         return room;
  160.     }
  161.     //to implement
  162.     public void register(String userName){
  163.         names.add(userName);
  164.         String nameOfRoom = findRoom(rooms);
  165.         ChatRoom room = rooms.get(nameOfRoom);
  166.         room.addUser(userName);
  167.     }
  168.    
  169.     //find name of room with minimum users
  170.     private String findRoom(Map<String,ChatRoom> rooms){
  171.         List<String> listRooms = new ArrayList<>();
  172.         int max = Integer.MIN_VALUE;
  173.         String name="";
  174.         for(Map.Entry<String,ChatRoom> entry: rooms.entrySet()){
  175.             ChatRoom ch = entry.getValue();
  176.             int size = ch.getSize();
  177.             if(size>max){
  178.                 max = size;
  179.                  name = ch.getName();
  180.             }
  181.         }
  182.         return name;
  183.     }
  184.  
  185.     public void registerAndJoin(String userName,String roomName) throws NoSuchRoomException{
  186.         names.add(userName);
  187.         ChatRoom room = rooms.get(roomName);
  188.         if(room == null){
  189.             throw new NoSuchRoomException(roomName);
  190.         }
  191.        
  192.         room.addUser(userName);
  193.        
  194.     }
  195.    
  196.     public void joinRoom(String username,String roomName) throws NoSuchRoomException{
  197.         ChatRoom room = rooms.get(roomName);
  198.         if(room == null){
  199.             throw new NoSuchRoomException(roomName);
  200.         }
  201.         room.addUser(username);
  202.         names.add(username);
  203.     }
  204.     public void leaveRoom(String username,String roomName) throws NoSuchRoomException, NoSuchUserException{
  205.         ChatRoom room = rooms.get(roomName);
  206.         if(room == null){
  207.             throw new NoSuchRoomException(roomName);
  208.         }
  209.         if(!names.contains(username)){
  210.             throw new NoSuchUserException(username);
  211.         }
  212.         room.removeUser(username);
  213.     }
  214.    
  215.     public void followFriend(String username, String friendUsername) throws NoSuchUserException{
  216.        
  217.         if(!names.contains(friendUsername)){
  218.             throw new NoSuchUserException(friendUsername);
  219.         }
  220.         for(Map.Entry<String, ChatRoom> entry:rooms.entrySet()){
  221.             ChatRoom room = entry.getValue();
  222.             if(room.contains(friendUsername)){
  223.                 room.addUser(username);
  224.             }
  225.         }
  226.        
  227.     }
  228. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement