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