Updating buck plugin to track web resources

Also, renaming onosjar to onos.

Change-Id: Ia726772462b0bc997b92dbcb4bdc477ee7b590b0
diff --git a/bucklets/onos.bucklet b/bucklets/onos.bucklet
index cf8d276..7f46235 100644
--- a/bucklets/onos.bucklet
+++ b/bucklets/onos.bucklet
@@ -106,9 +106,9 @@
     dynamicimport_packages = '',
     export_packages = '*',
     package_name_root = 'org.onosproject',
-    include_resources = NONE,
+    include_resources = {},
     web_context = NONE,
-    api_title = NONE,
+    api_title = None,
     api_version = NONE,
     api_package = NONE,
     api_description = NONE,
@@ -134,10 +134,6 @@
   if resources and not resources_root:
       resources_root = RESOURCES_ROOT
 
-  if api_title != NONE:
-      r = 'WEB-INF/classes/apidoc/swagger.json=swagger.json'
-      include_resources = include_resources + ',' + r if include_resources != NONE else r
-
   mvn_coords = group_id + ':' + name + ':' + version
 
   onos_jar(
diff --git a/tools/build/buck-plugin/BUCK b/tools/build/buck-plugin/BUCK
index 57959a4..49be7a9 100644
--- a/tools/build/buck-plugin/BUCK
+++ b/tools/build/buck-plugin/BUCK
@@ -31,7 +31,7 @@
 )
 
 java_binary(
-  name = 'onosjar',
+  name = 'onos',
   deps = [':lib'],
   visibility = ['PUBLIC'],
 )
\ No newline at end of file
diff --git a/tools/build/buck-plugin/buck-plugin-install b/tools/build/buck-plugin/buck-plugin-install
index 4d71039..9dc44d7 100755
--- a/tools/build/buck-plugin/buck-plugin-install
+++ b/tools/build/buck-plugin/buck-plugin-install
@@ -1,9 +1,11 @@
 #!/bin/bash
 
-PLUGINS=$ONOS_ROOT/bucklets/plugins
+PLUGINS=$ONOS_ROOT/bin/plugins
+
+set -e
 
 # Build it first
