def generate_callback(func_list, base_package, dto_package, callback_package, callback_facade_package, inputfile):
    callbacks = []
    for func in func_list:

        if util.is_notification(func['name']) or util.is_ignored(func['name']):
            # TODO handle notifications
            continue

        camel_case_name_with_suffix = util.underscore_to_camelcase_upper(func['name'])
        if not util.is_reply(camel_case_name_with_suffix):
            continue

        callbacks.append(jvpp_facade_callback_method_template.substitute(base_package=base_package,
                                                                         dto_package=dto_package,
                                                                         callback_package=callback_package,
                                                                         callback=util.remove_reply_suffix(camel_case_name_with_suffix) + callback_gen.callback_suffix,
                                                                         callback_dto=camel_case_name_with_suffix))

    jvpp_file = open(os.path.join(callback_facade_package, "CallbackJVppFacadeCallback.java"), 'w')
    jvpp_file.write(jvpp_facade_callback_template.substitute(inputfile=inputfile,
                                                             base_package=base_package,
                                                             dto_package=dto_package,
                                                             callback_package=callback_package,
                                                             methods="".join(callbacks),
                                                             callback_facade_package=callback_facade_package))
    jvpp_file.flush()
    jvpp_file.close()
Exemple #2
0
def generate_dump_reply_dto(request_dto_name, base_package, plugin_package, dto_package, camel_case_dto_name,
                            camel_case_method_name, func):
    base_type = "JVppReplyDump<%s.%s.%s, %s.%s.%s>" % (
        plugin_package, dto_package, util.remove_reply_suffix(camel_case_dto_name) + "Dump",
        plugin_package, dto_package, camel_case_dto_name)
    fields = "    public java.util.List<%s> %s = new java.util.ArrayList<>();" % (camel_case_dto_name, camel_case_method_name)
    cls_name = camel_case_dto_name + dump_dto_suffix
    # using artificial type for fields, just to bypass the is_array check in base methods generators
    # the type is not really used
    artificial_type = 'u8'

    # In case of already existing artificial reply dump DTO, just update it
    # Used for sub-dump dtos
    if request_dto_name in dump_reply_artificial_dtos.keys():
        dump_reply_artificial_dtos[request_dto_name]['fields'] += '\n' + fields
        dump_reply_artificial_dtos[request_dto_name]['field_names'].append(func['name'])
        dump_reply_artificial_dtos[request_dto_name]['field_types'].append(artificial_type)
        methods = '\n' + generate_dto_base_methods(dump_reply_artificial_dtos[request_dto_name]['cls_name'],
                                            {'args': dump_reply_artificial_dtos[request_dto_name]['field_names'],
                                             'types': dump_reply_artificial_dtos[request_dto_name]['field_types']})
        dump_reply_artificial_dtos[request_dto_name]['methods'] = methods
    else:
        methods = '\n' + generate_dto_base_methods(cls_name, {'args': [func['name']],
                                                              'types': [artificial_type]})
        dump_reply_artificial_dtos[request_dto_name] = ({'docs': util.api_message_to_javadoc(func),
                                                         'cls_name': cls_name,
                                                         'fields': fields,
                                                         'field_names': [func['name']],
                                                         'field_types': [artificial_type],
                                                         # strip too many newlines at the end of base method block
                                                         'methods': methods,
                                                         'plugin_package': plugin_package,
                                                         'base_package': base_package,
                                                         'base_type': base_type,
                                                         'dto_package': dto_package})
Exemple #3
0
def generate_dump_reply_dto(request_dto_name, base_package, dto_package,
                            camel_case_dto_name, camel_case_method_name, func):
    base_type = "JVppReplyDump<%s.%s.%s, %s.%s.%s>" % (
        base_package, dto_package,
        util.remove_reply_suffix(camel_case_dto_name) + "Dump", base_package,
        dto_package, camel_case_dto_name)
    fields = "    public java.util.List<%s> %s = new java.util.ArrayList<>();" % (
        camel_case_dto_name, camel_case_method_name)
    cls_name = camel_case_dto_name + dump_dto_suffix

    # In case of already existing artificial reply dump DTO, just update it
    # Used for sub-dump dtos
    if request_dto_name in dump_reply_artificial_dtos.keys():
        dump_reply_artificial_dtos[request_dto_name]['fields'] = \
            dump_reply_artificial_dtos[request_dto_name]['fields'] + '\n' + fields
    else:
        dump_reply_artificial_dtos[request_dto_name] = ({
            'docs':
            util.api_message_to_javadoc(func),
            'cls_name':
            cls_name,
            'fields':
            fields,
            'methods':
            "",
            'base_package':
            base_package,
            'base_type':
            base_type,
            'dto_package':
            dto_package,
        })
