1 | package nl.tno.metagenomics.integration |
---|
2 | |
---|
3 | import com.sun.net.httpserver.* |
---|
4 | import org.apache.commons.io.FileUtils |
---|
5 | |
---|
6 | class MockGSCF { |
---|
7 | private String response = 'null' |
---|
8 | private def restResponse = [:] |
---|
9 | private def restStatus = [:] |
---|
10 | private HttpServer server = null |
---|
11 | |
---|
12 | String contentType = 'text/html' |
---|
13 | Integer status = 200 |
---|
14 | |
---|
15 | public MockGSCF(Integer port) { |
---|
16 | server = HttpServer.create(new InetSocketAddress(port),0) |
---|
17 | |
---|
18 | server.createContext('/', { HttpExchange exchange -> |
---|
19 | println "GSCF other URI: " + exchange.getRequestURI(); |
---|
20 | |
---|
21 | MockGSCF.writeResponseData( exchange, status, response ) |
---|
22 | } as HttpHandler ); |
---|
23 | server.createContext('/rest/getStudies', { HttpExchange exchange -> |
---|
24 | println "GSCF getStudies: " + exchange.getRequestURI(); |
---|
25 | |
---|
26 | def studyToken = MockGSCF.getParameter( exchange, "studyToken" ); |
---|
27 | if( !studyToken ) { |
---|
28 | studyToken = "-" |
---|
29 | } |
---|
30 | |
---|
31 | println "StudyToken: " + studyToken |
---|
32 | |
---|
33 | MockGSCF.writeResponseData( exchange, getRestStatus( "getStudies", studyToken ), getRestResponse( "getStudies", studyToken ) ); |
---|
34 | |
---|
35 | } as HttpHandler ); |
---|
36 | server.createContext('/rest/getAssays', { HttpExchange exchange -> |
---|
37 | println "GSCF getAssays: " + exchange.getRequestURI(); |
---|
38 | def studyToken = MockGSCF.getParameter( exchange, "studyToken" ); |
---|
39 | def assayToken = MockGSCF.getParameter( exchange, "assayToken" ); |
---|
40 | |
---|
41 | def method = "getAssays"; |
---|
42 | def token = studyToken |
---|
43 | if( assayToken ) |
---|
44 | token = token + "-" + assayToken |
---|
45 | |
---|
46 | MockGSCF.writeResponseData( exchange, getRestStatus( method, token ), getRestResponse( method, token ) ); |
---|
47 | } as HttpHandler ); |
---|
48 | server.createContext('/rest/getSamples', { HttpExchange exchange -> |
---|
49 | println "GSCF getSamples: " + exchange.getRequestURI(); |
---|
50 | def assayToken = MockGSCF.getParameter( exchange, "assayToken" ); |
---|
51 | def sampleToken = MockGSCF.getParameter( exchange, "sampleToken" ); |
---|
52 | |
---|
53 | def method = "getSamples"; |
---|
54 | def token = assayToken |
---|
55 | if( sampleToken ) |
---|
56 | token = token + "-" + sampleToken |
---|
57 | |
---|
58 | MockGSCF.writeResponseData( exchange, getRestStatus( method, token ), getRestResponse( method, token ) ); |
---|
59 | |
---|
60 | } as HttpHandler ); |
---|
61 | server.createContext('/rest/getAuthorizationLevel', { HttpExchange exchange -> |
---|
62 | println "GSCF getAuthorizationlevel: " + exchange.getRequestURI(); |
---|
63 | def studyToken = MockGSCF.getParameter( exchange, "studyToken" ); |
---|
64 | |
---|
65 | def method = "getAuthorizationLevel"; |
---|
66 | def token = "-" |
---|
67 | if( studyToken ) |
---|
68 | token = studyToken |
---|
69 | |
---|
70 | MockGSCF.writeResponseData( exchange, getRestStatus( method, token ), getRestResponse( method, token ) ); |
---|
71 | |
---|
72 | } as HttpHandler ); |
---|
73 | |
---|
74 | server.start() |
---|
75 | } |
---|
76 | |
---|
77 | public void stop() { |
---|
78 | if (server) |
---|
79 | server.stop(0); |
---|
80 | } |
---|
81 | |
---|
82 | public void setResponseByFile(String filename) { |
---|
83 | response = FileUtils.readFileToString(new File(filename), "UTF-8") |
---|
84 | } |
---|
85 | |
---|
86 | public void setRestResponse( String method, def response ) { |
---|
87 | restResponse[ method ] = response; |
---|
88 | } |
---|
89 | |
---|
90 | public void setRestResponse( String method, String token, def response ) { |
---|
91 | if( !restResponse[ method ] ) |
---|
92 | restResponse[ method ] = [:] |
---|
93 | |
---|
94 | restResponse[ method ][ token ] = response; |
---|
95 | } |
---|
96 | |
---|
97 | public void setRestStatus( String method, String token, Integer status ) { |
---|
98 | if( !restStatus[ method ] ) |
---|
99 | restStatus[ method ] = [:] |
---|
100 | |
---|
101 | restStatus[ method ][ token ] = status; |
---|
102 | } |
---|
103 | |
---|
104 | public Integer getRestStatus( String method, String token ) { |
---|
105 | if( restStatus[ method ] && restStatus[ method ][ token ] ) { |
---|
106 | def r = restStatus[ method ][ token ]; |
---|
107 | |
---|
108 | if( r instanceof Integer ) { |
---|
109 | return r |
---|
110 | } else { |
---|
111 | try { |
---|
112 | return Integer.parseInt( r.toString() ) |
---|
113 | } catch( Exception e ) { |
---|
114 | return status; |
---|
115 | } |
---|
116 | } |
---|
117 | } |
---|
118 | |
---|
119 | return status |
---|
120 | } |
---|
121 | |
---|
122 | public String getRestResponse( String method, String token ) { |
---|
123 | if( restResponse[ method ] && restResponse[ method ][ token ] ) { |
---|
124 | return restResponse[ method ][ token ].toString(); |
---|
125 | } |
---|
126 | |
---|
127 | return this.response |
---|
128 | } |
---|
129 | |
---|
130 | public static void writeResponseData( HttpExchange exchange, Integer status, String resp ) { |
---|
131 | println "Returning " + resp |
---|
132 | |
---|
133 | exchange.responseHeaders[ "Content-Type" ] = "application/json" |
---|
134 | exchange.sendResponseHeaders(status, resp.bytes.length); |
---|
135 | exchange.responseBody.write(resp.bytes) |
---|
136 | exchange.responseBody.close() |
---|
137 | exchange.close(); |
---|
138 | } |
---|
139 | |
---|
140 | public static String getParameter( HttpExchange exchange, String parameter ) { |
---|
141 | String query = exchange.getRequestURI().query |
---|
142 | |
---|
143 | def parts = query.split( '&' ); |
---|
144 | for( it in parts ) { |
---|
145 | def param = it.split( '=' ); |
---|
146 | |
---|
147 | if( param.size() > 0 && param[0].toString().equals( parameter ) ) { |
---|
148 | if( param.size() > 1) |
---|
149 | return param[ 1 ] |
---|
150 | else |
---|
151 | return param[ 0 ] |
---|
152 | } |
---|
153 | } |
---|
154 | |
---|
155 | return null |
---|
156 | } |
---|
157 | |
---|
158 | } |
---|