#
import argparse
-import importlib
import sys
import os
import json
import util
from string import Template
-from util import remove_suffix
-
callback_suffix = "Callback"
callback_template = Template("""
camel_case_name_with_suffix = util.underscore_to_camelcase_upper(func['name'])
- if util.is_ignored(func['name']) or util.is_control_ping(camel_case_name_with_suffix):
+ if util.is_control_ping(camel_case_name_with_suffix):
continue
if not util.is_reply(camel_case_name_with_suffix) and not util.is_notification(func['name']):
continue
camel_case_method_name = util.underscore_to_camelcase(func['name'])
dto_path = os.path.join(dto_package, camel_case_dto_name + ".java")
- if util.is_ignored(func['name']) or util.is_control_ping(camel_case_dto_name):
+ if util.is_control_ping(camel_case_dto_name):
continue
fields = generate_dto_fields(camel_case_dto_name, func)
if not util.is_just_notification(func["name"]):
if util.is_reply(camel_case_dto_name):
description = "reply DTO"
- request_dto_name = get_request_name(camel_case_dto_name, func['name'])
+ request_dto_name = util.remove_reply_suffix(camel_case_dto_name)
if util.is_details(camel_case_dto_name):
# FIXME assumption that dump calls end with "Dump" suffix. Not enforced in vpe.api
base_type += "JVppReply<%s.%s.%s>" % (plugin_package, dto_package, request_dto_name + "Dump")
dump_reply_artificial_dtos = {}
-# Returns request name or special one from unconventional_naming_rep_req map
-def get_request_name(camel_case_dto_name, func_name):
- return util.underscore_to_camelcase_upper(
- util.unconventional_naming_rep_req[func_name]) if func_name in util.unconventional_naming_rep_req \
- else util.remove_reply_suffix(camel_case_dto_name)
-
-
def flush_dump_reply_dtos(inputfile):
for dump_reply_artificial_dto in dump_reply_artificial_dtos.values():
dto_path = os.path.join(dump_reply_artificial_dto['dto_package'],
(*env)->Set${jni_setter}(env, ${object_name}, ${field_reference_name}FieldId, mp->${c_name});
""")
-variable_length_array_value_template = Template("""mp->${length_var_name}""")
-variable_length_array_template = Template("""clib_net_to_host_${length_field_type}(${value})""")
-
u16_dto_field_setter_template = Template("""
(*env)->Set${jni_setter}(env, ${object_name}, ${field_reference_name}FieldId, clib_net_to_host_u16(mp->${c_name}));
""")
u64_struct_setter_template = Template("""
mp->${c_name} = clib_host_to_net_u64(${field_reference_name});""")
-array_length_enforcement_template = Template("""
- size_t max_size = ${field_length};
- if (cnt > max_size) cnt = max_size;""")
-
u8_array_struct_setter_template = Template("""
if (${field_reference_name}) {
jsize cnt = (*env)->GetArrayLength (env, ${field_reference_name});
# limitations under the License.
#
-import os, util
+import util
from string import Template
import jni_gen
-def is_manually_generated(f_name, plugin_name):
+def is_manually_generated(f_name):
return f_name in {'control_ping_reply'}
class_name = util.underscore_to_camelcase_upper(c_name)
ref_name = util.underscore_to_camelcase(c_name)
- if util.is_ignored(c_name) or util.is_control_ping(class_name):
+ if util.is_control_ping(class_name):
continue
class_references.append(class_reference_template.substitute(
for f in func_list:
f_name = f['name']
camel_case_function_name = util.underscore_to_camelcase(f_name)
- if is_manually_generated(f_name, plugin_name) or util.is_reply(camel_case_function_name) \
- or util.is_ignored(f_name) or util.is_just_notification(f_name):
+ if is_manually_generated(f_name) or util.is_reply(camel_case_function_name) \
+ or util.is_just_notification(f_name):
continue
arguments = ''
dto_name = util.underscore_to_camelcase_upper(handler_name)
ref_name = util.underscore_to_camelcase(handler_name)
- if is_manually_generated(handler_name, plugin_name) or util.is_ignored(handler_name):
+ if is_manually_generated(handler_name):
continue
if not util.is_reply(dto_name) and not util.is_notification(handler_name):
name = f['name']
camelcase_name = util.underscore_to_camelcase(f['name'])
- if (not util.is_reply(camelcase_name) and not util.is_notification(name)) or util.is_ignored(name) \
+ if (not util.is_reply(camelcase_name) and not util.is_notification(name)) \
or util.is_control_ping(camelcase_name):
continue
for f in func_list:
name = f['name']
- if util.is_ignored(name):
- continue
-
api_verification.append(api_verification_template.substitute(
name=name,
crc=f['crc']))
from string import Template
import callback_gen
-import dto_gen
jvpp_ifc_template = Template("""
package $plugin_package.$callback_facade_package;
methods_impl = []
for func in func_list:
- if util.is_notification(func['name']) or util.is_ignored(func['name']):
+ if util.is_notification(func['name']):
continue
camel_case_name = util.underscore_to_camelcase(func['name'])
continue
# Strip suffix for dump calls
- callback_type = get_request_name(camel_case_name_upper, func['name'])
- if (util.is_dump(camel_case_name_upper)):
+ callback_type = get_request_name(camel_case_name_upper)
+ if util.is_dump(camel_case_name_upper):
callback_type += "Details"
- elif (not util.is_notification(camel_case_name_upper)):
+ elif not util.is_notification(camel_case_name_upper):
callback_type += "Reply"
callback_type += callback_gen.callback_suffix
camel_case_name_with_suffix = util.underscore_to_camelcase_upper(func['name'])
- if util.is_ignored(func['name']) or util.is_control_ping(camel_case_name_with_suffix):
+ if util.is_control_ping(camel_case_name_with_suffix):
continue
if util.is_reply(camel_case_name_with_suffix):
jvpp_file.close()
-# Returns request name or special one from unconventional_naming_rep_req map
-def get_request_name(camel_case_dto_name, func_name):
- if func_name in reverse_dict(util.unconventional_naming_rep_req):
- request_name = util.underscore_to_camelcase_upper(reverse_dict(util.unconventional_naming_rep_req)[func_name])
- else:
- request_name = camel_case_dto_name
- return remove_suffix(request_name)
-
-
-def reverse_dict(map):
- return dict((v, k) for k, v in map.iteritems())
-
+# Returns request name
+def get_request_name(camel_case_dto_name):
+ return remove_suffix(camel_case_dto_name)
def remove_suffix(name):
if util.is_reply(name):
for func in func_list:
camel_case_name_with_suffix = util.underscore_to_camelcase_upper(func['name'])
- if util.is_ignored(func['name']) or util.is_control_ping(camel_case_name_with_suffix):
+ if util.is_control_ping(camel_case_name_with_suffix):
continue
if not util.is_reply(camel_case_name_with_suffix) and not util.is_notification(func['name']):
camel_case_request_method_name = util.remove_reply_suffix(util.underscore_to_camelcase(func['name']))
request_dto = util.remove_reply_suffix(util.underscore_to_camelcase_upper(func['name']))
if util.is_details(camel_case_name_with_suffix):
- camel_case_reply_name = get_standard_dump_reply_name(util.underscore_to_camelcase_upper(func['name']),
- func['name'])
+ camel_case_reply_name = util.underscore_to_camelcase_upper(func['name'])
callbacks.append(jvpp_facade_details_callback_method_template.substitute(base_package=base_package,
plugin_package=plugin_package,
dto_package=dto_package,
request_name=util.remove_reply_suffix(camel_case_reply_name) +
util.underscore_to_camelcase_upper(util.dump_suffix)))
else:
- request_name = util.underscore_to_camelcase_upper(util.unconventional_naming_rep_req[func['name']]) \
- if func['name'] in util.unconventional_naming_rep_req else util.remove_reply_suffix(camel_case_name_with_suffix)
+ request_name = util.remove_reply_suffix(camel_case_name_with_suffix)
methods.append(future_jvpp_method_template.substitute(plugin_package=plugin_package,
dto_package=dto_package,
return send(request, new $plugin_package.$dto_package.$reply_name());
}
''')
-
-
-# Returns request name or special one from unconventional_naming_rep_req map
-def get_standard_dump_reply_name(camel_case_dto_name, func_name):
- # FIXME this is a hotfix for sub-details callbacks
- # FIXME also for L2FibTableEntry
- # It's all because unclear mapping between
- # request -> reply,
- # dump -> reply, details,
- # notification_start -> reply, notifications
-
- # vpe.api needs to be "standardized" so we can parse the information and create maps before generating java code
- suffix = func_name.split("_")[-1]
- return util.underscore_to_camelcase_upper(
- util.unconventional_naming_rep_req[func_name]) + util.underscore_to_camelcase_upper(suffix) if func_name in util.unconventional_naming_rep_req \
- else camel_case_dto_name
# See the License for the specific language governing permissions and
# limitations under the License.
-import os, util
+import util
from string import Template
jvpp_ifc_template = Template("""
methods = []
methods_impl = []
for func in func_list:
-
- # Skip structures that are used only as notifications
- if util.is_ignored(func['name']):
- continue
-
camel_case_name = util.underscore_to_camelcase(func['name'])
camel_case_name_upper = util.underscore_to_camelcase_upper(func['name'])
if util.is_reply(camel_case_name):
callback_file = open(os.path.join(notification_package, "Global%sEventCallback.java" % plugin_name), 'w')
global_notification_callback_callbacks = ""
- if (callbacks):
+ if callbacks:
global_notification_callback_callbacks = " extends " + ", ".join(callbacks)
callback_file.write(global_notification_callback_template.substitute(inputfile=inputfile,
removedirs(folder)
-reply_suffixes = ("reply", "details", "l2fibtableentry")
+reply_suffixes = ("reply", "details")
def is_reply(name):
return name.lower().endswith(reply_suffixes)
-details_suffix = "details"
def is_details(name):
- return name.lower().endswith(reply_suffixes[1]) or name.lower().endswith(reply_suffixes[2])
+ return name.lower().endswith(reply_suffixes[1])
def is_retval_field(name):
def get_reply_suffix(name):
for reply_suffix in reply_suffixes:
if name.lower().endswith(reply_suffix):
- if reply_suffix == reply_suffixes[2]:
- # FIXME workaround for l2_fib_table_entry
- return 'entry'
- else:
- return reply_suffix
+ return reply_suffix
# Mapping according to:
# http://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/types.html
vpp_2_jni_type_mapping = {'u8': 'jbyte',
'u8[]': 'jbyteArray',
'i8': 'jbyte',
- 'u8[]': 'jbyteArray',
+ 'i8[]': 'jbyteArray',
'u16': 'jshort',
'u16[]': 'jshortArray',
'i16': 'jshort',
'f64[]': 'ObjectField'
}
-
-# vpe.api calls that do not follow naming conventions and have to be handled exceptionally when finding reply -> request mapping
-# FIXME in vpe.api
-unconventional_naming_rep_req = {
- }
-
-#
# FIXME no convention in the naming of events (notifications) in vpe.api
notifications_message_suffixes = ("event", "counters")
-# messages that must be ignored. These messages are INSUFFICIENTLY marked as disabled in vpe.api
-# FIXME
-ignored_messages = []
-
-
def is_notification(name):
""" Returns true if the structure is a notification regardless of its no other use """
return is_just_notification(name)
return name.lower().endswith(notifications_message_suffixes)
-def is_ignored(param):
- return param.lower() in ignored_messages
-
-
def remove_reply_suffix(camel_case_name_with_suffix):
return remove_suffix(camel_case_name_with_suffix, get_reply_suffix(camel_case_name_with_suffix))
def is_control_ping(camel_case_name_with_suffix):
- return camel_case_name_with_suffix.lower().startswith("controlping");
+ return camel_case_name_with_suffix.lower().startswith("controlping")
def api_message_to_javadoc(api_message):