def remove_suffix(name):
    if util.is_reply(name):
        return util.remove_reply_suffix(name)
    else:
        if util.is_dump(name):
            return util.remove_suffix(name, util.dump_suffix)
        else:
            return name
def remove_suffix(name):
    if util.is_reply(name):
        return util.remove_reply_suffix(name)
    else:
        if util.is_dump(name):
            return util.remove_suffix(name, util.dump_suffix)
        else:
            return name
Exemple #6
0
def generate_dtos(func_list, base_package, plugin_package, plugin_name,
                  dto_package, inputfile, logger):
    """ Generates dto objects in a dedicated package """
    logger.debug("Generating DTOs for %s" % inputfile)

    if not os.path.exists(dto_package):
        os.mkdir(dto_package)

    for func in func_list:
        camel_case_dto_name = util.underscore_to_camelcase_upper(func['name'])
        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_control_ping(camel_case_dto_name):
            continue

        fields = generate_dto_fields(camel_case_dto_name, func)
        methods = generate_dto_base_methods(camel_case_dto_name, func)
        base_type = ""

        if util.is_reply(camel_case_dto_name):
            description = "reply DTO"
            request_dto_name = util.remove_reply_suffix(camel_case_dto_name)
            if util.is_details(camel_case_dto_name):
                base_type += "JVppReply<%s.%s.%s>" % (
                    plugin_package, dto_package, request_dto_name + "Dump")
                generate_dump_reply_dto(request_dto_name, base_package,
                                        plugin_package, dto_package,
                                        camel_case_dto_name,
                                        camel_case_method_name, func)
            else:
                base_type += "JVppReply<%s.%s.%s>" % (
                    plugin_package, dto_package, request_dto_name)
        elif util.is_dump(camel_case_dto_name) or util.is_request(
                func['name'], func_list):
            args = "" if fields is "" else "this"
            methods += send_template.substitute(
                method_name=camel_case_method_name,
                base_package=base_package,
                plugin_package=plugin_package,
                plugin_name=plugin_name,
                args=args)
            if util.is_dump(camel_case_dto_name):
                base_type += "JVppDump"
                description = "dump request DTO"
            else:
                base_type += "JVppRequest"
                description = "request DTO"
        else:
            description = "event DTO"
            dto_path = os.path.join(dto_package, camel_case_dto_name + ".java")

        write_dto_file(base_package, plugin_package, base_type,
                       camel_case_dto_name, description, dto_package, dto_path,
                       fields, func, inputfile, methods)

    flush_dump_reply_dtos(inputfile)
def generate_callbacks(func_list, base_package, plugin_package, plugin_name, callback_package, dto_package, inputfile):
    """ Generates callback interfaces """
    print "Generating Callback interfaces"

    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_ignored(func['name']) or 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

        if util.is_reply(camel_case_name_with_suffix):
            camel_case_name = util.remove_reply_suffix(camel_case_name_with_suffix)
            callback_type = "JVppCallback"
        else:
            camel_case_name_with_suffix = util.add_notification_suffix(camel_case_name_with_suffix)
            camel_case_name = camel_case_name_with_suffix
            callback_type = "JVppNotificationCallback"

        callbacks.append("{0}.{1}.{2}".format(plugin_package, callback_package, camel_case_name + callback_suffix))
        callback_path = os.path.join(callback_package, camel_case_name + 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 + 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()
def generate_callback(func_list, base_package, plugin_package, plugin_name,
                      dto_package, callback_package, notification_package,
                      callback_facade_package, inputfile):
    callbacks = []
    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):
            continue

        if util.is_reply(camel_case_name_with_suffix):
            callbacks.append(
                jvpp_facade_callback_method_template.substitute(
                    plugin_package=plugin_package,
                    dto_package=dto_package,
                    callback_package=callback_package,
                    callback=util.remove_reply_suffix(
                        camel_case_name_with_suffix) +
                    callback_gen.callback_suffix,
                    callback_dto=camel_case_name_with_suffix))

        if util.is_notification(func["name"]):
            with_notification_suffix = util.add_notification_suffix(
                camel_case_name_with_suffix)
            callbacks.append(
                jvpp_facade_callback_notification_method_template.substitute(
                    plugin_package=plugin_package,
                    dto_package=dto_package,
                    callback_package=callback_package,
                    callback=with_notification_suffix +
                    callback_gen.callback_suffix,
                    callback_dto=with_notification_suffix))

    jvpp_file = open(
        os.path.join(callback_facade_package,
                     "CallbackJVpp%sFacadeCallback.java" % plugin_name), 'w')
    jvpp_file.write(
        jvpp_facade_callback_template.substitute(
            inputfile=inputfile,
            base_package=base_package,
            plugin_package=plugin_package,
            plugin_name=plugin_name,
            dto_package=dto_package,
            notification_package=notification_package,
            callback_package=callback_package,
            methods="".join(callbacks),
            callback_facade_package=callback_facade_package))
    jvpp_file.flush()
    jvpp_file.close()
