package uk.ac.cam.echo.textClient; import uk.ac.cam.echo.client.ClientApi; import uk.ac.cam.echo.data.*; import uk.ac.cam.echo.data.async.Handler; import uk.ac.cam.echo.data.async.Subscription; import java.io.BufferedInputStream; import java.io.DataInputStream; import java.io.IOException; import java.util.List; public class Main { private static ClientApi api = new ClientApi("http://echoconf.herokuapp.com"); public static void main(String[] args) { Conference conference = configureConference(); conference.save(); User user = configureUser(); Conversation conversation = configureConversation(conference); user.setCurrentConversation(conversation); user.save(); // MUST call save after setting conversation! System.out.println("Welcome to conversation [" + conversation.getName() + "]:"); displayPreviousMessages(conversation); listenToMessages(conversation); listenToInputs(conversation, user); } private static void listenToInputs(Conversation conversation, User user) { while (true) { String input = readline(); if (input.equals("\\quit")) { user.setCurrentConversation(null); user.save(); System.exit(0); } Message msg = api.newMessage(conversation); msg.setSender(user); msg.setContents(input); msg.setSenderName(user.getDisplayName()); msg.save(); } } private static void displayPreviousMessages(Conversation conversation) { for (Message msg: conversation.getMessages()) { String sender = msg.getSenderName() == null ? "Anonymous" : msg.getSenderName(); System.out.println(sender + ": " + msg.getContents()); } } private static Subscription listenToMessages(Conversation conversation) { Handler<Message> handler = new Handler<Message>() { @Override public void handle(Message msg) { String sender = msg.getSenderName() == null ? "Anonymous" : msg.getSenderName(); System.out.println(sender + ": " + msg.getContents()); } }; //TODO make a better api for this return api.conversationResource.listenToMessages(conversation.getId()).subscribe(handler); } private static DataInputStream in = new DataInputStream(new BufferedInputStream(System.in)); private static String readline() { String input = null; while(input == null) { try { input = in.readLine(); } catch (IOException e) { e.printStackTrace(); } } return input; } private static Conversation configureConversation(Conference conference) { System.out.println("Insert the id of the conversation or a new name in order to create a new Conversation."); for (Conversation conversation : conference.getConversationSet()) { System.out.print(conversation.getId() + ": " + conversation.getName()); System.out.print("| Tags: "); for (Tag t: conversation.getTags()){ System.out.print(t.getName() + " "); } System.out.println(); } System.out.print("Please insert your choice: "); String input = readline(); Conversation conversation = null; try { long id = Long.parseLong(input); for (Conversation conv: conference.getConversationSet()) { if (conv.getId() == id) { conversation = conv; break; } } } catch (NumberFormatException e) { // Long.parseLong can throw an error } if (conversation == null) { conversation = api.newConversation(); conversation.setConference(conference); conversation.setName(input); conversation.save(); String tagString = getData("Tags: "); String tagsStr[] = tagString.split("\\s+"); for (String name: tagsStr) { Tag tag = api.newTag(conversation); tag.setName(name); tag.save(); } } return conversation; } private static String getData(String msg, boolean notNull) { System.out.print(msg); String data = null; do { data = readline(); } while ((data == null || data.equals("")) && notNull); return data; } private static String getData(String msg) { return getData(msg, false); } private static User configureUser() { System.out.println("Insert the id of the user or a new name in order to create a new user."); for (User user : api.userResource.getAll()) { System.out.println(user.getId() + ": " + user.getUsername()); } System.out.print("Please insert your choice: "); String username = readline(); boolean auth = false; try { long id = Long.parseLong(username); for (User user : api.userResource.getAll()) { if (user.getId() == id) { username = user.getUsername(); auth = true; break; } } } catch (NumberFormatException e) { // Long.parseLong can throw an error } System.out.print("Enter your password, or a new password if you made a new user: "); String pass = readline(); User ret = api.userResource.authenticate(username, pass); if (ret == null) { if (auth) { System.out.println("Username and password don't match!"); System.exit(1); } ret = api.newUser(); ret.setUsername(username); ret.setPassword(pass); ret.setFirstName(getData("First Name: ", true)); ret.setLastName(getData("Last Name: ", true)); ret.setGender(getData("Gender (Please type M or F): ", true)); ret.setCompany(getData("Company: ")); ret.setJobTitle(getData("Job Title: ")); ret.setEmail(getData("Email: ")); ret.setPhoneNumber(getData("Phone Number: ")); ret.save(); String intrString = getData("Interests: "); String interestsStr[] = intrString.split("\\s+"); for (String name: interestsStr) { Interest intr = api.newInterest(ret); intr.setName(name); intr.setUser(ret); intr.save(); } // fn, ln, gender, company, job title, phone number, email, interests //ret.save(); } ret.setCurrentConversation(null); ret.save(); System.out.print("Your Interests: "); for (Interest i: ret.getInterests()) { System.out.print(i.getName() + " "); } System.out.println(); return ret; } private static Conference configureConference() { List<Conference> conferences = api.conferenceResource.getAll(); if (conferences.size() > 0) return conferences.get(0); System.out.print("Input conference name: "); String name = readline(); Conference conference = api.newConference(); conference.setName(name); conference.save(); return conference; } }