Filip_Markoski

[NP] Администрација на чет-систем

Dec 7th, 2017
411
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.42 KB | None | 0 0
  1. import java.lang.reflect.InvocationTargetException;
  2. import java.lang.reflect.Method;
  3. import java.util.*;
  4.  
  5. class NoSuchRoomException extends Exception {
  6.     public NoSuchRoomException(String roomName) {
  7.         super(roomName);
  8.     }
  9. }
  10.  
  11. class NoSuchUserException extends Exception {
  12.     public NoSuchUserException(String userName) {
  13.         super(userName);
  14.     }
  15. }
  16.  
  17. class ChatRoom {
  18.     private String name;
  19.     private TreeSet<String> usernamesTreeSet;
  20.  
  21.     public ChatRoom(String name) {
  22.         this.name = name;
  23.         usernamesTreeSet = new TreeSet<>();
  24.     }
  25.  
  26.     public void addUser(String username) {
  27.         usernamesTreeSet.add(username);
  28.     }
  29.  
  30.     public void removeUser(String username) {
  31.         usernamesTreeSet.remove(username);
  32.     }
  33.  
  34.     public boolean hasUser(String username) {
  35.         return usernamesTreeSet.contains(username);
  36.     }
  37.  
  38.     public int numUsers() {
  39.         return usernamesTreeSet.size();
  40.     }
  41.  
  42.     @Override
  43.     public String toString() {
  44.         StringBuffer sb = new StringBuffer();
  45.         sb.append(name + System.lineSeparator());
  46.         if (this.numUsers() == 0) {
  47.             sb.append("EMPTY\n");
  48.         } else {
  49.             for (String user : usernamesTreeSet) {
  50.                 sb.append(user + System.lineSeparator());
  51.             }
  52.         }
  53.         return sb.toString();
  54.     }
  55. }
  56.  
  57. class ChatSystem {
  58.     private TreeMap<String, ChatRoom> chatRoomsTreeMap;
  59.     private HashSet<String> userNamesHashSet;
  60.  
  61.     public ChatSystem() {
  62.         this.chatRoomsTreeMap = new TreeMap<>();
  63.         this.userNamesHashSet = new HashSet<>();
  64.     }
  65.  
  66.     public void addRoom(String roomName) {
  67.         chatRoomsTreeMap.put(roomName, new ChatRoom(roomName));
  68.     }
  69.  
  70.     public void removeRoom(String roomName) {
  71.         chatRoomsTreeMap.remove(roomName);
  72.     }
  73.  
  74.     public ChatRoom getRoom(String roomName) throws NoSuchRoomException {
  75.         if (chatRoomsTreeMap.get(roomName) == null) {
  76.             throw new NoSuchRoomException(roomName);
  77.         }
  78.         return chatRoomsTreeMap.get(roomName);
  79.     }
  80.  
  81.     public void register(String userName) {
  82.         userNamesHashSet.add(userName);
  83.         /* Begin Case */
  84.         if (chatRoomsTreeMap.size() == 0) return;
  85.  
  86.         /* In-use Case */
  87.         ChatRoom leastPopulatedRoom = chatRoomsTreeMap.values().stream()
  88.                 .min(Comparator.comparingInt(ChatRoom::numUsers))
  89.                 .orElse(null);
  90.         if (leastPopulatedRoom == null) return;
  91.         leastPopulatedRoom.addUser(userName);
  92.     }
  93.  
  94.     private boolean validateRoom(String roomName) {
  95.         return chatRoomsTreeMap.containsKey(roomName);
  96.     }
  97.  
  98.     private boolean validateUser(String userName) {
  99.         return userNamesHashSet.contains(userName);
  100.     }
  101.  
  102.     private void validateUserAndRoom(String userName, String roomName) throws NoSuchRoomException, NoSuchUserException {
  103.         if (!validateRoom(roomName)) throw new NoSuchRoomException(roomName);
  104.         if (!validateUser(userName)) throw new NoSuchUserException(userName);
  105.     }
  106.  
  107.     public void joinRoom(String userName, String roomName) throws NoSuchRoomException, NoSuchUserException {
  108.         validateUserAndRoom(userName, roomName);
  109.         chatRoomsTreeMap.get(roomName).addUser(userName);
  110.     }
  111.  
  112.     public void leaveRoom(String userName, String roomName) throws NoSuchRoomException, NoSuchUserException {
  113.         validateUserAndRoom(userName, roomName);
  114.         chatRoomsTreeMap.get(roomName).removeUser(userName);
  115.     }
  116.  
  117.     public void registerAndJoin(String userName, String roomName) throws NoSuchRoomException, NoSuchUserException {
  118.         userNamesHashSet.add(userName);
  119.         joinRoom(userName, roomName);
  120.     }
  121.  
  122.     public void followFriend(String userName, String friendUserName) throws NoSuchUserException {
  123.         if (!validateUser(userName)) throw new NoSuchUserException(userName);
  124.  
  125.         chatRoomsTreeMap.values().stream()
  126.                 .forEach(chatRoom -> {
  127.                             if (chatRoom.hasUser(friendUserName)) {
  128.                                 chatRoom.addUser(userName);
  129.                             }
  130.                         }
  131.                 );
  132.     }
  133. }
  134.  
  135. /*Како наједноставно би ги зачувале информациите за тоа кој корисник е член на кои соби?
  136. Оваа информација ќе ни треба да ја добиеме брзо за да ја искористиме во followFriend функцијата.*/
  137.  
  138. public class ChatSystemTest {
  139.  
  140.     public static void main(String[] args) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException, NoSuchRoomException {
  141.         Scanner jin = new Scanner(System.in);
  142.         int k = jin.nextInt();
  143.         if (k == 0) {
  144.             ChatRoom cr = new ChatRoom(jin.next());
  145.             int n = jin.nextInt();
  146.             for (int i = 0; i < n; ++i) {
  147.                 k = jin.nextInt();
  148.                 if (k == 0) cr.addUser(jin.next());
  149.                 if (k == 1) cr.removeUser(jin.next());
  150.                 if (k == 2) System.out.println(cr.hasUser(jin.next()));
  151.             }
  152.             System.out.println("");
  153.             System.out.println(cr.toString());
  154.             n = jin.nextInt();
  155.             if (n == 0) return;
  156.             ChatRoom cr2 = new ChatRoom(jin.next());
  157.             for (int i = 0; i < n; ++i) {
  158.                 k = jin.nextInt();
  159.                 if (k == 0) cr2.addUser(jin.next());
  160.                 if (k == 1) cr2.removeUser(jin.next());
  161.                 if (k == 2) cr2.hasUser(jin.next());
  162.             }
  163.             System.out.println(cr2.toString());
  164.         }
  165.         if (k == 1) {
  166.             ChatSystem cs = new ChatSystem();
  167.             Method mts[] = cs.getClass().getMethods();
  168.             while (true) {
  169.                 String cmd = jin.next();
  170.                 if (cmd.equals("stop")) break;
  171.                 if (cmd.equals("print")) {
  172.                     System.out.println(cs.getRoom(jin.next()) + "\n");
  173.                     continue;
  174.                 }
  175.                 for (Method m : mts) {
  176.                     if (m.getName().equals(cmd)) {
  177.                         String params[] = new String[m.getParameterTypes().length];
  178.                         for (int i = 0; i < params.length; ++i) params[i] = jin.next();
  179.                         m.invoke(cs, params);
  180.                     }
  181.                 }
  182.             }
  183.         }
  184.     }
  185.  
  186. }
Advertisement
Add Comment
Please, Sign In to add comment