Exemple #9
0
def generate_callbacks(func_list, base_package, callback_package, dto_package,
                       inputfile):
    """ Generates callback interfaces """
    print "Generating Callback interfaces"

    if not os.path.exists(callback_package):
        raise Exception("%s folder is missing" % callback_package)

    callbacks = []
    for func in func_list:

        if util.is_notification(func['name']) or util.is_ignored(func['name']):
            # FIXME handle notifications
            continue

        camel_case_name_with_suffix = util.underscore_to_camelcase_upper(
            func['name'])
        if not util.is_reply(camel_case_name_with_suffix):
            continue

        camel_case_name = util.remove_reply_suffix(camel_case_name_with_suffix)
        callbacks.append("{0}.{1}.{2}".format(
            base_package, callback_package, camel_case_name + callback_suffix))
        callback_path = os.path.join(
            callback_package, camel_case_name + callback_suffix + ".java")
        callback_file = open(callback_path, 'w')

        reply_type = "%s.%s.%s" % (base_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 + callback_suffix,
                callback_method=method,
                base_package=base_package,
                callback_package=callback_package))
        callback_file.flush()
        callback_file.close()

    callback_file = open(
        os.path.join(callback_package, "JVppGlobalCallback.java"), 'w')
    callback_file.write(
        global_callback_template.substitute(inputfile=inputfile,
                                            callbacks=", ".join(callbacks),
                                            base_package=base_package,
                                            callback_package=callback_package))
    callback_file.flush()
    callback_file.close()
Exemple #10
0
def generate_callbacks(func_list, base_package, callback_package, dto_package, inputfile):
    """ Generates callback interfaces """
    print "Generating Callback interfaces"

    if not os.path.exists(callback_package):
        raise Exception("%s folder is missing" % callback_package)

    callbacks = []
    for func in func_list:

        if util.is_ignored(func['name']):
            continue

        camel_case_name_with_suffix = util.underscore_to_camelcase_upper(func['name'])
        if not util.is_reply(camel_case_name_with_suffix) and not util.is_notification(func['name']):
            continue

        if util.is_reply(camel_case_name_with_suffix):
            camel_case_name = util.remove_reply_suffix(camel_case_name_with_suffix)
            callback_type = "JVppCallback"
        else:
            camel_case_name_with_suffix = util.add_notification_suffix(camel_case_name_with_suffix)
            camel_case_name = camel_case_name_with_suffix
            callback_type = "JVppNotificationCallback"

        callbacks.append("{0}.{1}.{2}".format(base_package, callback_package, camel_case_name + callback_suffix))
        callback_path = os.path.join(callback_package, camel_case_name + callback_suffix + ".java")
        callback_file = open(callback_path, 'w')

        reply_type = "%s.%s.%s" % (base_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 + callback_suffix,
                                         callback_method=method,
                                         base_package=base_package,
                                         callback_package=callback_package,
                                         callback_type=callback_type))
        callback_file.flush()
        callback_file.close()

    callback_file = open(os.path.join(callback_package, "JVppGlobalCallback.java"), 'w')
    callback_file.write(global_callback_template.substitute(inputfile=inputfile,
                                                            callbacks=", ".join(callbacks),
                                                            base_package=base_package,
                                                            callback_package=callback_package))
    callback_file.flush()
    callback_file.close()
