package org.jboss.windup.rules.apps.java.archives.identify;

import java.io.File;
import java.util.logging.Logger;

import org.jboss.forge.addon.dependencies.Coordinate;
import org.jboss.forge.addon.dependencies.builder.CoordinateBuilder;
import org.jboss.windup.maven.nexusindexer.client.DocTo;
import org.jboss.windup.maven.nexusindexer.client.LuceneIndexServiceBase;
import org.jboss.windup.util.Logging;

/**
 * Identifies archives by their hash, using pre-created Lucene index. See the nexus-repository-indexer project.
 *
 * @author <a href="mailto:jesse.sightler@gmail.com">Jesse Sightler</a>
 * @author <a href="http://ondra.zizka.cz/">Ondrej Zizka, zizka@seznam.cz</a>
 * <p>
 * TODO: This should be in Nexus Indexer - Data (client for Nexus Indexer - Core).
 */
public class LuceneArchiveIdentificationService extends LuceneIndexServiceBase implements ArchiveIdentificationService {
    private static final Logger LOG = Logging.get(LuceneArchiveIdentificationService.class);

    private static final String SHA1 = "sha1";
    private static final String GROUP_ID = "groupId";
    private static final String ARTIFACT_ID = "artifactId";
    private static final String PACKAGING = "packaging";
    private static final String CLASSIFIER = "classifier";
    private static final String VERSION = "version";


    public LuceneArchiveIdentificationService(File directory) {
        super(directory);
    }


    @Override
    public Coordinate getCoordinate(String sha1) {
        return this.findSingle(DocTo.Fields.SHA1, sha1, (DocTo<Coordinate>) doc -> CoordinateBuilder.create()
                .setGroupId(doc.get(GROUP_ID))
                .setArtifactId(doc.get(ARTIFACT_ID))
                .setVersion(doc.get(VERSION))
                .setClassifier(doc.get(CLASSIFIER))
                .setPackaging(doc.get(PACKAGING)));
    }
}
