Improve ProtoFileGenerator to support required/optional

Use required for not null and optional for permits null fields.
Name fields in nested messages after the Java field name rather
than the column name. This makes more sense when looking at the
generated protobuf code.

Change-Id: I6b8a6c5bb37ed97f454f9915a6dfcca05aaca5b5
diff --git a/src/main/java/com/google/gwtorm/schema/java/ProtoFileGenerator.java b/src/main/java/com/google/gwtorm/schema/java/ProtoFileGenerator.java
index 3f2a82a..82d804a 100644
--- a/src/main/java/com/google/gwtorm/schema/java/ProtoFileGenerator.java
+++ b/src/main/java/com/google/gwtorm/schema/java/ProtoFileGenerator.java
@@ -17,6 +17,7 @@
 import com.google.gwtorm.client.Column;
 import com.google.gwtorm.schema.ColumnModel;
 import com.google.gwtorm.schema.RelationModel;
+import com.google.gwtorm.schema.Util;
 
 import org.objectweb.asm.Type;
 
@@ -98,7 +99,9 @@
 
     out.print("message " + getMessageName(rel) + " {\n");
     for (ColumnModel c : cols) {
-      out.append("\toptional " + getType(c) + " " + getName(c) + " = "
+      out.append("\t");
+      out.append(c.isNotNull() ? "required" : "optional");
+      out.append(" " + getType(c) + " " + getName(c) + " = "
           + c.getColumnID() + ";\n");
     }
     out.print("}\n\n");
@@ -119,7 +122,10 @@
 
     out.print("message " + getType(parent) + " {\n");
     for (ColumnModel child : children) {
-      out.append("\toptional " + getType(child) + " " + getName(child) + " = "
+      out.append("\t");
+      out.append(child.isNotNull() ? "required" : "optional");
+      out.append(" " + getType(child) + " "
+          + Util.makeSqlFriendly(child.getFieldName()) + " = "
           + child.getColumnID() + ";\n");
     }
     out.print("}\n\n");