summaryrefslogtreecommitdiff
path: root/application.rb
blob: 8e82817cd4eb1ab0da74b89661bf8eb3f26fa6c4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
require 'rubygems'
gem 'opentox-ruby-api-wrapper', '~>1.2'
require 'opentox-ruby-api-wrapper'

## REST API

get '/?' do
	Dir["datasets/*"].collect{|dataset|  url_for("/", :full) + File.basename(dataset,".owl")}.sort.join("\n")
end

get '/:id/?' do
	uri = url_for("/#{params[:id]}", :full)
	path = File.join("datasets",params[:id] + ".owl")
	halt 404, "Dataset #{uri} not found." unless File.exists? path
	accept = request.env['HTTP_ACCEPT']
	accept = 'application/rdf+xml' if accept == '*/*' or accept == '' or accept.nil?
	case accept
	when /rdf/ # redland sends text/rdf instead of application/rdf+xml
		send_file path
	when /yaml/
		OpenTox::Dataset.find(uri).to_yaml
	else
		halt 400, "Unsupported MIME type '#{accept}'"
	end
end

get '/:id/features/:feature_id/?' do
	OpenTox::Dataset.find(url_for("/#{params[:id]}", :full)).feature(params[:feature_id])
end

get '/:id/features/?' do
	OpenTox::Dataset.find(url_for("/#{params[:id]}", :full)).features
end

post '/?' do
	id = Dir["datasets/*"].collect{|dataset|  File.basename(dataset,".owl").to_i}.sort.last
	id = id.nil? ? 1 : id + 1
	uri = url_for("/#{id}", :full)
	content_type = request.content_type
	content_type = "application/rdf+xml" if content_type.nil?
	case request.content_type
	when "application/rdf+xml"
		rdf =	request.env["rack.input"].read
		dataset = OpenTox::Dataset.new
		dataset.rdf = rdf
		dataset.uri = uri
	else
		halt 404, "MIME type \"#{request.content_type}\" not supported."
	end
	File.open(File.join("datasets",id.to_s + ".owl"),"w+") { |f| f.write dataset.rdf }
	uri
end

=begin
put '/:id/?' do
	uri = url_for("/#{params[:id]}", :full)
	id = params[:id]
	uri =	url_for("/#{id}", :full)
	case request.content_type
	when "application/rdf+xml"
		input =	request.env["rack.input"].read
		storage = Redland::MemoryStore.new
		parser = Redland::Parser.new
		model = Redland::Model.new storage
		parser.parse_string_into_model(model,input,Redland::Uri.new('/'))
		dataset = model.subject RDF['type'], OT["Dataset"]
		identifier = model.object(dataset, DC['identifier'])
		model.delete dataset, DC['identifier'], identifier
		model.add dataset, DC['identifier'], uri
		File.delete(File.join("datasets",id.to_s + ".rdf"))
		File.open(File.join("datasets",id.to_s + ".rdf"),"w+") { |f| f.write model.to_string }
	else
		halt 404, "MIME type \"#{request.content_type}\" not supported."
	end
end
=end

delete '/:id/?' do
	path = File.join("datasets",params[:id] + ".owl")
	if File.exists? path
		File.delete path
		"Dataset #{params[:id]} deleted."
	else
		status 404
		"Dataset #{params[:id]} does not exist."
	end
end

delete '/?' do
	Dir["datasets/*owl"].each do |f|
		File.delete f
	end
	"All datasets deleted."
end