1*6777b538SAndroid Build Coastguard Worker // See README.txt for information and build instructions. 2*6777b538SAndroid Build Coastguard Worker 3*6777b538SAndroid Build Coastguard Worker import com.example.tutorial.protos.AddressBook; 4*6777b538SAndroid Build Coastguard Worker import com.example.tutorial.protos.Person; 5*6777b538SAndroid Build Coastguard Worker import java.io.BufferedReader; 6*6777b538SAndroid Build Coastguard Worker import java.io.FileInputStream; 7*6777b538SAndroid Build Coastguard Worker import java.io.FileNotFoundException; 8*6777b538SAndroid Build Coastguard Worker import java.io.FileOutputStream; 9*6777b538SAndroid Build Coastguard Worker import java.io.InputStreamReader; 10*6777b538SAndroid Build Coastguard Worker import java.io.IOException; 11*6777b538SAndroid Build Coastguard Worker import java.io.PrintStream; 12*6777b538SAndroid Build Coastguard Worker 13*6777b538SAndroid Build Coastguard Worker class AddPerson { 14*6777b538SAndroid Build Coastguard Worker // This function fills in a Person message based on user input. PromptForAddress(BufferedReader stdin, PrintStream stdout)15*6777b538SAndroid Build Coastguard Worker static Person PromptForAddress(BufferedReader stdin, 16*6777b538SAndroid Build Coastguard Worker PrintStream stdout) throws IOException { 17*6777b538SAndroid Build Coastguard Worker Person.Builder person = Person.newBuilder(); 18*6777b538SAndroid Build Coastguard Worker 19*6777b538SAndroid Build Coastguard Worker stdout.print("Enter person ID: "); 20*6777b538SAndroid Build Coastguard Worker person.setId(Integer.valueOf(stdin.readLine())); 21*6777b538SAndroid Build Coastguard Worker 22*6777b538SAndroid Build Coastguard Worker stdout.print("Enter name: "); 23*6777b538SAndroid Build Coastguard Worker person.setName(stdin.readLine()); 24*6777b538SAndroid Build Coastguard Worker 25*6777b538SAndroid Build Coastguard Worker stdout.print("Enter email address (blank for none): "); 26*6777b538SAndroid Build Coastguard Worker String email = stdin.readLine(); 27*6777b538SAndroid Build Coastguard Worker if (email.length() > 0) { 28*6777b538SAndroid Build Coastguard Worker person.setEmail(email); 29*6777b538SAndroid Build Coastguard Worker } 30*6777b538SAndroid Build Coastguard Worker 31*6777b538SAndroid Build Coastguard Worker while (true) { 32*6777b538SAndroid Build Coastguard Worker stdout.print("Enter a phone number (or leave blank to finish): "); 33*6777b538SAndroid Build Coastguard Worker String number = stdin.readLine(); 34*6777b538SAndroid Build Coastguard Worker if (number.length() == 0) { 35*6777b538SAndroid Build Coastguard Worker break; 36*6777b538SAndroid Build Coastguard Worker } 37*6777b538SAndroid Build Coastguard Worker 38*6777b538SAndroid Build Coastguard Worker Person.PhoneNumber.Builder phoneNumber = 39*6777b538SAndroid Build Coastguard Worker Person.PhoneNumber.newBuilder().setNumber(number); 40*6777b538SAndroid Build Coastguard Worker 41*6777b538SAndroid Build Coastguard Worker stdout.print("Is this a mobile, home, or work phone? "); 42*6777b538SAndroid Build Coastguard Worker String type = stdin.readLine(); 43*6777b538SAndroid Build Coastguard Worker if (type.equals("mobile")) { 44*6777b538SAndroid Build Coastguard Worker phoneNumber.setType(Person.PhoneType.MOBILE); 45*6777b538SAndroid Build Coastguard Worker } else if (type.equals("home")) { 46*6777b538SAndroid Build Coastguard Worker phoneNumber.setType(Person.PhoneType.HOME); 47*6777b538SAndroid Build Coastguard Worker } else if (type.equals("work")) { 48*6777b538SAndroid Build Coastguard Worker phoneNumber.setType(Person.PhoneType.WORK); 49*6777b538SAndroid Build Coastguard Worker } else { 50*6777b538SAndroid Build Coastguard Worker stdout.println("Unknown phone type. Using default."); 51*6777b538SAndroid Build Coastguard Worker } 52*6777b538SAndroid Build Coastguard Worker 53*6777b538SAndroid Build Coastguard Worker person.addPhones(phoneNumber); 54*6777b538SAndroid Build Coastguard Worker } 55*6777b538SAndroid Build Coastguard Worker 56*6777b538SAndroid Build Coastguard Worker return person.build(); 57*6777b538SAndroid Build Coastguard Worker } 58*6777b538SAndroid Build Coastguard Worker 59*6777b538SAndroid Build Coastguard Worker // Main function: Reads the entire address book from a file, 60*6777b538SAndroid Build Coastguard Worker // adds one person based on user input, then writes it back out to the same 61*6777b538SAndroid Build Coastguard Worker // file. main(String[] args)62*6777b538SAndroid Build Coastguard Worker public static void main(String[] args) throws Exception { 63*6777b538SAndroid Build Coastguard Worker if (args.length != 1) { 64*6777b538SAndroid Build Coastguard Worker System.err.println("Usage: AddPerson ADDRESS_BOOK_FILE"); 65*6777b538SAndroid Build Coastguard Worker System.exit(-1); 66*6777b538SAndroid Build Coastguard Worker } 67*6777b538SAndroid Build Coastguard Worker 68*6777b538SAndroid Build Coastguard Worker AddressBook.Builder addressBook = AddressBook.newBuilder(); 69*6777b538SAndroid Build Coastguard Worker 70*6777b538SAndroid Build Coastguard Worker // Read the existing address book. 71*6777b538SAndroid Build Coastguard Worker try { 72*6777b538SAndroid Build Coastguard Worker FileInputStream input = new FileInputStream(args[0]); 73*6777b538SAndroid Build Coastguard Worker try { 74*6777b538SAndroid Build Coastguard Worker addressBook.mergeFrom(input); 75*6777b538SAndroid Build Coastguard Worker } finally { 76*6777b538SAndroid Build Coastguard Worker try { input.close(); } catch (Throwable ignore) {} 77*6777b538SAndroid Build Coastguard Worker } 78*6777b538SAndroid Build Coastguard Worker } catch (FileNotFoundException e) { 79*6777b538SAndroid Build Coastguard Worker System.out.println(args[0] + ": File not found. Creating a new file."); 80*6777b538SAndroid Build Coastguard Worker } 81*6777b538SAndroid Build Coastguard Worker 82*6777b538SAndroid Build Coastguard Worker // Add an address. 83*6777b538SAndroid Build Coastguard Worker addressBook.addPeople( 84*6777b538SAndroid Build Coastguard Worker PromptForAddress(new BufferedReader(new InputStreamReader(System.in)), 85*6777b538SAndroid Build Coastguard Worker System.out)); 86*6777b538SAndroid Build Coastguard Worker 87*6777b538SAndroid Build Coastguard Worker // Write the new address book back to disk. 88*6777b538SAndroid Build Coastguard Worker FileOutputStream output = new FileOutputStream(args[0]); 89*6777b538SAndroid Build Coastguard Worker try { 90*6777b538SAndroid Build Coastguard Worker addressBook.build().writeTo(output); 91*6777b538SAndroid Build Coastguard Worker } finally { 92*6777b538SAndroid Build Coastguard Worker output.close(); 93*6777b538SAndroid Build Coastguard Worker } 94*6777b538SAndroid Build Coastguard Worker } 95*6777b538SAndroid Build Coastguard Worker } 96