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