BrowseFacetController.java

package info.textgrid.rep.browsefacet;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import info.textgrid.namespaces.middleware.tgsearch.FacetResponse;
import info.textgrid.namespaces.middleware.tgsearch.FacetType;
import info.textgrid.rep.i18n.I18N;
import info.textgrid.rep.i18n.LocaleResolver;
import info.textgrid.rep.service.TgrepConfigurationService;
import info.textgrid.rep.service.TgsearchClientService;
import io.quarkus.qute.Template;
import io.quarkus.qute.TemplateInstance;
import jakarta.inject.Inject;
import jakarta.ws.rs.DefaultValue;
import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.PathParam;
import jakarta.ws.rs.Produces;
import jakarta.ws.rs.QueryParam;
import jakarta.ws.rs.core.MediaType;

@Path("/facet")
public class BrowseFacetController {

  @Inject
  private TgsearchClientService tgsearchClientService;

  @Inject
  private TgrepConfigurationService tgrepConfig;

  @Inject
  private LocaleResolver localeResolver;

  @Inject
  Template browsefacet;

  @Path("/{facet}")
  @GET
  @Produces(MediaType.TEXT_HTML)
  public TemplateInstance render(
      @PathParam("facet") String facet,
      @QueryParam("limit") @DefaultValue("0") int limit,
      @QueryParam("order") @DefaultValue("count.desc") String order) {

    I18N i18n = localeResolver.getI18N();

    // list facets configured for this portlet
    List<String> facetList = new ArrayList<String>();
    facetList.add(facet);

    FacetResponse facetResponse = tgsearchClientService.listFacet(facetList, limit, order);
    List<FacetType> facets = facetResponse.getFacetGroup().get(0).getFacet();

    Map<String, Object> model = new HashMap<String, Object>();
    model.put("facets", facets);
    model.put("facet", facet);
    model.put("i18n", i18n.getTranslationMap());
    model.put("language", localeResolver.getLocale().getLanguage());
    model.put("config", tgrepConfig);
    model.put("localeResolver", localeResolver);

    return browsefacet.data(model);
  }

}