Пример #1
0
  @GET
  @Path("search/annotate")
  @Produces("application/xml")
  public SaltProject annotate(
      @QueryParam("q") String query,
      @QueryParam("corpora") String rawCorpusNames,
      @DefaultValue("0") @QueryParam("offset") String offsetRaw,
      @DefaultValue("10") @QueryParam("limit") String limitRaw,
      @DefaultValue("5") @QueryParam("left") String leftRaw,
      @DefaultValue("5") @QueryParam("right") String rightRaw,
      @QueryParam("seglayer") String segmentationLayer)
      throws IOException {
    requiredParameter(query, "q", "AnnisQL query");
    requiredParameter(rawCorpusNames, "corpora", "comma separated list of corpus names");

    Subject user = SecurityUtils.getSubject();
    List<String> corpusNames = splitCorpusNamesFromRaw(rawCorpusNames);
    for (String c : corpusNames) {
      user.checkPermission("query:annotate:" + c);
    }

    int offset = Integer.parseInt(offsetRaw);
    int limit = Integer.parseInt(limitRaw);
    int left = Math.min(maxContext, Integer.parseInt(leftRaw));
    int right = Math.min(maxContext, Integer.parseInt(rightRaw));

    QueryData data = queryDataFromParameters(query, rawCorpusNames);
    String logParameters = createAnnotateLogParameters(left, right, offset, limit);

    data.addExtension(new LimitOffsetQueryData(offset, limit));
    data.addExtension(new AnnotateQueryData(left, right, segmentationLayer));
    long start = new Date().getTime();
    SaltProject p = annisDao.annotate(data);
    long end = new Date().getTime();
    logQuery(
        "ANNOTATE", query, splitCorpusNamesFromRaw(rawCorpusNames), end - start, logParameters);
    return p;
  }