xref: /aosp_15_r20/external/protobuf/examples/AddPerson.java (revision 1b3f573f81763fcece89efc2b6a5209149e44ab8)
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