toxbank-investigation 0.0.2pre → 1.0.0pre1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +1 -0
- data/ChangeLog +26 -0
- data/Gemfile +3 -3
- data/Rakefile +0 -13
- data/VERSION +1 -0
- data/application.rb +169 -108
- data/bin/toxbank-investigation-install +5 -3
- data/config.ru +1 -0
- data/java/config/isa_configurator/investigation.xml +277 -0
- data/pirewriter.rb +15 -0
- data/tbaccount.rb +153 -0
- data/toxbank-investigation.gemspec +2 -4
- metadata +32 -8
- data/Gemfile.lock +0 -111
data/.gitignore
CHANGED
data/ChangeLog
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
v0.0.4 2012-07-
|
2
|
+
- Address and IDs changed
|
3
|
+
- Service URI https://INVESTIGATIONSERVICE is now https://INVESTIGATIONSERVICE/investigation
|
4
|
+
- IDs changed to UUIDs e.G.: https://INVESTIGATIONSERVICE/123 changed to https://INVESTIGATIONSERVICE/investigation/1f6d584a-53aa-4c59-bae3-8c7ac9cb82ff
|
5
|
+
UUID is a v4 random UUID (Universally Unique IDentifier).
|
6
|
+
- Policy/Access management
|
7
|
+
- allowReadByUser and allowReadByGroup parameters added to POST and PUT request (POST to service and PUT to a specific investigation).
|
8
|
+
both values are optional and can be empty or contain single or comma separated URIs of an existing ToxBank user or group (e.G.: allowReadByUser=http://USERSERVICE/toxbank/user/U2,http://USERSERVICE/toxbank/user/U124 )
|
9
|
+
as described here: http://api.toxbank.net/index.php/Protocol#Security.
|
10
|
+
Every user or group get read access to the specific investigation.
|
11
|
+
- The creator of a new investigation gets full REST access (GET/POST/PUT/DELETE). Creator is identified by its subjectid from login and should be member of the LDAP Public Investigator group (cn=PI_GROUP,ou=groups,dc=DOMAIN,dc=TLD).
|
12
|
+
- isPublished flag
|
13
|
+
- New investigations get http://onto.toxbank.net/api/isPublished = false to its metadata RDF representation:
|
14
|
+
e.G.:
|
15
|
+
<rdf:Description rdf:about="https://INVESTIGATIONSERVICE/investigation/f0154c33-e27a-4683-b9cd-94473beccae3/">
|
16
|
+
<ns0:isPublished xmlns:ns0="http://onto.toxbank.net/api/" rdf:datatype="http://www.w3.org/2001/XMLSchema#boolean">false</ns0:isPublished>
|
17
|
+
</rdf:Description>
|
18
|
+
- published parameter added to PUT request to set isPublished in metadata to true:
|
19
|
+
curl -Lk -X PUT -i -H "subjectid:MYTOKEN" -d "published=true" https://INVESTIGATIONSERVICE/investigation/UUID
|
20
|
+
- isSummarySearchable flag
|
21
|
+
summarySearchable parameter added to POST and PUT request to set isSummarySearchable flag in metadata.
|
22
|
+
- Add studies, assays or data to an investigation / Updating an investigation
|
23
|
+
- additions to or updating an investigation will be handled via PUT request
|
24
|
+
|
25
|
+
v0.0.3 2012-05-07
|
26
|
+
* switch from v0.0.2pre to v0.0.3
|
data/Gemfile
CHANGED
@@ -7,6 +7,6 @@ gemspec
|
|
7
7
|
#gem 'rake', '~> 0.9.3.beta.1'
|
8
8
|
gem 'opentox-server', :path => "~/opentox-server"
|
9
9
|
gem "opentox-client", :path => "~/opentox-client"
|
10
|
-
group :test do
|
11
|
-
gem "rack-test", :require => "rack/test"
|
12
|
-
end
|
10
|
+
#group :test do
|
11
|
+
#gem "rack-test", :require => "rack/test"
|
12
|
+
#end
|
data/Rakefile
CHANGED
@@ -1,14 +1 @@
|
|
1
1
|
require "bundler/gem_tasks"
|
2
|
-
require 'bundler'
|
3
|
-
Bundler.require
|
4
|
-
Bundler.setup
|
5
|
-
|
6
|
-
require 'rake/testtask'
|
7
|
-
Rake::TestTask.new do |t|
|
8
|
-
t.libs << 'test'
|
9
|
-
t.test_files = FileList['test/*.rb'] - FileList["test/setup.rb"]
|
10
|
-
t.verbose = true
|
11
|
-
end
|
12
|
-
|
13
|
-
desc "Run tests"
|
14
|
-
task :default => :test
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
1.0.0pre1
|
data/application.rb
CHANGED
@@ -1,19 +1,21 @@
|
|
1
|
-
require
|
2
|
-
require File.
|
1
|
+
require 'opentox-server'
|
2
|
+
require "#{File.dirname(__FILE__)}/tbaccount.rb"
|
3
|
+
require "#{File.dirname(__FILE__)}/pirewriter.rb"
|
3
4
|
|
4
5
|
module OpenTox
|
5
6
|
class Application < Service
|
6
7
|
|
7
8
|
helpers do
|
8
9
|
|
9
|
-
def
|
10
|
-
|
10
|
+
def investigation_uri
|
11
|
+
to("/investigation/#{params[:id]}") # new in Sinatra, replaces url_for
|
11
12
|
end
|
12
13
|
|
13
14
|
def uri_list
|
14
15
|
params[:id] ? d = "./investigation/#{params[:id]}/*" : d = "./investigation/*"
|
15
|
-
uris = Dir[d].collect{|f|
|
16
|
+
uris = Dir[d].collect{|f| to(f.sub(/\.\//,'')) }
|
16
17
|
uris.collect!{|u| u.sub(/(\/#{params[:id]}\/)/,'\1isatab/')} if params[:id]
|
18
|
+
uris.delete_if{|u| u.match(/_policies$/)}
|
17
19
|
uris.compact.sort.join("\n") + "\n"
|
18
20
|
end
|
19
21
|
|
@@ -33,22 +35,17 @@ module OpenTox
|
|
33
35
|
"#{params[:id]}.n3"
|
34
36
|
end
|
35
37
|
|
36
|
-
def next_id
|
37
|
-
id = Dir["./investigation/*"].collect{|f| File.basename(f).to_i}.sort.last
|
38
|
-
id ? id + 1 : 0
|
39
|
-
end
|
40
|
-
|
41
38
|
def prepare_upload
|
42
39
|
# remove stale directories from failed tests
|
43
|
-
stale_files = `cd #{File.dirname(__FILE__)}/investigation && git ls-files --others --exclude-standard --directory`.chomp
|
44
|
-
|
40
|
+
#stale_files = `cd #{File.dirname(__FILE__)}/investigation && git ls-files --others --exclude-standard --directory`.chomp
|
41
|
+
#`cd #{File.dirname(__FILE__)}/investigation && rm -rf #{stale_files}` unless stale_files.empty?
|
45
42
|
# lock tmp dir
|
46
43
|
locked_error "Processing investigation #{params[:id]}. Please try again later." if File.exists? tmp
|
47
44
|
bad_request_error "Please submit data as multipart/form-data" unless request.form_data?
|
48
45
|
# move existing ISA-TAB files to tmp
|
49
46
|
FileUtils.mkdir_p tmp
|
50
47
|
FileUtils.cp Dir[File.join(dir,"*.txt")], tmp
|
51
|
-
|
48
|
+
FileUtils.cp params[:file][:tempfile], File.join(tmp, params[:file][:filename])
|
52
49
|
end
|
53
50
|
|
54
51
|
def extract_zip
|
@@ -58,6 +55,7 @@ module OpenTox
|
|
58
55
|
`mv #{d}/* #{tmp}`
|
59
56
|
`rmdir #{d}`
|
60
57
|
end
|
58
|
+
replace_pi @subjectid
|
61
59
|
end
|
62
60
|
|
63
61
|
def extract_xls
|
@@ -83,95 +81,135 @@ module OpenTox
|
|
83
81
|
|
84
82
|
def isa2rdf
|
85
83
|
begin # isa2rdf returns correct exit code
|
86
|
-
`cd #{File.dirname(__FILE__)}/java && java -jar isa2rdf-0.0.
|
84
|
+
`cd #{File.dirname(__FILE__)}/java && java -jar isa2rdf-0.0.3-SNAPSHOT.jar -d #{tmp} -o #{File.join tmp,n3} &> #{File.join tmp,'log'}`
|
87
85
|
rescue
|
88
86
|
log = File.read File.join(tmp,"log")
|
89
87
|
FileUtils.remove_entry dir
|
90
|
-
bad_request_error "ISA-TAB validation failed:\n#{log}",
|
88
|
+
bad_request_error "ISA-TAB validation failed:\n#{log}", investigation_uri
|
91
89
|
end
|
92
90
|
# rewrite default prefix
|
93
|
-
`sed -i 's;http://onto.toxbank.net/isa/tmp/;#{
|
91
|
+
`sed -i 's;http://onto.toxbank.net/isa/tmp/;#{investigation_uri}/;' #{File.join tmp,n3}`
|
94
92
|
# add owl:sameAs to identify investigation later
|
95
93
|
investigation_id = `grep ":I[0-9]" #{File.join tmp,n3}|cut -f1 -d ' '`.strip
|
96
|
-
`
|
94
|
+
`sed -i 's;#{investigation_id};:;' #{File.join tmp,n3}`
|
95
|
+
`echo "\n: a <#{RDF::OT.Investigation}> ." >> #{File.join tmp,n3}`
|
96
|
+
#`echo "\n: owl:sameAs #{investigation_id} ." >> #{File.join tmp,n3}`
|
97
97
|
FileUtils.rm Dir[File.join(tmp,"*.zip")]
|
98
98
|
# if everything is fine move ISA-TAB files back to original dir
|
99
99
|
FileUtils.cp Dir[File.join(tmp,"*")], dir
|
100
|
-
# git commit
|
101
|
-
newfiles = `cd #{File.dirname(__FILE__)}/investigation; git ls-files --others --exclude-standard --directory`
|
102
|
-
`cd #{File.dirname(__FILE__)}/investigation && git add #{newfiles}`
|
103
|
-
['application/zip', 'application/vnd.ms-excel'].include?(params[:file][:type]) ? action = "created" : action = "modified"
|
104
|
-
`cd #{File.dirname(__FILE__)}/investigation && git commit -am "investigation #{params[:id]} #{action} by #{request.ip}"`
|
105
100
|
# create new zipfile
|
106
101
|
zipfile = File.join dir, "investigation_#{params[:id]}.zip"
|
107
102
|
`zip -j #{zipfile} #{dir}/*.txt`
|
108
103
|
# store RDF
|
109
|
-
|
110
|
-
|
111
|
-
`curl -0 -k -u #{$four_store[:user]}:#{$four_store[:password]} -T #{file} -H 'Content_Length => #{length}' '#{$four_store[:uri]}/data/?graph=#{$four_store[:uri]}/data/#{$four_store[:user]}/investigation#{n3}'`
|
104
|
+
c_length = File.size(File.join dir,n3)
|
105
|
+
RestClient.put File.join(FourStore.four_store_uri,"data",investigation_uri), File.read(File.join(dir,n3)), {:content_type => "application/x-turtle", :content_length => c_length} # content-type not very consistent in 4store
|
112
106
|
FileUtils.remove_entry tmp # unlocks tmp
|
113
|
-
|
114
|
-
|
107
|
+
# git commit
|
108
|
+
newfiles = `cd #{File.dirname(__FILE__)}/investigation; git ls-files --others --exclude-standard --directory #{params[:id]}`
|
109
|
+
`cd #{File.dirname(__FILE__)}/investigation && git add #{newfiles}`
|
110
|
+
['application/zip', 'application/vnd.ms-excel'].include?(params[:file][:type]) ? action = "created" : action = "modified"
|
111
|
+
`cd #{File.dirname(__FILE__)}/investigation && git commit -am "investigation #{params[:id]} #{action} by #{request.ip}"`
|
112
|
+
investigation_uri
|
113
|
+
end
|
114
|
+
|
115
|
+
def create_policy ldaptype, uristring
|
116
|
+
begin
|
117
|
+
filename = File.join(dir, "#{ldaptype}_policies")
|
118
|
+
policyfile = File.open(filename,"w")
|
119
|
+
uriarray = uristring.split(",")
|
120
|
+
uriarray.each do |u|
|
121
|
+
tbaccount = OpenTox::TBAccount.new(u, @subjectid)
|
122
|
+
policyfile.puts tbaccount.get_policy(investigation_uri)
|
123
|
+
end
|
124
|
+
policyfile.close
|
125
|
+
policytext = File.read filename
|
126
|
+
replace = policytext.gsub!("</Policies>\n<!DOCTYPE Policies PUBLIC \"-//Sun Java System Access Manager7.1 2006Q3 Admin CLI DTD//EN\" \"jar://com/sun/identity/policy/policyAdmin.dtd\">\n<Policies>\n", "")
|
127
|
+
File.open(filename, "w") { |file| file.puts replace } if replace
|
128
|
+
Authorization.reset_policies investigation_uri, ldaptype, @subjectid
|
129
|
+
ret = Authorization.create_policy(File.read(policyfile), @subjectid)
|
130
|
+
File.delete policyfile if ret
|
131
|
+
rescue
|
132
|
+
$logger.warn "create policies error for Investigation URI: #{investigation_uri} for user/group uris: #{uristring}"
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
def set_flag flag, value, type = ""
|
137
|
+
flagtype = type == "boolean" ? "^^<#{RDF::XSD.boolean}>" : ""
|
138
|
+
FourStore.update "DELETE DATA { GRAPH <#{investigation_uri}> {<#{investigation_uri}/> <#{flag}> \"#{!value}\"#{flagtype}}}"
|
139
|
+
FourStore.update "INSERT DATA { GRAPH <#{investigation_uri}> {<#{investigation_uri}/> <#{flag}> \"#{value}\"#{flagtype}}}"
|
115
140
|
end
|
116
141
|
|
117
|
-
def
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
142
|
+
def qfilter(flag, uri)
|
143
|
+
qfilter = FourStore.query "SELECT ?s FROM <#{uri}> WHERE {?s <#{RDF::TB}#{flag}> ?o FILTER regex(?o, 'true', 'i')}", "application/sparql-results+xml"
|
144
|
+
qfilter.split("\n")[7].gsub(/<binding name="s"><uri>|\/<\/uri><\/binding>/, '').strip
|
145
|
+
end
|
146
|
+
|
147
|
+
def protected!(subjectid)
|
148
|
+
if !env["session"] && subjectid
|
149
|
+
unless authorized?(subjectid) || get_permission
|
150
|
+
$logger.debug ">-get_permission failed"
|
151
|
+
$logger.debug "URI not authorized: clean: " + clean_uri("#{request.env['rack.url_scheme']}://#{request.env['HTTP_HOST']}#{request.env['REQUEST_URI']}").sub("http://","https://").to_s + " full: #{request.env['rack.url_scheme']}://#{request.env['HTTP_HOST']}#{request.env['REQUEST_URI']} with request: #{request.env['REQUEST_METHOD']}"
|
152
|
+
unauthorized_error "Not authorized: #{request.env['REQUEST_URI']}"
|
153
|
+
end
|
122
154
|
else
|
123
|
-
|
155
|
+
unauthorized_error "Not authorized: #{request.env['REQUEST_URI']}"
|
124
156
|
end
|
125
|
-
`curl -H 'Accept:#{@accept}' -k -u #{$four_store[:user]}:#{$four_store[:password]} -d 'query=#{sparql}' '#{$four_store[:uri]}/sparql/'`
|
126
157
|
end
|
127
158
|
|
159
|
+
def get_permission
|
160
|
+
# only for GET
|
161
|
+
return false if request.env['REQUEST_METHOD'] != "GET"
|
162
|
+
if request.env['REQUEST_URI'] =~ /metadata/
|
163
|
+
ruri = request.env['REQUEST_URI'].chomp("/metadata")
|
164
|
+
return true if qfilter("isSummarySearchable", to(ruri)) =~ /#{to(ruri)}/
|
165
|
+
return false
|
166
|
+
else
|
167
|
+
ruri = request.env['REQUEST_URI'].gsub(/\/isatab\/.*/,'')
|
168
|
+
return true if qfilter("isPublished", to(ruri)) =~ /#{to(ruri)}/
|
169
|
+
return false
|
170
|
+
end
|
171
|
+
end
|
172
|
+
|
173
|
+
def qlist
|
174
|
+
list = FourStore.list(to("/investigation"), "text/uri-list")
|
175
|
+
list.split.keep_if{|v| v =~ /#{$investigation[:uri]}/ || qfilter("isSummarySearchable", v)}.join("\n")
|
176
|
+
end
|
177
|
+
|
128
178
|
end
|
129
179
|
|
130
180
|
before do
|
131
|
-
|
181
|
+
resource_not_found_error "Directory #{dir} does not exist." unless File.exist? dir
|
182
|
+
parse_input if request.request_method =~ /POST|PUT/
|
132
183
|
@accept = request.env['HTTP_ACCEPT']
|
133
184
|
response['Content-Type'] = @accept
|
134
|
-
# TODO: A+A
|
135
185
|
end
|
136
186
|
|
137
|
-
#
|
138
|
-
# Requests with a query parameter will perform a SPARQL query on all investigations
|
139
|
-
# @return [application/sparql-results+json] Query result
|
187
|
+
# uri-list of all investigations
|
140
188
|
# @return [text/uri-list] List of investigations
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
case @accept
|
147
|
-
when 'text/uri-list'
|
148
|
-
uri_list
|
149
|
-
else
|
150
|
-
response['Content-Type'] = 'application/rdf+xml'
|
151
|
-
response['Content-Type'] = @accept if @accept == 'text/turtle'
|
152
|
-
query "
|
153
|
-
PREFIX isa: <http://onto.toxbank.net/isa/>
|
154
|
-
CONSTRUCT { ?s ?p ?o . }
|
155
|
-
WHERE {
|
156
|
-
?s a isa:Investigation ;
|
157
|
-
?p ?o .
|
158
|
-
}
|
159
|
-
"
|
160
|
-
end
|
161
|
-
end
|
189
|
+
# include own and searchable
|
190
|
+
# TODO handle published for uri-list
|
191
|
+
get '/investigation/?' do
|
192
|
+
bad_request_error "Mime type #{@accept} not supported here. Please expect data as text/uri-list." unless @accept.to_s == "text/uri-list"
|
193
|
+
qlist
|
162
194
|
end
|
163
195
|
|
164
196
|
# Create a new investigation from ISA-TAB files
|
165
197
|
# @param [Header] Content-type: multipart/form-data
|
166
198
|
# @param file Zipped investigation files in ISA-TAB format
|
167
|
-
# @return [text/uri-list]
|
168
|
-
post '/?' do
|
169
|
-
params[:id] =
|
170
|
-
mime_types = ['application/zip','text/tab-separated-values',
|
199
|
+
# @return [text/uri-list] Task URI
|
200
|
+
post '/investigation/?' do
|
201
|
+
params[:id] = SecureRandom.uuid
|
202
|
+
mime_types = ['application/zip','text/tab-separated-values', 'application/vnd.ms-excel']
|
171
203
|
bad_request_error "No file uploaded." unless params[:file]
|
172
204
|
bad_request_error "Mime type #{params[:file][:type]} not supported. Please submit data as zip archive (application/zip), Excel file (application/vnd.ms-excel) or as tab separated text (text/tab-separated-values)" unless mime_types.include? params[:file][:type]
|
173
|
-
|
205
|
+
if params[:file]
|
206
|
+
if params[:file][:type] == "application/zip"
|
207
|
+
bad_request_error "The zip #{params[:file][:filename]} contains no investigation file.", investigation_uri unless `unzip -Z -1 #{File.join(params[:file][:tempfile])}`.match('.txt')
|
208
|
+
end
|
209
|
+
end
|
210
|
+
task = OpenTox::Task.create($task[:uri], @subjectid, RDF::DC.description => "#{params[:file][:filename]}: Uploading, validating and converting to RDF") do
|
174
211
|
prepare_upload
|
212
|
+
OpenTox::Authorization.create_pi_policy(investigation_uri, @subjectid)
|
175
213
|
case params[:file][:type]
|
176
214
|
when "application/vnd.ms-excel"
|
177
215
|
extract_xls
|
@@ -182,6 +220,14 @@ module OpenTox
|
|
182
220
|
#when 'text/tab-separated-values' # do nothing, file is already in tmp
|
183
221
|
end
|
184
222
|
isa2rdf
|
223
|
+
set_flag(RDF::TB.isPublished, false, "boolean")
|
224
|
+
set_flag(RDF::TB.isSummarySearchable, (params[:summarySearchable].to_s == "true" ? true : false), "boolean")
|
225
|
+
#set_flag(RDF.Type, RDF::OT.Investigation)
|
226
|
+
create_policy "user", params[:allowReadByUser] if params[:allowReadByUser]
|
227
|
+
create_policy "group", params[:allowReadByGroup] if params[:allowReadByGroup]
|
228
|
+
# TODO send notification to UI
|
229
|
+
# OpenTox::RestClientWrapper.put "https://www.leadscope.com/dev-toxbank-search/search/index/investigation?resourceUri=#{CGI.escape(investigation_uri)}",{},{:subjectid => @subjectid}
|
230
|
+
investigation_uri
|
185
231
|
end
|
186
232
|
response['Content-Type'] = 'text/uri-list'
|
187
233
|
halt 202,task.uri+"\n"
|
@@ -190,8 +236,9 @@ module OpenTox
|
|
190
236
|
# Get an investigation representation
|
191
237
|
# @param [Header] Accept: one of text/tab-separated-values, text/uri-list, application/zip, application/sparql-results+json
|
192
238
|
# @return [text/tab-separated-values, text/uri-list, application/zip, application/sparql-results+json] Investigation in the requested format
|
193
|
-
|
194
|
-
|
239
|
+
# include own and published
|
240
|
+
get '/investigation/:id' do
|
241
|
+
resource_not_found_error "Investigation #{investigation_uri} does not exist." unless File.exist? dir # not called in before filter???
|
195
242
|
case @accept
|
196
243
|
when "text/tab-separated-values"
|
197
244
|
send_file Dir["./investigation/#{params[:id]}/i_*txt"].first, :type => @accept
|
@@ -199,82 +246,96 @@ module OpenTox
|
|
199
246
|
uri_list
|
200
247
|
when "application/zip"
|
201
248
|
send_file File.join dir, "investigation_#{params[:id]}.zip"
|
202
|
-
when "application/rdf+xml"
|
203
|
-
query "CONSTRUCT { ?s ?p ?o } FROM <#{$four_store[:uri]}/data/#{$four_store[:user]}/investigation#{n3}> WHERE {?s ?p ?o } LIMIT 15000"
|
204
249
|
else
|
205
|
-
|
206
|
-
#bad_request_error "Accept header #{@accept} not supported for #{uri}"
|
207
|
-
$logger.warn "Accept header #{@accept} not supported for #{uri}" # do not halt: strange requests from test, TODO: identify and fix
|
250
|
+
FourStore.query "CONSTRUCT { ?s ?p ?o } FROM <#{investigation_uri}> WHERE {?s ?p ?o}", @accept
|
208
251
|
end
|
209
252
|
end
|
210
253
|
|
211
254
|
# Get investigation metadata in RDF
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
PREFIX owl: <http://www.w3.org/2002/07/owl#>
|
217
|
-
CONSTRUCT { ?s ?p ?o. }
|
218
|
-
WHERE {
|
219
|
-
: owl:sameAs ?s .
|
220
|
-
?s ?p ?o .
|
221
|
-
}
|
222
|
-
"
|
255
|
+
# include own, pulished and searchable
|
256
|
+
get '/investigation/:id/metadata' do
|
257
|
+
resource_not_found_error "Investigation #{investigation_uri} does not exist." unless File.exist? dir # not called in before filter???
|
258
|
+
FourStore.query "CONSTRUCT { ?s ?p ?o. } FROM <#{investigation_uri}> WHERE { ?s <#{RDF.type}> <http://onto.toxbank.net/isa/Investigation>. ?s ?p ?o . } ", @accept
|
223
259
|
end
|
224
260
|
|
225
261
|
# Get a study, assay, data representation
|
226
262
|
# @param [Header] one of text/tab-separated-values, application/sparql-results+json
|
227
263
|
# @return [text/tab-separated-values, application/sparql-results+json] Study, assay, data representation in ISA-TAB or RDF format
|
228
|
-
|
229
|
-
|
264
|
+
# include own and published
|
265
|
+
get '/investigation/:id/isatab/:filename' do
|
266
|
+
resource_not_found_error "File #{File.join investigation_uri,"isatab",params[:filename]} does not exist." unless File.exist? file
|
230
267
|
# TODO: returns text/plain content type for tab separated files
|
231
268
|
send_file file, :type => File.new(file).mime_type
|
232
269
|
end
|
233
270
|
|
234
271
|
# Get RDF for an investigation resource
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
PREFIX owl: <http://www.w3.org/2002/07/owl#>
|
239
|
-
CONSTRUCT { :#{params[:resource]} ?p ?o. }
|
240
|
-
WHERE {
|
241
|
-
:#{params[:resource]} ?p ?o .
|
242
|
-
}
|
243
|
-
"
|
272
|
+
# include own and published
|
273
|
+
get '/investigation/:id/:resource' do
|
274
|
+
FourStore.query " CONSTRUCT { <#{File.join(investigation_uri,params[:resource])}> ?p ?o. } FROM <#{investigation_uri}> WHERE { <#{File.join(investigation_uri,params[:resource])}> ?p ?o . } ", @accept
|
244
275
|
end
|
245
276
|
|
246
277
|
# Add studies, assays or data to an investigation
|
247
278
|
# @param [Header] Content-type: multipart/form-data
|
248
279
|
# @param file Study, assay and data file (zip archive of ISA-TAB files or individual ISA-TAB files)
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
280
|
+
# @return [text/uri-list] Task URI
|
281
|
+
put '/investigation/:id' do
|
282
|
+
mime_types = ['application/zip','text/tab-separated-values', 'application/vnd.ms-excel']
|
283
|
+
bad_request_error "Mime type #{params[:file][:type]} not supported. Please submit data as zip archive (application/zip), Excel file (application/vnd.ms-excel) or as tab separated text (text/tab-separated-values)" unless mime_types.include?(params[:file][:type]) if params[:file]
|
284
|
+
task = OpenTox::Task.create($task[:uri], @subjectid, RDF::DC.description => "#{investigation_uri}: Add studies, assays or data.") do
|
285
|
+
if params[:file]
|
286
|
+
prepare_upload
|
287
|
+
case params[:file][:type]
|
288
|
+
when 'application/zip'
|
289
|
+
extract_zip
|
290
|
+
end
|
291
|
+
isa2rdf
|
292
|
+
end
|
293
|
+
set_flag(RDF::TB.isPublished, (params[:published].to_s == "true" ? true : false), "boolean") if params[:file] || (!params[:file] && params[:published])
|
294
|
+
set_flag(RDF::TB.isSummarySearchable, (params[:summarySearchable].to_s == "true" ? true : false), "boolean") if params[:file] || (!params[:file] && params[:summarySearchable])
|
295
|
+
create_policy "user", params[:allowReadByUser] if params[:allowReadByUser]
|
296
|
+
create_policy "group", params[:allowReadByGroup] if params[:allowReadByGroup]
|
297
|
+
# TODO send notification to UI
|
298
|
+
# OpenTox::RestClientWrapper.put "https://www.leadscope.com/dev-toxbank-search/search/index/investigation?resourceUri=#{CGI.escape(investigation_uri)}",{},{:subjectid => @subjectid}
|
299
|
+
investigation_uri
|
255
300
|
end
|
256
301
|
response['Content-Type'] = 'text/uri-list'
|
257
302
|
halt 202,task.uri+"\n"
|
258
303
|
end
|
259
304
|
|
260
305
|
# Delete an investigation
|
261
|
-
delete '/:id' do
|
306
|
+
delete '/investigation/:id' do
|
262
307
|
FileUtils.remove_entry dir
|
263
308
|
# git commit
|
264
309
|
`cd #{File.dirname(__FILE__)}/investigation; git commit -am "#{dir} deleted by #{request.ip}"`
|
265
310
|
# updata RDF
|
266
|
-
|
311
|
+
FourStore.delete investigation_uri
|
312
|
+
if @subjectid and !File.exists?(dir) and investigation_uri
|
313
|
+
begin
|
314
|
+
res = OpenTox::Authorization.delete_policies_from_uri(investigation_uri, @subjectid)
|
315
|
+
$logger.debug "Policy deleted for Investigation URI: #{investigation_uri} with result: #{res}"
|
316
|
+
rescue
|
317
|
+
$logger.warn "Policy delete error for Investigation URI: #{investigation_uri}"
|
318
|
+
end
|
319
|
+
end
|
320
|
+
# TODO send notification to UI
|
321
|
+
# OpenTox::RestClientWrapper.delete "https://www.leadscope.com/dev-toxbank-search/search/index/investigation?resourceUri=#{CGI.escape(investigation_uri)}",{},{:subjectid => @subjectid}
|
267
322
|
response['Content-Type'] = 'text/plain'
|
268
323
|
"Investigation #{params[:id]} deleted"
|
269
324
|
end
|
270
325
|
|
271
326
|
# Delete an individual study, assay or data file
|
272
|
-
delete '/:id/:filename' do
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
327
|
+
delete '/investigation/:id/:filename' do
|
328
|
+
if is_pi?(@subjectid)
|
329
|
+
task = OpenTox::Task.create($task[:uri], @subjectid, RDF::DC.description => "Deleting #{params[:file][:filename]} from investigation #{params[:id]}.") do
|
330
|
+
prepare_upload
|
331
|
+
File.delete File.join(tmp,params[:filename])
|
332
|
+
isa2rdf
|
333
|
+
# TODO send notification to UI (TO CHECK: if files will be indexed?)
|
334
|
+
# OpenTox::RestClientWrapper.put "https://www.leadscope.com/dev-toxbank-search/search/index/investigation?resourceUri=#{CGI.escape(investigation_uri)}",{},{:subjectid => @subjectid}
|
335
|
+
"#{request.env['rack.url_scheme']}://#{request.env['HTTP_HOST']}"
|
336
|
+
end
|
337
|
+
else
|
338
|
+
unauthorized_error "not authorized: #{investigation_uri}"
|
278
339
|
end
|
279
340
|
response['Content-Type'] = 'text/uri-list'
|
280
341
|
halt 202,task.uri+"\n"
|
@@ -2,7 +2,7 @@
|
|
2
2
|
# Main ToxBank-investigation install script
|
3
3
|
# Author: Christoph Helma, Andreas Maunz, Denis Gebele.
|
4
4
|
|
5
|
-
ISA2RDF=isa2rdf-0.0.
|
5
|
+
ISA2RDF=isa2rdf-0.0.3-SNAPSHOT.jar
|
6
6
|
|
7
7
|
echo
|
8
8
|
echo "This script will setup and configure the toxbank-investigation service."
|
@@ -32,6 +32,8 @@ then
|
|
32
32
|
git init
|
33
33
|
echo "*/*.zip" > .gitignore
|
34
34
|
echo "*/tmp" >> .gitignore
|
35
|
+
echo "user_policies" >> .gitignore
|
36
|
+
echo "group_policies" >> .gitignore
|
35
37
|
git add .gitignore
|
36
38
|
git commit -am "Initial commit: .gitignore added"
|
37
39
|
fi
|
@@ -39,11 +41,11 @@ cd $TB_HOME
|
|
39
41
|
|
40
42
|
echo "Installing configuration files"
|
41
43
|
|
42
|
-
mkdir -p "$HOME/.opentox/config
|
44
|
+
mkdir -p "$HOME/.opentox/config"
|
43
45
|
mkdir -p "$HOME/.opentox/log"
|
44
46
|
mkdir -p "$HOME/.opentox/tmp"
|
45
47
|
|
46
|
-
config="$HOME/.opentox/config/
|
48
|
+
config="$HOME/.opentox/config/investigation.rb"
|
47
49
|
|
48
50
|
if [ -f $config ]
|
49
51
|
then
|
data/config.ru
CHANGED
@@ -0,0 +1,277 @@
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
2
|
+
<isatab-config-file xmlns="http://www.ebi.ac.uk/bii/isatab_configuration#">
|
3
|
+
<isatab-configuration table-name="investigation" isatab-assay-type="generic_assay" isatab-conversion-target="generic">
|
4
|
+
<measurement term-label="[investigation]" term-accession="" source-abbreviation="" />
|
5
|
+
<technology term-label="" term-accession="" source-abbreviation="" />
|
6
|
+
<field header="Investigation Identifier" data-type="String" is-file-field="false" is-multiple-value="false" is-required="true" is-hidden="false" is-forced-ontology="false" section="INVESTIGATION">
|
7
|
+
<description><![CDATA[A user defined identifier for the investigation.]]></description>
|
8
|
+
<default-value><![CDATA[]]></default-value>
|
9
|
+
</field>
|
10
|
+
<field header="Investigation Title" data-type="String" is-file-field="false" is-multiple-value="false" is-required="true" is-hidden="false" is-forced-ontology="false" section="INVESTIGATION">
|
11
|
+
<description><![CDATA[A title for the Investigation.]]></description>
|
12
|
+
<default-value><![CDATA[]]></default-value>
|
13
|
+
</field>
|
14
|
+
<field header="Investigation Description" data-type="Long String" is-file-field="false" is-multiple-value="false" is-required="true" is-hidden="false" is-forced-ontology="false" section="INVESTIGATION">
|
15
|
+
<description><![CDATA[A brief description of the investigation aims.]]></description>
|
16
|
+
<default-value><![CDATA[]]></default-value>
|
17
|
+
</field>
|
18
|
+
<field header="Investigation Submission Date" data-type="Date" is-file-field="false" is-multiple-value="false" is-required="false" is-hidden="false" is-forced-ontology="false" section="INVESTIGATION">
|
19
|
+
<description><![CDATA[The date the investigation was submitted.]]></description>
|
20
|
+
<default-value><![CDATA[]]></default-value>
|
21
|
+
</field>
|
22
|
+
<field header="Investigation Public Release Date" data-type="Date" is-file-field="false" is-multiple-value="false" is-required="false" is-hidden="false" is-forced-ontology="false" section="INVESTIGATION">
|
23
|
+
<description><![CDATA[The date the investigation was release publicly.]]></description>
|
24
|
+
<default-value><![CDATA[]]></default-value>
|
25
|
+
</field>
|
26
|
+
<field header="Comment [Created with configuration]" data-type="String" is-file-field="false" is-multiple-value="false" is-required="false" is-hidden="true" is-forced-ontology="false" section="INVESTIGATION">
|
27
|
+
<description><![CDATA[A field indicating which ISA configuration was used to create the ISAtab file.]]></description>
|
28
|
+
<default-value><![CDATA[]]></default-value>
|
29
|
+
</field>
|
30
|
+
<field header="Comment [Last Opened With Configuration]" data-type="String" is-file-field="false" is-multiple-value="false" is-required="false" is-hidden="true" is-forced-ontology="false" section="INVESTIGATION">
|
31
|
+
<description><![CDATA[A field indicating which ISA configuration was last used to open the ISAtab file.]]></description>
|
32
|
+
<default-value><![CDATA[]]></default-value>
|
33
|
+
</field>
|
34
|
+
<field header="Comment [Owning Organisation URI]" data-type="Ontology term" is-file-field="false" is-multiple-value="false" is-required="true" is-hidden="false" is-forced-ontology="false" section="INVESTIGATION">
|
35
|
+
<description><![CDATA[Owning Organisation URI]]></description>
|
36
|
+
<default-value><![CDATA[]]></default-value>
|
37
|
+
<recommended-ontologies>
|
38
|
+
<ontology id="TBO" abbreviation="TBO" name="ToxBank organisation" version="0.1" />
|
39
|
+
</recommended-ontologies>
|
40
|
+
</field>
|
41
|
+
<field header="Comment [Consortium URI]" data-type="Ontology term" is-file-field="false" is-multiple-value="false" is-required="true" is-hidden="false" is-forced-ontology="false" section="INVESTIGATION">
|
42
|
+
<description><![CDATA[Consortium URI]]></description>
|
43
|
+
<default-value><![CDATA[]]></default-value>
|
44
|
+
<recommended-ontologies>
|
45
|
+
<ontology id="TBC" abbreviation="TBC" name="ToxBank consortium" version="0.1" />
|
46
|
+
</recommended-ontologies>
|
47
|
+
</field>
|
48
|
+
<field header="Comment [Principal Investigator URI]" data-type="Ontology term" is-file-field="false" is-multiple-value="false" is-required="true" is-hidden="false" is-forced-ontology="false" section="INVESTIGATION">
|
49
|
+
<description><![CDATA[Toxbank user URI]]></description>
|
50
|
+
<default-value><![CDATA[]]></default-value>
|
51
|
+
<recommended-ontologies>
|
52
|
+
<ontology id="TBU" abbreviation="TBU" name="ToxBank users" version="0.1" />
|
53
|
+
</recommended-ontologies>
|
54
|
+
</field>
|
55
|
+
<field header="Comment [Investigation keywords]" data-type="Ontology term" is-file-field="false" is-multiple-value="true" is-required="true" is-hidden="false" is-forced-ontology="true" section="INVESTIGATION">
|
56
|
+
<description><![CDATA[Investigation keywords.]]></description>
|
57
|
+
<default-value><![CDATA[]]></default-value>
|
58
|
+
<recommended-ontologies>
|
59
|
+
<ontology id="TBK" abbreviation="TBK" name="ToxBank keywords" version="0.1" />
|
60
|
+
</recommended-ontologies>
|
61
|
+
</field>
|
62
|
+
<field header="Investigation PubMed ID" data-type="String" is-file-field="false" is-multiple-value="false" is-required="true" is-hidden="false" is-forced-ontology="false" section="INVESTIGATION PUBLICATIONS">
|
63
|
+
<description><![CDATA[The PubMed ID related to this publication (if available).]]></description>
|
64
|
+
<default-value><![CDATA[]]></default-value>
|
65
|
+
</field>
|
66
|
+
<field header="Investigation Publication DOI" data-type="String" is-file-field="false" is-multiple-value="false" is-required="true" is-hidden="false" is-forced-ontology="false" section="INVESTIGATION PUBLICATIONS">
|
67
|
+
<description><![CDATA[The DOI related to this publication (if available).]]></description>
|
68
|
+
<default-value><![CDATA[]]></default-value>
|
69
|
+
</field>
|
70
|
+
<field header="Investigation Publication Author List" data-type="Long String" is-file-field="false" is-multiple-value="false" is-required="true" is-hidden="false" is-forced-ontology="false" section="INVESTIGATION PUBLICATIONS">
|
71
|
+
<description><![CDATA[The authors who contributed to this publication.]]></description>
|
72
|
+
<default-value><![CDATA[]]></default-value>
|
73
|
+
</field>
|
74
|
+
<field header="Investigation Publication Title" data-type="Long String" is-file-field="false" is-multiple-value="false" is-required="true" is-hidden="false" is-forced-ontology="false" section="INVESTIGATION PUBLICATIONS">
|
75
|
+
<description><![CDATA[The title of the publication.]]></description>
|
76
|
+
<default-value><![CDATA[]]></default-value>
|
77
|
+
</field>
|
78
|
+
<field header="Investigation Publication Status" data-type="Ontology term" is-file-field="false" is-multiple-value="false" is-required="true" is-hidden="false" is-forced-ontology="false" section="INVESTIGATION PUBLICATIONS">
|
79
|
+
<description><![CDATA[The status of this publication, e.g. Published, Submitted, etc.]]></description>
|
80
|
+
<default-value><![CDATA[]]></default-value>
|
81
|
+
</field>
|
82
|
+
<field header="Investigation Person Last Name" data-type="String" is-file-field="false" is-multiple-value="false" is-required="true" is-hidden="false" is-forced-ontology="false" section="INVESTIGATION CONTACTS">
|
83
|
+
<description><![CDATA[The last name/surname of the contact.]]></description>
|
84
|
+
<default-value><![CDATA[]]></default-value>
|
85
|
+
</field>
|
86
|
+
<field header="Investigation Person First Name" data-type="String" is-file-field="false" is-multiple-value="false" is-required="true" is-hidden="false" is-forced-ontology="false" section="INVESTIGATION CONTACTS">
|
87
|
+
<description><![CDATA[The first name/forename of the contact.]]></description>
|
88
|
+
<default-value><![CDATA[]]></default-value>
|
89
|
+
</field>
|
90
|
+
<field header="Investigation Person Mid Initials" data-type="String" is-file-field="false" is-multiple-value="false" is-required="true" is-hidden="false" is-forced-ontology="false" section="INVESTIGATION CONTACTS">
|
91
|
+
<description><![CDATA[The mid initial of the contact.]]></description>
|
92
|
+
<default-value><![CDATA[]]></default-value>
|
93
|
+
</field>
|
94
|
+
<field header="Investigation Person Email" data-type="Long String" is-file-field="false" is-multiple-value="false" is-required="false" is-hidden="false" is-forced-ontology="false" section="INVESTIGATION CONTACTS">
|
95
|
+
<description><![CDATA[The email corresponding to this contact.]]></description>
|
96
|
+
<default-value><![CDATA[]]></default-value>
|
97
|
+
</field>
|
98
|
+
<field header="Investigation Person Phone" data-type="String" is-file-field="false" is-multiple-value="false" is-required="false" is-hidden="false" is-forced-ontology="false" section="INVESTIGATION CONTACTS">
|
99
|
+
<description><![CDATA[A phone number for this contact, if available.]]></description>
|
100
|
+
<default-value><![CDATA[]]></default-value>
|
101
|
+
</field>
|
102
|
+
<field header="Investigation Person Fax" data-type="String" is-file-field="false" is-multiple-value="false" is-required="false" is-hidden="false" is-forced-ontology="false" section="INVESTIGATION CONTACTS">
|
103
|
+
<description><![CDATA[A fax number for this contact, if available.]]></description>
|
104
|
+
<default-value><![CDATA[]]></default-value>
|
105
|
+
</field>
|
106
|
+
<field header="Investigation Person Address" data-type="Long String" is-file-field="false" is-multiple-value="false" is-required="false" is-hidden="false" is-forced-ontology="false" section="INVESTIGATION CONTACTS">
|
107
|
+
<description><![CDATA[The address for this contact, preferably, their institution.]]></description>
|
108
|
+
<default-value><![CDATA[]]></default-value>
|
109
|
+
</field>
|
110
|
+
<field header="Investigation Person Affiliation" data-type="String" is-file-field="false" is-multiple-value="false" is-required="false" is-hidden="false" is-forced-ontology="false" section="INVESTIGATION CONTACTS">
|
111
|
+
<description><![CDATA[The affiliation for this contact.]]></description>
|
112
|
+
<default-value><![CDATA[]]></default-value>
|
113
|
+
</field>
|
114
|
+
<field header="Investigation Person Roles" data-type="Ontology term" is-file-field="false" is-multiple-value="false" is-required="false" is-hidden="false" is-forced-ontology="false" section="INVESTIGATION CONTACTS">
|
115
|
+
<description><![CDATA[The role of the person in this investigation.]]></description>
|
116
|
+
<default-value><![CDATA[]]></default-value>
|
117
|
+
</field>
|
118
|
+
<field header="Comment [Investigation Person URI]" data-type="Ontology term" is-file-field="false" is-multiple-value="false" is-required="true" is-hidden="false" is-forced-ontology="true" section="INVESTIGATION CONTACTS">
|
119
|
+
<description><![CDATA[Toxbank User URI]]></description>
|
120
|
+
<default-value><![CDATA[]]></default-value>
|
121
|
+
<recommended-ontologies>
|
122
|
+
<ontology id="TBU" abbreviation="TBU" name="ToxBank users" version="0.1" />
|
123
|
+
</recommended-ontologies>
|
124
|
+
</field>
|
125
|
+
<field header="Study Identifier" data-type="String" is-file-field="false" is-multiple-value="false" is-required="true" is-hidden="false" is-forced-ontology="false" section="STUDY">
|
126
|
+
<description><![CDATA[A user defined identifier for the study.]]></description>
|
127
|
+
<default-value><![CDATA[]]></default-value>
|
128
|
+
</field>
|
129
|
+
<field header="Study Title" data-type="String" is-file-field="false" is-multiple-value="false" is-required="true" is-hidden="false" is-forced-ontology="false" section="STUDY">
|
130
|
+
<description><![CDATA[A title for the Study.]]></description>
|
131
|
+
<default-value><![CDATA[]]></default-value>
|
132
|
+
</field>
|
133
|
+
<field header="Study Description" data-type="Long String" is-file-field="false" is-multiple-value="false" is-required="true" is-hidden="false" is-forced-ontology="false" section="STUDY">
|
134
|
+
<description><![CDATA[A brief description of the study aims.]]></description>
|
135
|
+
<default-value><![CDATA[]]></default-value>
|
136
|
+
</field>
|
137
|
+
<field header="Study Submission Date" data-type="Date" is-file-field="false" is-multiple-value="false" is-required="false" is-hidden="false" is-forced-ontology="false" section="STUDY">
|
138
|
+
<description><![CDATA[The date the study was submitted.]]></description>
|
139
|
+
<default-value><![CDATA[]]></default-value>
|
140
|
+
</field>
|
141
|
+
<field header="Study Public Release Date" data-type="Date" is-file-field="false" is-multiple-value="false" is-required="false" is-hidden="false" is-forced-ontology="false" section="STUDY">
|
142
|
+
<description><![CDATA[The date the study was released publicly.]]></description>
|
143
|
+
<default-value><![CDATA[]]></default-value>
|
144
|
+
</field>
|
145
|
+
<field header="Study File Name" data-type="String" is-file-field="false" is-multiple-value="false" is-required="false" is-hidden="true" is-forced-ontology="false" section="STUDY">
|
146
|
+
<description><![CDATA[The name of the study sample file linked to this Study]]></description>
|
147
|
+
<default-value><![CDATA[]]></default-value>
|
148
|
+
</field>
|
149
|
+
<field header="Study PubMed ID" data-type="String" is-file-field="false" is-multiple-value="false" is-required="true" is-hidden="false" is-forced-ontology="false" section="STUDY PUBLICATIONS">
|
150
|
+
<description><![CDATA[The PubMed ID related to this publication (if available).]]></description>
|
151
|
+
<default-value><![CDATA[]]></default-value>
|
152
|
+
</field>
|
153
|
+
<field header="Study Publication DOI" data-type="String" is-file-field="false" is-multiple-value="false" is-required="true" is-hidden="false" is-forced-ontology="false" section="STUDY PUBLICATIONS">
|
154
|
+
<description><![CDATA[The DOI related to this publication (if available).]]></description>
|
155
|
+
<default-value><![CDATA[]]></default-value>
|
156
|
+
</field>
|
157
|
+
<field header="Study Publication Author List" data-type="Long String" is-file-field="false" is-multiple-value="false" is-required="true" is-hidden="false" is-forced-ontology="false" section="STUDY PUBLICATIONS">
|
158
|
+
<description><![CDATA[The authors who contributed to this publication.]]></description>
|
159
|
+
<default-value><![CDATA[]]></default-value>
|
160
|
+
</field>
|
161
|
+
<field header="Study Publication Title" data-type="Long String" is-file-field="false" is-multiple-value="false" is-required="true" is-hidden="false" is-forced-ontology="false" section="STUDY PUBLICATIONS">
|
162
|
+
<description><![CDATA[The title of the publication.]]></description>
|
163
|
+
<default-value><![CDATA[]]></default-value>
|
164
|
+
</field>
|
165
|
+
<field header="Study Publication Status" data-type="Ontology term" is-file-field="false" is-multiple-value="false" is-required="true" is-hidden="false" is-forced-ontology="false" section="STUDY PUBLICATIONS">
|
166
|
+
<description><![CDATA[The status of this publication, e.g. Published, Submitted, etc.]]></description>
|
167
|
+
<default-value><![CDATA[]]></default-value>
|
168
|
+
</field>
|
169
|
+
<field header="Study Person Last Name" data-type="String" is-file-field="false" is-multiple-value="false" is-required="true" is-hidden="false" is-forced-ontology="false" section="STUDY CONTACTS">
|
170
|
+
<description><![CDATA[The last name/surname of the contact.]]></description>
|
171
|
+
<default-value><![CDATA[]]></default-value>
|
172
|
+
</field>
|
173
|
+
<field header="Study Person First Name" data-type="String" is-file-field="false" is-multiple-value="false" is-required="true" is-hidden="false" is-forced-ontology="false" section="STUDY CONTACTS">
|
174
|
+
<description><![CDATA[The first name/forename of the contact.]]></description>
|
175
|
+
<default-value><![CDATA[]]></default-value>
|
176
|
+
</field>
|
177
|
+
<field header="Study Person Mid Initials" data-type="String" is-file-field="false" is-multiple-value="false" is-required="true" is-hidden="false" is-forced-ontology="false" section="STUDY CONTACTS">
|
178
|
+
<description><![CDATA[The mid initial of the contact.]]></description>
|
179
|
+
<default-value><![CDATA[]]></default-value>
|
180
|
+
</field>
|
181
|
+
<field header="Study Person Email" data-type="Long String" is-file-field="false" is-multiple-value="false" is-required="false" is-hidden="false" is-forced-ontology="false" section="STUDY CONTACTS">
|
182
|
+
<description><![CDATA[The email corresponding to this contact.]]></description>
|
183
|
+
<default-value><![CDATA[]]></default-value>
|
184
|
+
</field>
|
185
|
+
<field header="Study Person Phone" data-type="String" is-file-field="false" is-multiple-value="false" is-required="false" is-hidden="false" is-forced-ontology="false" section="STUDY CONTACTS">
|
186
|
+
<description><![CDATA[A phone number for this contact, if available.]]></description>
|
187
|
+
<default-value><![CDATA[]]></default-value>
|
188
|
+
</field>
|
189
|
+
<field header="Study Person Fax" data-type="String" is-file-field="false" is-multiple-value="false" is-required="false" is-hidden="false" is-forced-ontology="false" section="STUDY CONTACTS">
|
190
|
+
<description><![CDATA[A fax number for this contact, if available.]]></description>
|
191
|
+
<default-value><![CDATA[]]></default-value>
|
192
|
+
</field>
|
193
|
+
<field header="Study Person Address" data-type="Long String" is-file-field="false" is-multiple-value="false" is-required="false" is-hidden="false" is-forced-ontology="false" section="STUDY CONTACTS">
|
194
|
+
<description><![CDATA[The address for this contact, preferably, their institution.]]></description>
|
195
|
+
<default-value><![CDATA[]]></default-value>
|
196
|
+
</field>
|
197
|
+
<field header="Study Person Affiliation" data-type="String" is-file-field="false" is-multiple-value="false" is-required="false" is-hidden="false" is-forced-ontology="false" section="STUDY CONTACTS">
|
198
|
+
<description><![CDATA[The affiliation for this contact.]]></description>
|
199
|
+
<default-value><![CDATA[]]></default-value>
|
200
|
+
</field>
|
201
|
+
<field header="Study Person Roles" data-type="Ontology term" is-file-field="false" is-multiple-value="false" is-required="false" is-hidden="false" is-forced-ontology="false" section="STUDY CONTACTS">
|
202
|
+
<description><![CDATA[The role of the person in this Study.]]></description>
|
203
|
+
<default-value><![CDATA[]]></default-value>
|
204
|
+
</field>
|
205
|
+
<field header="Study Factor Name" data-type="String" is-file-field="false" is-multiple-value="false" is-required="false" is-hidden="false" is-forced-ontology="false" section="STUDY FACTORS">
|
206
|
+
<description><![CDATA[The name of the Factor driving this study, e.g. Dose, Collection Time Point, Compound, and so forth]]></description>
|
207
|
+
<default-value><![CDATA[]]></default-value>
|
208
|
+
</field>
|
209
|
+
<field header="Study Factor Type" data-type="Ontology term" is-file-field="false" is-multiple-value="false" is-required="false" is-hidden="false" is-forced-ontology="false" section="STUDY FACTORS">
|
210
|
+
<description><![CDATA[The type of the Factor driving this study, e.g. EFO:Dose (from Ontology), or Dose if the Factor name is something related to Dose as well, etc.]]></description>
|
211
|
+
<default-value><![CDATA[]]></default-value>
|
212
|
+
</field>
|
213
|
+
<field header="Study Design Type" data-type="Ontology term" is-file-field="false" is-multiple-value="false" is-required="false" is-hidden="false" is-forced-ontology="false" section="STUDY DESIGN DESCRIPTORS">
|
214
|
+
<description><![CDATA[The type of study design being employed, e.g. Observation, Intervention, Cross-Over, etc.]]></description>
|
215
|
+
<default-value><![CDATA[]]></default-value>
|
216
|
+
</field>
|
217
|
+
<field header="Study Assay Measurement Type" data-type="List" is-file-field="false" is-multiple-value="false" is-required="false" is-hidden="false" is-forced-ontology="false" section="STUDY ASSAYS">
|
218
|
+
<description><![CDATA[The measurement being observed in this assay, e.g. Transcription Profiling, Metabolite Profiling]]></description>
|
219
|
+
<default-value><![CDATA[]]></default-value>
|
220
|
+
</field>
|
221
|
+
<field header="Study Assay Technology Type" data-type="List" is-file-field="false" is-multiple-value="false" is-required="false" is-hidden="false" is-forced-ontology="false" section="STUDY ASSAYS">
|
222
|
+
<description><![CDATA[The technology being employed to observe this measurement, e.g. DNA microarray, NMR, Mass Spectrometry and so forth]]></description>
|
223
|
+
<default-value><![CDATA[]]></default-value>
|
224
|
+
</field>
|
225
|
+
<field header="Study Assay Technology Platform" data-type="String" is-file-field="false" is-multiple-value="false" is-required="false" is-hidden="false" is-forced-ontology="false" section="STUDY ASSAYS">
|
226
|
+
<description><![CDATA[The technology platform used, e.g. Affymetrix, Illumina, Solexa, SOLiD, Bruker, etc.]]></description>
|
227
|
+
<default-value><![CDATA[]]></default-value>
|
228
|
+
</field>
|
229
|
+
<field header="Study Assay File Name" data-type="String" is-file-field="false" is-multiple-value="false" is-required="false" is-hidden="false" is-forced-ontology="false" section="STUDY ASSAYS">
|
230
|
+
<description><![CDATA[The name of the file which contains the information about this assay, the samples and pipeline used.]]></description>
|
231
|
+
<default-value><![CDATA[]]></default-value>
|
232
|
+
</field>
|
233
|
+
<field header="Study Protocol Name" data-type="String" is-file-field="false" is-multiple-value="false" is-required="false" is-hidden="false" is-forced-ontology="false" section="STUDY PROTOCOLS">
|
234
|
+
<description><![CDATA[The name of the protocol, e.g. RNA Extraction Protocol]]></description>
|
235
|
+
<default-value><![CDATA[]]></default-value>
|
236
|
+
</field>
|
237
|
+
<field header="Study Protocol Type" data-type="Ontology term" is-file-field="false" is-multiple-value="false" is-required="false" is-hidden="false" is-forced-ontology="true" section="STUDY PROTOCOLS">
|
238
|
+
<description><![CDATA[The type of the protocol, preferably coming from an Ontology, e.g. Extraction Protocol]]></description>
|
239
|
+
<default-value><![CDATA[]]></default-value>
|
240
|
+
<recommended-ontologies>
|
241
|
+
<ontology id="TBP" abbreviation="TBP" name="ToxBank protocols" version="0.1" />
|
242
|
+
</recommended-ontologies>
|
243
|
+
</field>
|
244
|
+
<field header="Study Protocol Description" data-type="Long String" is-file-field="false" is-multiple-value="false" is-required="false" is-hidden="false" is-forced-ontology="false" section="STUDY PROTOCOLS">
|
245
|
+
<description><![CDATA[A description of the Protocol.]]></description>
|
246
|
+
<default-value><![CDATA[]]></default-value>
|
247
|
+
</field>
|
248
|
+
<field header="Study Protocol URI" data-type="Long String" is-file-field="false" is-multiple-value="false" is-required="true" is-hidden="false" is-forced-ontology="false" section="STUDY PROTOCOLS">
|
249
|
+
<description><![CDATA[A URI to link out to a publication, web page, etc. describing the protocol.]]></description>
|
250
|
+
<default-value><![CDATA[]]></default-value>
|
251
|
+
</field>
|
252
|
+
<field header="Study Protocol Version" data-type="String" is-file-field="false" is-multiple-value="false" is-required="false" is-hidden="false" is-forced-ontology="false" section="STUDY PROTOCOLS">
|
253
|
+
<description><![CDATA[The version of the protocol used, where applicable.]]></description>
|
254
|
+
<default-value><![CDATA[]]></default-value>
|
255
|
+
</field>
|
256
|
+
<field header="Study Protocol Parameters Name" data-type="Ontology term" is-file-field="false" is-multiple-value="false" is-required="false" is-hidden="false" is-forced-ontology="false" section="STUDY PROTOCOLS">
|
257
|
+
<description><![CDATA[The parameters used when executing this protocol.]]></description>
|
258
|
+
<default-value><![CDATA[]]></default-value>
|
259
|
+
</field>
|
260
|
+
<field header="Study Protocol Components Name" data-type="String" is-file-field="false" is-multiple-value="true" is-required="false" is-hidden="false" is-forced-ontology="false" section="STUDY PROTOCOLS">
|
261
|
+
<description><![CDATA[The components used when carrying out this protocol.]]></description>
|
262
|
+
<default-value><![CDATA[]]></default-value>
|
263
|
+
</field>
|
264
|
+
<field header="Study Protocol Components Type" data-type="Ontology term" is-file-field="false" is-multiple-value="false" is-required="false" is-hidden="false" is-forced-ontology="false" section="STUDY PROTOCOLS">
|
265
|
+
<description><![CDATA[The type of Components used in this Protocol.]]></description>
|
266
|
+
<default-value><![CDATA[]]></default-value>
|
267
|
+
</field>
|
268
|
+
<field header="Comment [Protocol URI]" data-type="Ontology term" is-file-field="false" is-multiple-value="false" is-required="true" is-hidden="false" is-forced-ontology="true" section="STUDY PROTOCOLS">
|
269
|
+
<description><![CDATA[Toxbank Protocol URI]]></description>
|
270
|
+
<default-value><![CDATA[]]></default-value>
|
271
|
+
<recommended-ontologies>
|
272
|
+
<ontology id="TBP" abbreviation="TBP" name="ToxBank protocols" version="0.1" />
|
273
|
+
</recommended-ontologies>
|
274
|
+
</field>
|
275
|
+
<structured-field name="factors" />
|
276
|
+
</isatab-configuration>
|
277
|
+
</isatab-config-file>
|
data/pirewriter.rb
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
def replace_pi subjectid
|
2
|
+
begin
|
3
|
+
user = OpenTox::Authorization.get_user(subjectid)
|
4
|
+
accounturi = OpenTox::RestClientWrapper.get("http://toxbanktest1.opentox.org:8080/toxbank/user?username=#{user}", nil, {:Accept => "text/uri-list", :subjectid => subjectid}).sub("\n","")
|
5
|
+
account = OpenTox::TBAccount.new(accounturi, subjectid)
|
6
|
+
investigation_file = Dir["#{tmp}/i_*vestigation.txt"]
|
7
|
+
investigation_file.each do |inv_file|
|
8
|
+
text = File.read(inv_file, :encoding => "BINARY")
|
9
|
+
replace = text.gsub!(/TBU:U\d+/, account.ns_uri)
|
10
|
+
File.open(inv_file, "wb") { |file| file.puts replace } if replace
|
11
|
+
end
|
12
|
+
rescue
|
13
|
+
$logger.error "can not replace Principal Investigator to user: #{user} with subjectid: #{subjectid}"
|
14
|
+
end
|
15
|
+
end
|
data/tbaccount.rb
ADDED
@@ -0,0 +1,153 @@
|
|
1
|
+
module OpenTox
|
2
|
+
|
3
|
+
# define RDF vocabularies
|
4
|
+
RDF::TB = RDF::Vocabulary.new "http://onto.toxbank.net/api/"
|
5
|
+
RDF::TBU = RDF::Vocabulary.new "http://toxbanktest1.opentox.org:8080/toxbank/user/"
|
6
|
+
RDF::TBO = RDF::Vocabulary.new "http://toxbanktest1.opentox.org:8080/toxbank/organisation/"
|
7
|
+
RDF::TBPT = RDF::Vocabulary.new "http://toxbanktest1.opentox.org:8080/toxbank/project/"
|
8
|
+
|
9
|
+
CLASSES << "TBAccount"
|
10
|
+
|
11
|
+
=begin
|
12
|
+
# TODO: this should not be necessary, class in initialized below
|
13
|
+
# add new OpenTox class
|
14
|
+
c = Class.new do
|
15
|
+
include OpenTox
|
16
|
+
#extend OpenTox::ClassMethods
|
17
|
+
end
|
18
|
+
OpenTox.const_set "TBAccount",c
|
19
|
+
=end
|
20
|
+
|
21
|
+
# Get rdf representation for a user, organisation or project from the ToxBank service
|
22
|
+
# @see http://api.toxbank.net/index.php/User ToxBank API User
|
23
|
+
# @see http://api.toxbank.net/index.php/Organisation ToxBank API Organisation
|
24
|
+
# @see http://api.toxbank.net/index.php/Project ToxBank API Project
|
25
|
+
# @see http://api.toxbank.net/index.php/Protocol#Security ToxBank API Security
|
26
|
+
# @example TBAccount
|
27
|
+
# require "opentox-server"
|
28
|
+
# User1 = OpenTox::TBAccount.new("http://uri_to_toxbankservice/toxbank/user/U123", subjectid)
|
29
|
+
# puts User1.ldap_dn #=> "uid=username,ou=people,dc=opentox,dc=org"
|
30
|
+
# User1.send_policy("http://uri_toprotect/bla/foo") #=> creates new read policy for http://uri_toprotect/bla/foo
|
31
|
+
class TBAccount
|
32
|
+
include OpenTox
|
33
|
+
|
34
|
+
# Get hasAccount value of a user,organisation or project from ToxBank service
|
35
|
+
# @return [String] username
|
36
|
+
def account
|
37
|
+
@account ||= get_account
|
38
|
+
end
|
39
|
+
|
40
|
+
# Generates LDAP Distinguished Name (DN)
|
41
|
+
# @return [String] LDAP Distinguished Name (DN)
|
42
|
+
def ldap_dn
|
43
|
+
@uri.match(RDF::TBU.to_s) ? "uid=#{self.account},ou=people,dc=opentox,dc=org" : "cn=#{self.account},ou=groups,dc=opentox,dc=org"
|
44
|
+
end
|
45
|
+
|
46
|
+
# Get LDAP type - returns 'LDAPUsers' if the TBAccount.uri is a user URI
|
47
|
+
# @return [String] 'LDAPUsers' or 'LDAPGroups'
|
48
|
+
def ldap_type
|
49
|
+
@uri.match(RDF::TBU.to_s) ? "LDAPUsers" : "LDAPGroups"
|
50
|
+
end
|
51
|
+
|
52
|
+
# GET policy XML
|
53
|
+
# @param [String,String] URI,Type URI to protect, Access-rights < "all", "readwrite", "read" (default) >
|
54
|
+
# @return [String] policy in XML
|
55
|
+
def get_policy uri, type="read"
|
56
|
+
policy(uri, type)
|
57
|
+
end
|
58
|
+
|
59
|
+
# sends policy to opensso server
|
60
|
+
# @param (see #get_policy)
|
61
|
+
def send_policy uri, type="read"
|
62
|
+
OpenTox::Authorization.create_policy(policy(uri, type), @subjectid)
|
63
|
+
end
|
64
|
+
|
65
|
+
# Change account URI into RDF prefixed Version e.G.: "http://toxbanktest1.opentox.org:8080/toxbank/user/U2" becomes "TBU:U2"
|
66
|
+
# @example
|
67
|
+
# user = OpenTox::TBAccount.new("http://uri_to_toxbankservice/toxbank/user/U2", subjectid)
|
68
|
+
# puts user.ns_uri #=> "RDF::TBU:U2"
|
69
|
+
# @return [String] prefixed URI of a user/organisation/project
|
70
|
+
def ns_uri
|
71
|
+
out = "TBU:#{@uri.split('/')[-1]}" if @uri.match(RDF::TBU.to_s)
|
72
|
+
out = "TBO:#{@uri.split('/')[-1]}" if @uri.match(RDF::TBO.to_s)
|
73
|
+
out = "TBPT:#{@uri.split('/')[-1]}" if @uri.match(RDF::TBPT.to_s)
|
74
|
+
out
|
75
|
+
end
|
76
|
+
|
77
|
+
private
|
78
|
+
|
79
|
+
# Get rdf from user service and returns username
|
80
|
+
# @private
|
81
|
+
def get_account
|
82
|
+
get "application/rdf+xml" # get rdfxml instead of ntriples
|
83
|
+
# do not catch errors as this will lead do follow up problems
|
84
|
+
# error handling is implemented at a lower level in opentox-client
|
85
|
+
self[RDF::TB.hasAccount]
|
86
|
+
end
|
87
|
+
|
88
|
+
# creates policy
|
89
|
+
def policy uri, type="read"
|
90
|
+
return <<-EOS
|
91
|
+
<!DOCTYPE Policies PUBLIC "-//Sun Java System Access Manager7.1 2006Q3 Admin CLI DTD//EN" "jar://com/sun/identity/policy/policyAdmin.dtd">
|
92
|
+
<Policies>
|
93
|
+
<Policy name="tbi-#{self.account}-#{self.ldap_type[4,6].downcase}-#{Time.now.strftime("%Y-%m-%d-%H-%M-%S-x") + rand(1000).to_s}" referralPolicy="false" active="true">
|
94
|
+
<Rule name="rule_name">
|
95
|
+
<ServiceName name="iPlanetAMWebAgentService" />
|
96
|
+
<ResourceName name="#{uri}"/>
|
97
|
+
#{get_permissions(type)}
|
98
|
+
</Rule>
|
99
|
+
<Subjects name="subjects_name" description="">
|
100
|
+
<Subject name="subject_name" type="#{self.ldap_type}" includeType="inclusive">
|
101
|
+
<AttributeValuePair>
|
102
|
+
<Attribute name="Values"/>
|
103
|
+
<Value>#{self.ldap_dn}</Value>
|
104
|
+
</AttributeValuePair>
|
105
|
+
</Subject>
|
106
|
+
</Subjects>
|
107
|
+
</Policy>
|
108
|
+
</Policies>
|
109
|
+
EOS
|
110
|
+
end
|
111
|
+
|
112
|
+
# creates permission part of policy
|
113
|
+
def get_permissions type
|
114
|
+
requests = case type
|
115
|
+
when "all"
|
116
|
+
["GET", "POST", "PUT", "DELETE"]
|
117
|
+
when "readwrite"
|
118
|
+
["GET", "POST", "PUT"]
|
119
|
+
else
|
120
|
+
["GET"]
|
121
|
+
end
|
122
|
+
out=""
|
123
|
+
requests.each{|r| out = "#{out}<AttributeValuePair><Attribute name=\"#{r}\" /><Value>allow</Value></AttributeValuePair>\n"}
|
124
|
+
return out
|
125
|
+
end
|
126
|
+
|
127
|
+
end
|
128
|
+
|
129
|
+
# ToxBank-investigation specific extension to OpenTox::Authorization in opentox-client
|
130
|
+
# @see http://rubydoc.info/gems/opentox-client/frames opentox-client documentation
|
131
|
+
module Authorization
|
132
|
+
|
133
|
+
# Create policy for PI-user (owner of subjectid)
|
134
|
+
# @param [String, String] URI,subjectid URI to create a policy for, subjectid
|
135
|
+
def self.create_pi_policy uri, subjectid
|
136
|
+
user = get_user(subjectid)
|
137
|
+
piuri = RestClientWrapper.get("http://toxbanktest1.opentox.org:8080/toxbank/user?username=#{user}", nil, {:Accept => "text/uri-list", :subjectid => subjectid}).sub("\n","")
|
138
|
+
piaccount = TBAccount.new(piuri, subjectid)
|
139
|
+
piaccount.send_policy(uri, "all")
|
140
|
+
end
|
141
|
+
|
142
|
+
# Delete all policies for Users or Groups of an investigation except the policy of the PI (Principal Investigator) user.
|
143
|
+
# @param [String, String, String] URI,LDAPtype,subjectid URI to protect, LDAPUsers or LDAPGroups, subjectid
|
144
|
+
def self.reset_policies uri, type, subjectid
|
145
|
+
policies = self.list_uri_policies(uri, subjectid)
|
146
|
+
user = get_user(subjectid)
|
147
|
+
policies.keep_if{|policy| policy =~ /^tbi-\w+-#{type}-*/ }
|
148
|
+
policies.delete_if{|policy| policy =~ /^tbi-#{user}-users-*/ }
|
149
|
+
policies.each{|policy| self.delete_policy(policy, subjectid) }
|
150
|
+
end
|
151
|
+
|
152
|
+
end
|
153
|
+
end
|
@@ -3,7 +3,7 @@ $:.push File.expand_path("../lib", __FILE__)
|
|
3
3
|
|
4
4
|
Gem::Specification.new do |s|
|
5
5
|
s.name = "toxbank-investigation"
|
6
|
-
s.version =
|
6
|
+
s.version = File.read("./VERSION")
|
7
7
|
s.authors = ["Christoph Helma","Denis Gebele","Micha Rautenberg"]
|
8
8
|
s.email = ["helma@in-silico.ch","gebele@in-silico.ch","rautenenberg@in-silico.ch"]
|
9
9
|
s.homepage = "http://github.com/ToxBank/toxbank-investigation"
|
@@ -15,13 +15,11 @@ Gem::Specification.new do |s|
|
|
15
15
|
s.rubyforge_project = "toxbank-investigation"
|
16
16
|
|
17
17
|
s.files = `git ls-files`.split("\n")
|
18
|
-
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
19
|
-
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
20
|
-
#s.require_paths = ["lib"]
|
21
18
|
s.required_ruby_version = '>= 1.9.2'
|
22
19
|
|
23
20
|
# specify any dependencies here; for example:
|
24
21
|
s.add_runtime_dependency "opentox-server"
|
22
|
+
s.add_runtime_dependency 'roo'
|
25
23
|
|
26
24
|
# external requirements
|
27
25
|
["git", "zip", "java", "curl", "wget"].each{|r| s.requirements << r}
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: toxbank-investigation
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 1.0.0pre1
|
5
5
|
prerelease: 5
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -11,11 +11,11 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date: 2012-
|
14
|
+
date: 2012-08-23 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: opentox-server
|
18
|
-
requirement:
|
18
|
+
requirement: !ruby/object:Gem::Requirement
|
19
19
|
none: false
|
20
20
|
requirements:
|
21
21
|
- - ! '>='
|
@@ -23,23 +23,44 @@ dependencies:
|
|
23
23
|
version: '0'
|
24
24
|
type: :runtime
|
25
25
|
prerelease: false
|
26
|
-
version_requirements:
|
26
|
+
version_requirements: !ruby/object:Gem::Requirement
|
27
|
+
none: false
|
28
|
+
requirements:
|
29
|
+
- - ! '>='
|
30
|
+
- !ruby/object:Gem::Version
|
31
|
+
version: '0'
|
32
|
+
- !ruby/object:Gem::Dependency
|
33
|
+
name: roo
|
34
|
+
requirement: !ruby/object:Gem::Requirement
|
35
|
+
none: false
|
36
|
+
requirements:
|
37
|
+
- - ! '>='
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '0'
|
40
|
+
type: :runtime
|
41
|
+
prerelease: false
|
42
|
+
version_requirements: !ruby/object:Gem::Requirement
|
43
|
+
none: false
|
44
|
+
requirements:
|
45
|
+
- - ! '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
27
48
|
description: Toxbank investigation service
|
28
49
|
email:
|
29
50
|
- helma@in-silico.ch
|
30
51
|
- gebele@in-silico.ch
|
31
52
|
- rautenenberg@in-silico.ch
|
32
|
-
executables:
|
33
|
-
- toxbank-investigation-install
|
53
|
+
executables: []
|
34
54
|
extensions: []
|
35
55
|
extra_rdoc_files: []
|
36
56
|
files:
|
37
57
|
- .gitignore
|
58
|
+
- ChangeLog
|
38
59
|
- Gemfile
|
39
|
-
- Gemfile.lock
|
40
60
|
- LICENSE
|
41
61
|
- README
|
42
62
|
- Rakefile
|
63
|
+
- VERSION
|
43
64
|
- application.rb
|
44
65
|
- bin/toxbank-investigation-install
|
45
66
|
- config.ru
|
@@ -56,6 +77,7 @@ files:
|
|
56
77
|
- java/config/isa_configurator/heterozygosity_micro.xml
|
57
78
|
- java/config/isa_configurator/histology.xml
|
58
79
|
- java/config/isa_configurator/histonemodification_seq.xml
|
80
|
+
- java/config/isa_configurator/investigation.xml
|
59
81
|
- java/config/isa_configurator/metaboliteprofiling_ms.xml
|
60
82
|
- java/config/isa_configurator/metaboliteprofiling_nmr.xml
|
61
83
|
- java/config/isa_configurator/metagenome_seq.xml
|
@@ -74,6 +96,8 @@ files:
|
|
74
96
|
- java/config/isa_configurator/transcription_micro.xml
|
75
97
|
- java/config/isa_configurator/transcription_rtpcr.xml
|
76
98
|
- java/config/isa_configurator/transcription_seq.xml
|
99
|
+
- pirewriter.rb
|
100
|
+
- tbaccount.rb
|
77
101
|
- toxbank-investigation.gemspec
|
78
102
|
homepage: http://github.com/ToxBank/toxbank-investigation
|
79
103
|
licenses:
|
@@ -101,7 +125,7 @@ requirements:
|
|
101
125
|
- curl
|
102
126
|
- wget
|
103
127
|
rubyforge_project: toxbank-investigation
|
104
|
-
rubygems_version: 1.8.
|
128
|
+
rubygems_version: 1.8.18
|
105
129
|
signing_key:
|
106
130
|
specification_version: 3
|
107
131
|
summary: Toxbank investigation service
|
data/Gemfile.lock
DELETED
@@ -1,111 +0,0 @@
|
|
1
|
-
PATH
|
2
|
-
remote: .
|
3
|
-
specs:
|
4
|
-
toxbank-investigation (0.0.2pre)
|
5
|
-
opentox-server
|
6
|
-
|
7
|
-
PATH
|
8
|
-
remote: ~/opentox-client
|
9
|
-
specs:
|
10
|
-
opentox-client (0.0.2pre)
|
11
|
-
bundler
|
12
|
-
open4
|
13
|
-
rdf
|
14
|
-
rdf-raptor
|
15
|
-
rest-client
|
16
|
-
|
17
|
-
PATH
|
18
|
-
remote: ~/opentox-server
|
19
|
-
specs:
|
20
|
-
opentox-server (0.0.2pre)
|
21
|
-
emk-sinatra-url-for
|
22
|
-
opentox-client
|
23
|
-
rack
|
24
|
-
rack-contrib
|
25
|
-
roo
|
26
|
-
sinatra
|
27
|
-
sinatra-contrib
|
28
|
-
unicorn
|
29
|
-
|
30
|
-
GEM
|
31
|
-
remote: http://rubygems.org/
|
32
|
-
specs:
|
33
|
-
addressable (2.2.7)
|
34
|
-
backports (2.3.0)
|
35
|
-
choice (0.1.5)
|
36
|
-
emk-sinatra-url-for (0.2.1)
|
37
|
-
sinatra (>= 0.9.1.1)
|
38
|
-
eventmachine (0.12.10)
|
39
|
-
faraday (0.7.6)
|
40
|
-
addressable (~> 2.2)
|
41
|
-
multipart-post (~> 1.1)
|
42
|
-
rack (~> 1.1)
|
43
|
-
ffi (1.0.11)
|
44
|
-
google-spreadsheet-ruby (0.1.8)
|
45
|
-
nokogiri (>= 1.4.3.1)
|
46
|
-
oauth (>= 0.3.6)
|
47
|
-
oauth2 (>= 0.5.0)
|
48
|
-
kgio (2.7.2)
|
49
|
-
log4r (1.1.10)
|
50
|
-
mime-types (1.17.2)
|
51
|
-
multi_json (1.1.0)
|
52
|
-
multipart-post (1.1.5)
|
53
|
-
nokogiri (1.5.2)
|
54
|
-
oauth (0.4.5)
|
55
|
-
oauth2 (0.5.2)
|
56
|
-
faraday (~> 0.7)
|
57
|
-
multi_json (~> 1.0)
|
58
|
-
open4 (1.3.0)
|
59
|
-
rack (1.4.1)
|
60
|
-
rack-contrib (1.1.0)
|
61
|
-
rack (>= 0.9.1)
|
62
|
-
rack-protection (1.2.0)
|
63
|
-
rack
|
64
|
-
rack-test (0.6.1)
|
65
|
-
rack (>= 1.0)
|
66
|
-
raindrops (0.8.0)
|
67
|
-
rdf (0.3.5)
|
68
|
-
addressable (>= 2.2.6)
|
69
|
-
rdf-raptor (0.4.1)
|
70
|
-
ffi (>= 1.0)
|
71
|
-
rdf (~> 0.3.0)
|
72
|
-
rest-client (1.6.7)
|
73
|
-
mime-types (>= 1.16)
|
74
|
-
roo (1.10.1)
|
75
|
-
choice (>= 0.1.4)
|
76
|
-
google-spreadsheet-ruby (>= 0.1.5)
|
77
|
-
nokogiri (>= 1.5.0)
|
78
|
-
rubyzip (>= 0.9.4)
|
79
|
-
spreadsheet (> 0.6.4)
|
80
|
-
todonotes (>= 0.1.0)
|
81
|
-
ruby-ole (1.2.11.3)
|
82
|
-
rubyzip (0.9.6.1)
|
83
|
-
sinatra (1.3.2)
|
84
|
-
rack (~> 1.3, >= 1.3.6)
|
85
|
-
rack-protection (~> 1.2)
|
86
|
-
tilt (~> 1.3, >= 1.3.3)
|
87
|
-
sinatra-contrib (1.3.1)
|
88
|
-
backports (>= 2.0)
|
89
|
-
eventmachine
|
90
|
-
rack-protection
|
91
|
-
rack-test
|
92
|
-
sinatra (~> 1.3.0)
|
93
|
-
tilt (~> 1.3)
|
94
|
-
spreadsheet (0.6.8)
|
95
|
-
ruby-ole (>= 1.0)
|
96
|
-
tilt (1.3.3)
|
97
|
-
todonotes (0.1.0)
|
98
|
-
log4r
|
99
|
-
unicorn (4.2.0)
|
100
|
-
kgio (~> 2.6)
|
101
|
-
rack
|
102
|
-
raindrops (~> 0.7)
|
103
|
-
|
104
|
-
PLATFORMS
|
105
|
-
ruby
|
106
|
-
|
107
|
-
DEPENDENCIES
|
108
|
-
opentox-client!
|
109
|
-
opentox-server!
|
110
|
-
rack-test
|
111
|
-
toxbank-investigation!
|