@@ -32,7 +32,8 @@ import org.onosproject.net.pi.model.PiCounterId;
3232import org.onosproject.net.pi.model.PiMatchFieldId; 
3333import org.onosproject.net.pi.model.PiTableId;''' 
3434
35- PKG_FMT  =  'package org.onosproject.pipelines.%s.impl.behaviour;' 
35+ PKG_FMT  =  'package %s;' 
36+ DEFAULT_PKG_PATH  =  'org.onosproject.pipelines.%s' 
3637
3738CLASS_OPEN  =  'public final class %s {' 
3839CLASS_CLOSE  =  '}' 
@@ -98,10 +99,10 @@ class ConstantClassGenerator(object):
9899        s1  =  re .sub ('([a-z0-9])([A-Z])' , r'\1_\2' , s1 ).upper ()
99100        return  s1 .replace ('.' , '_' )
100101
101-     def  __init__ (self , base_name ):
102+     def  __init__ (self , base_name ,  pkg_path ):
102103
103104        self .class_name  =  base_name .title () +  'Constants' 
104-         self .package_name  =  PKG_FMT  %  (base_name , )
105+         self .package_name  =  PKG_FMT  %  (pkg_path , )
105106        self .java_doc  =  JAVA_DOC_FMT  %  (base_name , )
106107
107108    def  parse (self , p4info ):
@@ -203,32 +204,45 @@ class ConstantClassGenerator(object):
203204
204205        return  '\n ' .join (lines )
205206
206- 
207+ def  gen_pkg_path (output , base_name ):
208+     if  output  is  not   None :
209+         i  =  output .find ('java/' )
210+         if  i  !=  - 1 :
211+             pkg_path  =  output [i + 5 :]
212+             last_slash  =  pkg_path .rfind ('/' )
213+             pkg_path  =  pkg_path [:last_slash ].replace ('/' ,'.' )
214+             return  pkg_path 
215+     return  DEFAULT_PKG_PATH  %  (base_name , )
207216def  main ():
208217    parser  =  argparse .ArgumentParser (prog = 'onos-gen-p4-constants' ,
209218                                     description = 'ONOS P4Info to Java constant generator.' )
210219    parser .add_argument ('name' , help = 'Name of the constant, will be used as class name' )
211220    parser .add_argument ('p4info' , help = 'P4Info file' )
212221    parser .add_argument ('-o' , '--output' , help = 'output path' , default = '-' )
222+     parser .add_argument ('--with-package-path' , help = 'Specify the java package path' , dest = 'pkg_path' )
213223    args  =  parser .parse_args ()
214224
215225    base_name  =  args .name 
216226    file_name  =  args .p4info 
227+     output  =  args .output 
228+     pkg_path  =  args .pkg_path 
229+     if  pkg_path  is  None :
230+         pkg_path  =  gen_pkg_path (output , base_name )
217231    p4info  =  p4info_pb2 .P4Info ()
218232    with  open (file_name , 'r' ) as  intput_file :
219233        s  =  intput_file .read ()
220234        tf .Merge (s , p4info )
221235
222-     gen  =  ConstantClassGenerator (base_name )
236+     gen  =  ConstantClassGenerator (base_name ,  pkg_path )
223237    gen .parse (p4info )
224238
225239    java_code  =  gen .generate_java ()
226240
227-     if  args . output  ==  '-' :
241+     if  output  ==  '-' :
228242        # std output 
229243        print  java_code 
230244    else :
231-         with  open (args . output , 'w' ) as  output_file :
245+         with  open (output , 'w' ) as  output_file :
232246            output_file .write (java_code )
233247
234248
0 commit comments