Esempio n. 1
0
  @Override
  protected MultiIndexTableTool createHitsTable(
      TemplatingContext templatingContext,
      RequestParameters parameters,
      Locale locale,
      Collection<String> indexNames,
      String page)
      throws QueryCreationException, TableException {
    if (!parameters.isDefined("selected")) {
      QueryCreator queryCreator = queryCreatorFactory.getQueryCreator(parameters, locale);
      templatingContext.put("queryCreator", queryCreator);
      TableState state = tableStateManager.getState(context, this.getClass().getCanonicalName());
      state.setPageSize(configurator.getPageSize());
      if (page == null) state.setCurrentPage(1);
      else state.setCurrentPage(new Integer(page));

      state.setOld();
      log.debug("Query: " + queryCreator.getQuery());

      List<TableFilter> filters = new ArrayList<TableFilter>();
      MultiIndexTableTool hitsTable =
          (MultiIndexTableTool)
              searchExecutor.search(
                  indexNames,
                  queryCreator.getQuery(),
                  queryCreator.getSortFields(),
                  state,
                  filters);

      templatingContext.put("page", page);
      List<Integer> selected = new LinkedList<Integer>();
      for (int i = 0; i < hitsTable.getPageRowCount(); i++) {
        selected.add(i);
        templatingContext.put("selected", selected);
      }
      return hitsTable;
    }
    QueryCreator queryCreator = queryCreatorFactory.getQueryCreator(parameters, locale);
    templatingContext.put("queryCreator", queryCreator);
    TableState state = tableStateManager.getState(context, this.getClass().getCanonicalName());

    SortedSet<String> selectedItems = new TreeSet<String>();
    SortedSet<String> index = new TreeSet<String>();
    for (String selected : parameters.getStrings("selected")) {
      String id = selected.replaceAll("\\.", "");
      selectedItems.add(id);
      index.add(indexIdentifier.identify(id));
    }
    state.setPageSize(0);
    List<String> indx = new LinkedList<String>();
    indx.addAll(index);
    Collections.sort(
        indx,
        new Comparator<String>() {
          @Override
          public int compare(String a, String b) {
            if ("treaties".equals(a)) return -1;
            if ("treaties".equals(b)) return 1;
            if ("documents".equals(a)) return -1;
            if ("documents".equals(b)) return 1;
            if ("literature".equals(a)) return -1;
            if ("literature".equals(b)) return 1;
            if ("courtdecisions".equals(a)) return -1;
            if ("courtdecisions".equals(b)) return 1;

            return 1;
          }
        });

    log.debug("Query: " + queryCreator.getQuery());

    List<TableFilter> filters = new ArrayList<TableFilter>();
    MultiIndexTableTool table =
        (MultiIndexTableTool)
            searchExecutor.search(
                indx, queryCreator.getQuery(), queryCreator.getSortFields(), state, filters);

    List<Integer> selected = new LinkedList<Integer>();
    for (int i = 0; i < table.getRows().size(); i++) {
      String id =
          (String) ((LuceneSearchHit) ((TableRow) table.getRows().get(i)).getObject()).get("id");
      if (selectedItems.contains(id)) {
        selected.add(i);
      }
    }
    templatingContext.put("selected", selected);
    return table;
  }