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

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

commit 8feae2b7cf4b58af9a96e0e689e13f83f101cb35
Author: James Netherton <jamesnether...@gmail.com>
AuthorDate: Fri Jun 28 14:23:17 2024 +0100

    Add dynamic discovery of ical zoneinfo
---
 .../component/ical/deployment/IcalProcessor.java   | 40 +++++++++++++---------
 1 file changed, 23 insertions(+), 17 deletions(-)

diff --git 
a/extensions/ical/deployment/src/main/java/org/apache/camel/quarkus/component/ical/deployment/IcalProcessor.java
 
b/extensions/ical/deployment/src/main/java/org/apache/camel/quarkus/component/ical/deployment/IcalProcessor.java
index fc92c7b22d..da5fd0eaa8 100644
--- 
a/extensions/ical/deployment/src/main/java/org/apache/camel/quarkus/component/ical/deployment/IcalProcessor.java
+++ 
b/extensions/ical/deployment/src/main/java/org/apache/camel/quarkus/component/ical/deployment/IcalProcessor.java
@@ -16,7 +16,10 @@
  */
 package org.apache.camel.quarkus.component.ical.deployment;
 
-import java.util.stream.Stream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Objects;
+import java.util.Properties;
 
 import io.quarkus.deployment.annotations.BuildProducer;
 import io.quarkus.deployment.annotations.BuildStep;
@@ -27,9 +30,10 @@ import 
io.quarkus.deployment.builditem.nativeimage.NativeImageResourceDirectoryB
 import io.quarkus.deployment.builditem.nativeimage.ReflectiveClassBuildItem;
 import net.fortuna.ical4j.model.TimeZoneRegistryImpl;
 import net.fortuna.ical4j.util.MapTimeZoneCache;
+import org.jboss.logging.Logger;
 
 class IcalProcessor {
-
+    private static final Logger LOG = Logger.getLogger(IcalProcessor.class);
     private static final String FEATURE = "camel-ical";
 
     @BuildStep
@@ -50,21 +54,23 @@ class IcalProcessor {
 
         nativeResources.produce(new 
NativeImageResourceBuildItem("net/fortuna/ical4j/model/tz.alias"));
 
-        Stream.of("zoneinfo/Africa",
-                "zoneinfo/America",
-                "zoneinfo/America/Argentina",
-                "zoneinfo/America/Indiana",
-                "zoneinfo/America/Kentucky",
-                "zoneinfo/America/North_Dakota",
-                "zoneinfo/Antarctica",
-                "zoneinfo/Arctic",
-                "zoneinfo/Asia",
-                "zoneinfo/Atlantic",
-                "zoneinfo/Australia",
-                "zoneinfo/Europe",
-                "zoneinfo/Indian",
-                "zoneinfo/Pacific")
-                .forEach(path -> nativeResourceDirs.produce(new 
NativeImageResourceDirectoryBuildItem(path)));
+        try (InputStream stream = 
Thread.currentThread().getContextClassLoader()
+                .getResourceAsStream("net/fortuna/ical4j/model/tz.alias")) {
+            Properties timezoneData = new Properties();
+            timezoneData.load(stream);
+            timezoneData.values()
+                    .stream()
+                    .map(Objects::toString)
+                    .map(timeZone -> timeZone.split("/")[0])
+                    .distinct()
+                    .forEach(region -> {
+                        nativeResourceDirs.produce(new 
NativeImageResourceDirectoryBuildItem("zoneinfo/" + region));
+                        nativeResourceDirs.produce(new 
NativeImageResourceDirectoryBuildItem("zoneinfo-global/" + region));
+                    });
+
+        } catch (IOException e) {
+            throw new RuntimeException("Failed reading ical tz.alias");
+        }
     }
 
     @BuildStep

Reply via email to