Class ContentTypeBasedDataFetcher

  • All Implemented Interfaces:
    graphql.schema.DataFetcher<Object>

    public class ContentTypeBasedDataFetcher
    extends RequestAwareDataFetcher<Object>
    Implementation of DataFetcher that queries Elasticsearch to retrieve content based on a content type.
    Since:
    3.1
    Author:
    joseross
    • Field Detail

      • defaultLimit

        protected int defaultLimit
        The default value for the 'limit' argument
      • defaultSortField

        protected String defaultSortField
        The default value for the 'sortBy' argument
      • defaultSortOrder

        protected String defaultSortOrder
        The default value for the 'sortOrder' argument
      • elasticsearchClient

        protected org.craftercms.search.elasticsearch.client.ElasticsearchClientWrapper elasticsearchClient
        The instance of ElasticsearchClientWrapper
    • Constructor Detail

      • ContentTypeBasedDataFetcher

        public ContentTypeBasedDataFetcher()
    • Method Detail

      • setDefaultLimit

        public void setDefaultLimit​(int defaultLimit)
      • setDefaultSortField

        public void setDefaultSortField​(String defaultSortField)
      • setDefaultSortOrder

        public void setDefaultSortOrder​(String defaultSortOrder)
      • setElasticsearchClient

        public void setElasticsearchClient​(org.craftercms.search.elasticsearch.client.ElasticsearchClientWrapper elasticsearchClient)
      • processSelection

        protected void processSelection​(String path,
                                        graphql.language.Selection currentSelection,
                                        co.elastic.clients.elasticsearch._types.query_dsl.BoolQuery.Builder query,
                                        List<String> queryFieldIncludes,
                                        graphql.schema.DataFetchingEnvironment env)
        Adds the required filters to the ES query for the given field
      • addFieldFilterFromObjectField

        protected void addFieldFilterFromObjectField​(String path,
                                                     graphql.language.ObjectField filter,
                                                     co.elastic.clients.elasticsearch._types.query_dsl.BoolQuery.Builder query,
                                                     graphql.schema.DataFetchingEnvironment env)
      • addFieldFilterFromMapEntry

        protected void addFieldFilterFromMapEntry​(String path,
                                                  Map.Entry<String,​Object> filter,
                                                  co.elastic.clients.elasticsearch._types.query_dsl.BoolQuery.Builder query,
                                                  graphql.schema.DataFetchingEnvironment env)
      • getFilterQueryFromObjectField

        protected co.elastic.clients.elasticsearch._types.query_dsl.Query getFilterQueryFromObjectField​(String fieldPath,
                                                                                                        graphql.language.ObjectField filter,
                                                                                                        graphql.schema.DataFetchingEnvironment env)
      • getFilterQueryFromMapEntry

        protected co.elastic.clients.elasticsearch._types.query_dsl.Query getFilterQueryFromMapEntry​(String fieldPath,
                                                                                                     Map.Entry<String,​Object> filter)
      • getRealValue

        protected Object getRealValue​(graphql.language.Value value,
                                      graphql.schema.DataFetchingEnvironment env)
        Extracts a scalar value, this is needed because of GraphQL strict types
      • fixItems

        protected Map<String,​Object> fixItems​(Map<String,​Object> map)
        Checks for fields containing the 'item' keyword and makes sure they are always a list even if there is only one value. This is needed because the GraphQL schema always needs to return the same type for a field.