mirror of
https://github.com/Stirling-Tools/Stirling-PDF.git
synced 2025-06-06 18:30:57 +00:00

# Description of Changes Please provide a summary of the changes, including: What was changed: - Refactored path constructions in multiple classes (e.g., SPDFApplication.java, InstallationPathConfig.java, RuntimePathConfig.java) to use Java NIO’s Paths.get() and Path.of() instead of manual string concatenation. Why the change was made: - To improve code readability, maintainability, and robustness by leveraging modern Java NIO utilities. - To ensure better portability across different operating systems by avoiding hardcoded file separators. Challenges encountered: - Maintaining backward compatibility while transitioning from manual string concatenation to using Paths for file path construction. - Ensuring that the refactored path resolution works consistently across all supported environments (Windows, macOS, Linux, and Docker). @Frooodle can you check the docker path `/.dockerenv`? --- ## Checklist ### General - [x] I have read the [Contribution Guidelines](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/CONTRIBUTING.md) - [x] I have read the [Stirling-PDF Developer Guide](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/DeveloperGuide.md) (if applicable) - [x] I have read the [How to add new languages to Stirling-PDF](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/HowToAddNewLanguage.md) (if applicable) - [x] I have performed a self-review of my own code - [ ] My changes generate no new warnings ### Documentation - [ ] I have updated relevant docs on [Stirling-PDF's doc repo](https://github.com/Stirling-Tools/Stirling-Tools.github.io/blob/main/docs/) (if functionality has heavily changed) - [ ] I have read the section [Add New Translation Tags](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/HowToAddNewLanguage.md#add-new-translation-tags) (for new translation tags only) ### UI Changes (if applicable) - [ ] Screenshots or videos demonstrating the UI changes are attached (e.g., as comments or direct attachments in the PR) ### Testing (if applicable) - [ ] I have tested my changes locally. Refer to the [Testing Guide](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/DeveloperGuide.md#6-testing) for more details.
80 lines
3.1 KiB
Java
80 lines
3.1 KiB
Java
package stirling.software.SPDF.config;
|
|
|
|
import java.nio.file.Files;
|
|
import java.nio.file.Path;
|
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
import org.springframework.context.annotation.Configuration;
|
|
|
|
import lombok.Getter;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
import stirling.software.SPDF.model.ApplicationProperties;
|
|
import stirling.software.SPDF.model.ApplicationProperties.CustomPaths.Operations;
|
|
import stirling.software.SPDF.model.ApplicationProperties.CustomPaths.Pipeline;
|
|
|
|
@Slf4j
|
|
@Configuration
|
|
@Getter
|
|
public class RuntimePathConfig {
|
|
private final ApplicationProperties properties;
|
|
private final String basePath;
|
|
private final String weasyPrintPath;
|
|
private final String unoConvertPath;
|
|
|
|
// Pipeline paths
|
|
private final String pipelineWatchedFoldersPath;
|
|
private final String pipelineFinishedFoldersPath;
|
|
private final String pipelineDefaultWebUiConfigs;
|
|
private final String pipelinePath;
|
|
|
|
public RuntimePathConfig(ApplicationProperties properties) {
|
|
this.properties = properties;
|
|
this.basePath = InstallationPathConfig.getPath();
|
|
|
|
this.pipelinePath = Path.of(basePath, "pipeline").toString();
|
|
String defaultWatchedFolders = Path.of(this.pipelinePath, "watchedFolders").toString();
|
|
String defaultFinishedFolders = Path.of(this.pipelinePath, "finishedFolders").toString();
|
|
String defaultWebUIConfigs = Path.of(this.pipelinePath, "defaultWebUIConfigs").toString();
|
|
|
|
Pipeline pipeline = properties.getSystem().getCustomPaths().getPipeline();
|
|
|
|
this.pipelineWatchedFoldersPath =
|
|
resolvePath(
|
|
defaultWatchedFolders,
|
|
pipeline != null ? pipeline.getWatchedFoldersDir() : null);
|
|
this.pipelineFinishedFoldersPath =
|
|
resolvePath(
|
|
defaultFinishedFolders,
|
|
pipeline != null ? pipeline.getFinishedFoldersDir() : null);
|
|
this.pipelineDefaultWebUiConfigs =
|
|
resolvePath(
|
|
defaultWebUIConfigs,
|
|
pipeline != null ? pipeline.getWebUIConfigsDir() : null);
|
|
|
|
boolean isDocker = isRunningInDocker();
|
|
|
|
// Initialize Operation paths
|
|
String defaultWeasyPrintPath = isDocker ? "/opt/venv/bin/weasyprint" : "weasyprint";
|
|
String defaultUnoConvertPath = isDocker ? "/opt/venv/bin/unoconvert" : "unoconvert";
|
|
|
|
Operations operations = properties.getSystem().getCustomPaths().getOperations();
|
|
this.weasyPrintPath =
|
|
resolvePath(
|
|
defaultWeasyPrintPath,
|
|
operations != null ? operations.getWeasyprint() : null);
|
|
this.unoConvertPath =
|
|
resolvePath(
|
|
defaultUnoConvertPath,
|
|
operations != null ? operations.getUnoconvert() : null);
|
|
}
|
|
|
|
private String resolvePath(String defaultPath, String customPath) {
|
|
return StringUtils.isNotBlank(customPath) ? customPath : defaultPath;
|
|
}
|
|
|
|
private boolean isRunningInDocker() {
|
|
return Files.exists(Path.of("/.dockerenv"));
|
|
}
|
|
}
|