java_gen: make OFFactory be a XidGenerator
diff --git a/java_gen/templates/of_factory_class.java b/java_gen/templates/of_factory_class.java
index 86b092a..5263226 100644
--- a/java_gen/templates/of_factory_class.java
+++ b/java_gen/templates/of_factory_class.java
@@ -40,7 +40,10 @@
 
 public class ${factory.name} implements ${factory.interface.name} {
     public final static ${factory.name} INSTANCE = new ${factory.name}();
-    private ${factory.name}() {}
+
+    //:: if factory.interface.xid_generator:
+    private final XidGenerator xidGenerator = XidGenerators.global();
+    //:: #endif
 
     //:: for name, clazz in factory.interface.sub_factories.items():
     public ${clazz} ${name}() {
@@ -59,7 +62,7 @@
     //:: if len(i.writeable_members) > 0:
     public ${i.name}.Builder ${factory.interface.method_name(i, builder=True)}() {
         //::   if i.has_version(factory.version) and model.generate_class(i.versioned_class(factory.version)):
-        return new ${i.versioned_class(factory.version).name}.Builder();
+        return new ${i.versioned_class(factory.version).name}.Builder()${".setXid(nextXid())" if i.member_by_name("xid") else ""};
         //:: else:
         throw new UnsupportedOperationException("${i.name} not supported in version ${factory.version}");
         //:: #endif
@@ -72,12 +75,12 @@
     //::     general_get_match_func_written = True
     //:: #endif
     //:: if len(i.writeable_members) <= 2:
-    public ${i.name} ${factory.interface.method_name(i, builder=False)}(${", ".join("%s %s" % (p.java_type.public_type, p.name) for p in i.writeable_members)}) {
+    public ${i.name} ${factory.interface.method_name(i, builder=False)}(${", ".join("%s %s" % (p.java_type.public_type, p.name) for p in i.writeable_members if p.name != "xid" )}) {
         //::   if i.has_version(factory.version) and model.generate_class(i.versioned_class(factory.version)):
         //:: if len(i.writeable_members) > 0:
         return new ${i.versioned_class(factory.version).name}(
                 ${",\n                      ".join(
-                         [ prop.name for prop in i.versioned_class(factory.version).data_members])}
+                         [ prop.name if prop.name != "xid" else "nextXid()" for prop in i.versioned_class(factory.version).data_members])}
                     );
         //:: else:
         return ${i.versioned_class(factory.version).name}.INSTANCE;
@@ -155,5 +158,10 @@
         }
     }
 //:: #endif
+//:: if factory.interface.xid_generator:
+    public long nextXid() {
+        return xidGenerator.nextXid();
+    }
+//:: #endif
 
 }