Use java_import_external() for maven artifacts to allow usage of web proxy

Change-Id: I5c116ce33d35e51174b14c5022a5a9f183d01ecd
diff --git a/tools/build/libgen/pom.xml b/tools/build/libgen/pom.xml
index 057dfa7..9288bb3 100644
--- a/tools/build/libgen/pom.xml
+++ b/tools/build/libgen/pom.xml
@@ -29,7 +29,7 @@
     <groupId>org.onosproject</groupId>
     <artifactId>onos-libgen</artifactId>
     <packaging>jar</packaging>
-    <version>1.3-SNAPSHOT</version>
+    <version>1.6-SNAPSHOT</version>
 
     <description>Third-party library generator for Buck and Bazel workspaces</description>
     <url>http://onosproject.org/</url>
diff --git a/tools/build/libgen/src/main/java/org/onosproject/libgen/BuckArtifact.java b/tools/build/libgen/src/main/java/org/onosproject/libgen/BuckArtifact.java
index be336c8..0af9255 100644
--- a/tools/build/libgen/src/main/java/org/onosproject/libgen/BuckArtifact.java
+++ b/tools/build/libgen/src/main/java/org/onosproject/libgen/BuckArtifact.java
@@ -76,13 +76,16 @@
         return generateForBazel;
     }
 
+    String httpUrl() {
+        return "";
+    }
 
     String mavenCoords() {
         return null;
     }
 
     String bazelExport() {
-        return "@" + jarTarget() + "//jar";
+        return "@" + jarTarget() + "//:" + jarTarget();
     }
 
     private boolean isJar() {
@@ -118,29 +121,25 @@
     }
 
     String getBazelMavenJarFragment() {
-        if (isJar() && mavenCoords() != null) {
-            String repo = extractRepo();
-            String repoAttribute = "";
-            if (!"".equals(repo)) {
-                repoAttribute = "        repository = \"" + repo + "\",\n";
-            }
-            String format =
-                    "\n    native.maven_jar(\n" +
-                            "        name = \"%s\",\n" +
-                            "        artifact = \"%s\",\n" +
-                            "        sha1 = \"%s\",\n" +
-                            "%s" +
-                            "    )\n";
-            return String.format(format, jarTarget(), mavenCoords(), sha, repoAttribute);
-        } else {
-            String format =
-                    "\n    native.http_file(\n" +
-                            "        name = \"%s\",\n" +
-                            "        url = \"%s\",\n" +
-                            "        sha256 = \"%s\",\n" +
-                            "    )\n";
-            return String.format(format, jarTarget(), url(), sha);
-        }
+        System.out.println(name + " == " + httpUrl());
+
+        //String repo = extractRepo();
+        //String repoAttribute = "";
+        //if (!"".equals(repo)) {
+        //    repoAttribute = "            repository = \"" + repo + "\",\n";
+        //}
+
+        String sha256 = BuckLibGenerator.getHttpSha256(name, httpUrl());
+        String format = "\n" +
+                "    if \"%s\" not in native.existing_rules():\n" +
+                "        java_import_external(\n" +
+                "            name = \"%s\",\n" +
+                "            jar_sha256 = \"%s\",\n" +
+                "            licenses = [\"notice\"],\n" +
+                "            jar_urls = [\"%s\"]," +
+                "        )";
+
+        return String.format(format, jarTarget(), jarTarget(), sha256, httpUrl());
     }
 
     public String getBuckFragment() {
@@ -190,6 +189,11 @@
         String url(boolean withClassifier) {
             return url;
         }
+
+        @Override
+        String httpUrl() {
+            return url;
+        }
     }
 
     private static class MavenArtifact extends BuckArtifact {
@@ -221,6 +225,15 @@
         }
 
         @Override
+        String httpUrl() {
+            return "http://repo1.maven.org/maven2/" +
+                    artifact.getGroupId().replace(".", "/") +
+                    "/" + artifact.getArtifactId() +
+                    "/" + artifact.getVersion() +
+                    "/" + artifact.getFile().getName();
+        }
+
+        @Override
         String url(boolean withClassifier) {
             String url = url();
             if (withClassifier && !isOsgiReady()) {
diff --git a/tools/build/libgen/src/main/java/org/onosproject/libgen/BuckLibGenerator.java b/tools/build/libgen/src/main/java/org/onosproject/libgen/BuckLibGenerator.java
index 9355079..538c959 100644
--- a/tools/build/libgen/src/main/java/org/onosproject/libgen/BuckLibGenerator.java
+++ b/tools/build/libgen/src/main/java/org/onosproject/libgen/BuckLibGenerator.java
@@ -247,6 +247,7 @@
                         ")\n\n");
             } else {
                 writer.write("\nload(\"//tools/build/bazel:variables.bzl\", \"ONOS_GROUP_ID\", \"ONOS_VERSION\")\n\n");
+                writer.write("\nload(\"@bazel_tools//tools/build_defs/repo:java.bzl\", \"java_import_external\")\n\n");
             }
 
             libraries.forEach(library -> writer.print(library.getFragment()));
@@ -263,16 +264,15 @@
         }
     }
 
-    String getHttpSha1(String name, String urlStr) {
+    static String getHttpSha1(String name, String urlStr) {
         return getHttpSha(name, urlStr, "SHA-1");
     }
 
-    String getHttpSha256(String name, String urlStr) {
+    static String getHttpSha256(String name, String urlStr) {
         return getHttpSha(name, urlStr, "SHA-256");
     }
 
-    String getHttpSha(String name, String urlStr, String algorithm) {
-        //FIXME need http download cache
+    private static String getHttpSha(String name, String urlStr, String algorithm) {
         try {
             MessageDigest md = MessageDigest.getInstance(algorithm);
             byte[] buffer = new byte[8192];
diff --git a/tools/build/onos-lib-gen b/tools/build/onos-lib-gen
index e3bc403..3a083f8 100755
--- a/tools/build/onos-lib-gen
+++ b/tools/build/onos-lib-gen
@@ -9,7 +9,7 @@
 cd $ONOS_ROOT
 
 REPO=${M2_REPO:-~/.m2/repository}
-VER=1.2
+VER=1.5
 ARTIFACT=org/onosproject/onos-libgen/$VER/onos-libgen-$VER.jar
 JAR=$REPO/$ARTIFACT