Exemple #11
0
def generate_callback(func_list, base_package, plugin_package, plugin_name, dto_package, callback_package, notification_package, future_facade_package, inputfile):
    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).
        if util.is_details(camel_case_name_with_suffix):
            # Callbacks for detail messages that append replies to a list.
            camel_case_method_name = util.underscore_to_camelcase(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,
                                                                                     callback_dto=camel_case_name_with_suffix,
                                                                                     callback_dto_field=camel_case_method_name,
                                                                                     callback_dto_reply_dump=camel_case_reply_name + dto_gen.dump_dto_suffix,
                                                                                     future_package=future_facade_package))
        elif util.is_reply(camel_case_name_with_suffix):
            request_dto = util.remove_reply_suffix(util.underscore_to_camelcase_upper(func['name']))
            callbacks.append(jvpp_facade_callback_method_template.substitute(base_package=base_package,
                                                                             plugin_package=plugin_package,
                                                                             dto_package=dto_package,
                                                                             callback_dto=camel_case_name_with_suffix,
                                                                             request_dto=request_dto))
        else:
            callbacks.append(jvpp_facade_callback_notification_method_template.substitute(plugin_package=plugin_package,
                                                                                          dto_package=dto_package,
                                                                                          callback_dto=camel_case_name_with_suffix))

    jvpp_file = open(os.path.join(future_facade_package, "FutureJVpp%sFacadeCallback.java" % plugin_name), 'w')
    jvpp_file.write(jvpp_facade_callback_template.substitute(inputfile=inputfile,
                                                             base_package=base_package,
                                                             plugin_package=plugin_package,
                                                             plugin_name=plugin_name,
                                                             dto_package=dto_package,
                                                             notification_package=notification_package,
                                                             callback_package=callback_package,
                                                             methods="".join(callbacks),
                                                             future_package=future_facade_package))
    jvpp_file.flush()
    jvpp_file.close()
Exemple #12
0
def generate_dump_reply_dto(request_dto_name, base_package, dto_package, camel_case_dto_name, camel_case_method_name,
                            func):
    base_type = "JVppReplyDump<%s.%s.%s, %s.%s.%s>" % (
        base_package, dto_package, util.remove_reply_suffix(camel_case_dto_name) + "Dump",
        base_package, dto_package, camel_case_dto_name)
    fields = "    public java.util.List<%s> %s = new java.util.ArrayList<>();" % (camel_case_dto_name, camel_case_method_name)
    cls_name = camel_case_dto_name + dump_dto_suffix

    # In case of already existing artificial reply dump DTO, just update it
    # Used for sub-dump dtos
    if request_dto_name in dump_reply_artificial_dtos.keys():
        dump_reply_artificial_dtos[request_dto_name]['fields'] = \
            dump_reply_artificial_dtos[request_dto_name]['fields'] + '\n' + fields
    else:
        dump_reply_artificial_dtos[request_dto_name] = ({'docs': util.api_message_to_javadoc(func),
                                                         'cls_name': cls_name,
                                                         'fields': fields,
                                                         'methods': "",
                                                         'base_package': base_package,
                                                         'base_type': base_type,
                                                         'dto_package': dto_package,
                                                         })
