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