Simplifying rules and providing sensible defaults

Updated cordvtn, dhcp, fwd, onos-api, of-api, onlab-rest, onos-rest, onos-gui

Also, fixed checkstyle error print

Change-Id: I9d6ab76791e8603678079067a3b4e007ca7c4667
diff --git a/bucklets/onos.bucklet b/bucklets/onos.bucklet
index d64ba16..e2e0349 100644
--- a/bucklets/onos.bucklet
+++ b/bucklets/onos.bucklet
@@ -4,21 +4,26 @@
 FORCE_INSTALL=True
 NONE='NONE'
 
-SRC = 'src/main/java/org/onosproject/**/'
-TEST = 'src/test/java/org/onosproject/**/'
+SRC = 'src/main/java/**/'
+TEST = 'src/test/java/**/'
 RESOURCES_ROOT = 'src/main/resources/'
+TEST_RESOURCES_ROOT = 'src/test/resources/'
+
 
 ONOS_GROUP_ID = 'org.onosproject'
 ONOS_VERSION = '1.6.0-SNAPSHOT'
+ONOS_ARTIFACT_BASE = 'onos-'
+
+def _get_name():
+    base_path = get_base_path()
+    return ONOS_ARTIFACT_BASE + base_path.replace('/', '-') #TODO Unix-separator
 
 def osgi_jar(
-    name,
-    srcs,
-    test_srcs = None,
+    name = None,
+    srcs = None,
     group_id = ONOS_GROUP_ID,
     version = ONOS_VERSION,
     deps = [],
-    test_deps = [ '//lib:TEST' ],
     visibility = ['PUBLIC'],
     license = 'NONE',
     description = '',
@@ -27,19 +32,31 @@
     export_packages = '*',
     include_resources = NONE,
     web_context = NONE,
-    resources = None,
+    resources = NONE,
     resources_root = None,
-    test_resources = None,
-    test_resources_root = None,
     **kwargs
     ):
 
+  # if name and _get_name() != name:
+  #     print _get_name(), '!=', name
+  if name is None:
+      name = _get_name()
+
+  if srcs is None:
+      srcs = glob([SRC + '/*.java'])
+
+  if resources == NONE and resources_root is not None:
+      resources = glob([resources_root + '**'])
+  elif resources == NONE:
+      resources = glob([RESOURCES_ROOT + '**'])
+
+  if resources and not resources_root:
+      resources_root = RESOURCES_ROOT
+
   bare_jar_name = name + '-jar'
   osgi_jar_name = name + '-osgi'
   mvn_coords = group_id + ':' + name + ':' + version
 
-  if resources and not resources_root:
-      resources_root = RESOURCES_ROOT
 
   java_library(
       name = bare_jar_name,
@@ -98,7 +115,9 @@
                        '-o $OUT',
                        '-c $(location //tools/build/conf:checkstyle-xml)',
                        ' '.join(srcs) ))
-  error_cmd = '(touch $OUT; cat $OUT | grep "^\[ERROR\]"; exit 1)'
+  error_cmd = ' | '.join(( '( touch $OUT; cat $OUT',
+                           'grep -E "^[^: ]*:\d+:\d+: error:"',
+                           'sed "s#^.*__srcs/#%s:#g" ; exit 1)' % name, ))
   cmd = ' || '.join((chk_cmd, error_cmd))
   genrule(
     name = name + '-checkstyle',
@@ -126,18 +145,48 @@
     visibility = visibility,
   )
 
+def osgi_jar_with_tests(
+        name = None,
+        deps = [],
+        test_srcs = None,
+        test_deps = [ '//lib:TEST' ],
+        test_resources = None,
+        test_resources_root = None,
+        visibility = [ 'PUBLIC' ],
+        **kwargs
+    ):
+
+  if name is None:
+      name = _get_name()
+
+  osgi_jar(name = name,
+           deps = deps,
+           visibility = visibility,
+           **kwargs)
 
   if test_resources and not test_resources_root:
-      test_resources_root = RESOURCES_ROOT
+      test_resources_root = TEST_RESOURCES_ROOT
+  if test_resources_root and not test_resources:
+      test_resources = glob([test_resources_root + '**'])
+  if not test_resources and not test_resources_root:
+      test_resources = glob([TEST_RESOURCES_ROOT + '**'])
+      if test_resources:
+        test_resources_root = TEST_RESOURCES_ROOT
 