-pluginJar=$(NO_BUCKD=1 buck build //tools/build/buck-plugin:onosjar --no-cache --show-output | grep onosjar.jar | cut -d\  -f2)
+pluginJar=$(NO_BUCKD=1 buck build //tools/build/buck-plugin:onos --no-cache --show-output | grep onos.jar | cut -d\  -f2)
 
 # Then install it
 mkdir -p $PLUGINS
diff --git a/tools/build/buck-plugin/src/main/java/org/onosproject/onosjar/OnosJar.java b/tools/build/buck-plugin/src/main/java/org/onosproject/onosjar/OnosJar.java
index dde1902..6885c07 100644
--- a/tools/build/buck-plugin/src/main/java/org/onosproject/onosjar/OnosJar.java
+++ b/tools/build/buck-plugin/src/main/java/org/onosproject/onosjar/OnosJar.java
@@ -17,20 +17,21 @@
 
 import com.facebook.buck.jvm.java.CompileToJarStepFactory;
 import com.facebook.buck.jvm.java.DefaultJavaLibrary;
-import com.facebook.buck.jvm.java.HasClasspathEntries;
 import com.facebook.buck.jvm.java.HasMavenCoordinates;
 import com.facebook.buck.jvm.java.JavaLibrary;
 import com.facebook.buck.jvm.java.MavenPublishable;
 import com.facebook.buck.model.BuildTarget;
+import com.facebook.buck.model.Pair;
 import com.facebook.buck.rules.AddToRuleKey;
 import com.facebook.buck.rules.BuildRule;
 import com.facebook.buck.rules.BuildRuleParams;
 import com.facebook.buck.rules.SourcePath;
 import com.facebook.buck.rules.SourcePathResolver;
 import com.google.common.base.Optional;
-import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.ImmutableSortedMap;
 import com.google.common.collect.ImmutableSortedSet;
 
 import java.nio.file.Path;
@@ -59,6 +60,9 @@
     @AddToRuleKey
     final Optional<String> apiDescription;
 
+    @AddToRuleKey
+    final Optional<ImmutableSortedMap<String, SourcePath>> includedResources;
+
     private final ImmutableSortedSet<HasMavenCoordinates> mavenDeps;
 
     public OnosJar(BuildRuleParams params,
@@ -82,7 +86,8 @@
                    Optional<String> apiTitle,
                    Optional<String> apiVersion,
                    Optional<String> apiPackage,
-                   Optional<String> apiDescription) {
+                   Optional<String> apiDescription,
+                   Optional<ImmutableSortedMap<String, SourcePath>> includedResources) {
         super(params, resolver, srcs, resources, generatedSourceFolder,
               proguardConfig, postprocessClassesCommands, exportedDeps,
               providedDeps, abiJar, trackClassUsage, additionalClasspathEntries,
@@ -93,6 +98,7 @@
         this.apiVersion = apiVersion;
         this.apiPackage = apiPackage;
         this.apiDescription = apiDescription;
+        this.includedResources = includedResources;
         this.mavenDeps = computeMavenDeps();
     }
 
diff --git a/tools/build/buck-plugin/src/main/java/org/onosproject/onosjar/OnosJarDescription.java b/tools/build/buck-plugin/src/main/java/org/onosproject/onosjar/OnosJarDescription.java
index 6d1ee7e..6ba61cf 100644
--- a/tools/build/buck-plugin/src/main/java/org/onosproject/onosjar/OnosJarDescription.java
+++ b/tools/build/buck-plugin/src/main/java/org/onosproject/onosjar/OnosJarDescription.java
@@ -34,6 +34,7 @@
 import com.facebook.buck.model.Flavor;
 import com.facebook.buck.model.Flavored;
 import com.facebook.buck.model.ImmutableFlavor;
+import com.facebook.buck.model.Pair;
 import com.facebook.buck.parser.NoSuchBuildTargetException;
 import com.facebook.buck.rules.BuildRule;
 import com.facebook.buck.rules.BuildRuleParams;
@@ -53,8 +54,12 @@
 import com.google.common.collect.ImmutableSortedMap;
 import com.google.common.collect.ImmutableSortedSet;
 import com.google.common.collect.Iterables;
+import com.google.common.collect.Lists;
 
 import java.nio.file.Path;
+import java.util.List;
+import java.util.function.BinaryOperator;
+import java.util.stream.Collectors;
 
 import static com.facebook.buck.jvm.common.ResourceValidator.validateResources;
 
@@ -198,6 +203,19 @@
 
         ImmutableSortedSet<BuildRule> exportedDeps = resolver.getAllRules(args.exportedDeps.get());
 
+        // Build the resources string
+        List<String> resourceMappings = Lists.newArrayList();
+
+        if (args.includeResources.isPresent()) {
+            args.includeResources.get().entrySet().forEach(p ->
+                resourceMappings.add(String.format("%s=%s", p.getKey(), p.getValue())));
+        }
+
+        if (args.apiTitle.isPresent()) {
+            resourceMappings.add("WEB-INF/classes/apidoc/swagger.json=swagger.json");
+        }
+
+        Optional<String> includedResourcesString = Optional.of(String.join(",", resourceMappings));
         final DefaultJavaLibrary defaultJavaLibrary;
         if (!flavors.contains(NON_OSGI_JAR)) {
             defaultJavaLibrary =
@@ -232,7 +250,7 @@
                                                            args.apiPackage, args.apiDescription, args.resources,
                                                            args.groupId, args.bundleName, args.bundleVersion,
                                                            args.bundleLicense, args.bundleDescription, args.importPackages,
-                                                           args.exportPackages, args.includeResources, args.dynamicimportPackages),
+                                                           args.exportPackages, includedResourcesString, args.dynamicimportPackages),
                                     args.resourcesRoot,
                                     args.manifestFile,
                                     args.mavenCoords,
@@ -242,7 +260,8 @@
                                     args.apiTitle,
                                     args.apiVersion,
                                     args.apiPackage,
-                                    args.apiDescription));
+                                    args.apiDescription,
+                                    args.includeResources));
         } else {
             defaultJavaLibrary =
                     resolver.addToIndex(
@@ -309,7 +328,7 @@
 
         public Optional<String> importPackages;
         public Optional<String> exportPackages;
-        public Optional<String> includeResources;
+        public Optional<ImmutableSortedMap<String, SourcePath>> includeResources;
         public Optional<String> dynamicimportPackages;
     }
 }
\ No newline at end of file
diff --git a/web/gui/BUCK b/web/gui/BUCK
index c353c60..88181de 100644
--- a/web/gui/BUCK
+++ b/web/gui/BUCK
@@ -19,21 +19,21 @@
     '//core/api:onos-api-tests',
 ]
 
-RESOURCES = [
-    'WEB-INF/classes/index.html=src/main/webapp/index.html',
-    'WEB-INF/classes/login.html=src/main/webapp/login.html',
-    'WEB-INF/classes/error.html=src/main/webapp/error.html',
-    'WEB-INF/classes/not-ready.html=src/main/webapp/not-ready.html',
-    'WEB-INF/classes/onos.js=src/main/webapp/onos.js',
-    'WEB-INF/classes/nav.html=src/main/webapp/nav.html',
-    'WEB-INF/classes/app/view=src/main/webapp/app/view',
-    'WEB-INF/classes/raw=src/main/webapp/raw',
-]
+RESOURCES = {
+    'WEB-INF/classes/index.html': 'src/main/webapp/index.html',
+    'WEB-INF/classes/login.html': 'src/main/webapp/login.html',
+    'WEB-INF/classes/error.html': 'src/main/webapp/error.html',
+    'WEB-INF/classes/not-ready.html': 'src/main/webapp/not-ready.html',
+    'WEB-INF/classes/onos.js': 'src/main/webapp/onos.js',
+    'WEB-INF/classes/nav.html': 'src/main/webapp/nav.html',
+    'WEB-INF/classes/app/view': 'src/main/webapp/app/view',
+    'WEB-INF/classes/raw': 'src/main/webapp/raw',
+}
 
 osgi_jar_with_tests (
     name = 'onos-gui',
     deps = COMPILE_DEPS,
     test_deps = TEST_DEPS,
-    include_resources = ','.join(RESOURCES),
+    include_resources = RESOURCES,
     web_context = '/onos/ui',
 )