package org.jboss.windup.rules.apps.java.archives.identify; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.util.Map; import java.util.TreeMap; import org.apache.commons.io.IOUtils; import org.apache.commons.io.LineIterator; import org.apache.commons.lang3.StringUtils; import org.jboss.forge.addon.dependencies.Coordinate; import org.jboss.forge.addon.dependencies.builder.CoordinateBuilder; import org.jboss.windup.util.exception.WindupException; /** * In-memory implementation of {@link ArchiveIdentificationService}. * * @author <a href="mailto:lincolnbaxter@gmail.com">Lincoln Baxter, III</a> * @author <a href="mailto:ozizka@redhat.com">Ondrej Zizka</a> */ public class InMemoryArchiveIdentificationService implements ArchiveIdentificationService { private final Map<String, String> map = new TreeMap<>(); @Override public Coordinate getCoordinate(String checksum) { if (checksum == null) return null; String coordinate = map.get(checksum); if (coordinate == null) return null; return CoordinateBuilder.create(coordinate); } public InMemoryArchiveIdentificationService addMapping(String checksum, String coordinate) { map.put(checksum, coordinate); return this; } public InMemoryArchiveIdentificationService addMappingsFrom(File file) { try (FileInputStream inputStream = new FileInputStream(file)) { LineIterator iterator = IOUtils.lineIterator(inputStream, "UTF-8"); int lineNumber = 0; while (iterator.hasNext()) { lineNumber++; String line = iterator.next(); if (line.startsWith("#") || line.trim().isEmpty()) continue; String[] parts = StringUtils.split(line, ' '); if (parts.length < 2) throw new IllegalArgumentException("Expected 'SHA1 GROUP_ID:ARTIFACT_ID:[PACKAGING:[COORDINATE:]]VERSION', but was: [" + line + "] in [" + file + "] at line [" + lineNumber + "]"); addMapping(parts[0], parts[1]); } } catch (IOException e) { throw new WindupException("Failed to load SHA1 to " + Coordinate.class.getSimpleName() + " definitions from [" + file + "]", e); } return this; } }