Update generated .pb.js files with proper generated proto2 descriptor APIs
[platform/upstream/libphonenumber.git] / tools / java / java-build / src / com / google / i18n / phonenumbers / BuildMetadataJsonFromXml.java
index e294eda..cbf7b7c 100644 (file)
@@ -63,13 +63,13 @@ public class BuildMetadataJsonFromXml extends Command {
       " * region represented by that country calling code. In the case of multiple\n" +
       " * countries sharing a calling code, such as the NANPA regions, the one\n" +
       " * indicated with \"isMainCountryForCode\" in the metadata should be first.\n" +
-      " * @type {Object.<number, Array.<string>>}\n" +
+      " * @type {!Object.<number, Array.<string>>}\n" +
       " */\n";
 
   private static final String COUNTRY_TO_METADATA_COMMENT =
       "/**\n" +
       " * A mapping from a region code to the PhoneMetadata for that region.\n" +
-      " * @type {Object.<string, Array>}\n" +
+      " * @type {!Object.<string, Array>}\n" +
       " */\n";
 
   private static final int COPYRIGHT_YEAR = 2010;
@@ -117,6 +117,7 @@ public class BuildMetadataJsonFromXml extends Command {
 
       writer.flush();
       writer.close();
+      formatter.close();
     } catch (Exception e) {
       e.printStackTrace();
       return false;
@@ -135,11 +136,16 @@ public class BuildMetadataJsonFromXml extends Command {
       } else {
         writer.write(",");
       }
-      String regionCode = metadata.getId();
+      String key = metadata.getId();
+      // For non-geographical country calling codes (e.g. +800), use the country calling codes
+      // instead of the region code as key in the map.
+      if (key.equals("001")) {
+        key = Integer.toString(metadata.getCountryCode());
+      }
       JSArrayBuilder jsArrayBuilder = new JSArrayBuilder();
       toJsArray(metadata, jsArrayBuilder);
       writer.write("\"");
-      writer.write(regionCode);
+      writer.write(key);
       writer.write("\":");
       writer.write(jsArrayBuilder.toString());
     }
@@ -214,6 +220,12 @@ public class BuildMetadataJsonFromXml extends Command {
 
   // Converts PhoneNumberDesc to JSArray.
   private static void toJsArray(PhoneNumberDesc desc, JSArrayBuilder jsArrayBuilder) {
+    if (desc == null) {
+      // Some descriptions are optional; in these cases we just append null and return if they are
+      // absent.
+      jsArrayBuilder.append(null);
+      return;
+    }
     jsArrayBuilder.beginArray();
 
     // missing 0
@@ -252,28 +264,36 @@ public class BuildMetadataJsonFromXml extends Command {
 
     // missing 0
     jsArrayBuilder.append(null);
-    // required PhoneNumberDesc general_desc = 1;
+    // optional PhoneNumberDesc general_desc = 1;
     toJsArray(metadata.getGeneralDesc(), jsArrayBuilder);
-    // required PhoneNumberDesc fixed_line = 2;
+    // optional PhoneNumberDesc fixed_line = 2;
     toJsArray(metadata.getFixedLine(), jsArrayBuilder);
-    // required PhoneNumberDesc mobile = 3;
+    // optional PhoneNumberDesc mobile = 3;
     toJsArray(metadata.getMobile(), jsArrayBuilder);
-    // required PhoneNumberDesc toll_free = 4;
+    // optional PhoneNumberDesc toll_free = 4;
     toJsArray(metadata.getTollFree(), jsArrayBuilder);
-    // required PhoneNumberDesc premium_rate = 5;
+    // optional PhoneNumberDesc premium_rate = 5;
     toJsArray(metadata.getPremiumRate(), jsArrayBuilder);
-    // required PhoneNumberDesc shared_cost = 6;
+    // optional PhoneNumberDesc shared_cost = 6;
     toJsArray(metadata.getSharedCost(), jsArrayBuilder);
-    // required PhoneNumberDesc personal_number = 7;
+    // optional PhoneNumberDesc personal_number = 7;
     toJsArray(metadata.getPersonalNumber(), jsArrayBuilder);
-    // required PhoneNumberDesc voip = 8;
+    // optional PhoneNumberDesc voip = 8;
     toJsArray(metadata.getVoip(), jsArrayBuilder);
     // required string id = 9;
     jsArrayBuilder.append(metadata.getId());
-    // required int32 country_code = 10;
-    jsArrayBuilder.append(metadata.getCountryCode());
-    // required string international_prefix = 11;
-    jsArrayBuilder.append(metadata.getInternationalPrefix());
+    // optional int32 country_code = 10;
+    if (metadata.hasCountryCode()) {
+      jsArrayBuilder.append(metadata.getCountryCode());
+    } else {
+      jsArrayBuilder.append(null);
+    }
+    // optional string international_prefix = 11;
+    if (metadata.hasInternationalPrefix()) {
+      jsArrayBuilder.append(metadata.getInternationalPrefix());
+    } else {
+      jsArrayBuilder.append(null);
+    }
 
     // optional string national_prefix = 12;
     if (metadata.hasNationalPrefix()) {
@@ -335,7 +355,7 @@ public class BuildMetadataJsonFromXml extends Command {
     } else {
       jsArrayBuilder.append(null);
     }
-    // required PhoneNumberDesc pager = 21;
+    // optional PhoneNumberDesc pager = 21;
     toJsArray(metadata.getPager(), jsArrayBuilder);
     // optional bool main_country_for_code = 22 [default=false];
     if (metadata.isMainCountryForCode()) {
@@ -349,9 +369,9 @@ public class BuildMetadataJsonFromXml extends Command {
     } else {
       jsArrayBuilder.append(null);
     }
-    // required PhoneNumberDesc no_international_dialling = 24;
+    // optional PhoneNumberDesc no_international_dialling = 24;
     toJsArray(metadata.getNoInternationalDialling(), jsArrayBuilder);
-    // required PhoneNumberDesc uan = 25;
+    // optional PhoneNumberDesc uan = 25;
     toJsArray(metadata.getUan(), jsArrayBuilder);
     // optional bool leading_zero_possible = 26 [default=false];
     if (metadata.isLeadingZeroPossible()) {
@@ -359,8 +379,18 @@ public class BuildMetadataJsonFromXml extends Command {
     } else {
       jsArrayBuilder.append(null);
     }
-    // required PhoneNumberDesc emergency = 27;
+    // optional PhoneNumberDesc emergency = 27;
     toJsArray(metadata.getEmergency(), jsArrayBuilder);
+    // optional PhoneNumberDesc voicemail = 28;
+    toJsArray(metadata.getVoicemail(), jsArrayBuilder);
+    // Fields 29-31 are omitted due to space increase.
+    // optional PhoneNumberDesc short_code = 29;
+    // optional PhoneNumberDesc standard_rate = 30;
+    // optional PhoneNumberDesc carrier_specific = 31;
+    // optional bool mobile_number_portable_region = 32 [default=false];
+    // Omit since the JS API doesn't expose this data.
+    // Note: Need to add null for each of the above fields when a subsequent
+    // field is being populated.
 
     jsArrayBuilder.endArray();
   }