private Gav getSnapshotGav()

in indexer-core/src/main/java/org/apache/maven/index/artifact/M2GavCalculator.java [176:266]


    private Gav getSnapshotGav(
            String s,
            int vEndPos,
            String groupId,
            String artifactId,
            String version,
            String fileName,
            boolean checksum,
            boolean signature,
            Gav.HashType checksumType,
            Gav.SignatureType signatureType) {

        Integer snapshotBuildNo = null;

        Long snapshotTimestamp = null;

        int vSnapshotStart = vEndPos + artifactId.length() + version.length() - 9 + 3;

        String vSnapshot = s.substring(vSnapshotStart, vSnapshotStart + 8);

        String classifier;

        String ext;

        if ("SNAPSHOT".equals(vSnapshot)) {
            int nTailPos = vEndPos + artifactId.length() + version.length() + 2;

            String tail = s.substring(nTailPos);

            int nExtPos = tail.indexOf('.');

            if (nExtPos == -1) {
                // NX-563: not allowing extensionless paths to be interpreted as artifact
                return null;
            }

            ext = tail.substring(nExtPos + 1);

            classifier = tail.charAt(0) == '-' ? tail.substring(1, nExtPos) : null;
        } else {
            StringBuilder sb = new StringBuilder(vSnapshot);
            sb.append(s, vSnapshotStart + sb.length(), vSnapshotStart + sb.length() + 8);

            try {
                SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd.HHmmss");
                snapshotTimestamp = df.parse(sb.toString()).getTime();
            } catch (ParseException e) {
            }

            int buildNumberPos = vSnapshotStart + sb.length();
            StringBuilder bnr = new StringBuilder();
            while (s.charAt(buildNumberPos) >= '0' && s.charAt(buildNumberPos) <= '9') {
                sb.append(s.charAt(buildNumberPos));
                bnr.append(s.charAt(buildNumberPos));
                buildNumberPos++;
            }
            String snapshotBuildNumber = sb.toString();
            snapshotBuildNo = Integer.parseInt(bnr.toString());

            int n = version.length() > 9 ? version.length() - 9 + 1 : 0;

            String tail = s.substring(vEndPos + artifactId.length() + n + snapshotBuildNumber.length() + 2);

            int nExtPos = tail.indexOf('.');

            if (nExtPos == -1) {
                // NX-563: not allowing extensionless paths to be interpreted as artifact
                return null;
            }

            ext = tail.substring(nExtPos + 1);

            classifier = tail.charAt(0) == '-' ? tail.substring(1, nExtPos) : null;

            version = version.substring(0, version.length() - 8) + snapshotBuildNumber;
        }

        return new Gav(
                groupId,
                artifactId,
                version,
                classifier,
                ext,
                snapshotBuildNo,
                snapshotTimestamp,
                fileName,
                checksum,
                checksumType,
                signature,
                signatureType);
    }