/*
* Copyright 2015 Hewlett-Packard Development Company, L.P.
* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License.
*/
package com.hp.autonomy.frontend.find.hod.fields;
import com.hp.autonomy.frontend.configuration.ConfigService;
import com.hp.autonomy.frontend.find.core.configuration.FindConfig;
import com.hp.autonomy.frontend.find.core.fields.FieldAndValueDetails;
import com.hp.autonomy.frontend.find.core.fields.FieldComparatorFactory;
import com.hp.autonomy.frontend.find.core.fields.FieldsController;
import com.hp.autonomy.hod.client.api.resource.ResourceName;
import com.hp.autonomy.hod.client.error.HodErrorException;
import com.hp.autonomy.searchcomponents.core.fields.TagNameFactory;
import com.hp.autonomy.searchcomponents.hod.fields.HodFieldsRequest;
import com.hp.autonomy.searchcomponents.hod.fields.HodFieldsRequestBuilder;
import com.hp.autonomy.searchcomponents.hod.fields.HodFieldsService;
import com.hp.autonomy.searchcomponents.hod.parametricvalues.HodParametricRequest;
import com.hp.autonomy.searchcomponents.hod.parametricvalues.HodParametricRequestBuilder;
import com.hp.autonomy.searchcomponents.hod.parametricvalues.HodParametricValuesService;
import com.hp.autonomy.searchcomponents.hod.search.HodQueryRestrictions;
import com.hp.autonomy.searchcomponents.hod.search.HodQueryRestrictionsBuilder;
import com.hp.autonomy.types.requests.idol.actions.tags.params.FieldTypeParam;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.ObjectFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
@Controller
@Slf4j
class HodFieldsController extends FieldsController<HodFieldsRequest, HodErrorException, HodQueryRestrictions, HodParametricRequest> {
static final String DATABASES_PARAM = "databases";
private final ObjectFactory<HodFieldsRequestBuilder> fieldsRequestBuilderFactory;
private final ObjectFactory<HodQueryRestrictionsBuilder> queryRestrictionsBuilderFactory;
@SuppressWarnings({"TypeMayBeWeakened", "ConstructorWithTooManyParameters"})
@Autowired
HodFieldsController(
final HodFieldsService fieldsService,
final HodParametricValuesService parametricValuesService,
final ObjectFactory<HodParametricRequestBuilder> parametricRequestBuilderFactory,
final FieldComparatorFactory fieldComparatorFactory,
final TagNameFactory tagNameFactory,
final ConfigService<? extends FindConfig<?, ?>> configService,
final ObjectFactory<HodFieldsRequestBuilder> fieldsRequestBuilderFactory,
final ObjectFactory<HodQueryRestrictionsBuilder> queryRestrictionsBuilderFactory) {
super(fieldsService, parametricValuesService, parametricRequestBuilderFactory, fieldComparatorFactory, tagNameFactory, configService);
this.fieldsRequestBuilderFactory = fieldsRequestBuilderFactory;
this.queryRestrictionsBuilderFactory = queryRestrictionsBuilderFactory;
}
@RequestMapping(value = GET_PARAMETRIC_FIELDS_PATH, method = RequestMethod.GET)
@ResponseBody
public List<FieldAndValueDetails> getParametricFields(@RequestParam(FIELD_TYPES_PARAM) final Collection<FieldTypeParam> fieldTypes,
@RequestParam(DATABASES_PARAM) final Collection<ResourceName> databases) throws HodErrorException {
return getParametricFields(fieldsRequestBuilderFactory.getObject()
.fieldTypes(fieldTypes)
.databases(databases)
.build());
}
@Override
protected HodQueryRestrictions createValueDetailsQueryRestrictions(final HodFieldsRequest request) {
return queryRestrictionsBuilderFactory.getObject()
.queryText("*")
.databases(new LinkedList<>(request.getDatabases()))
.build();
}
}