/*
* Copyright 2017 Hewlett Packard Enterprise 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.web;
import com.hp.autonomy.frontend.configuration.ConfigService;
import com.hp.autonomy.frontend.configuration.authentication.AuthenticationConfig;
import com.hp.autonomy.frontend.find.core.export.service.MetadataNode;
import com.hp.autonomy.frontend.find.core.web.ControllerUtils;
import com.hp.autonomy.frontend.find.core.web.FindController;
import com.hp.autonomy.frontend.find.core.web.MvcConstants;
import com.hp.autonomy.frontend.find.idol.applications.IdolCustomApplication;
import com.hp.autonomy.frontend.find.idol.applications.IdolCustomApplicationsConfig;
import com.hp.autonomy.frontend.find.idol.configuration.IdolFindConfig;
import com.hp.autonomy.frontend.find.idol.configuration.IdolFindConfig.IdolFindConfigBuilder;
import com.hp.autonomy.frontend.find.idol.configuration.MMAP;
import com.hp.autonomy.frontend.find.idol.dashboards.IdolDashboardConfig;
import com.hp.autonomy.frontend.find.idol.export.service.IdolMetadataNode;
import com.hp.autonomy.searchcomponents.core.fields.FieldDisplayNameGenerator;
import com.hpe.bigdata.frontend.spring.authentication.AuthenticationInformationRetriever;
import lombok.Getter;
import org.apache.commons.lang.BooleanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import java.security.Principal;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@Controller
public class IdolFindController extends FindController<IdolFindConfig, IdolFindConfigBuilder> {
private final ConfigService<IdolDashboardConfig> dashConfig;
private final ConfigService<IdolCustomApplicationsConfig> appsConfig;
@SuppressWarnings({"TypeMayBeWeakened", "ConstructorWithTooManyParameters"})
@Autowired
protected IdolFindController(final ControllerUtils controllerUtils,
final AuthenticationInformationRetriever<?, ? extends Principal> authenticationInformationRetriever,
final ConfigService<? extends AuthenticationConfig<?>> authenticationConfigService,
final ConfigService<IdolFindConfig> configService,
final ConfigService<IdolDashboardConfig> dashConfig,
final ConfigService<IdolCustomApplicationsConfig> appsConfig,
final FieldDisplayNameGenerator fieldDisplayNameGenerator) {
super(controllerUtils, authenticationInformationRetriever, authenticationConfigService, configService, fieldDisplayNameGenerator);
this.dashConfig = dashConfig;
this.appsConfig = appsConfig;
}
@Override
protected Map<String, Object> getPublicConfig() {
final Map<String, Object> publicConfig = new HashMap<>();
final IdolFindConfig config = configService.getConfig();
final List<IdolCustomApplication> enabledApps = appsConfig.getConfig()
.getApplications()
.stream()
.filter(IdolCustomApplication::getEnabled)
.collect(Collectors.toList());
final MMAP mmap = config.getMmap();
if(BooleanUtils.isTrue(mmap.getEnabled())) {
publicConfig.put(IdolMvcConstants.MMAP_BASE_URL.getName(), mmap.getBaseUrl());
}
publicConfig.put(IdolMvcConstants.TRENDING.getName(), config.getTrending());
publicConfig.put(IdolMvcConstants.VIEW_HIGHLIGHTING.getName(), config.getViewConfig().getHighlighting());
publicConfig.put(IdolMvcConstants.DASHBOARDS.getName(), dashConfig.getConfig().getDashboards());
publicConfig.put(IdolMvcConstants.APPLICATIONS.getName(), enabledApps);
publicConfig.put(MvcConstants.ANSWER_SERVER_ENABLED.value(), config.getAnswerServer().getEnabled());
return publicConfig;
}
@Override
protected List<MetadataNode> getMetadataNodes() {
return Arrays.asList(IdolMetadataNode.values());
}
private enum IdolMvcConstants {
MMAP_BASE_URL("mmapBaseUrl"),
VIEW_HIGHLIGHTING("viewHighlighting"),
DASHBOARDS("dashboards"),
APPLICATIONS("applications"),
TRENDING("trending");
@Getter
private final String name;
IdolMvcConstants(final String name) {
this.name = name;
}
}
}