Author: dreiss
Date: Mon Jan  5 13:02:52 2009
New Revision: 731720

URL: http://svn.apache.org/viewvc?rev=731720&view=rev
Log:
THRIFT-191. java: Create a static field id -> name map for each struct

Added:
    incubator/thrift/trunk/lib/java/src/com/facebook/thrift/FieldMetaData.java
Modified:
    incubator/thrift/trunk/compiler/cpp/src/generate/t_java_generator.cc

Modified: incubator/thrift/trunk/compiler/cpp/src/generate/t_java_generator.cc
URL: 
http://svn.apache.org/viewvc/incubator/thrift/trunk/compiler/cpp/src/generate/t_java_generator.cc?rev=731720&r1=731719&r2=731720&view=diff
==============================================================================
--- incubator/thrift/trunk/compiler/cpp/src/generate/t_java_generator.cc 
(original)
+++ incubator/thrift/trunk/compiler/cpp/src/generate/t_java_generator.cc Mon 
Jan  5 13:02:52 2009
@@ -78,6 +78,7 @@
   void generate_java_struct_result_writer(std::ofstream& out, t_struct* 
tstruct);
   void generate_java_struct_writer(std::ofstream& out, t_struct* tstruct);
   void generate_java_struct_tostring(std::ofstream& out, t_struct* tstruct);
+  void generate_java_meta_data_map(std::ofstream& out, t_struct* tstruct);
   void generate_reflection_setters(std::ostringstream& out, t_type* type, 
std::string field_name, std::string cap_name);
   void generate_reflection_getters(std::ostringstream& out, t_type* type, 
std::string field_name, std::string cap_name);
   void generate_generic_field_getters_setters(std::ofstream& out, t_struct* 
tstruct);
@@ -250,6 +251,7 @@
     "import java.util.HashMap;\n" +
     "import java.util.Set;\n" +
     "import java.util.HashSet;\n" +
+    "import java.util.Collections;\n" +
     hash_builder +
     "import com.facebook.thrift.*;\n\n";
 }
@@ -613,6 +615,8 @@
       endl;
   }
 
+  generate_java_meta_data_map(out, tstruct);
+
   // Default constructor
   indent(out) <<
     "public " << tstruct->get_name() << "() {" << endl;
@@ -1421,6 +1425,31 @@
     endl;
 }
 
+/**
+ * Generates a static map with meta data to store information such as fieldID 
to
+ * fieldName mapping
+ *
+ * @param tstruct The struct definition
+ */
+void t_java_generator::generate_java_meta_data_map(ofstream& out,
+                                                   t_struct* tstruct) {
+  const vector<t_field*>& fields = tstruct->get_members();
+  vector<t_field*>::const_iterator f_iter;
+
+  // Static Map with fieldID -> FieldMetaData mappings
+  indent(out) << "public static final Map<Integer, FieldMetaData> metaDataMap 
= Collections.unmodifiableMap(new HashMap<Integer, FieldMetaData>() {{" << endl;
+
+  // Populate map
+  indent_up();
+  for (f_iter = fields.begin(); f_iter != fields.end(); ++f_iter) {
+    t_field* field = *f_iter;
+    std::string field_name = field->get_name();
+    indent(out) << "put(" << upcase_string(field_name) << ", new 
FieldMetaData(\"" << field_name << "\"));" << endl;
+  }
+  indent_down();
+  indent(out) << "}});" << endl << endl;
+}
+
 
 /**
  * Generates a thrift service. In C++, this comprises an entirely separate

Added: 
incubator/thrift/trunk/lib/java/src/com/facebook/thrift/FieldMetaData.java
URL: 
http://svn.apache.org/viewvc/incubator/thrift/trunk/lib/java/src/com/facebook/thrift/FieldMetaData.java?rev=731720&view=auto
==============================================================================
--- incubator/thrift/trunk/lib/java/src/com/facebook/thrift/FieldMetaData.java 
(added)
+++ incubator/thrift/trunk/lib/java/src/com/facebook/thrift/FieldMetaData.java 
Mon Jan  5 13:02:52 2009
@@ -0,0 +1,8 @@
+package com.facebook.thrift;
+
+public class FieldMetaData implements java.io.Serializable {
+  public final String fieldName;
+  public FieldMetaData(String fieldName){
+    this.fieldName = fieldName;
+  }
+}


Reply via email to