| margaretha | d3c0fc9 | 2017-10-25 15:03:32 +0200 | [diff] [blame] | 1 | package de.ids_mannheim.korap.web.controller; |
| margaretha | 5413490 | 2017-09-27 18:43:11 +0200 | [diff] [blame] | 2 | |
| 3 | import java.util.Locale; |
| 4 | |
| 5 | import javax.ws.rs.GET; |
| 6 | import javax.ws.rs.Path; |
| 7 | import javax.ws.rs.Produces; |
| 8 | import javax.ws.rs.QueryParam; |
| 9 | import javax.ws.rs.core.Context; |
| 10 | import javax.ws.rs.core.MediaType; |
| 11 | import javax.ws.rs.core.Response; |
| 12 | import javax.ws.rs.core.SecurityContext; |
| 13 | |
| margaretha | 49cb688 | 2018-07-04 04:19:54 +0200 | [diff] [blame] | 14 | import org.apache.logging.log4j.LogManager; |
| 15 | import org.apache.logging.log4j.Logger; |
| margaretha | 5413490 | 2017-09-27 18:43:11 +0200 | [diff] [blame] | 16 | import org.springframework.beans.factory.annotation.Autowired; |
| 17 | import org.springframework.stereotype.Controller; |
| 18 | |
| 19 | import com.sun.jersey.spi.container.ResourceFilters; |
| 20 | |
| 21 | import de.ids_mannheim.korap.exceptions.KustvaktException; |
| 22 | import de.ids_mannheim.korap.exceptions.StatusCodes; |
| 23 | import de.ids_mannheim.korap.utils.KoralCollectionQueryBuilder; |
| margaretha | 56e8e55 | 2017-12-05 16:31:21 +0100 | [diff] [blame] | 24 | import de.ids_mannheim.korap.web.CoreResponseHandler; |
| margaretha | 5413490 | 2017-09-27 18:43:11 +0200 | [diff] [blame] | 25 | import de.ids_mannheim.korap.web.SearchKrill; |
| margaretha | ee0cbfe | 2018-08-28 17:47:14 +0200 | [diff] [blame] | 26 | import de.ids_mannheim.korap.web.APIVersionFilter; |
| margaretha | 5413490 | 2017-09-27 18:43:11 +0200 | [diff] [blame] | 27 | import de.ids_mannheim.korap.web.filter.PiwikFilter; |
| margaretha | 5413490 | 2017-09-27 18:43:11 +0200 | [diff] [blame] | 28 | |
| 29 | /** |
| margaretha | d3c0fc9 | 2017-10-25 15:03:32 +0200 | [diff] [blame] | 30 | * Web services related to statistics |
| margaretha | 5413490 | 2017-09-27 18:43:11 +0200 | [diff] [blame] | 31 | * |
| 32 | * @author hanl |
| 33 | * @author margaretha |
| 34 | * |
| margaretha | 894a7d7 | 2017-11-08 19:24:20 +0100 | [diff] [blame] | 35 | * @date 08/11/2017 |
| margaretha | 5413490 | 2017-09-27 18:43:11 +0200 | [diff] [blame] | 36 | * |
| 37 | */ |
| 38 | @Controller |
| margaretha | ee0cbfe | 2018-08-28 17:47:14 +0200 | [diff] [blame] | 39 | @Path("{version}/statistics/") |
| 40 | @ResourceFilters({APIVersionFilter.class, PiwikFilter.class }) |
| margaretha | 5413490 | 2017-09-27 18:43:11 +0200 | [diff] [blame] | 41 | @Produces(MediaType.APPLICATION_JSON + ";charset=utf-8") |
| margaretha | d3c0fc9 | 2017-10-25 15:03:32 +0200 | [diff] [blame] | 42 | public class StatisticController { |
| margaretha | 5413490 | 2017-09-27 18:43:11 +0200 | [diff] [blame] | 43 | |
| 44 | |
| 45 | private static Logger jlog = |
| margaretha | 49cb688 | 2018-07-04 04:19:54 +0200 | [diff] [blame] | 46 | LogManager.getLogger(StatisticController.class); |
| margaretha | 894a7d7 | 2017-11-08 19:24:20 +0100 | [diff] [blame] | 47 | @Autowired |
| margaretha | da3c785 | 2018-06-14 20:35:11 +0200 | [diff] [blame] | 48 | private CoreResponseHandler kustvaktResponseHandler; |
| margaretha | 5413490 | 2017-09-27 18:43:11 +0200 | [diff] [blame] | 49 | @Autowired |
| 50 | private SearchKrill searchKrill; |
| 51 | |
| 52 | |
| 53 | /** |
| 54 | * Returns statistics of the virtual corpus defined by the given |
| margaretha | e8ab51d | 2018-01-16 19:27:40 +0100 | [diff] [blame] | 55 | * corpusQuery parameter. |
| margaretha | 5413490 | 2017-09-27 18:43:11 +0200 | [diff] [blame] | 56 | * |
| 57 | * @param context |
| 58 | * SecurityContext |
| 59 | * @param locale |
| 60 | * Locale |
| margaretha | e8ab51d | 2018-01-16 19:27:40 +0100 | [diff] [blame] | 61 | * @param corpusQuery |
| margaretha | 5413490 | 2017-09-27 18:43:11 +0200 | [diff] [blame] | 62 | * a collection query specifying a virtual corpus |
| 63 | * @return statistics of the virtual corpus defined by the given |
| margaretha | e8ab51d | 2018-01-16 19:27:40 +0100 | [diff] [blame] | 64 | * corpusQuery parameter. |
| margaretha | 5413490 | 2017-09-27 18:43:11 +0200 | [diff] [blame] | 65 | */ |
| 66 | @GET |
| 67 | public Response getStatistics (@Context SecurityContext context, |
| 68 | @Context Locale locale, |
| margaretha | e8ab51d | 2018-01-16 19:27:40 +0100 | [diff] [blame] | 69 | @QueryParam("corpusQuery") String corpusQuery) { |
| margaretha | 5413490 | 2017-09-27 18:43:11 +0200 | [diff] [blame] | 70 | |
| margaretha | 5413490 | 2017-09-27 18:43:11 +0200 | [diff] [blame] | 71 | KoralCollectionQueryBuilder builder = new KoralCollectionQueryBuilder(); |
| margaretha | 5413490 | 2017-09-27 18:43:11 +0200 | [diff] [blame] | 72 | |
| Akron | 6091cf3 | 2018-07-03 20:45:49 +0200 | [diff] [blame] | 73 | String stats; |
| 74 | if (corpusQuery != null && !corpusQuery.isEmpty()) { |
| 75 | builder.with(corpusQuery); |
| 76 | String json = null; |
| 77 | try { |
| 78 | json = builder.toJSON(); |
| 79 | } |
| 80 | catch (KustvaktException e) { |
| 81 | throw kustvaktResponseHandler.throwit(e); |
| 82 | } |
| 83 | stats = searchKrill.getStatistics(json); |
| 84 | } |
| 85 | else { |
| 86 | stats = searchKrill.getStatistics(null); |
| 87 | }; |
| 88 | |
| margaretha | 5413490 | 2017-09-27 18:43:11 +0200 | [diff] [blame] | 89 | if (stats.contains("-1")) |
| margaretha | da3c785 | 2018-06-14 20:35:11 +0200 | [diff] [blame] | 90 | throw kustvaktResponseHandler.throwit(StatusCodes.NO_RESULT_FOUND); |
| margaretha | 5413490 | 2017-09-27 18:43:11 +0200 | [diff] [blame] | 91 | jlog.debug("Stats: " + stats); |
| 92 | return Response.ok(stats).build(); |
| 93 | } |
| 94 | } |