VPP-205: jvpp plugin support.

Splits jvpp into two jars
jvpp-registry.jar - base jvpp functionality
jvpp-core.jar - Java wrapper for vpe.api

Plugins can be generated the same way jvpp-core.jar is.
Example (nsh):
https://gerrit.fd.io/r/#/c/2118/

Change-Id: I2254f90b2c3e423563bb91bf70877979f1e90a7d
Signed-off-by: Marek Gradzki <mgradzki@cisco.com>
diff --git a/vpp-api/java/jvpp/gen/jvppgen/dto_gen.py b/vpp-api/java/jvpp/gen/jvppgen/dto_gen.py
index 426cd96..785e47e 100644
--- a/vpp-api/java/jvpp/gen/jvppgen/dto_gen.py
+++ b/vpp-api/java/jvpp/gen/jvppgen/dto_gen.py
@@ -19,7 +19,7 @@
 import util
 
 dto_template = Template("""
-package $base_package.$dto_package;
+package $plugin_package.$dto_package;
 
 /**
  * <p>This class represents $description.
@@ -39,11 +39,11 @@
 
 send_template = Template("""    @Override
     public int send(final $base_package.JVpp jvpp) throws org.openvpp.jvpp.VppInvocationException {
-        return jvpp.$method_name($args);
+        return (($plugin_package.JVpp${plugin_name})jvpp).$method_name($args);
     }\n""")
 
 
-def generate_dtos(func_list, base_package, dto_package, inputfile):
+def generate_dtos(func_list, base_package, plugin_package, plugin_name, dto_package, inputfile):
     """ Generates dto objects in a dedicated package """
     print "Generating DTOs"
 
@@ -55,7 +55,7 @@
         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']):
+        if util.is_ignored(func['name']) or util.is_control_ping(camel_case_dto_name):
             continue
 
         fields = ""
@@ -72,44 +72,46 @@
         # Generate request/reply or dump/dumpReply even if structure can be used as notification
         if not util.is_just_notification(func["name"]):
             if util.is_reply(camel_case_dto_name):
-                description = "vpe.api reply DTO"
+                description = "reply DTO"
                 request_dto_name = get_request_name(camel_case_dto_name, func['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>" % (base_package, dto_package, request_dto_name + "Dump")
-                    generate_dump_reply_dto(request_dto_name, base_package, dto_package, 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>" % (base_package, dto_package, request_dto_name)
+                    base_type += "JVppReply<%s.%s.%s>" % (plugin_package, dto_package, request_dto_name)
             else:
                 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 = "vpe.api dump request DTO"
+                    description = "dump request DTO"
                 else:
                     base_type += "JVppRequest"
-                    description = "vpe.api request DTO"
+                    description = "request DTO"
 
-            write_dto_file(base_package, base_type, camel_case_dto_name, description, dto_package, dto_path, fields, func,
+            write_dto_file(base_package, plugin_package, base_type, camel_case_dto_name, description, dto_package, dto_path, fields, func,
                            inputfile, methods)
 
         # for structures that are also used as notifications, generate dedicated notification DTO
         if util.is_notification(func["name"]):
             base_type = "JVppNotification"
-            description = "vpe.api notification DTO"
+            description = "notification DTO"
             camel_case_dto_name = util.add_notification_suffix(camel_case_dto_name)
             methods = ""
             dto_path = os.path.join(dto_package, camel_case_dto_name + ".java")
-            write_dto_file(base_package, base_type, camel_case_dto_name, description, dto_package, dto_path, fields, func,
+            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 write_dto_file(base_package, base_type, camel_case_dto_name, description, dto_package, dto_path, fields, func,
+def write_dto_file(base_package, plugin_package, base_type, camel_case_dto_name, description, dto_package, dto_path, fields, func,
                    inputfile, methods):
     dto_file = open(dto_path, 'w')
     dto_file.write(dto_template.substitute(inputfile=inputfile,
@@ -119,6 +121,7 @@
                                            fields=fields,
                                            methods=methods,
                                            base_package=base_package,
+                                           plugin_package=plugin_package,
                                            base_type=base_type,
                                            dto_package=dto_package))
     dto_file.flush()
@@ -141,11 +144,12 @@
                                 dump_reply_artificial_dto['cls_name'] + ".java")
         dto_file = open(dto_path, 'w')
         dto_file.write(dto_template.substitute(inputfile=inputfile,
-                                               description="vpe.api dump reply wrapper",
+                                               description="dump reply wrapper",
                                                docs=dump_reply_artificial_dto['docs'],
                                                cls_name=dump_reply_artificial_dto['cls_name'],
                                                fields=dump_reply_artificial_dto['fields'],
                                                methods=dump_reply_artificial_dto['methods'],
+                                               plugin_package=dump_reply_artificial_dto['plugin_package'],
                                                base_package=dump_reply_artificial_dto['base_package'],
                                                base_type=dump_reply_artificial_dto['base_type'],
                                                dto_package=dump_reply_artificial_dto['dto_package']))
@@ -153,11 +157,11 @@
         dto_file.close()
 
 
-def generate_dump_reply_dto(request_dto_name, base_package, dto_package, camel_case_dto_name, camel_case_method_name,
+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>" % (
-        base_package, dto_package, util.remove_reply_suffix(camel_case_dto_name) + "Dump",
-        base_package, dto_package, camel_case_dto_name)
+        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
 
@@ -171,6 +175,7 @@
                                                          'cls_name': cls_name,
                                                          'fields': fields,
                                                          'methods': "",
+                                                         'plugin_package': plugin_package,
                                                          'base_package': base_package,
                                                          'base_type': base_type,
                                                          'dto_package': dto_package,