mirror of
				https://github.com/Frooodle/Stirling-PDF.git
				synced 2025-11-01 01:21:18 +01:00 
			
		
		
		
	fix for config #376
This commit is contained in:
		
							parent
							
								
									af5bbd8838
								
							
						
					
					
						commit
						ece00956d9
					
				@ -8,7 +8,7 @@ plugins {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
group = 'stirling.software'
 | 
			
		||||
version = '0.14.2'
 | 
			
		||||
version = '0.14.3'
 | 
			
		||||
sourceCompatibility = '17'
 | 
			
		||||
 | 
			
		||||
repositories {
 | 
			
		||||
 | 
			
		||||
@ -12,6 +12,8 @@ import java.nio.file.Paths;
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Optional;
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
import java.util.function.Function;
 | 
			
		||||
import java.util.stream.Collectors;
 | 
			
		||||
 | 
			
		||||
import org.springframework.context.ApplicationContextInitializer;
 | 
			
		||||
@ -49,7 +51,8 @@ public class ConfigInitializer implements ApplicationContextInitializer<Configur
 | 
			
		||||
			// If user file exists, we need to merge it with the template from the classpath
 | 
			
		||||
			List<String> templateLines;
 | 
			
		||||
			try (InputStream in = getClass().getClassLoader().getResourceAsStream("settings.yml.template")) {
 | 
			
		||||
                templateLines = new BufferedReader(new InputStreamReader(in, StandardCharsets.UTF_8)).lines().collect(Collectors.toList());
 | 
			
		||||
				templateLines = new BufferedReader(new InputStreamReader(in, StandardCharsets.UTF_8)).lines()
 | 
			
		||||
						.collect(Collectors.toList());
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			mergeYamlFiles(templateLines, destPath, destPath);
 | 
			
		||||
@ -58,44 +61,69 @@ public class ConfigInitializer implements ApplicationContextInitializer<Configur
 | 
			
		||||
 | 
			
		||||
	public void mergeYamlFiles(List<String> templateLines, Path userFilePath, Path outputPath) throws IOException {
 | 
			
		||||
		List<String> userLines = Files.readAllLines(userFilePath);
 | 
			
		||||
 | 
			
		||||
		List<String> mergedLines = new ArrayList<>();
 | 
			
		||||
		boolean insideAutoGenerated = false;
 | 
			
		||||
		boolean beforeFirstKey = true;
 | 
			
		||||
 | 
			
		||||
		Function<String, Boolean> isCommented = line -> line.trim().startsWith("#");
 | 
			
		||||
		Function<String, String> extractKey = line -> {
 | 
			
		||||
			String[] parts = line.split(":");
 | 
			
		||||
			return parts.length > 0 ? parts[0].trim().replace("#", "").trim() : "";
 | 
			
		||||
		};
 | 
			
		||||
 | 
			
		||||
		Set<String> userKeys = userLines.stream().map(extractKey).collect(Collectors.toSet());
 | 
			
		||||
 | 
			
		||||
		for (String line : templateLines) {
 | 
			
		||||
            // Check if we've entered or left the AutomaticallyGenerated section
 | 
			
		||||
			String key = extractKey.apply(line);
 | 
			
		||||
 | 
			
		||||
			if (line.trim().equalsIgnoreCase("AutomaticallyGenerated:")) {
 | 
			
		||||
				insideAutoGenerated = true;
 | 
			
		||||
				mergedLines.add(line);
 | 
			
		||||
				continue;
 | 
			
		||||
			} else if (insideAutoGenerated && line.trim().isEmpty()) {
 | 
			
		||||
                // We have reached the end of the AutomaticallyGenerated section
 | 
			
		||||
				insideAutoGenerated = false;
 | 
			
		||||
				mergedLines.add(line);
 | 
			
		||||
				continue;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
            if (insideAutoGenerated) {
 | 
			
		||||
                // Add lines from user's settings if we are inside AutomaticallyGenerated
 | 
			
		||||
                Optional<String> userAutoGenValue = userLines.stream().filter(l -> l.trim().startsWith(line.split(":")[0].trim())).findFirst();
 | 
			
		||||
                if (userAutoGenValue.isPresent()) {
 | 
			
		||||
                    mergedLines.add(userAutoGenValue.get());
 | 
			
		||||
			if (beforeFirstKey && (isCommented.apply(line) || line.trim().isEmpty())) {
 | 
			
		||||
				// Handle top comments and empty lines before the first key.
 | 
			
		||||
				mergedLines.add(line);
 | 
			
		||||
				continue;
 | 
			
		||||
			}
 | 
			
		||||
            } else {
 | 
			
		||||
                // Outside of AutomaticallyGenerated, continue as before
 | 
			
		||||
                if (line.contains(": ")) {
 | 
			
		||||
                    String key = line.split(": ")[0].trim();
 | 
			
		||||
                    Optional<String> userValue = userLines.stream().filter(l -> l.trim().startsWith(key)).findFirst();
 | 
			
		||||
                    if (userValue.isPresent()) {
 | 
			
		||||
 | 
			
		||||
			if (!key.isEmpty())
 | 
			
		||||
				beforeFirstKey = false;
 | 
			
		||||
 | 
			
		||||
			if (userKeys.contains(key)) {
 | 
			
		||||
				// If user has any version (commented or uncommented) of this key, skip the
 | 
			
		||||
				// template line
 | 
			
		||||
				Optional<String> userValue = userLines.stream()
 | 
			
		||||
						.filter(l -> extractKey.apply(l).equalsIgnoreCase(key) && !isCommented.apply(l)).findFirst();
 | 
			
		||||
				if (userValue.isPresent())
 | 
			
		||||
					mergedLines.add(userValue.get());
 | 
			
		||||
				continue;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			if (isCommented.apply(line) || line.trim().isEmpty() || !userKeys.contains(key)) {
 | 
			
		||||
				mergedLines.add(line); // If line is commented, empty or key not present in user's file, retain the
 | 
			
		||||
										// template line
 | 
			
		||||
				continue;
 | 
			
		||||
			}
 | 
			
		||||
                mergedLines.add(line);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// Add any additional uncommented user lines that are not present in the
 | 
			
		||||
		// template
 | 
			
		||||
		for (String userLine : userLines) {
 | 
			
		||||
			String userKey = extractKey.apply(userLine);
 | 
			
		||||
			boolean isPresentInTemplate = templateLines.stream().map(extractKey)
 | 
			
		||||
					.anyMatch(templateKey -> templateKey.equalsIgnoreCase(userKey));
 | 
			
		||||
			if (!isPresentInTemplate && !isCommented.apply(userLine)) {
 | 
			
		||||
				mergedLines.add(userLine);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		Files.write(outputPath, mergedLines, StandardCharsets.UTF_8);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user