Search in sources :

Example 1 with FIELD_SUFFIX_ITEMS

use of org.craftercms.engine.graphql.SchemaUtils.FIELD_SUFFIX_ITEMS in project engine by craftercms.

the class CheckboxGroupFieldFactory method createField.

/**
 * {@inheritDoc}
 */
@SuppressWarnings("unchecked")
@Override
public void createField(final Document contentTypeDefinition, final Node contentTypeField, final String contentTypeFieldId, final String parentGraphQLTypeName, final GraphQLObjectType.Builder parentGraphQLType, final String graphQLFieldName, final GraphQLFieldDefinition.Builder graphQLField) {
    String datasourceName = XmlUtils.selectSingleNodeValue(contentTypeField, datasourceNameXPath);
    String datasourceSettings = XmlUtils.selectSingleNodeValue(contentTypeDefinition, String.format(datasourceSettingsXPathFormat, datasourceName));
    String datasourceType = null;
    String datasourceSuffix = null;
    try {
        if (StringUtils.isNotEmpty(datasourceSettings)) {
            List<Map<String, Object>> typeSetting = objectMapper.readValue(datasourceSettings, List.class);
            Optional<Map<String, Object>> selectedType = typeSetting.stream().filter(s -> (Boolean) s.get(FIELD_NAME_SELECTED)).findFirst();
            if (selectedType.isPresent()) {
                datasourceType = selectedType.get().get(FIELD_NAME_VALUE).toString();
                datasourceSuffix = StringUtils.substringAfter(datasourceType, FIELD_SEPARATOR);
            }
        }
    } catch (IOException e) {
        logger.warn("Error checking data source type for '{}'", contentTypeFieldId);
    }
    String valueKey = FIELD_NAME_VALUE;
    if (StringUtils.isNotEmpty(datasourceSuffix)) {
        valueKey += FIELD_SEPARATOR + datasourceSuffix + FIELD_SUFFIX_MULTIVALUE;
    }
    GraphQLFieldDefinition.Builder valueField = GraphQLFieldDefinition.newFieldDefinition().name(valueKey).description("The value of the item");
    if (StringUtils.isNotEmpty(datasourceType)) {
        setTypeFromFieldName(datasourceType, valueField);
    } else {
        valueField.type(GraphQLString);
        valueField.argument(TEXT_FILTER);
    }
    GraphQLObjectType itemType = GraphQLObjectType.newObject().name(parentGraphQLTypeName + FIELD_SEPARATOR + graphQLFieldName + FIELD_SUFFIX_ITEM).description("Item for field " + contentTypeFieldId).field(GraphQLFieldDefinition.newFieldDefinition().name(FIELD_NAME_KEY).description("The key of the item").type(GraphQLString).argument(TEXT_FILTER)).field(valueField).build();
    GraphQLObjectType itemWrapper = GraphQLObjectType.newObject().name(parentGraphQLTypeName + FIELD_SEPARATOR + graphQLFieldName + FIELD_SUFFIX_ITEMS).description("Wrapper for field " + contentTypeFieldId).field(GraphQLFieldDefinition.newFieldDefinition().name(FIELD_NAME_ITEM).description("List of items for field " + contentTypeFieldId).type(list(itemType))).build();
    graphQLField.type(itemWrapper);
}
Also used : FIELD_SUFFIX_MULTIVALUE(org.craftercms.engine.graphql.SchemaUtils.FIELD_SUFFIX_MULTIVALUE) Document(org.dom4j.Document) GraphQLString(graphql.Scalars.GraphQLString) FIELD_NAME_SELECTED(org.craftercms.engine.graphql.SchemaUtils.FIELD_NAME_SELECTED) Node(org.dom4j.Node) GraphQLFieldDefinition(graphql.schema.GraphQLFieldDefinition) LoggerFactory(org.slf4j.LoggerFactory) FIELD_SUFFIX_ITEM(org.craftercms.engine.graphql.SchemaUtils.FIELD_SUFFIX_ITEM) StringUtils(org.apache.commons.lang3.StringUtils) GraphQLList.list(graphql.schema.GraphQLList.list) FIELD_SUFFIX_ITEMS(org.craftercms.engine.graphql.SchemaUtils.FIELD_SUFFIX_ITEMS) TEXT_FILTER(org.craftercms.engine.graphql.SchemaUtils.TEXT_FILTER) GraphQLFieldFactory(org.craftercms.engine.graphql.GraphQLFieldFactory) Map(java.util.Map) FIELD_NAME_VALUE(org.craftercms.engine.graphql.SchemaUtils.FIELD_NAME_VALUE) XmlUtils(org.craftercms.core.util.XmlUtils) FIELD_NAME_ITEM(org.craftercms.engine.graphql.SchemaUtils.FIELD_NAME_ITEM) FIELD_SEPARATOR(org.craftercms.engine.graphql.SchemaUtils.FIELD_SEPARATOR) GraphQLObjectType(graphql.schema.GraphQLObjectType) Logger(org.slf4j.Logger) ObjectMapper(com.fasterxml.jackson.databind.ObjectMapper) IOException(java.io.IOException) SchemaUtils.setTypeFromFieldName(org.craftercms.engine.graphql.SchemaUtils.setTypeFromFieldName) List(java.util.List) Optional(java.util.Optional) Required(org.springframework.beans.factory.annotation.Required) FIELD_NAME_KEY(org.craftercms.engine.graphql.SchemaUtils.FIELD_NAME_KEY) GraphQLObjectType(graphql.schema.GraphQLObjectType) GraphQLFieldDefinition(graphql.schema.GraphQLFieldDefinition) GraphQLString(graphql.Scalars.GraphQLString) IOException(java.io.IOException) Map(java.util.Map)

Aggregations

ObjectMapper (com.fasterxml.jackson.databind.ObjectMapper)1 GraphQLString (graphql.Scalars.GraphQLString)1 GraphQLFieldDefinition (graphql.schema.GraphQLFieldDefinition)1 GraphQLList.list (graphql.schema.GraphQLList.list)1 GraphQLObjectType (graphql.schema.GraphQLObjectType)1 IOException (java.io.IOException)1 List (java.util.List)1 Map (java.util.Map)1 Optional (java.util.Optional)1 StringUtils (org.apache.commons.lang3.StringUtils)1 XmlUtils (org.craftercms.core.util.XmlUtils)1 GraphQLFieldFactory (org.craftercms.engine.graphql.GraphQLFieldFactory)1 FIELD_NAME_ITEM (org.craftercms.engine.graphql.SchemaUtils.FIELD_NAME_ITEM)1 FIELD_NAME_KEY (org.craftercms.engine.graphql.SchemaUtils.FIELD_NAME_KEY)1 FIELD_NAME_SELECTED (org.craftercms.engine.graphql.SchemaUtils.FIELD_NAME_SELECTED)1 FIELD_NAME_VALUE (org.craftercms.engine.graphql.SchemaUtils.FIELD_NAME_VALUE)1 FIELD_SEPARATOR (org.craftercms.engine.graphql.SchemaUtils.FIELD_SEPARATOR)1 FIELD_SUFFIX_ITEM (org.craftercms.engine.graphql.SchemaUtils.FIELD_SUFFIX_ITEM)1 FIELD_SUFFIX_ITEMS (org.craftercms.engine.graphql.SchemaUtils.FIELD_SUFFIX_ITEMS)1 FIELD_SUFFIX_MULTIVALUE (org.craftercms.engine.graphql.SchemaUtils.FIELD_SUFFIX_MULTIVALUE)1