This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git


The following commit(s) were added to refs/heads/main by this push:
     new 825b4356cb3 CAMEL-18173: camel-jbang - Add option to turn off download 
over the internet
825b4356cb3 is described below

commit 825b4356cb3b16f5542fb05d652132281a872e92
Author: Claus Ibsen <[email protected]>
AuthorDate: Wed Jun 8 12:32:03 2022 +0200

    CAMEL-18173: camel-jbang - Add option to turn off download over the internet
---
 .../apache/camel/dsl/jbang/core/commands/Run.java  | 11 ++++
 .../org/apache/camel/main/DownloaderHelper.java    | 13 +++-
 .../java/org/apache/camel/main/KameletMain.java    | 74 ++++++++++++++--------
 .../src/main/resources/localGrapeConfig.xml        | 37 +++++++++++
 4 files changed, 105 insertions(+), 30 deletions(-)

diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Run.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Run.java
index 3fb0f8f7e18..cc659290454 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Run.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Run.java
@@ -105,6 +105,12 @@ class Run extends CamelCommand {
     @Option(names = {"--repos"}, description = "Additional maven repositories 
for download on-demand (Use commas to separate multiple repositories).")
     String repos;
 
+    @Option(names = {"--download"}, defaultValue = "true", description = 
"Whether to allow automatic downloaded JAR dependencies, over the internet, 
that Camel requires.")
+    boolean download = true;
+
+    @Option(names = {"--downloadVerbose"}, description = "Whether to include 
verbose details when downloading.")
+    boolean downloadVerbose;
+
     @Option(names = { "--name" }, defaultValue = "CamelJBang", description = 
"The name of the Camel application")
     String name;
 
@@ -290,6 +296,9 @@ class Run extends CamelCommand {
                 propertiesFiles = propertiesFiles + ",file:" + 
profilePropertiesFile.getName();
             }
             repos = profileProperties.getProperty("camel.jbang.repos", repos);
+            download = 
"true".equals(profileProperties.getProperty("camel.jbang.download", download ? 
"true" : "false"));
+            downloadVerbose = "true"
+                    
.equals(profileProperties.getProperty("camel.jbang.downloadVerbose", 
downloadVerbose ? "true" : "false"));
         }
 
         // if no specific file to run then try to auto-detect
@@ -313,6 +322,8 @@ class Run extends CamelCommand {
 
         final Set<String> downloaded = new HashSet<>();
         main.setRepos(repos);
+        main.setDownload(download);
+        main.setDownloadVerbose(downloadVerbose);
         main.setDownloadListener(new DownloadListener() {
             @Override
             public void onDownloadDependency(String groupId, String 
artifactId, String version) {
diff --git 
a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/DownloaderHelper.java
 
b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/DownloaderHelper.java
index b2d87bd6199..372cb0954d7 100644
--- 
a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/DownloaderHelper.java
+++ 
b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/DownloaderHelper.java
@@ -71,6 +71,7 @@ public final class DownloaderHelper {
         map.put("module", artifactId);
         map.put("version", version);
         map.put("classifier", "");
+        //        map.put("excludes", 
Collections.singletonList(Map.of("group", "com.atlassian.sal", "module", 
"sal-api")));
 
         String gav = groupId + ":" + artifactId + ":" + version;
         DOWNLOAD_THREAD_POOL.download(LOG, () -> {
@@ -111,11 +112,14 @@ public final class DownloaderHelper {
         return false;
     }
 
-    public static void prepareDownloader(CamelContext camelContext, String 
repos) throws Exception {
-        InputStream is = 
DownloaderHelper.class.getResourceAsStream("/camelGrapeConfig.xml");
+    public static void prepareDownloader(CamelContext camelContext, String 
repos, boolean download, boolean verbose)
+            throws Exception {
+        InputStream is = download
+                ? 
DownloaderHelper.class.getResourceAsStream("/camelGrapeConfig.xml")
+                : 
DownloaderHelper.class.getResourceAsStream("/localGrapeConfig.xml");
         if (is != null) {
             String xml = IOHelper.loadText(is);
-            if (repos != null) {
+            if (download && repos != null) {
                 StringBuilder sb = new StringBuilder();
                 sb.append("            <!-- custom repositories -->");
                 int i = 0;
@@ -136,6 +140,9 @@ public final class DownloaderHelper {
 
             // Grape should use our custom configuration file
             System.setProperty("grape.config", out.getAbsolutePath());
+            if (verbose) {
+                System.setProperty("groovy.grape.report.downloads", "true");
+            }
 
             IOHelper.close(is);
         }
diff --git 
a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/KameletMain.java 
b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/KameletMain.java
index 0da80cffeba..039c9bc605c 100644
--- 
a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/KameletMain.java
+++ 
b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/KameletMain.java
@@ -39,6 +39,7 @@ public class KameletMain extends MainCommandLineSupport {
 
     protected final MainRegistry registry = new MainRegistry();
     private boolean download = true;
+    private boolean downloadVerbose;
     private String repos;
     private boolean stub;
     private DownloadListener downloadListener;
@@ -118,6 +119,17 @@ public class KameletMain extends MainCommandLineSupport {
         this.download = download;
     }
 
+    public boolean isDownloadVerbose() {
+        return downloadVerbose;
+    }
+
+    /**
+     * Whether to include verbose details when downloading
+     */
+    public void setDownloadVerbose(boolean downloadVerbose) {
+        this.downloadVerbose = downloadVerbose;
+    }
+
     public String getRepos() {
         return repos;
     }
@@ -179,6 +191,16 @@ public class KameletMain extends MainCommandLineSupport {
                 }
             }
         });
+        addOption(new ParameterOption(
+                "downloadVerbose", "downloadVerbose", "Whether to include 
verbose details when downloading",
+                "downloadVerbose") {
+            @Override
+            protected void doProcess(String arg, String parameter, 
LinkedList<String> remainingArgs) {
+                if (arg.equals("-downloadVerbose")) {
+                    setDownloadVerbose("true".equalsIgnoreCase(parameter));
+                }
+            }
+        });
         addOption(new ParameterOption(
                 "repos", "repositories", "Additional maven repositories for 
download on-demand.",
                 "repos") {
@@ -297,34 +319,32 @@ public class KameletMain extends MainCommandLineSupport {
             answer.setStartupStepRecorder(recorder);
         }
 
-        if (download) {
-            // use resolvers that can auto downloaded
-            try {
-                // prepare grape config with custom repositories
-                DownloaderHelper.prepareDownloader(camelContext, repos);
-
-                // dependencies from CLI
-                Object dependencies = 
getInitialProperties().get("camel.jbang.dependencies");
-                if (dependencies != null) {
-                    answer.addService(new 
CommandLineDependencyDownloader(dependencies.toString()));
-                }
-
-                KnownDependenciesResolver known = new 
KnownDependenciesResolver(answer);
-                known.loadKnownDependencies();
-                DependencyDownloaderPropertyBindingListener listener
-                        = new 
DependencyDownloaderPropertyBindingListener(answer, known);
-                
answer.getRegistry().bind(DependencyDownloaderPropertyBindingListener.class.getName(),
 listener);
-                
answer.getRegistry().bind(DependencyDownloaderStrategy.class.getName(),
-                        new DependencyDownloaderStrategy(answer));
-                answer.setClassResolver(new 
DependencyDownloaderClassResolver(answer, known));
-                answer.setComponentResolver(new 
DependencyDownloaderComponentResolver(answer, stub));
-                answer.setDataFormatResolver(new 
DependencyDownloaderDataFormatResolver(answer));
-                answer.setLanguageResolver(new 
DependencyDownloaderLanguageResolver(answer));
-                answer.setResourceLoader(new 
DependencyDownloaderResourceLoader(answer));
-                answer.addService(new DependencyDownloaderKamelet());
-            } catch (Exception e) {
-                throw RuntimeCamelException.wrapRuntimeException(e);
+        try {
+            // prepare grape config with custom repositories
+            // use resolvers that can auto downloaded (either local or over 
the internet)
+            DownloaderHelper.prepareDownloader(camelContext, repos, download, 
downloadVerbose);
+
+            // dependencies from CLI
+            Object dependencies = 
getInitialProperties().get("camel.jbang.dependencies");
+            if (dependencies != null) {
+                answer.addService(new 
CommandLineDependencyDownloader(dependencies.toString()));
             }
+
+            KnownDependenciesResolver known = new 
KnownDependenciesResolver(answer);
+            known.loadKnownDependencies();
+            DependencyDownloaderPropertyBindingListener listener
+                    = new DependencyDownloaderPropertyBindingListener(answer, 
known);
+            
answer.getRegistry().bind(DependencyDownloaderPropertyBindingListener.class.getName(),
 listener);
+            
answer.getRegistry().bind(DependencyDownloaderStrategy.class.getName(),
+                    new DependencyDownloaderStrategy(answer));
+            answer.setClassResolver(new 
DependencyDownloaderClassResolver(answer, known));
+            answer.setComponentResolver(new 
DependencyDownloaderComponentResolver(answer, stub));
+            answer.setDataFormatResolver(new 
DependencyDownloaderDataFormatResolver(answer));
+            answer.setLanguageResolver(new 
DependencyDownloaderLanguageResolver(answer));
+            answer.setResourceLoader(new 
DependencyDownloaderResourceLoader(answer));
+            answer.addService(new DependencyDownloaderKamelet());
+        } catch (Exception e) {
+            throw RuntimeCamelException.wrapRuntimeException(e);
         }
 
         return answer;
diff --git a/dsl/camel-kamelet-main/src/main/resources/localGrapeConfig.xml 
b/dsl/camel-kamelet-main/src/main/resources/localGrapeConfig.xml
new file mode 100644
index 00000000000..f92bb0ef6a4
--- /dev/null
+++ b/dsl/camel-kamelet-main/src/main/resources/localGrapeConfig.xml
@@ -0,0 +1,37 @@
+<!--
+
+     Licensed to the Apache Software Foundation (ASF) under one
+     or more contributor license agreements.  See the NOTICE file
+     distributed with this work for additional information
+     regarding copyright ownership.  The ASF licenses this file
+     to you under the Apache License, Version 2.0 (the
+     "License"); you may not use this file except in compliance
+     with the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing,
+     software distributed under the License is distributed on an
+     "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+     KIND, either express or implied.  See the License for the
+     specific language governing permissions and limitations
+     under the License.
+
+-->
+<ivysettings>
+    <!-- disable download of source and javadoc to be faster -->
+    <property name="ivy.maven.lookup.sources" value="false"/>
+    <property name="ivy.maven.lookup.javadoc" value="false"/>
+    <settings defaultResolver="downloadGrapes"/>
+    <resolvers>
+        <chain name="downloadGrapes" returnFirst="true">
+            <!-- grapes -->
+            <filesystem name="cachedGrapes">
+                <ivy 
pattern="${user.home}/.groovy/grapes/[organisation]/[module]/ivy-[revision].xml"/>
+                <artifact 
pattern="${user.home}/.groovy/grapes/[organisation]/[module]/[type]s/[artifact]-[revision](-[classifier]).[ext]"/>
+            </filesystem>
+            <!-- local m2 -->
+            <ibiblio name="localm2" root="${user.home.url}/.m2/repository/" 
checkmodified="true" changingPattern=".*" changingMatcher="regexp" 
m2compatible="true"/>
+        </chain>
+    </resolvers>
+</ivysettings>

Reply via email to