aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/src-tauri/src/core/java/provider.rs
diff options
context:
space:
mode:
authorBegonia, HE <163421589+BegoniaHe@users.noreply.github.com>2026-01-25 04:52:35 +0100
committerBegonia, HE <163421589+BegoniaHe@users.noreply.github.com>2026-01-29 02:53:33 +0100
commitd7ddf3710f6aff40d0595430f5f49255c89fdca1 (patch)
treedad7408e179479393ea01bda57fbf3f0a9346de6 /src-tauri/src/core/java/provider.rs
parenta17d94168440ce91703069fc6027dc766e0d8998 (diff)
downloadDropOut-d7ddf3710f6aff40d0595430f5f49255c89fdca1.tar.gz
DropOut-d7ddf3710f6aff40d0595430f5f49255c89fdca1.zip
refactor(java): modularize Java detection and management system
- Split monolithic java.rs (1089 lines) into focused modules - detection: Java installation discovery - validation: Version validation and requirements checking - priority: Installation selection priority logic - provider: Java download provider trait - providers: Provider implementations (Adoptium) - persistence: Cache and catalog management - Add java_path_override field to Instance struct for per-instance Java configuration - Export JavaInstallation at core module level This refactoring improves maintainability and prepares for multi-vendor Java provider support. Reviewed-by: Claude Sonnet 4.5
Diffstat (limited to 'src-tauri/src/core/java/provider.rs')
-rw-r--r--src-tauri/src/core/java/provider.rs41
1 files changed, 41 insertions, 0 deletions
diff --git a/src-tauri/src/core/java/provider.rs b/src-tauri/src/core/java/provider.rs
new file mode 100644
index 0000000..0f9d78a
--- /dev/null
+++ b/src-tauri/src/core/java/provider.rs
@@ -0,0 +1,41 @@
+use crate::core::java::{ImageType, JavaCatalog, JavaDownloadInfo};
+use tauri::AppHandle;
+
+/// Trait for Java download providers (Adoptium, Temurin, Corretto, etc.)
+///
+/// Implements SOLID principles:
+/// - Single Responsibility: Each provider handles one download source
+/// - Open/Closed: New providers can be added without modifying existing code
+/// - Liskov Substitution: All providers are interchangeable
+/// - Interface Segregation: Minimal required methods
+/// - Dependency Inversion: Code depends on trait, not concrete implementations
+pub trait JavaProvider: Send + Sync {
+ /// Fetch the Java catalog (all available versions for this provider)
+ async fn fetch_catalog(
+ &self,
+ app_handle: &AppHandle,
+ force_refresh: bool,
+ ) -> Result<JavaCatalog, String>;
+
+ /// Fetch a specific Java release
+ async fn fetch_release(
+ &self,
+ major_version: u32,
+ image_type: ImageType,
+ ) -> Result<JavaDownloadInfo, String>;
+
+ /// Get list of available major versions
+ async fn available_versions(&self) -> Result<Vec<u32>, String>;
+
+ /// Get provider name (e.g., "adoptium", "corretto")
+ fn provider_name(&self) -> &'static str;
+
+ /// Get OS name for this provider's API
+ fn os_name(&self) -> &'static str;
+
+ /// Get architecture name for this provider's API
+ fn arch_name(&self) -> &'static str;
+
+ /// Get installation directory prefix (e.g., "temurin", "corretto")
+ fn install_prefix(&self) -> &'static str;
+}