Fix wrong package path generated for BasicConstants when recompile basic pipeline. The package path will generated from output argument if no with-package-path argument specified

Change-Id: I1e864bc08d2aa855e44a9fb2a80e453941eefa8b
diff --git a/tools/dev/bin/onos-gen-p4-constants b/tools/dev/bin/onos-gen-p4-constants
index 30d706a..07530d6 100755
--- a/tools/dev/bin/onos-gen-p4-constants
+++ b/tools/dev/bin/onos-gen-p4-constants
@@ -32,7 +32,8 @@
 import org.onosproject.net.pi.model.PiMatchFieldId;
 import org.onosproject.net.pi.model.PiTableId;'''
 
-PKG_FMT = 'package org.onosproject.pipelines.%s.impl.behaviour;'
+PKG_FMT = 'package %s;'
+DEFAULT_PKG_PATH = 'org.onosproject.pipelines.%s'
 
 CLASS_OPEN = 'public final class %s {'
 CLASS_CLOSE = '}'
@@ -98,10 +99,10 @@
         s1 = re.sub('([a-z0-9])([A-Z])', r'\1_\2', s1).upper()
         return s1.replace('.', '_')
 
-    def __init__(self, base_name):
+    def __init__(self, base_name, pkg_path):
 
         self.class_name = base_name.title() + 'Constants'
-        self.package_name = PKG_FMT % (base_name, )
+        self.package_name = PKG_FMT % (pkg_path, )
         self.java_doc = JAVA_DOC_FMT % (base_name, )
 
     def parse(self, p4info):
@@ -203,32 +204,45 @@
 
         return '\n'.join(lines)
 
-
+def gen_pkg_path(output, base_name):
+    if output is not None:
+        i = output.find('java/')
+        if i != -1:
+            pkg_path = output[i+5:]
+            last_slash = pkg_path.rfind('/')
+            pkg_path = pkg_path[:last_slash].replace('/','.')
+            return pkg_path
+    return DEFAULT_PKG_PATH % (base_name, )
 def main():
     parser = argparse.ArgumentParser(prog='onos-gen-p4-constants',
                                      description='ONOS P4Info to Java constant generator.')
     parser.add_argument('name', help='Name of the constant, will be used as class name')
     parser.add_argument('p4info', help='P4Info file')
     parser.add_argument('-o', '--output', help='output path', default='-')
+    parser.add_argument('--with-package-path', help='Specify the java package path', dest='pkg_path')
     args = parser.parse_args()
 
     base_name = args.name
     file_name = args.p4info
+    output = args.output
+    pkg_path = args.pkg_path
+    if pkg_path is None:
+        pkg_path = gen_pkg_path(output, base_name)
     p4info = p4info_pb2.P4Info()
     with open(file_name, 'r') as intput_file:
         s = intput_file.read()
         tf.Merge(s, p4info)
 
-    gen = ConstantClassGenerator(base_name)
+    gen = ConstantClassGenerator(base_name, pkg_path)
     gen.parse(p4info)
 
     java_code = gen.generate_java()
 
-    if args.output == '-':
+    if output == '-':
         # std output
         print java_code
     else:
-        with open(args.output, 'w') as output_file:
+        with open(output, 'w') as output_file:
             output_file.write(java_code)