package org.jboss.windup.graph.traversal; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import org.jboss.windup.graph.model.ArchiveModel; import org.jboss.windup.graph.model.resource.FileModel; /** * @author <a href="mailto:jesse.sightler@gmail.com">Jesse Sightler</a> */ public class ArchiveSHA1ToFilePathMapper { private final Map<String, List<String>> sha1ToFilenames = new HashMap<>(); public ArchiveSHA1ToFilePathMapper(final ProjectModelTraversal traversal) { ProjectTraversalVisitor visitor = new ProjectTraversalVisitor() { @Override public void visit(ProjectModelTraversal traversal) { FileModel rootFile = traversal.getCurrent().getRootFileModel(); if (!(rootFile instanceof ArchiveModel)) return; ArchiveModel archive = (ArchiveModel) rootFile; String filePath = traversal.getFilePath(archive); addToMap(archive.getSHA1Hash(), filePath); } }; traversal.accept(visitor); } public List<String> getPathsBySHA1(String sha1) { List<String> result = sha1ToFilenames.get(sha1); if (result == null) result = Collections.emptyList(); return result; } private void addToMap(String sha1, String filePath) { List<String> filepaths = sha1ToFilenames.get(sha1); if (filepaths == null) { filepaths = new ArrayList<>(); sha1ToFilenames.put(sha1, filepaths); } filepaths.add(filePath); } }