Exemple #13
0
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)
Exemple #14
0
def generate_jvpp(func_list, base_package, plugin_package, plugin_name,
                  dto_package, callback_package, notification_package,
                  future_facade_package, inputfile):
    """ Generates JVpp interface and JNI implementation """
    print "Generating JVpp future facade"

    if not os.path.exists(future_facade_package):
        os.mkdir(future_facade_package)

    methods = []
    methods_impl = []
    callbacks = []
    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):
            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'])

        if not util.is_notification(func["name"]):
            camel_case_request_method_name = util.remove_reply_suffix(
                util.underscore_to_camelcase(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'])
                callbacks.append(
                    jvpp_facade_details_callback_method_template.substitute(
                        base_package=base_package,
                        plugin_package=plugin_package,
                        dto_package=dto_package,
                        callback_dto=camel_case_name_with_suffix,
                        callback_dto_field=camel_case_method_name,
                        callback_dto_reply_dump=camel_case_reply_name +
                        dto_gen.dump_dto_suffix,
                        future_package=future_facade_package))

                methods.append(
                    future_jvpp_method_template.substitute(
                        plugin_package=plugin_package,
                        dto_package=dto_package,
                        method_name=camel_case_request_method_name +
                        util.underscore_to_camelcase_upper(util.dump_suffix),
                        reply_name=camel_case_reply_name +
                        dto_gen.dump_dto_suffix,
                        request_name=util.remove_reply_suffix(
                            camel_case_reply_name) +
                        util.underscore_to_camelcase_upper(util.dump_suffix)))
                methods_impl.append(
                    future_jvpp_dump_method_impl_template.substitute(
                        plugin_package=plugin_package,
                        dto_package=dto_package,
                        method_name=camel_case_request_method_name +
                        util.underscore_to_camelcase_upper(util.dump_suffix),
                        reply_name=camel_case_reply_name +
                        dto_gen.dump_dto_suffix,
                        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)

                methods.append(
                    future_jvpp_method_template.substitute(
                        plugin_package=plugin_package,
                        dto_package=dto_package,
                        method_name=camel_case_request_method_name,
                        reply_name=camel_case_name_with_suffix,
                        request_name=request_name))
                methods_impl.append(
                    future_jvpp_method_impl_template.substitute(
                        plugin_package=plugin_package,
                        dto_package=dto_package,
                        method_name=camel_case_request_method_name,
                        reply_name=camel_case_name_with_suffix,
                        request_name=request_name))

                callbacks.append(
                    jvpp_facade_callback_method_template.substitute(
                        base_package=base_package,
                        plugin_package=plugin_package,
                        dto_package=dto_package,
                        callback_dto=camel_case_name_with_suffix))

        if util.is_notification(func["name"]):
            callbacks.append(
                jvpp_facade_callback_notification_method_template.substitute(
                    plugin_package=plugin_package,
                    dto_package=dto_package,
                    callback_dto=util.add_notification_suffix(
                        camel_case_name_with_suffix)))

    jvpp_file = open(
        os.path.join(future_facade_package,
                     "FutureJVpp%sFacadeCallback.java" % plugin_name), 'w')
    jvpp_file.write(
        jvpp_facade_callback_template.substitute(
            inputfile=inputfile,
            base_package=base_package,
            plugin_package=plugin_package,
            plugin_name=plugin_name,
            dto_package=dto_package,
            notification_package=notification_package,
            callback_package=callback_package,
            methods="".join(callbacks),
            future_package=future_facade_package))
    jvpp_file.flush()
    jvpp_file.close()

    jvpp_file = open(
        os.path.join(future_facade_package, "FutureJVpp%s.java" % plugin_name),
        'w')
    jvpp_file.write(
        future_jvpp_template.substitute(
            inputfile=inputfile,
            base_package=base_package,
            plugin_package=plugin_package,
            plugin_name=plugin_name,
            notification_package=notification_package,
            methods="".join(methods),
            future_package=future_facade_package))
    jvpp_file.flush()
    jvpp_file.close()

    jvpp_file = open(
        os.path.join(future_facade_package,
                     "FutureJVpp%sFacade.java" % plugin_name), 'w')
    jvpp_file.write(
        future_jvpp_facade_template.substitute(
            inputfile=inputfile,
            base_package=base_package,
            plugin_package=plugin_package,
            plugin_name=plugin_name,
            dto_package=dto_package,
            notification_package=notification_package,
            methods="".join(methods_impl),
            future_package=future_facade_package))
    jvpp_file.flush()
    jvpp_file.close()
Exemple #15
0
def generate_jvpp(func_list, base_package, plugin_package, plugin_name,
                  dto_package, callback_package, notification_package,
                  future_facade_package, inputfile):
    """ Generates JVpp interface and JNI implementation """
    print "Generating JVpp future facade"

    if not os.path.exists(future_facade_package):
        os.mkdir(future_facade_package)

    methods = []
    methods_impl = []

    # Generate methods for sending messages.
    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

        # Process replies instead of requests (optimization).
        if not util.is_reply(camel_case_name_with_suffix):
            # Do not generate send methods for messages that do not have replies.
            continue

        camel_case_request_method_name = util.remove_reply_suffix(
            util.underscore_to_camelcase(func['name']))
        if util.is_details(camel_case_name_with_suffix):
            camel_case_reply_name = util.underscore_to_camelcase_upper(
                func['name'])
            methods.append(
                future_jvpp_method_template.substitute(
                    plugin_package=plugin_package,
                    dto_package=dto_package,
                    method_name=camel_case_request_method_name +
                    util.underscore_to_camelcase_upper(util.dump_suffix),
                    reply_name=camel_case_reply_name + dto_gen.dump_dto_suffix,
                    request_name=util.remove_reply_suffix(
                        camel_case_reply_name) +
                    util.underscore_to_camelcase_upper(util.dump_suffix)))
            methods_impl.append(
                future_jvpp_dump_method_impl_template.substitute(
                    plugin_package=plugin_package,
                    dto_package=dto_package,
                    method_name=camel_case_request_method_name +
                    util.underscore_to_camelcase_upper(util.dump_suffix),
                    reply_name=camel_case_reply_name + dto_gen.dump_dto_suffix,
                    request_name=util.remove_reply_suffix(
                        camel_case_reply_name) +
                    util.underscore_to_camelcase_upper(util.dump_suffix)))
        else:
            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,
                    method_name=camel_case_request_method_name,
                    reply_name=camel_case_name_with_suffix,
                    request_name=request_name))
            methods_impl.append(
                future_jvpp_method_impl_template.substitute(
                    plugin_package=plugin_package,
                    dto_package=dto_package,
                    method_name=camel_case_request_method_name,
                    reply_name=camel_case_name_with_suffix,
                    request_name=request_name))

    jvpp_file = open(
        os.path.join(future_facade_package, "FutureJVpp%s.java" % plugin_name),
        'w')
    jvpp_file.write(
        future_jvpp_template.substitute(
            inputfile=inputfile,
            base_package=base_package,
            plugin_package=plugin_package,
            plugin_name=plugin_name,
            notification_package=notification_package,
            methods="".join(methods),
            future_package=future_facade_package))
    jvpp_file.flush()
    jvpp_file.close()

    jvpp_file = open(
        os.path.join(future_facade_package,
                     "FutureJVpp%sFacade.java" % plugin_name), 'w')
    jvpp_file.write(
        future_jvpp_facade_template.substitute(
            inputfile=inputfile,
            base_package=base_package,
            plugin_package=plugin_package,
            plugin_name=plugin_name,
            dto_package=dto_package,
            notification_package=notification_package,
            methods="".join(methods_impl),
            future_package=future_facade_package))
    jvpp_file.flush()
    jvpp_file.close()

    generate_callback(func_list, base_package, plugin_package, plugin_name,
                      dto_package, callback_package, notification_package,
                      future_facade_package, inputfile)
Exemple #16
0
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 generate_jvpp(func_list, base_package, dto_package, callback_package, notification_package, future_facade_package, inputfile):
    """ Generates JVpp interface and JNI implementation """
    print "Generating JVpp future facade"

    if not os.path.exists(future_facade_package):
        raise Exception("%s folder is missing" % future_facade_package)

    methods = []
    methods_impl = []
    callbacks = []
    for func in func_list:

        if util.is_ignored(func['name']):
            continue

        camel_case_name_with_suffix = util.underscore_to_camelcase_upper(func['name'])
        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'])

        if not util.is_notification(func["name"]):
            camel_case_request_method_name = util.remove_reply_suffix(util.underscore_to_camelcase(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'])
                callbacks.append(jvpp_facade_details_callback_method_template.substitute(base_package=base_package,
                                                                                         dto_package=dto_package,
                                                                                         callback_dto=camel_case_name_with_suffix,
                                                                                         callback_dto_field=camel_case_method_name,
                                                                                         callback_dto_reply_dump=camel_case_reply_name + dto_gen.dump_dto_suffix,
                                                                                         future_package=future_facade_package))

                methods.append(future_jvpp_method_template.substitute(base_package=base_package,
                                                                      dto_package=dto_package,
                                                                      method_name=camel_case_request_method_name +
                                                                                  util.underscore_to_camelcase_upper(util.dump_suffix),
                                                                      reply_name=camel_case_reply_name + dto_gen.dump_dto_suffix,
                                                                      request_name=util.remove_reply_suffix(camel_case_reply_name) +
                                                                                   util.underscore_to_camelcase_upper(util.dump_suffix)))
                methods_impl.append(future_jvpp_method_impl_template.substitute(base_package=base_package,
                                                                                dto_package=dto_package,
                                                                                method_name=camel_case_request_method_name +
                                                                                            util.underscore_to_camelcase_upper(util.dump_suffix),
                                                                                reply_name=camel_case_reply_name + dto_gen.dump_dto_suffix,
                                                                                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)

                methods.append(future_jvpp_method_template.substitute(base_package=base_package,
                                                                      dto_package=dto_package,
                                                                      method_name=camel_case_request_method_name,
                                                                      reply_name=camel_case_name_with_suffix,
                                                                      request_name=request_name))
                methods_impl.append(future_jvpp_method_impl_template.substitute(base_package=base_package,
                                                                                dto_package=dto_package,
                                                                                method_name=camel_case_request_method_name,
                                                                                reply_name=camel_case_name_with_suffix,
                                                                                request_name=request_name))

                # Callback handler is a bit special and a different template has to be used
                if util.is_control_ping(camel_case_name_with_suffix):
                    callbacks.append(jvpp_facade_control_ping_method_template.substitute(base_package=base_package,
                                                                                         dto_package=dto_package,
                                                                                         callback_dto=camel_case_name_with_suffix,
                                                                                         future_package=future_facade_package))
                else:
                    callbacks.append(jvpp_facade_callback_method_template.substitute(base_package=base_package,
                                                                                     dto_package=dto_package,
                                                                                     callback_dto=camel_case_name_with_suffix))

        if util.is_notification(func["name"]):
            callbacks.append(jvpp_facade_callback_notification_method_template.substitute(base_package=base_package,
                                                                                          dto_package=dto_package,
                                                                                          callback_dto=util.add_notification_suffix(camel_case_name_with_suffix)))

    jvpp_file = open(os.path.join(future_facade_package, "FutureJVppFacadeCallback.java"), 'w')
    jvpp_file.write(jvpp_facade_callback_template.substitute(inputfile=inputfile,
                                                             base_package=base_package,
                                                             dto_package=dto_package,
                                                             notification_package=notification_package,
                                                             callback_package=callback_package,
                                                             methods="".join(callbacks),
                                                             future_package=future_facade_package))
    jvpp_file.flush()
    jvpp_file.close()

    jvpp_file = open(os.path.join(future_facade_package, "FutureJVpp.java"), 'w')
    jvpp_file.write(future_jvpp_template.substitute(inputfile=inputfile,
                                                    base_package=base_package,
                                                    methods="".join(methods),
                                                    future_package=future_facade_package))
    jvpp_file.flush()
    jvpp_file.close()

    jvpp_file = open(os.path.join(future_facade_package, "FutureJVppFacade.java"), 'w')
    jvpp_file.write(future_jvpp_facade_template.substitute(inputfile=inputfile,
                                                           base_package=base_package,
                                                           dto_package=dto_package,
                                                           methods="".join(methods_impl),
                                                           future_package=future_facade_package))
    jvpp_file.flush()
    jvpp_file.close()
def generate_callback(func_list, base_package, dto_package, callback_package, notification_package, callback_facade_package, inputfile):
    callbacks = []
    for func in func_list:

        if util.is_ignored(func['name']):
            continue

        camel_case_name_with_suffix = util.underscore_to_camelcase_upper(func['name'])

        if util.is_reply(camel_case_name_with_suffix):
            callbacks.append(jvpp_facade_callback_method_template.substitute(base_package=base_package,
                                                                             dto_package=dto_package,
                                                                             callback_package=callback_package,
                                                                             callback=util.remove_reply_suffix(camel_case_name_with_suffix) + callback_gen.callback_suffix,
                                                                             callback_dto=camel_case_name_with_suffix))

        if util.is_notification(func["name"]):
            with_notification_suffix = util.add_notification_suffix(camel_case_name_with_suffix)
            callbacks.append(jvpp_facade_callback_notification_method_template.substitute(base_package=base_package,
                                                                             dto_package=dto_package,
                                                                             callback_package=callback_package,
                                                                             callback=with_notification_suffix + callback_gen.callback_suffix,
                                                                             callback_dto=with_notification_suffix))

    jvpp_file = open(os.path.join(callback_facade_package, "CallbackJVppFacadeCallback.java"), 'w')
    jvpp_file.write(jvpp_facade_callback_template.substitute(inputfile=inputfile,
                                                             base_package=base_package,
                                                             dto_package=dto_package,
                                                             notification_package=notification_package,
                                                             callback_package=callback_package,
                                                             methods="".join(callbacks),
                                                             callback_facade_package=callback_facade_package))
    jvpp_file.flush()
    jvpp_file.close()