protected String extractTargetRunMode()

in src/main/java/org/apache/sling/feature/cpconverter/handlers/AbstractRegexEntryHandler.java [57:91]


    protected String extractTargetRunMode(String path, ContentPackage2FeatureModelConverter converter,
            String runMode, String runModeMatch) {
                String targetRunmode;
                if  (RunModePolicy.PREPEND_INHERITED.equals(converter.getRunModePolicy())) {
                    final List<String> runModes = new ArrayList<>();
                    final List<String> inheritedRunModes = runMode == null ? Collections.emptyList() : Arrays.asList(StringUtils.split(runMode, '.'));
            
                    runModes.addAll(inheritedRunModes);
                    // append found run modes without duplicates (legacy behavior direct_only established by appending to empty List)
                    if (StringUtils.isNotEmpty(runModeMatch)) {
                        // there is a specified RunMode
                        logger.debug("Runmode {} was extracted from path {}", runModeMatch, path);
                        List<String> newRunModes = Arrays.asList(StringUtils.split(runModeMatch, '.'));
            
                        // add only new RunModes that are not already present
                        List<String> newRunModesList = newRunModes.stream()
                                                                  .filter(mode -> !runModes.contains(mode))
                                                                  .collect(Collectors.toList());
            
                        // identify diverging list of run modes between parent & direct definition as diverging criteria between run mode policies
                        if(!runModes.isEmpty() && !CollectionUtils.isEqualCollection(newRunModes, inheritedRunModes)) {
                            logger.info("Found diverging run modes list {} diverging from defined run modes on the parent {}", newRunModes, inheritedRunModes);
                            logger.info("Effective run modes: {}", runModes);
                        }
            
                        runModes.addAll(newRunModesList);
                    }
                    targetRunmode = String.join(".", runModes);
            
                } else {
                    //legacy behavior - direct_only - just use the directly defined run modes
                    targetRunmode = runModeMatch;
                }
                return targetRunmode;
            }