ArtifactId extractArtifactId()

in src/main/java/org/apache/sling/feature/scanner/impl/ContentPackageScanner.java [365:402]


    ArtifactId extractArtifactId(final List<Properties> candidates, final String bundleFileName, final ArtifactId packageArtifactId)
    throws IOException {
        logger.debug("Properties candidates for {} : {}", bundleFileName, candidates);

        final List<ArtifactId> idCandidates = getArtifactIds(candidates);
        logger.debug("Artifact candidates for {} : {}", bundleFileName, candidates);

        // single candidate? return
        if ( idCandidates.size() == 1 ) {
            final ArtifactId result = adjustClassifier(idCandidates.get(0), bundleFileName);
            logger.debug("Found single candidate : {}", result);
            return result;
        }

        // more than one candidate, find matching version
        final List<ArtifactId> versionIds = filterCandidatesByVersion(idCandidates, bundleFileName);
        if ( versionIds.size() == 1 ) {
            final ArtifactId result = adjustClassifier(versionIds.get(0), bundleFileName);
            logger.debug("Found single candidate matching version : {}", result);
            return result;
        }
        // check parent group id
        for(final ArtifactId id : versionIds.isEmpty() ? idCandidates : versionIds) {
            if ( id.getGroupId().equals(packageArtifactId.getGroupId()) ) {
                final ArtifactId result = adjustClassifier(id, bundleFileName);
                logger.debug("Found candidate with parent group id {} : {}",packageArtifactId.getGroupId(), result);
                return result;
            }
        }
        // randomly pick one
        if ( idCandidates.size() > 0 ) {
            final ArtifactId result = adjustClassifier(idCandidates.get(0), bundleFileName);
            logger.debug("Picking random candidate : {}", result);
            return result;
        }

        throw new IOException(bundleFileName + " has no maven coordinates!");
    }