@@ -51,29 +51,36 @@ def java_constant_name(c):
5151 'Date'
5252 ])
5353
54- javaPropertyTypeMap = {
55- 'octet' : 'Integer' ,
56- 'shortstr' : 'String' ,
57- 'longstr' : 'LongString' ,
58- 'short' : 'Integer' ,
59- 'long' : 'Integer' ,
60- 'longlong' : 'Long' ,
61- 'bit' : 'Boolean' ,
62- 'table' : 'Map<String,Object>' ,
63- 'timestamp' : 'Date'
54+ # the types in the range of javaTypeMap must be in java_scala_types
55+ java_scalar_types = set ([
56+ 'int' ,
57+ 'long' ,
58+ 'boolean'
59+ ])
60+
61+ # the java_scalar_types must be in the domain of javaBoxedTypeMap
62+ javaBoxedTypeMap = {
63+ 'int' : 'Integer' ,
64+ 'long' : 'Long' ,
65+ 'boolean' : 'Boolean'
6466 }
67+ def java_boxed_type (jtype ):
68+ if jtype in java_scalar_types :
69+ return javaBoxedTypeMap [jtype ]
70+ else :
71+ return jtype
6572
6673def java_type (spec , domain ):
6774 return javaTypeMap [spec .resolveDomain (domain )]
6875
69- def java_name (upper , name ):
76+ def java_name (upperNext , name ):
7077 out = ''
7178 for c in name :
7279 if not c .isalnum ():
73- upper = True
74- elif upper :
80+ upperNext = True
81+ elif upperNext :
7582 out += c .upper ()
76- upper = False
83+ upperNext = False
7784 else :
7885 out += c
7986 return out
@@ -84,8 +91,6 @@ def java_class_name(name):
8491def java_getter_name (name ):
8592 return java_name (False , 'get-' + name )
8693
87- def java_property_type (spec , type ):
88- return javaPropertyTypeMap [spec .resolveDomain (type )]
8994def java_field_name (name ):
9095 return java_name (False , name )
9196def java_field_type (spec , domain ):
@@ -108,10 +113,9 @@ def java_field_default_value(type, value):
108113 raise BogusDefaultValue ("JSON provided default value {0} for suspicious type {1}" .format (value , type ))
109114
110115def typeNameDefault (spec , a ):
111- return (java_field_type (spec , a .domain ),
112- java_field_name (a .name ),
113- java_field_default_value (java_field_type (spec , a .domain ),
114- a .defaultvalue ))
116+ fieldType = java_field_type (spec , a .domain )
117+ defaultVal = java_field_default_value (fieldType , a .defaultvalue )
118+ return (fieldType , java_field_name (a .name ), defaultVal )
115119
116120def nullCheckedFields (spec , m ):
117121 fieldsToNullCheck = set ([])
@@ -236,59 +240,111 @@ def printClassInterfaces():
236240
237241 def printReadPropertiesFrom (c ):
238242 print
239- print """ public void readPropertiesFrom(ContentHeaderPropertyReader reader)
240- throws IOException
241- {"""
243+ print " public void readPropertiesFrom(ContentHeaderPropertyReader reader)"
244+ print " throws IOException"
245+ print " {"
246+
242247 for f in c .fields :
243- print " boolean %s_present = reader.readPresence();" % (java_field_name (f .name ))
248+ (jfName , jfType ) = (java_field_name (f .name ), java_field_type (spec , f .domain ))
249+ if jfType in java_scalar_types :
250+ print " this.%sIsSet = reader.readPresence();" % (jfName )
251+ else :
252+ print " boolean %s_present = reader.readPresence();" % (jfName )
244253 print " reader.finishPresence();"
245254 for f in c .fields :
246- print " this.%s = %s_present ? reader.read%s() : null;" % (java_field_name (f .name ), java_field_name (f .name ), java_class_name (f .domain ))
255+ (jfName , jfType , jfClass ) = (java_field_name (f .name ), java_field_type (spec , f .domain ), java_class_name (f .domain ))
256+ if jfType in java_scalar_types :
257+ print " if (this.%sIsSet) this.%s = reader.read%s();" % (jfName , jfName , jfClass )
258+ else :
259+ print " this.%s = %s_present ? reader.read%s() : null;" % (jfName , jfName , jfClass )
260+
247261 print " }"
248262
249263 def printWritePropertiesTo (c ):
250264 print
251- print """ public void writePropertiesTo(ContentHeaderPropertyWriter writer)
252- throws IOException
253- {"" "
265+ print " public void writePropertiesTo(ContentHeaderPropertyWriter writer)"
266+ print " throws IOException"
267+ print " { "
254268 for f in c .fields :
255- print " writer.writePresence(this.%s != null);" % (java_field_name (f .name ))
269+ (jfName , jfType ) = (java_field_name (f .name ), java_field_type (spec , f .domain ))
270+ if jfType in java_scalar_types :
271+ print " writer.writePresence(this.%sIsSet);" % (jfName )
272+ else :
273+ print " writer.writePresence(this.%s != null);" % (jfName )
274+
256275 print " writer.finishPresence();"
276+
257277 for f in c .fields :
258- print " if (this.%s != null) { writer.write%s(this.%s); }" % (java_field_name (f .name ), java_class_name (f .domain ), java_field_name (f .name ))
278+ (jfName , jfType , jfClass ) = (java_field_name (f .name ), java_field_type (spec , f .domain ), java_class_name (f .domain ))
279+ if jfType in java_scalar_types :
280+ print " if (this.%sIsSet) writer.write%s(this.%s);" % (jfName , jfClass , jfName )
281+ else :
282+ print " if (this.%s != null) writer.write%s(this.%s);" % (jfName , jfClass , jfName )
259283 print " }"
260284
261285 def printAppendArgumentDebugStringTo (c ):
262- appendList = [ "%s=\" )\n .append(this.%s)\n .append(\" "
263- % (f .name , java_field_name (f .name ))
286+ def optionalValueClause (jField , jType ):
287+ if jType in java_scalar_types :
288+ return "this.%sIsSet ? String.valueOf(this.%s) : \" unset\" " % (jField , jField )
289+ else :
290+ return "this.%s" % (jField )
291+
292+ appendList = [ "%s=\" )\n .append(%s)\n .append(\" "
293+ % (f .name , optionalValueClause (java_field_name (f .name ), java_field_type (spec , f .domain )))
264294 for f in c .fields ]
265295 print
266296 print " public void appendArgumentDebugStringTo(StringBuffer acc) {"
267- print " acc.append(\" (%s)\" );" % ", " .join (appendList )
297+ print " acc.append(\" (%s)\" );" % (", " .join (appendList ))
298+ print " }"
299+
300+ def printPropertiesBuilderClass (c ):
301+ print " public static final class Builder {"
302+ for f in c .fields :
303+ print " private %s %s;" % (java_field_type (spec , f .domain ),java_field_name (f .name ))
304+
268305 print " }"
269-
306+
270307 def printPropertiesClass (c ):
308+ def printGetterAndSetter (fieldType , fieldName ):
309+ capFieldName = fieldName [0 ].upper () + fieldName [1 :]
310+ print " public %s get%s() { return this.%s; }" % (fieldType , capFieldName , fieldName )
311+ if fieldType in java_scalar_types :
312+ print " public void set%s(%s %s)" % (capFieldName , fieldType , fieldName )
313+ print " { this.%s = %s; this.%sIsSet = true; }" % (fieldName , fieldName , fieldName )
314+ else :
315+ print " public void set%s(%s %s) { this.%s = %s; }" % (capFieldName , fieldType , fieldName , fieldName , fieldName )
316+
317+ jClassName = java_class_name (c .name )
318+
271319 print
272- print " public static class %(className)s extends %(parentClass)s {" % { 'className' : java_class_name ( c . name ) + 'Properties' , 'parentClass' : ' com.rabbitmq.client.impl.AMQ' + java_class_name ( c . name ) + 'Properties' }
320+ print " public static class %sProperties extends com.rabbitmq.client.impl.AMQ%sProperties {" % ( jClassName , jClassName )
273321 #property fields
274322 for f in c .fields :
275- print " private %s %s;" % (java_property_type (spec , f .domain ),java_field_name (f .name ))
323+ (fType , fName ) = (java_field_type (spec , f .domain ),java_field_name (f .name ))
324+ if fType in java_scalar_types :
325+ print " private boolean %sIsSet = false;" % (fName )
326+ print " private %s %s;" % (fType , fName )
276327
277328 #explicit constructor
278329 if c .fields :
279330 print
280- consParmList = [ "%s %s" % (java_property_type ( spec ,f .domain ),java_field_name (f .name ))
331+ consParmList = [ "%s %s" % (java_boxed_type ( java_field_type ( spec ,f .domain ) ),java_field_name (f .name ))
281332 for f in c .fields ]
282- print " public %sProperties(" % (java_class_name ( c . name ) )
333+ print " public %sProperties(" % (jClassName )
283334 print " %s)" % (",\n " .join (consParmList ))
284335 print " {"
285336 for f in c .fields :
286- print " this.%s = %s;" % (java_field_name (f .name ), java_field_name (f .name ))
337+ (fType , fName ) = (java_field_type (spec , f .domain ),java_field_name (f .name ))
338+ if fType in java_scalar_types :
339+ print " if (%s == null) { this.%sIsSet = false; }" % (fName , fName )
340+ print " else { this.%sIsSet = true; this.%s = %s; }" % (fName , fName , fName )
341+ else :
342+ print " this.%s = %s;" % (fName , fName )
287343 print " }"
288344
289345 #default constructor
290346 print
291- print " public %sProperties() {}" % (java_class_name ( c . name ) )
347+ print " public %sProperties() {}" % (jClassName )
292348
293349 #class properties
294350 print " public int getClassId() { return %i; }" % (c .index )
@@ -297,15 +353,13 @@ def printPropertiesClass(c):
297353 #accessor methods
298354 print
299355 for f in c .fields :
300- print """ public %(fieldType)s get%(capFieldName)s() { return %(fieldName)s; }
301- public void set%(capFieldName)s(%(fieldType)s %(fieldName)s) { this.%(fieldName)s = %(fieldName)s; }""" % \
302- {'fieldType' : java_property_type (spec , f .domain ), \
303- 'capFieldName' : (java_field_name (f .name )[0 ].upper () + java_field_name (f .name )[1 :]), \
304- 'fieldName' : java_field_name (f .name )}
356+ printGetterAndSetter (java_field_type (spec , f .domain ), java_field_name (f .name ))
305357
306358 printReadPropertiesFrom (c )
307359 printWritePropertiesTo (c )
308360 printAppendArgumentDebugStringTo (c )
361+ printPropertiesBuilderClass (c )
362+
309363 print " }"
310364
311365 def printPropertiesClasses ():
0 commit comments