private void removeDeletedArtifacts()

in indexer-core/src/main/java/org/apache/maven/index/DefaultScannerListener.java [213:269]


    private void removeDeletedArtifacts(IndexingContext context, ScanningResult result, String contextPath)
            throws IOException {
        int deleted = 0;

        final IndexSearcher indexSearcher = context.acquireIndexSearcher();
        try {
            for (String uinfo : uinfos) {
                TopScoreDocCollector collector = TopScoreDocCollector.create(1, Integer.MAX_VALUE);

                indexSearcher.search(new TermQuery(new Term(ArtifactInfo.UINFO, uinfo)), collector);

                if (collector.getTotalHits() > 0) {
                    String[] ra = ArtifactInfo.FS_PATTERN.split(uinfo);

                    ArtifactInfo ai = new ArtifactInfo();

                    ai.setRepository(context.getRepositoryId());

                    ai.setGroupId(ra[0]);

                    ai.setArtifactId(ra[1]);

                    ai.setVersion(ra[2]);

                    if (ra.length > 3) {
                        ai.setClassifier(ArtifactInfo.renvl(ra[3]));
                    }

                    if (ra.length > 4) {
                        ai.setPackaging(ArtifactInfo.renvl(ra[4]));
                    }

                    // minimal ArtifactContext for removal
                    ArtifactContext ac = new ArtifactContext(null, null, null, ai, ai.calculateGav());

                    for (int i = 0; i < collector.getTotalHits(); i++) {
                        if (contextPath == null
                                || context.getGavCalculator()
                                        .gavToPath(ac.getGav())
                                        .startsWith(contextPath)) {
                            indexerEngine.remove(context, ac);
                        }

                        deleted++;
                    }
                }
            }
        } finally {
            context.releaseIndexSearcher(indexSearcher);
        }

        if (deleted > 0) {
            context.commit();
        }

        result.setDeletedFiles(deleted);
    }