Skip to content

Instantly share code, notes, and snippets.

@stepheneb
Created May 25, 2010 00:38
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save stepheneb/412606 to your computer and use it in GitHub Desktop.
Save stepheneb/412606 to your computer and use it in GitHub Desktop.
require 'rubygems'
gem 'rack', '>= 1.1.0'
gem 'jnlp', '>= 0.6.2'
require 'rack'
require 'jnlp'
require 'fileutils'
require 'open-uri'
server = 'http://localhost:4321'
jnlp_cache = 'jnlp'
maven_jnlps_url = "http://jnlp.concord.org/dev/org/concord/maven-jnlp"
families = %w{all-otrunk-snapshot sensor-applets}
jnlps = []
new_hrefs = []
puts "\nLoading most recent versioned jnlps from:\n"
families.each do |family|
snapshot_version_path = "#{family}-CURRENT_VERSION.txt"
snapshot_version = open("#{maven_jnlps_url}/#{family}/#{snapshot_version_path}").read
versioned_jnlp_url = "#{maven_jnlps_url}/#{family}/#{family}-#{snapshot_version}.jnlp"
puts " #{versioned_jnlp_url} ..."
jnlp = Jnlp::Jnlp.new(versioned_jnlp_url, jnlp_cache, {:include_pack_gz => true, :verbose => true})
new_href = "#{server}#{jnlp.path}"
jnlp.write_jnlp( { :dir => jnlp_cache, :jnlp => { :codebase => server, :href => new_href }, :snapshot => true } )
new_hrefs << new_href
jnlps << jnlp
end
puts "\nServing jnlps locally at:\n #{new_hrefs.join("\n ")}"
module Rack
class Jnlp
def initialize app
@app = app
end
def call env
path = env["PATH_INFO"]
# version-id=0.1.0-20090724.190215-918
jar_version = env["QUERY_STRING"][/version-id=(.*)/, 1]
versioned_jar_request = false
if path[/\.jar$/] && jar_version
versioned_jar_request = true
# http://jnlp.concord.org/dev/org/concord/otrunk/otrunk.jar
versioned_jar_path = path.gsub(/(.*?)(\.jar$)/, "\\1__V#{jar_version}\\2")
# http://jnlp.concord.org/dev/org/concord/otrunk/otrunk__V0.1.0-20090724.190215-918.jar
env["PATH_INFO"] = versioned_jar_path
end
status, headers, body = @app.call env
if versioned_jar_request
headers['x-java-jnlp-version-id'] = jar_version
headers['Content-Type'] = 'application/java-archive'
end
[status, headers, body]
end
end
end
jnlp_app = Rack::Builder.new do
map "/" do
use Rack::Jnlp
run Rack::Directory.new(jnlp_cache)
end
end
puts "\nStarting server (press ctrl-C to quit)\n\n"
Rack::Handler::WEBrick.run(jnlp_app, :Port => 4321)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment