1#region Copyright notice and license
2// Protocol Buffers - Google's data interchange format
3// Copyright 2008 Google Inc.  All rights reserved.
4// https://developers.google.com/protocol-buffers/
5//
6// Redistribution and use in source and binary forms, with or without
7// modification, are permitted provided that the following conditions are
8// met:
9//
10//     * Redistributions of source code must retain the above copyright
11// notice, this list of conditions and the following disclaimer.
12//     * Redistributions in binary form must reproduce the above
13// copyright notice, this list of conditions and the following disclaimer
14// in the documentation and/or other materials provided with the
15// distribution.
16//     * Neither the name of Google Inc. nor the names of its
17// contributors may be used to endorse or promote products derived from
18// this software without specific prior written permission.
19//
20// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31#endregion
32
33using System;
34using System.IO;
35
36namespace Google.Protobuf.Examples.AddressBook
37{
38    internal class ListPeople
39    {
40        /// <summary>
41        /// Iterates though all people in the AddressBook and prints info about them.
42        /// </summary>
43        private static void Print(AddressBook addressBook)
44        {
45            foreach (Person person in addressBook.People)
46            {
47                Console.WriteLine("Person ID: {0}", person.Id);
48                Console.WriteLine("  Name: {0}", person.Name);
49                if (person.Email != "")
50                {
51                    Console.WriteLine("  E-mail address: {0}", person.Email);
52                }
53
54                foreach (Person.Types.PhoneNumber phoneNumber in person.Phones)
55                {
56                    switch (phoneNumber.Type)
57                    {
58                        case Person.Types.PhoneType.Mobile:
59                            Console.Write("  Mobile phone #: ");
60                            break;
61                        case Person.Types.PhoneType.Home:
62                            Console.Write("  Home phone #: ");
63                            break;
64                        case Person.Types.PhoneType.Work:
65                            Console.Write("  Work phone #: ");
66                            break;
67                    }
68                    Console.WriteLine(phoneNumber.Number);
69                }
70            }
71        }
72
73        /// <summary>
74        /// Entry point - loads the addressbook and then displays it.
75        /// </summary>
76        public static int Main(string[] args)
77        {
78            if (args.Length != 1)
79            {
80                Console.Error.WriteLine("Usage:  ListPeople ADDRESS_BOOK_FILE");
81                return 1;
82            }
83
84            if (!File.Exists(args[0]))
85            {
86                Console.WriteLine("{0} doesn't exist. Add a person to create the file first.", args[0]);
87                return 0;
88            }
89
90            // Read the existing address book.
91            using (Stream stream = File.OpenRead(args[0]))
92            {
93                AddressBook addressBook = AddressBook.Parser.ParseFrom(stream);
94                Print(addressBook);
95            }
96            return 0;
97        }
98    }
99}