diff options
Diffstat (limited to 'src/vpp-api/java/jvpp/gen/jvppgen/callback_gen.py')
-rwxr-xr-x[-rw-r--r--] | src/vpp-api/java/jvpp/gen/jvppgen/callback_gen.py | 115 |
1 files changed, 45 insertions, 70 deletions
diff --git a/src/vpp-api/java/jvpp/gen/jvppgen/callback_gen.py b/src/vpp-api/java/jvpp/gen/jvppgen/callback_gen.py index 13a415595c2..14aa8b760a5 100644..100755 --- a/src/vpp-api/java/jvpp/gen/jvppgen/callback_gen.py +++ b/src/vpp-api/java/jvpp/gen/jvppgen/callback_gen.py @@ -1,6 +1,6 @@ -#!/usr/bin/env python +#!/usr/bin/env python2 # -# Copyright (c) 2016 Cisco and/or its affiliates. +# Copyright (c) 2016,2018 Cisco and/or its affiliates. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at: @@ -12,87 +12,62 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. - -import os -import util +# from string import Template -callback_suffix = "Callback" +from jvpp_model import is_request, is_dump, is_control_ping, is_control_ping_reply -callback_template = Template(""" -package $plugin_package.$callback_package; + +def generate_callbacks(work_dir, model, logger): + json_api_files = model.json_api_files + logger.debug("Generating Callback interfaces for %s" % json_api_files) + plugin_package = model.plugin_package + + callbacks = [] + for msg in model.messages: + name = msg.java_name_upper + if is_control_ping(msg) or is_control_ping_reply(msg): + # Skip control_ping managed by jvpp registry. + continue + if is_dump(msg) or is_request(msg): + continue + + callbacks.append("%s.callback.%sCallback" % (plugin_package, name)) + callback = _CALLBACK_TEMPLATE.substitute( + plugin_package=plugin_package, + json_filename=json_api_files, + name=name) + + with open("%s/%sCallback.java" % (work_dir, name), "w") as f: + f.write(callback) + + plugin_name = model.plugin_java_name + with open("%s/JVpp%sGlobalCallback.java" % (work_dir, plugin_name), "w") as f: + f.write(_GLOBAL_CALLBACK_TEMPLATE.substitute( + plugin_package=plugin_package, + json_filename=json_api_files, + plugin_name=plugin_name, + callbacks=", ".join(callbacks) + )) + +_CALLBACK_TEMPLATE = Template("""package $plugin_package.callback; /** - * <p>Represents callback for plugin's api file message. - * <br>It was generated by callback_gen.py based on $inputfile preparsed data: - * <pre> -$docs - * </pre> + * <p>Represents callback for plugin's api message. + * <br>It was generated by jvpp_callback_gen.py based on $json_filename. */ -public interface $cls_name extends $base_package.$callback_package.$callback_type { - - $callback_method +public interface ${name}Callback extends io.fd.vpp.jvpp.callback.JVppCallback { + void on${name}(${plugin_package}.dto.${name} reply); } """) -global_callback_template = Template(""" -package $plugin_package.$callback_package; +_GLOBAL_CALLBACK_TEMPLATE = Template("""package $plugin_package.callback; /** * <p>Global aggregated callback interface. - * <br>It was generated by callback_gen.py based on $inputfile - * <br>(python representation of api file generated by vppapigen). + * <br>It was generated by jvpp_callback_gen.py based on $json_filename. */ -public interface JVpp${plugin_name}GlobalCallback extends $base_package.$callback_package.ControlPingCallback, $callbacks { +public interface JVpp${plugin_name}GlobalCallback extends io.fd.vpp.jvpp.callback.ControlPingCallback, $callbacks { } """) - - -def generate_callbacks(func_list, base_package, plugin_package, plugin_name, callback_package, dto_package, inputfile, - logger): - """ Generates callback interfaces """ - logger.debug("Generating Callback interfaces for %s" % inputfile) - - if not os.path.exists(callback_package): - os.mkdir(callback_package) - - callbacks = [] - for func in func_list: - camel_case_name_with_suffix = util.underscore_to_camelcase_upper(func['name']) - - if util.is_control_ping(camel_case_name_with_suffix): - # Skip control_ping managed by jvpp registry. - continue - if util.is_dump(func['name']) or util.is_request(func['name'], func_list): - continue - - # Generate callbacks for all messages except for dumps and requests (handled by vpp, not client). - callback_type = "JVppCallback" - callbacks.append("{0}.{1}.{2}".format(plugin_package, callback_package, camel_case_name_with_suffix + callback_suffix)) - callback_path = os.path.join(callback_package, camel_case_name_with_suffix + callback_suffix + ".java") - callback_file = open(callback_path, 'w') - - reply_type = "%s.%s.%s" % (plugin_package, dto_package, camel_case_name_with_suffix) - method = "void on{0}({1} reply);".format(camel_case_name_with_suffix, reply_type) - callback_file.write( - callback_template.substitute(inputfile=inputfile, - docs=util.api_message_to_javadoc(func), - cls_name=camel_case_name_with_suffix + callback_suffix, - callback_method=method, - base_package=base_package, - plugin_package=plugin_package, - callback_package=callback_package, - callback_type=callback_type)) - callback_file.flush() - callback_file.close() - - callback_file = open(os.path.join(callback_package, "JVpp%sGlobalCallback.java" % plugin_name), 'w') - callback_file.write(global_callback_template.substitute(inputfile=inputfile, - callbacks=", ".join(callbacks), - base_package=base_package, - plugin_package=plugin_package, - plugin_name=plugin_name, - callback_package=callback_package)) - callback_file.flush() - callback_file.close() |