/*
* 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.idol.beanconfiguration;
import com.autonomy.aci.client.services.AciService;
import com.autonomy.aci.client.services.impl.AciServiceImpl;
import com.autonomy.aci.client.transport.AciServerDetails;
import com.autonomy.aci.client.transport.impl.AciHttpClientImpl;
import com.fasterxml.jackson.databind.InjectableValues;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.dataformat.xml.XmlMapper;
import com.hp.autonomy.frontend.configuration.ConfigService;
import com.hp.autonomy.frontend.configuration.aci.AbstractConfigurableAciService;
import com.hp.autonomy.frontend.configuration.aci.CommunityService;
import com.hp.autonomy.frontend.configuration.aci.CommunityServiceImpl;
import com.hp.autonomy.frontend.configuration.authentication.Authentication;
import com.hp.autonomy.frontend.configuration.authentication.CommunityAuthenticationValidator;
import com.hp.autonomy.frontend.configuration.server.ServerConfigValidator;
import com.hp.autonomy.frontend.find.idol.configuration.IdolAuthenticationMixins;
import com.hp.autonomy.frontend.find.idol.configuration.IdolFindConfig;
import com.hp.autonomy.frontend.find.idol.dashboards.widgets.Widget;
import com.hp.autonomy.frontend.find.idol.dashboards.widgets.WidgetMixins;
import com.hp.autonomy.frontend.find.idol.dashboards.widgets.datasources.WidgetDatasource;
import com.hp.autonomy.frontend.find.idol.dashboards.widgets.datasources.WidgetDatasourceMixins;
import com.hp.autonomy.searchcomponents.core.search.QueryRestrictions;
import com.hp.autonomy.searchcomponents.idol.requests.IdolQueryRestrictionsMixin;
import com.hp.autonomy.searchcomponents.idol.search.IdolQueryRestrictions;
import com.hp.autonomy.types.idol.marshalling.ProcessorFactory;
import com.hp.autonomy.user.UserService;
import com.hp.autonomy.user.UserServiceImpl;
import com.hpe.bigdata.frontend.spring.authentication.AuthenticationInformationRetriever;
import org.apache.http.client.HttpClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.ImportResource;
import org.springframework.context.annotation.Primary;
import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;
@Configuration
@ImportResource("required-statistics.xml")
public class IdolConfiguration {
@SuppressWarnings("SpringJavaAutowiringInspection")
@Bean
@Autowired
@Primary
public ObjectMapper jacksonObjectMapper(
final Jackson2ObjectMapperBuilder builder,
final AuthenticationInformationRetriever<?, ?> authenticationInformationRetriever
) {
final ObjectMapper mapper = builder
.createXmlMapper(false)
.mixIn(Authentication.class, IdolAuthenticationMixins.class)
.mixIn(Widget.class, WidgetMixins.class)
.mixIn(WidgetDatasource.class, WidgetDatasourceMixins.class)
.mixIn(QueryRestrictions.class, IdolQueryRestrictionsMixin.class)
.mixIn(IdolQueryRestrictions.class, IdolQueryRestrictionsMixin.class)
.featuresToEnable(SerializationFeature.INDENT_OUTPUT)
.build();
mapper.setInjectableValues(new InjectableValues.Std().addValue(AuthenticationInformationRetriever.class, authenticationInformationRetriever));
return mapper;
}
@Bean
public XmlMapper xmlMapper() {
return new XmlMapper();
}
@Bean
public UserService userService(final ConfigService<IdolFindConfig> configService, final AciService aciService, final ProcessorFactory processorFactory) {
return new UserServiceImpl(configService, aciService, processorFactory);
}
@Bean
@Autowired
public CommunityService communityService(final AciService aciService, final ProcessorFactory processorFactory) {
final CommunityServiceImpl communityService = new CommunityServiceImpl();
communityService.setAciService(aciService);
communityService.setProcessorFactory(processorFactory);
return communityService;
}
@Bean
public AciService statsServerAciService(@Qualifier("postingAciService") final AciService aciService, final ConfigService<IdolFindConfig> configService) {
return new AbstractConfigurableAciService(aciService) {
@Override
public AciServerDetails getServerDetails() {
return configService.getConfig().getStatsServer().getServer().toAciServerDetails();
}
};
}
@Bean
public CommunityAuthenticationValidator communityAuthenticationValidator(
final AciService validatorAciService,
final ProcessorFactory processorFactory
) {
final CommunityAuthenticationValidator communityAuthenticationValidator = new CommunityAuthenticationValidator();
communityAuthenticationValidator.setAciService(validatorAciService);
communityAuthenticationValidator.setProcessorFactory(processorFactory);
return communityAuthenticationValidator;
}
@Bean
public ServerConfigValidator serverConfigValidator(
final AciService validatorAciService,
final ProcessorFactory processorFactory
) {
final ServerConfigValidator serverConfigValidator = new ServerConfigValidator();
serverConfigValidator.setAciService(validatorAciService);
serverConfigValidator.setProcessorFactory(processorFactory);
return serverConfigValidator;
}
@Bean
public AciService postingAciService(final HttpClient httpClient) {
final AciHttpClientImpl aciHttpClient = new AciHttpClientImpl(httpClient);
aciHttpClient.setUsePostMethod(true);
return new AciServiceImpl(aciHttpClient);
}
}