-  if test_srcs is not None:
-      java_test(
-        name = 'tests',
-        srcs = test_srcs,
-        deps = deps +
-               test_deps +
-               [':' + bare_jar_name],
-        source_under_test = [':' + bare_jar_name],
-        resources = test_resources,
-        resources_root = test_resources_root
-        )
+  if test_srcs is None:
+      test_srcs = glob([TEST + '/*.java'])
+
+  if not test_srcs:
+          print "Generating test rule for %s, but there are no tests." % name
+
+  java_test(
+    name = name + '-tests',
+    srcs = test_srcs,
+    deps = deps +
+           test_deps +
+           [':' + name + '-jar'],
+    source_under_test = [':' + name + '-jar'],
+    resources = test_resources,
+    resources_root = test_resources_root,
+    visibility = visibility
+    )
diff --git a/bucklets/onos_app.bucklet b/bucklets/onos_app.bucklet
index ba76649..d95427e 100644
--- a/bucklets/onos_app.bucklet
+++ b/bucklets/onos_app.bucklet
@@ -1,10 +1,24 @@
 ONOS_ORIGIN = 'ON.Lab'
 ONOS_VERSION = '1.6.0-SNAPSHOT'
 DEFAULT_APP_CATEGORY = 'Utility'
+ONOS_ARTIFACT_BASE = 'onos-'
+APP_PREFIX = 'org.onosproject.'
+
+import os.path
+
+# FIXME Factor this into common place
+def _get_name():
+    base_path = get_base_path()
+    return ONOS_ARTIFACT_BASE + base_path.replace('/', '-') #TODO Unix-separator
+
+def _get_app_name():
+    base_path = get_base_path()
+    return APP_PREFIX + os.path.basename(base_path)
 
 def onos_app(
-        app_name,
-        title,
+        app_name = None,
+        name = None,
+        title = None,
         version = ONOS_VERSION,
         origin = ONOS_ORIGIN,
         category = DEFAULT_APP_CATEGORY,
@@ -14,13 +28,31 @@
         feature_coords = None,
         required_features = [ 'onos-api' ],
         required_apps = [],
-        included_bundles = [],
+        included_bundles = None,
         excluded_bundles = [],
+        visibility = [ 'PUBLIC' ],
         **kwargs):
+    if name is None:
+        name = _get_name()
+
+    if app_name is None:
+        app_name = _get_app_name()
+
+    if title is None:
+        print "Missing title for %s" % _get_name()
+        title = _get_app_name()
+
+    if included_bundles is None:
+        target = ':' + _get_name()
+        included_bundles = [ target ]
 
     if not feature_coords and len(included_bundles) == 1:
         feature_coords = '$(maven_coords %s)' % included_bundles[0]
 
+    if not feature_coords:
+        print 'Missing maven coordinates for %s app feature.' % name
+        return
+
     args = [ '-n %s' % feature_coords,
              '-v %s' % version,
              '-t "%s"' % title,
@@ -36,26 +68,27 @@
 
     cmd = '$(exe //buck-tools:onos-app-writer) -F ' + ' '.join(args) + ' > $OUT'
     genrule(
-        name = 'app-features',
+        name = name + '-features',
         bash = cmd,
         out = 'features.xml',
         visibility = [],
     )
     cmd = '$(exe //buck-tools:onos-app-writer) -A ' + ' '.join(args) + ' > $OUT'
     genrule(
-        name = 'app-xml',
+        name = name + '-app-xml',
         bash = cmd,
         out = 'app.xml',
         visibility = [],
     )
 
     sources = [
-        '$(location :app-features) %s' % feature_coords,
-        '$(location :app-xml) NONE',
+        '$(location :%s-features) %s' % (name, feature_coords),
+        '$(location :%s-app-xml) NONE' % name,
     ]
     sources += ['$(location %s) $(maven_coords %s)' % (i, i) for i in included_bundles]
     genrule(
-        name = 'app-oar',
+        name = name + '-oar',
         out = 'app.oar',
-        bash = '$(exe //buck-tools:onos-app-oar) $OUT ' + ' '.join(sources)
+        bash = '$(exe //buck-tools:onos-app-oar) $OUT ' + ' '.join(sources),
+        visibility = visibility,
     )