/*
* 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.export;
import com.autonomy.aci.client.services.AciErrorException;
import com.hp.autonomy.frontend.find.core.export.ExportController;
import com.hp.autonomy.frontend.find.core.export.service.ExportFormat;
import com.hp.autonomy.frontend.find.core.export.service.ExportServiceFactory;
import com.hp.autonomy.frontend.find.core.export.service.PlatformDataExportService;
import com.hp.autonomy.frontend.find.core.web.ControllerUtils;
import com.hp.autonomy.frontend.find.core.web.RequestMapper;
import com.hp.autonomy.searchcomponents.core.search.StateTokenAndResultCount;
import com.hp.autonomy.searchcomponents.idol.search.IdolDocumentsService;
import com.hp.autonomy.searchcomponents.idol.search.IdolQueryRequest;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Collection;
abstract class IdolExportController extends ExportController<IdolQueryRequest, AciErrorException> {
private final IdolDocumentsService documentsService;
protected IdolExportController(final RequestMapper<IdolQueryRequest> requestMapper,
final ControllerUtils controllerUtils,
final ExportServiceFactory<IdolQueryRequest, AciErrorException> exportServiceFactory,
final IdolDocumentsService documentsService) {
super(requestMapper, controllerUtils, exportServiceFactory);
this.documentsService = documentsService;
}
@Override
protected void export(final OutputStream outputStream,
final IdolQueryRequest queryRequest,
final Collection<String> selectedFieldNames) throws AciErrorException, IOException {
final StateTokenAndResultCount stateTokenAndResultCount = documentsService.getStateTokenAndResultCount(queryRequest.getQueryRestrictions(), queryRequest.getMaxResults(), false);
final IdolQueryRequest queryRequestWithStateToken = queryRequest.toBuilder()
.queryRestrictions(queryRequest.getQueryRestrictions().toBuilder()
.stateMatchId(stateTokenAndResultCount.getTypedStateToken().getStateToken())
.build())
.build();
final ExportFormat exportFormat = getExportFormat();
final PlatformDataExportService<IdolQueryRequest, AciErrorException> exportService = exportServiceFactory.getPlatformDataExportService(exportFormat)
.orElseThrow(() -> new UnsupportedOperationException("Query result export not supported for format " + exportFormat.name()));
exportService.exportQueryResults(outputStream, queryRequestWithStateToken, exportFormat, selectedFieldNames, stateTokenAndResultCount.getResultCount());
}
}