DamSi

Untitled

Jul 12th, 2015
208
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.35 KB | None | 0 0
  1. import java.lang.reflect.InvocationTargetException;
  2. import java.lang.reflect.Method;
  3. import java.util.Scanner;
  4. import java.util.TreeSet;
  5. import java.util.LinkedList;
  6. import java.util.Map;
  7. import java.util.TreeMap;
  8. import java.util.TreeSet;
  9. import java.util.Iterator;
  10. import java.util.HashMap;
  11. import java.util.ArrayList;
  12. import java.util.Collections;
  13. import java.util.Set;
  14. import java.util.Comparator;
  15.  
  16. public class ChatSystemTest {
  17.    
  18.     public static void main(String[] args) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException, NoSuchRoomException {
  19.         Scanner jin = new Scanner(System.in);
  20.         int k = jin.nextInt();
  21.         if ( k == 0 ) {
  22.             ChatRoom cr = new ChatRoom(jin.next());
  23.             int n = jin.nextInt();
  24.             for ( int i = 0 ; i < n ; ++i ) {
  25.                 k = jin.nextInt();
  26.                 if ( k == 0 ) cr.addUser(jin.next());
  27.                 if ( k == 1 ) cr.removeUser(jin.next());
  28.                 if ( k == 2 ) System.out.println(cr.hasUser(jin.next()));  
  29.             }
  30.             System.out.println("");
  31.             System.out.println(cr.toString());
  32.             n = jin.nextInt();
  33.             if ( n == 0 ) return;
  34.             ChatRoom cr2 = new ChatRoom(jin.next());
  35.             for ( int i = 0 ; i < n ; ++i ) {
  36.                 k = jin.nextInt();
  37.                 if ( k == 0 ) cr2.addUser(jin.next());
  38.                 if ( k == 1 ) cr2.removeUser(jin.next());
  39.                 if ( k == 2 ) cr2.hasUser(jin.next());  
  40.             }
  41.             System.out.println(cr2.toString());
  42.         }  
  43.        if ( k == 1 ) {
  44.             ChatSystem cs = new ChatSystem();
  45.             Method mts[] = cs.getClass().getMethods();
  46.             while ( true ) {
  47.                 String cmd = jin.next();
  48.                 if ( cmd.equals("stop") ) break;
  49.                 if ( cmd.equals("print") ) {
  50.                     System.out.println(cs.getRoom(jin.next())+"\n");continue;
  51.                 }
  52.                 for ( Method m : mts ) {
  53.                     if ( m.getName().equals(cmd) ) {
  54.                         String params[] = new String[m.getParameterTypes().length];
  55.                         for ( int i = 0 ; i < params.length ; ++i ) params[i] = jin.next();
  56.                         m.invoke(cs,params);
  57.                     }
  58.                 }              
  59.             }
  60.         }
  61.     }
  62.  
  63. }
  64. class ChatRoom {
  65.     private String roomName;
  66.     private TreeSet<String> users;
  67.  
  68.     @SuppressWarnings({ "rawtypes", "unchecked" })
  69.     public ChatRoom(String name) {
  70.         roomName = name;
  71.         users = new TreeSet();
  72.     }
  73.  
  74.     public void addUser(String username) {
  75.         users.add(username);
  76.     }
  77.  
  78.     public void removeUser(String username) {
  79.         if (users.contains(username)) {
  80.             users.remove(username);
  81.         }
  82.     }
  83.  
  84.     public String toString() {
  85.         StringBuilder sb = new StringBuilder();
  86.         sb.append(roomName + "\n");
  87.         Iterator<String> it = users.iterator();
  88.         if (users.isEmpty())
  89.             sb.append("EMPTY" + "\n");
  90.         else {
  91.             while (it.hasNext()) {
  92.                 sb.append(it.next() + "\n");
  93.             }
  94.  
  95.         }
  96.         return sb.toString();
  97.     }
  98.  
  99.     public boolean hasUser(String username) {
  100.         if (users.contains(username)) {
  101.             return true;
  102.         } else {
  103.             return false;
  104.         }
  105.     }
  106.  
  107.     public int numUsers() {
  108.         return users.size();
  109.     }
  110.  
  111.     public String getName() {
  112.         return roomName;
  113.     }
  114.  
  115. }
  116.  class ChatSystem {
  117.     private TreeMap<String, ChatRoom> rooms;
  118.     private HashMap<String, ArrayList<String>> allUsers;
  119.  
  120.     public ChatSystem() {
  121.         rooms = new TreeMap<>();
  122.         allUsers = new HashMap<>();
  123.     }
  124.  
  125.     public void register(String userName) {
  126.         if (rooms.isEmpty()) // ako nema chatRoom vo sistemot
  127.         {
  128.             ArrayList<String> usersList = new ArrayList<>();
  129.             allUsers.put(userName, usersList);
  130.         } else // koga ima chatRoom vo sistemot
  131.         {
  132.             ArrayList<ChatRoom> usersList = new ArrayList<>(rooms.values());
  133.             Collections.sort(usersList, new UsersComparator());
  134.  
  135.             String roomName = usersList.get(0).getName();
  136.  
  137.             rooms.get(roomName).addUser(userName); // dodava korisnik vo sobata
  138.                                                     // so najmalku clenovi
  139.             ArrayList<String> roomOfUser = new ArrayList<>();
  140.             roomOfUser.add(roomName);
  141.             allUsers.put(userName, roomOfUser); // dodava korisnik vo sistemot
  142.                                                 // koj e vo sobata so najmalku
  143.                                                 // clenovi
  144.         }
  145.     }
  146.  
  147.     public void registerAndJoin(String userName, String roomName) {
  148.         ArrayList<String> roomsList = new ArrayList<>();
  149.         roomsList.add(roomName);
  150.         allUsers.put(userName, roomsList);// dodavame korisnik vo sistemot
  151.         rooms.get(roomName).addUser(userName);// go dodavame korisnikot so
  152.                                                 // sobata so ima roomName
  153.     }
  154.  
  155.     public void joinRoom(String userName, String roomName) throws NoSuchRoomException, NoSuchUserException {
  156.         if (!rooms.containsKey(roomName)) {
  157.             throw new NoSuchRoomException(roomName);
  158.         }
  159.         if (!allUsers.containsKey(userName)) {
  160.             throw new NoSuchUserException(userName);
  161.         }
  162.         allUsers.get(userName).add(roomName);
  163.         rooms.get(roomName).addUser(userName);
  164.     }
  165.  
  166.     public void leaveRoom(String username, String roomName) throws NoSuchRoomException, NoSuchUserException {
  167.         if (!rooms.containsKey(roomName))
  168.             throw new NoSuchRoomException(roomName);
  169.         if (allUsers.containsKey(username)) {
  170.             if (allUsers.get(username).contains(roomName)) {
  171.                 rooms.get(roomName).removeUser(username);
  172.                 allUsers.get(username).remove(roomName);
  173.             }
  174.         } else{
  175.             throw new NoSuchUserException(username);
  176.         }
  177.     }
  178.  
  179.     public void followFriend(String username, String friend_username) throws NoSuchUserException {
  180.         if (!allUsers.containsKey(username))
  181.             throw new NoSuchUserException(username);
  182.         if (!rooms.isEmpty()) {
  183.             if (!allUsers.get(friend_username).isEmpty()) {
  184.                 allUsers.get(username).clear();
  185.                 allUsers.get(username).addAll(allUsers.get(friend_username));
  186.                 ArrayList<String> roomsList = allUsers.get(username);
  187.                 for (int i = 0; i < roomsList.size(); i++) {
  188.                     rooms.get(roomsList.get(i)).addUser(username);
  189.                 }
  190.             }
  191.         }
  192.     }
  193.  
  194.     public void addRoom(String roomName) {
  195.         rooms.put(roomName, new ChatRoom(roomName));
  196.     }
  197.  
  198.     public void removeRoom(String roomName) {
  199.         Set<String> set = allUsers.keySet();
  200.         Iterator<String> it = set.iterator();
  201.         while (it.hasNext()) {
  202.             allUsers.get(it.next()).remove(roomName);
  203.         }
  204.         rooms.remove(roomName);
  205.     }
  206.  
  207.     public ChatRoom getRoom(String roomName) {
  208.         return rooms.get(roomName);
  209.     }
  210. }
  211. class UsersComparator implements Comparator<ChatRoom> {
  212.  
  213.     @Override
  214.     public int compare(ChatRoom arg0, ChatRoom arg1) {
  215.         return arg0.numUsers() - arg1.numUsers();
  216.     }
  217.  
  218. }
  219. @SuppressWarnings("serial")
  220.  class NoSuchRoomException extends Exception {
  221.     public NoSuchRoomException(String s){
  222.         super(s);
  223.     }
  224. }@SuppressWarnings("serial")
  225.  class NoSuchUserException extends Exception {
  226.     public NoSuchUserException(String s){
  227.         super(s);
  228.     }
  229. }
Advertisement
Add Comment
Please, Sign In to add comment