| margaretha | d3c0fc9 | 2017-10-25 15:03:32 +0200 | [diff] [blame] | 1 | package de.ids_mannheim.korap.web.controller;// package |
| 2 | // de.ids_mannheim.korap.ext.web; |
| Michael Hanl | 1939065 | 2016-01-16 11:01:24 +0100 | [diff] [blame] | 3 | |
| margaretha | 0ba34ef | 2017-02-21 14:19:05 +0100 | [diff] [blame] | 4 | import java.util.HashSet; |
| 5 | import java.util.Locale; |
| margaretha | 0ba34ef | 2017-02-21 14:19:05 +0100 | [diff] [blame] | 6 | import java.util.Set; |
| 7 | |
| margaretha | 3d55b00 | 2019-03-19 12:00:44 +0100 | [diff] [blame] | 8 | import javax.servlet.ServletContext; |
| margaretha | 2544cdf | 2019-07-08 11:39:43 +0200 | [diff] [blame] | 9 | import javax.servlet.http.HttpServletRequest; |
| margaretha | 3d55b00 | 2019-03-19 12:00:44 +0100 | [diff] [blame] | 10 | import javax.ws.rs.FormParam; |
| margaretha | 0ba34ef | 2017-02-21 14:19:05 +0100 | [diff] [blame] | 11 | import javax.ws.rs.GET; |
| 12 | import javax.ws.rs.POST; |
| 13 | import javax.ws.rs.Path; |
| 14 | import javax.ws.rs.PathParam; |
| 15 | import javax.ws.rs.Produces; |
| 16 | import javax.ws.rs.QueryParam; |
| 17 | import javax.ws.rs.core.Context; |
| Bodmo | ca3dcfb | 2017-05-24 16:36:00 +0200 | [diff] [blame] | 18 | import javax.ws.rs.core.HttpHeaders; |
| margaretha | 0ba34ef | 2017-02-21 14:19:05 +0100 | [diff] [blame] | 19 | import javax.ws.rs.core.MediaType; |
| margaretha | 0ba34ef | 2017-02-21 14:19:05 +0100 | [diff] [blame] | 20 | import javax.ws.rs.core.Response; |
| 21 | import javax.ws.rs.core.SecurityContext; |
| margaretha | 0ba34ef | 2017-02-21 14:19:05 +0100 | [diff] [blame] | 22 | |
| margaretha | 49cb688 | 2018-07-04 04:19:54 +0200 | [diff] [blame] | 23 | import org.apache.logging.log4j.LogManager; |
| 24 | import org.apache.logging.log4j.Logger; |
| margaretha | ade7d4a | 2017-07-20 19:53:35 +0200 | [diff] [blame] | 25 | import org.springframework.beans.factory.annotation.Autowired; |
| 26 | import org.springframework.stereotype.Controller; |
| margaretha | 0ba34ef | 2017-02-21 14:19:05 +0100 | [diff] [blame] | 27 | |
| Michael Hanl | 1939065 | 2016-01-16 11:01:24 +0100 | [diff] [blame] | 28 | import com.sun.jersey.spi.container.ResourceFilters; |
| margaretha | 0ba34ef | 2017-02-21 14:19:05 +0100 | [diff] [blame] | 29 | |
| margaretha | 2df0660 | 2018-11-14 19:10:30 +0100 | [diff] [blame] | 30 | import de.ids_mannheim.korap.constant.OAuth2Scope; |
| Michael Hanl | 1939065 | 2016-01-16 11:01:24 +0100 | [diff] [blame] | 31 | import de.ids_mannheim.korap.exceptions.KustvaktException; |
| margaretha | 20f3123 | 2018-07-09 17:49:39 +0200 | [diff] [blame] | 32 | import de.ids_mannheim.korap.oauth2.service.OAuth2ScopeService; |
| margaretha | 0e8f4e7 | 2018-04-05 14:11:52 +0200 | [diff] [blame] | 33 | import de.ids_mannheim.korap.security.context.TokenContext; |
| margaretha | 20f3123 | 2018-07-09 17:49:39 +0200 | [diff] [blame] | 34 | import de.ids_mannheim.korap.service.SearchService; |
| margaretha | 2df0660 | 2018-11-14 19:10:30 +0100 | [diff] [blame] | 35 | import de.ids_mannheim.korap.web.KustvaktResponseHandler; |
| margaretha | 398f472 | 2019-01-09 19:07:20 +0100 | [diff] [blame] | 36 | import de.ids_mannheim.korap.web.filter.APIVersionFilter; |
| margaretha | fde771a | 2017-11-14 15:02:10 +0100 | [diff] [blame] | 37 | import de.ids_mannheim.korap.web.filter.AuthenticationFilter; |
| Michael Hanl | 99cb963 | 2016-06-29 16:24:40 +0200 | [diff] [blame] | 38 | import de.ids_mannheim.korap.web.filter.DemoUserFilter; |
| Michael Hanl | 1939065 | 2016-01-16 11:01:24 +0100 | [diff] [blame] | 39 | import de.ids_mannheim.korap.web.filter.PiwikFilter; |
| Michael Hanl | 1939065 | 2016-01-16 11:01:24 +0100 | [diff] [blame] | 40 | |
| 41 | /** |
| margaretha | 894a7d7 | 2017-11-08 19:24:20 +0100 | [diff] [blame] | 42 | * |
| margaretha | 20f3123 | 2018-07-09 17:49:39 +0200 | [diff] [blame] | 43 | * @author hanl, margaretha, diewald |
| Michael Hanl | 1939065 | 2016-01-16 11:01:24 +0100 | [diff] [blame] | 44 | * @date 29/01/2014 |
| margaretha | 2544cdf | 2019-07-08 11:39:43 +0200 | [diff] [blame] | 45 | * @lastUpdate 05/07/2019 |
| margaretha | efc18a4 | 2018-03-01 16:01:42 +0100 | [diff] [blame] | 46 | * |
| Michael Hanl | 1939065 | 2016-01-16 11:01:24 +0100 | [diff] [blame] | 47 | */ |
| margaretha | ade7d4a | 2017-07-20 19:53:35 +0200 | [diff] [blame] | 48 | @Controller |
| margaretha | 7926adc | 2018-08-30 13:45:33 +0200 | [diff] [blame] | 49 | @Path("/") |
| margaretha | ee0cbfe | 2018-08-28 17:47:14 +0200 | [diff] [blame] | 50 | @ResourceFilters({ APIVersionFilter.class, AuthenticationFilter.class, |
| 51 | DemoUserFilter.class, PiwikFilter.class }) |
| Michael Hanl | 1939065 | 2016-01-16 11:01:24 +0100 | [diff] [blame] | 52 | @Produces(MediaType.APPLICATION_JSON + ";charset=utf-8") |
| margaretha | d3c0fc9 | 2017-10-25 15:03:32 +0200 | [diff] [blame] | 53 | public class SearchController { |
| Michael Hanl | 1939065 | 2016-01-16 11:01:24 +0100 | [diff] [blame] | 54 | |
| margaretha | a85965d | 2018-12-19 15:58:21 +0100 | [diff] [blame] | 55 | private static final boolean DEBUG = false; |
| 56 | |
| margaretha | 20f3123 | 2018-07-09 17:49:39 +0200 | [diff] [blame] | 57 | private static Logger jlog = LogManager.getLogger(SearchController.class); |
| margaretha | 3d55b00 | 2019-03-19 12:00:44 +0100 | [diff] [blame] | 58 | private @Context ServletContext context; |
| 59 | |
| margaretha | ade7d4a | 2017-07-20 19:53:35 +0200 | [diff] [blame] | 60 | @Autowired |
| margaretha | 20f3123 | 2018-07-09 17:49:39 +0200 | [diff] [blame] | 61 | private KustvaktResponseHandler kustvaktResponseHandler; |
| Michael Hanl | 1939065 | 2016-01-16 11:01:24 +0100 | [diff] [blame] | 62 | |
| margaretha | 20f3123 | 2018-07-09 17:49:39 +0200 | [diff] [blame] | 63 | @Autowired |
| 64 | private SearchService searchService; |
| 65 | @Autowired |
| 66 | private OAuth2ScopeService scopeService; |
| margaretha | 3d55b00 | 2019-03-19 12:00:44 +0100 | [diff] [blame] | 67 | |
| 68 | @POST |
| 69 | @Path("{version}/index/close") |
| 70 | public Response closeIndexReader (@FormParam("token") String token){ |
| 71 | try { |
| 72 | searchService.closeIndexReader(token, context); |
| 73 | } |
| 74 | catch (KustvaktException e) { |
| 75 | throw kustvaktResponseHandler.throwit(e); |
| 76 | } |
| 77 | return Response.ok().build(); |
| 78 | } |
| 79 | |
| 80 | |
| margaretha | 2544cdf | 2019-07-08 11:39:43 +0200 | [diff] [blame] | 81 | // EM: This web service is DISABLED until there is a need for it. |
| 82 | // ND: In case rewrite is supported, it could be used to check the authorization |
| 83 | // scope without searching etc. In case not, it helps to compare queries in |
| 84 | // different query languages. |
| 85 | // MH: ref query parameter removed! |
| 86 | // @GET |
| 87 | // @Path("{version}/query") |
| margaretha | 20f3123 | 2018-07-09 17:49:39 +0200 | [diff] [blame] | 88 | public Response serializeQuery (@Context Locale locale, |
| 89 | @Context SecurityContext securityContext, @QueryParam("q") String q, |
| 90 | @QueryParam("ql") String ql, @QueryParam("v") String v, |
| 91 | @QueryParam("context") String context, |
| 92 | @QueryParam("cutoff") Boolean cutoff, |
| 93 | @QueryParam("count") Integer pageLength, |
| 94 | @QueryParam("offset") Integer pageIndex, |
| 95 | @QueryParam("page") Integer startPage, |
| margaretha | 2544cdf | 2019-07-08 11:39:43 +0200 | [diff] [blame] | 96 | @QueryParam("access-rewrite-disabled") boolean accessRewriteDisabled, |
| margaretha | 20f3123 | 2018-07-09 17:49:39 +0200 | [diff] [blame] | 97 | @QueryParam("cq") String cq) { |
| 98 | TokenContext ctx = (TokenContext) securityContext.getUserPrincipal(); |
| 99 | try { |
| 100 | scopeService.verifyScope(ctx, OAuth2Scope.SERIALIZE_QUERY); |
| margaretha | 3495447 | 2018-10-24 20:05:17 +0200 | [diff] [blame] | 101 | String result = searchService.serializeQuery(q, ql, v, cq, |
| margaretha | 2544cdf | 2019-07-08 11:39:43 +0200 | [diff] [blame] | 102 | pageIndex, startPage, pageLength, context, cutoff, |
| 103 | accessRewriteDisabled); |
| margaretha | a85965d | 2018-12-19 15:58:21 +0100 | [diff] [blame] | 104 | if (DEBUG){ |
| 105 | jlog.debug("Query: " + result); |
| 106 | } |
| margaretha | 3495447 | 2018-10-24 20:05:17 +0200 | [diff] [blame] | 107 | return Response.ok(result).build(); |
| margaretha | 20f3123 | 2018-07-09 17:49:39 +0200 | [diff] [blame] | 108 | } |
| 109 | catch (KustvaktException e) { |
| margaretha | 3495447 | 2018-10-24 20:05:17 +0200 | [diff] [blame] | 110 | throw kustvaktResponseHandler.throwit(e); |
| margaretha | 20f3123 | 2018-07-09 17:49:39 +0200 | [diff] [blame] | 111 | } |
| margaretha | fc2040a | 2017-04-18 12:07:23 +0200 | [diff] [blame] | 112 | } |
| margaretha | d3c0fc9 | 2017-10-25 15:03:32 +0200 | [diff] [blame] | 113 | |
| margaretha | 2544cdf | 2019-07-08 11:39:43 +0200 | [diff] [blame] | 114 | |
| 115 | // This web service is DISABLED until there is a need for it. |
| 116 | // @POST |
| 117 | // @Path("{version}/search") |
| margaretha | 20f3123 | 2018-07-09 17:49:39 +0200 | [diff] [blame] | 118 | public Response searchPost (@Context SecurityContext context, |
| margaretha | 2544cdf | 2019-07-08 11:39:43 +0200 | [diff] [blame] | 119 | @Context Locale locale, |
| 120 | @Context HttpHeaders headers, |
| margaretha | 20f3123 | 2018-07-09 17:49:39 +0200 | [diff] [blame] | 121 | String jsonld) { |
| margaretha | 2544cdf | 2019-07-08 11:39:43 +0200 | [diff] [blame] | 122 | |
| 123 | if (DEBUG){ |
| 124 | jlog.debug("Serialized search: " + jsonld); |
| 125 | } |
| 126 | |
| margaretha | 20f3123 | 2018-07-09 17:49:39 +0200 | [diff] [blame] | 127 | TokenContext ctx = (TokenContext) context.getUserPrincipal(); |
| 128 | try { |
| 129 | scopeService.verifyScope(ctx, OAuth2Scope.SEARCH); |
| margaretha | 2544cdf | 2019-07-08 11:39:43 +0200 | [diff] [blame] | 130 | String result = searchService.search(jsonld, ctx.getUsername(), |
| 131 | headers); |
| 132 | return Response.ok(result).build(); |
| margaretha | 20f3123 | 2018-07-09 17:49:39 +0200 | [diff] [blame] | 133 | } |
| 134 | catch (KustvaktException e) { |
| 135 | throw kustvaktResponseHandler.throwit(e); |
| 136 | } |
| margaretha | 20f3123 | 2018-07-09 17:49:39 +0200 | [diff] [blame] | 137 | } |
| 138 | |
| margaretha | 1d1c73e | 2019-12-03 18:07:28 +0100 | [diff] [blame] | 139 | /** Performs for the given query |
| 140 | * |
| 141 | * @param securityContext |
| 142 | * @param request |
| 143 | * @param headers |
| 144 | * @param locale |
| 145 | * @param q |
| 146 | * query |
| 147 | * @param ql |
| 148 | * query language |
| 149 | * @param v |
| 150 | * query language version |
| 151 | * @param ctx |
| 152 | * result context |
| 153 | * @param cutoff |
| 154 | * determines to limit search results to one page only |
| 155 | * or not (default false) |
| 156 | * @param pageLength |
| 157 | * the number of results should be included in a page |
| 158 | * @param pageIndex |
| 159 | * @param pageInteger page number |
| 160 | * @param fields |
| 161 | * metadata fields to be included, separated by comma |
| 162 | * @param pipes |
| 163 | * external plugins for additional processing, |
| 164 | * separated by comma |
| 165 | * @param accessRewriteDisabled |
| 166 | * determine if access rewrite should be disabled |
| 167 | * (default false) |
| 168 | * @param cq |
| 169 | * corpus query defining a virtual corpus |
| 170 | * @param engine |
| 171 | * @return search results in JSON |
| 172 | */ |
| margaretha | 20f3123 | 2018-07-09 17:49:39 +0200 | [diff] [blame] | 173 | @GET |
| margaretha | 7926adc | 2018-08-30 13:45:33 +0200 | [diff] [blame] | 174 | @Path("{version}/search") |
| margaretha | 20f3123 | 2018-07-09 17:49:39 +0200 | [diff] [blame] | 175 | public Response searchGet (@Context SecurityContext securityContext, |
| margaretha | 2544cdf | 2019-07-08 11:39:43 +0200 | [diff] [blame] | 176 | @Context HttpServletRequest request, |
| margaretha | 20f3123 | 2018-07-09 17:49:39 +0200 | [diff] [blame] | 177 | @Context HttpHeaders headers, @Context Locale locale, |
| 178 | @QueryParam("q") String q, @QueryParam("ql") String ql, |
| 179 | @QueryParam("v") String v, @QueryParam("context") String ctx, |
| 180 | @QueryParam("cutoff") Boolean cutoff, |
| 181 | @QueryParam("count") Integer pageLength, |
| 182 | @QueryParam("offset") Integer pageIndex, |
| 183 | @QueryParam("page") Integer pageInteger, |
| margaretha | a85965d | 2018-12-19 15:58:21 +0100 | [diff] [blame] | 184 | @QueryParam("fields") String fields, |
| margaretha | 1d1c73e | 2019-12-03 18:07:28 +0100 | [diff] [blame] | 185 | @QueryParam("pipes") String pipes, |
| margaretha | 2544cdf | 2019-07-08 11:39:43 +0200 | [diff] [blame] | 186 | @QueryParam("access-rewrite-disabled") boolean accessRewriteDisabled, |
| 187 | @QueryParam("cq") String cq, |
| 188 | @QueryParam("engine") String engine) { |
| margaretha | 20f3123 | 2018-07-09 17:49:39 +0200 | [diff] [blame] | 189 | |
| 190 | TokenContext context = |
| 191 | (TokenContext) securityContext.getUserPrincipal(); |
| 192 | |
| 193 | String result; |
| 194 | try { |
| 195 | scopeService.verifyScope(context, OAuth2Scope.SEARCH); |
| 196 | result = searchService.search(engine, context.getUsername(), |
| margaretha | 1d1c73e | 2019-12-03 18:07:28 +0100 | [diff] [blame] | 197 | headers, q, ql, v, cq, fields, pipes, pageIndex, |
| 198 | pageInteger, ctx, pageLength, cutoff, |
| 199 | accessRewriteDisabled); |
| margaretha | 20f3123 | 2018-07-09 17:49:39 +0200 | [diff] [blame] | 200 | } |
| 201 | catch (KustvaktException e) { |
| 202 | throw kustvaktResponseHandler.throwit(e); |
| 203 | } |
| 204 | |
| 205 | return Response.ok(result).build(); |
| 206 | } |
| 207 | |
| margaretha | 351f769 | 2019-02-06 19:36:52 +0100 | [diff] [blame] | 208 | // EM: legacy support |
| 209 | @Deprecated |
| margaretha | 20f3123 | 2018-07-09 17:49:39 +0200 | [diff] [blame] | 210 | @GET |
| margaretha | 7926adc | 2018-08-30 13:45:33 +0200 | [diff] [blame] | 211 | @Path("{version}/corpus/{corpusId}/{docId}/{textId}/{matchId}/matchInfo") |
| margaretha | 20f3123 | 2018-07-09 17:49:39 +0200 | [diff] [blame] | 212 | public Response getMatchInfo (@Context SecurityContext ctx, |
| 213 | @Context HttpHeaders headers, @Context Locale locale, |
| 214 | @PathParam("corpusId") String corpusId, |
| 215 | @PathParam("docId") String docId, |
| 216 | @PathParam("textId") String textId, |
| 217 | @PathParam("matchId") String matchId, |
| 218 | @QueryParam("foundry") Set<String> foundries, |
| 219 | @QueryParam("layer") Set<String> layers, |
| margaretha | 3495447 | 2018-10-24 20:05:17 +0200 | [diff] [blame] | 220 | @QueryParam("spans") Boolean spans, |
| 221 | // Highlights may also be a list of valid highlight classes |
| 222 | @QueryParam("hls") Boolean highlights) throws KustvaktException { |
| margaretha | 20f3123 | 2018-07-09 17:49:39 +0200 | [diff] [blame] | 223 | |
| margaretha | 351f769 | 2019-02-06 19:36:52 +0100 | [diff] [blame] | 224 | return retrieveMatchInfo(ctx, headers, locale, corpusId, docId, textId, |
| 225 | matchId, foundries, layers, spans, highlights); |
| 226 | } |
| 227 | |
| 228 | @GET |
| 229 | @Path("{version}/corpus/{corpusId}/{docId}/{textId}/{matchId}") |
| 230 | public Response retrieveMatchInfo (@Context SecurityContext ctx, |
| 231 | @Context HttpHeaders headers, @Context Locale locale, |
| 232 | @PathParam("corpusId") String corpusId, |
| 233 | @PathParam("docId") String docId, |
| 234 | @PathParam("textId") String textId, |
| 235 | @PathParam("matchId") String matchId, |
| 236 | @QueryParam("foundry") Set<String> foundries, |
| 237 | @QueryParam("layer") Set<String> layers, |
| 238 | @QueryParam("spans") Boolean spans, |
| 239 | // Highlights may also be a list of valid highlight classes |
| 240 | @QueryParam("hls") Boolean highlights) throws KustvaktException { |
| 241 | |
| margaretha | 20f3123 | 2018-07-09 17:49:39 +0200 | [diff] [blame] | 242 | TokenContext tokenContext = (TokenContext) ctx.getUserPrincipal(); |
| 243 | scopeService.verifyScope(tokenContext, OAuth2Scope.MATCH_INFO); |
| 244 | spans = spans != null ? spans : false; |
| margaretha | 3495447 | 2018-10-24 20:05:17 +0200 | [diff] [blame] | 245 | highlights = highlights != null ? highlights : false; |
| margaretha | 20f3123 | 2018-07-09 17:49:39 +0200 | [diff] [blame] | 246 | if (layers == null || layers.isEmpty()) layers = new HashSet<>(); |
| 247 | |
| margaretha | 351f769 | 2019-02-06 19:36:52 +0100 | [diff] [blame] | 248 | try{ |
| 249 | String results = searchService.retrieveMatchInfo(corpusId, docId, |
| 250 | textId, matchId, foundries, tokenContext.getUsername(), |
| 251 | headers, layers, spans, highlights); |
| 252 | return Response.ok(results).build(); |
| 253 | } |
| 254 | catch (KustvaktException e) { |
| 255 | throw kustvaktResponseHandler.throwit(e); |
| 256 | } |
| 257 | |
| margaretha | 20f3123 | 2018-07-09 17:49:39 +0200 | [diff] [blame] | 258 | } |
| 259 | |
| margaretha | 20f3123 | 2018-07-09 17:49:39 +0200 | [diff] [blame] | 260 | /* |
| 261 | * Returns the meta data fields of a certain document |
| 262 | */ |
| 263 | // This is currently identical to LiteService#getMeta(), |
| 264 | // but may need auth code to work following policies |
| 265 | @GET |
| margaretha | 7926adc | 2018-08-30 13:45:33 +0200 | [diff] [blame] | 266 | @Path("{version}/corpus/{corpusId}/{docId}/{textId}") |
| margaretha | 20f3123 | 2018-07-09 17:49:39 +0200 | [diff] [blame] | 267 | public Response getMetadata (@PathParam("corpusId") String corpusId, |
| margaretha | 351f769 | 2019-02-06 19:36:52 +0100 | [diff] [blame] | 268 | @PathParam("docId") String docId, |
| margaretha | 852a0f6 | 2019-02-19 12:14:30 +0100 | [diff] [blame] | 269 | @PathParam("textId") String textId, |
| 270 | @QueryParam("fields") String fields, |
| margaretha | 351f769 | 2019-02-06 19:36:52 +0100 | [diff] [blame] | 271 | @Context SecurityContext ctx, |
| 272 | @Context HttpHeaders headers |
| 273 | // @QueryParam("fields") Set<String> fields |
| margaretha | 20f3123 | 2018-07-09 17:49:39 +0200 | [diff] [blame] | 274 | ) throws KustvaktException { |
| margaretha | 351f769 | 2019-02-06 19:36:52 +0100 | [diff] [blame] | 275 | TokenContext tokenContext = (TokenContext) ctx.getUserPrincipal(); |
| 276 | try { |
| 277 | String results = searchService.retrieveDocMetadata(corpusId, docId, |
| margaretha | 852a0f6 | 2019-02-19 12:14:30 +0100 | [diff] [blame] | 278 | textId, fields, tokenContext.getUsername(), headers); |
| margaretha | 351f769 | 2019-02-06 19:36:52 +0100 | [diff] [blame] | 279 | return Response.ok(results).build(); |
| 280 | } |
| 281 | catch (KustvaktException e) { |
| 282 | throw kustvaktResponseHandler.throwit(e); |
| 283 | } |
| margaretha | 20f3123 | 2018-07-09 17:49:39 +0200 | [diff] [blame] | 284 | } |
| 285 | |
| margaretha | 2544cdf | 2019-07-08 11:39:43 +0200 | [diff] [blame] | 286 | // EM: This web service requires Karang and is DISABLED. |
| 287 | // @POST |
| 288 | // @Path("{version}/colloc") |
| margaretha | 20f3123 | 2018-07-09 17:49:39 +0200 | [diff] [blame] | 289 | public Response getCollocationBase (@QueryParam("q") String query) { |
| 290 | String result; |
| 291 | try { |
| 292 | result = searchService.getCollocationBase(query); |
| 293 | } |
| 294 | catch (KustvaktException e) { |
| 295 | throw kustvaktResponseHandler.throwit(e); |
| 296 | } |
| 297 | return Response.ok(result).build(); |
| margaretha | ade7d4a | 2017-07-20 19:53:35 +0200 | [diff] [blame] | 298 | } |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 299 | |
| margaretha | fc2040a | 2017-04-18 12:07:23 +0200 | [diff] [blame] | 300 | // @GET |
| 301 | // @Path("colloc") |
| margaretha | 20f3123 | 2018-07-09 17:49:39 +0200 | [diff] [blame] | 302 | // public Response getCollocationsAll(@Context SecurityContext |
| 303 | // ctx, |
| margaretha | fc2040a | 2017-04-18 12:07:23 +0200 | [diff] [blame] | 304 | // @Context Locale locale, @QueryParam("props") String properties, |
| 305 | // @QueryParam("sfskip") Integer sfs, |
| margaretha | 20f3123 | 2018-07-09 17:49:39 +0200 | [diff] [blame] | 306 | // @QueryParam("sflimit") Integer limit, @QueryParam("q") String |
| 307 | // query, |
| 308 | // @QueryParam("ql") String ql, @QueryParam("context") Integer |
| 309 | // context, |
| margaretha | fc2040a | 2017-04-18 12:07:23 +0200 | [diff] [blame] | 310 | // @QueryParam("foundry") String foundry, |
| 311 | // @QueryParam("paths") Boolean wPaths) { |
| margaretha | 20f3123 | 2018-07-09 17:49:39 +0200 | [diff] [blame] | 312 | // TokenContext tokenContext = (TokenContext) |
| 313 | // ctx.getUserPrincipal(); |
| margaretha | fc2040a | 2017-04-18 12:07:23 +0200 | [diff] [blame] | 314 | // ColloQuery.ColloQueryBuilder builder; |
| margaretha | 20f3123 | 2018-07-09 17:49:39 +0200 | [diff] [blame] | 315 | // KoralCollectionQueryBuilder cquery = new |
| 316 | // KoralCollectionQueryBuilder(); |
| margaretha | fc2040a | 2017-04-18 12:07:23 +0200 | [diff] [blame] | 317 | // String result; |
| 318 | // try { |
| 319 | // User user = controller.getUser(tokenContext.getUsername()); |
| 320 | // Set<VirtualCollection> resources = ResourceFinder |
| 321 | // .search(user, VirtualCollection.class); |
| 322 | // for (KustvaktResource c : resources) |
| 323 | // cquery.addResource(((VirtualCollection) c).getQuery()); |
| 324 | // |
| 325 | // builder = functions |
| 326 | // .buildCollocations(query, ql, properties, context, limit, |
| 327 | // sfs, foundry, new ArrayList<Dependency>(), wPaths, |
| 328 | // cquery); |
| 329 | // |
| 330 | // result = graphDBhandler |
| 331 | // .getResponse("distCollo", "q", builder.build().toJSON()); |
| 332 | // }catch (KustvaktException e) { |
| 333 | // throw KustvaktResponseHandler.throwit(e); |
| 334 | // }catch (JsonProcessingException e) { |
| margaretha | 20f3123 | 2018-07-09 17:49:39 +0200 | [diff] [blame] | 335 | // throw |
| 336 | // KustvaktResponseHandler.throwit(StatusCodes.ILLEGAL_ARGUMENT); |
| margaretha | fc2040a | 2017-04-18 12:07:23 +0200 | [diff] [blame] | 337 | // } |
| 338 | // return Response.ok(result).build(); |
| 339 | // } |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 340 | |
| margaretha | fc2040a | 2017-04-18 12:07:23 +0200 | [diff] [blame] | 341 | // /** |
| 342 | // * @param locale |
| margaretha | 20f3123 | 2018-07-09 17:49:39 +0200 | [diff] [blame] | 343 | // * @param properties a json object string containing field, op |
| 344 | // and value |
| margaretha | fc2040a | 2017-04-18 12:07:23 +0200 | [diff] [blame] | 345 | // for the query |
| 346 | // * @param query |
| 347 | // * @param context |
| 348 | // * @return |
| 349 | // */ |
| 350 | // @GET |
| 351 | // @Path("{type}/{id}/colloc") |
| 352 | // public Response getCollocations(@Context SecurityContext ctx, |
| 353 | // @Context Locale locale, @QueryParam("props") String properties, |
| 354 | // @QueryParam("sfskip") Integer sfs, |
| margaretha | 20f3123 | 2018-07-09 17:49:39 +0200 | [diff] [blame] | 355 | // @QueryParam("sflimit") Integer limit, @QueryParam("q") String |
| 356 | // query, |
| 357 | // @QueryParam("ql") String ql, @QueryParam("context") Integer |
| 358 | // context, |
| margaretha | fc2040a | 2017-04-18 12:07:23 +0200 | [diff] [blame] | 359 | // @QueryParam("foundry") String foundry, |
| margaretha | 20f3123 | 2018-07-09 17:49:39 +0200 | [diff] [blame] | 360 | // @QueryParam("paths") Boolean wPaths, @PathParam("id") String |
| 361 | // id, |
| margaretha | fc2040a | 2017-04-18 12:07:23 +0200 | [diff] [blame] | 362 | // @PathParam("type") String type) { |
| 363 | // ColloQuery.ColloQueryBuilder builder; |
| 364 | // type = StringUtils.normalize(type); |
| 365 | // id = StringUtils.decodeHTML(id); |
| margaretha | 20f3123 | 2018-07-09 17:49:39 +0200 | [diff] [blame] | 366 | // TokenContext tokenContext = (TokenContext) |
| 367 | // ctx.getUserPrincipal(); |
| margaretha | fc2040a | 2017-04-18 12:07:23 +0200 | [diff] [blame] | 368 | // String result; |
| 369 | // try { |
| margaretha | 20f3123 | 2018-07-09 17:49:39 +0200 | [diff] [blame] | 370 | // KoralCollectionQueryBuilder cquery = new |
| 371 | // KoralCollectionQueryBuilder(); |
| margaretha | fc2040a | 2017-04-18 12:07:23 +0200 | [diff] [blame] | 372 | // try { |
| 373 | // User user = controller.getUser(tokenContext.getUsername()); |
| 374 | // |
| 375 | // KustvaktResource resource = this.resourceHandler |
| 376 | // .findbyStrId(id, user, type); |
| 377 | // |
| 378 | // if (resource instanceof VirtualCollection) |
| 379 | // cquery.addResource( |
| 380 | // ((VirtualCollection) resource).getQuery()); |
| 381 | // else if (resource instanceof Corpus) |
| 382 | // cquery.addMetaFilter("corpusID", |
| 383 | // resource.getPersistentID()); |
| 384 | // else |
| 385 | // throw KustvaktResponseHandler |
| 386 | // .throwit(StatusCodes.ILLEGAL_ARGUMENT, |
| 387 | // "Type parameter not supported", type); |
| 388 | // |
| 389 | // }catch (KustvaktException e) { |
| 390 | // throw KustvaktResponseHandler.throwit(e); |
| 391 | // }catch (NumberFormatException ex) { |
| 392 | // throw KustvaktResponseHandler |
| 393 | // .throwit(StatusCodes.ILLEGAL_ARGUMENT); |
| 394 | // } |
| 395 | // |
| 396 | // builder = functions |
| 397 | // .buildCollocations(query, ql, properties, context, limit, |
| 398 | // sfs, foundry, new ArrayList<Dependency>(), wPaths, |
| 399 | // cquery); |
| 400 | // |
| 401 | // result = graphDBhandler |
| 402 | // .getResponse("distCollo", "q", builder.build().toJSON()); |
| 403 | // |
| 404 | // }catch (JsonProcessingException e) { |
| margaretha | 20f3123 | 2018-07-09 17:49:39 +0200 | [diff] [blame] | 405 | // throw |
| 406 | // KustvaktResponseHandler.throwit(StatusCodes.ILLEGAL_ARGUMENT); |
| margaretha | fc2040a | 2017-04-18 12:07:23 +0200 | [diff] [blame] | 407 | // }catch (KustvaktException e) { |
| 408 | // throw KustvaktResponseHandler.throwit(e); |
| 409 | // } |
| 410 | // |
| 411 | // return Response.ok(result).build(); |
| 412 | // } |
| Akron | ac049e8 | 2018-02-22 20:54:09 +0100 | [diff] [blame] | 413 | |
| Michael Hanl | 1939065 | 2016-01-16 11:01:24 +0100 | [diff] [blame] | 414 | } |