package org.molgenis.util; import com.google.common.hash.HashCode; import com.google.common.hash.Hashing; import com.google.common.io.BaseEncoding; import java.io.IOException; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; public class ResourceFingerprintRegistry { private final Map<String, String> resourceFingerprints; public ResourceFingerprintRegistry() { resourceFingerprints = new ConcurrentHashMap<String, String>(); } public String getFingerprint(String resourceName) throws IOException { return getFingerprint(this.getClass(), resourceName); } public String getFingerprint(Class<?> contextClass, String resourceName) throws IOException { String resourceFingerprint = resourceFingerprints.get(resourceName); if (resourceFingerprint == null) { resourceFingerprint = createFingerprint(contextClass, resourceName); resourceFingerprints.put(resourceName, resourceFingerprint); } return resourceFingerprint; } private String createFingerprint(Class<?> contextClass, String resourceName) throws IOException { byte[] bytes = contextClass != null ? ResourceUtils.getBytes(contextClass, resourceName) : ResourceUtils .getBytes(resourceName); HashCode crc32 = Hashing.crc32().hashBytes(bytes); return BaseEncoding.base64Url().omitPadding().encode(crc32.asBytes()); } }