package de.saumya.mojo.mavengem; import java.io.File; import java.io.FileNotFoundException; import java.io.InputStream; import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; import java.util.HashMap; import java.util.Map; import org.jruby.embed.IsolatedScriptingContainer; import org.jruby.embed.ScriptingContainer; import org.sonatype.nexus.ruby.DefaultRubygemsGateway; import org.sonatype.nexus.ruby.RubygemsGateway; import org.sonatype.nexus.ruby.FileType; import org.sonatype.nexus.ruby.GemArtifactFile; import org.sonatype.nexus.ruby.IOUtil; import org.sonatype.nexus.ruby.RubygemsFile; import org.sonatype.nexus.ruby.cuba.RubygemsFileSystem; import org.sonatype.nexus.ruby.layout.CachingProxyStorage; import org.sonatype.nexus.ruby.layout.ProxiedRubygemsFileSystem; import org.sonatype.nexus.ruby.layout.ProxyStorage; public class Rubygems { private static RubygemsGateway gateway = new DefaultRubygemsGateway(new IsolatedScriptingContainer()); private static Map<URL, Rubygems> facades = new HashMap<URL, Rubygems>(); private final ProxyStorage storage; private final RubygemsFileSystem files; Rubygems(URL url, File baseCacheDir) { // we do not want to expose credentials inside the directory name File cachedir = new File(baseCacheDir, url.toString().replaceFirst("://[^:]+:[^:]+@", "://").replaceAll("[/:.]", "_")); this.storage = new CachingProxyStorage(cachedir, url); this.files = new ProxiedRubygemsFileSystem(gateway, storage); } public InputStream getInputStream(RubygemsFile file) throws IOException { return this.storage.getInputStream(file); } public RubygemsFile get(String path) { return this.files.get(path); } public long getModified(RubygemsFile file) { return this.storage.getModified(file); } }