2021-03-08 09:44:09 +01:00
|
|
|
|
|
|
|
package eu.dnetlib.dhp.collection.plugin.rest;
|
|
|
|
|
2021-03-15 17:17:55 +01:00
|
|
|
import java.util.Optional;
|
2021-03-08 09:44:09 +01:00
|
|
|
import java.util.Spliterator;
|
|
|
|
import java.util.Spliterators;
|
|
|
|
import java.util.stream.Stream;
|
|
|
|
import java.util.stream.StreamSupport;
|
|
|
|
|
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
|
|
|
|
|
import eu.dnetlib.dhp.collection.ApiDescriptor;
|
|
|
|
import eu.dnetlib.dhp.collection.plugin.CollectorPlugin;
|
2021-08-12 18:20:56 +02:00
|
|
|
import eu.dnetlib.dhp.common.aggregation.AggregatorReport;
|
|
|
|
import eu.dnetlib.dhp.common.collection.CollectorException;
|
|
|
|
import eu.dnetlib.dhp.common.collection.HttpClientParams;
|
2021-03-08 09:44:09 +01:00
|
|
|
|
|
|
|
/**
|
|
|
|
* TODO: delegate HTTP requests to the common HttpConnector2 implementation.
|
|
|
|
*
|
|
|
|
* @author js, Andreas Czerniak
|
|
|
|
* @date 2020-04-09
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
public class RestCollectorPlugin implements CollectorPlugin {
|
|
|
|
|
2021-03-15 17:17:55 +01:00
|
|
|
public static final String RESULT_SIZE_VALUE_DEFAULT = "100";
|
|
|
|
|
2021-05-14 10:58:12 +02:00
|
|
|
private final HttpClientParams clientParams;
|
2021-03-08 09:44:09 +01:00
|
|
|
|
|
|
|
public RestCollectorPlugin(HttpClientParams clientParams) {
|
|
|
|
this.clientParams = clientParams;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public Stream<String> collect(final ApiDescriptor api, final AggregatorReport report) throws CollectorException {
|
|
|
|
final String baseUrl = api.getBaseUrl();
|
2021-03-15 17:17:55 +01:00
|
|
|
|
2021-03-08 09:44:09 +01:00
|
|
|
final String resumptionType = api.getParams().get("resumptionType");
|
|
|
|
final String resumptionParam = api.getParams().get("resumptionParam");
|
|
|
|
final String resumptionXpath = api.getParams().get("resumptionXpath");
|
|
|
|
final String resultTotalXpath = api.getParams().get("resultTotalXpath");
|
|
|
|
final String resultFormatParam = api.getParams().get("resultFormatParam");
|
|
|
|
final String resultFormatValue = api.getParams().get("resultFormatValue");
|
|
|
|
final String resultSizeParam = api.getParams().get("resultSizeParam");
|
|
|
|
final String queryParams = api.getParams().get("queryParams");
|
|
|
|
final String entityXpath = api.getParams().get("entityXpath");
|
|
|
|
final String authMethod = api.getParams().get("authMethod");
|
|
|
|
final String authToken = api.getParams().get("authToken");
|
2021-03-15 17:17:55 +01:00
|
|
|
final String resultSizeValue = Optional
|
|
|
|
.ofNullable(api.getParams().get("resultSizeValue"))
|
|
|
|
.filter(StringUtils::isNotBlank)
|
|
|
|
.orElse(RESULT_SIZE_VALUE_DEFAULT);
|
2021-03-08 09:44:09 +01:00
|
|
|
|
|
|
|
if (StringUtils.isBlank(baseUrl)) {
|
|
|
|
throw new CollectorException("Param 'baseUrl' is null or empty");
|
|
|
|
}
|
|
|
|
if (StringUtils.isBlank(resumptionType)) {
|
|
|
|
throw new CollectorException("Param 'resumptionType' is null or empty");
|
|
|
|
}
|
|
|
|
if (StringUtils.isBlank(resumptionParam)) {
|
|
|
|
throw new CollectorException("Param 'resumptionParam' is null or empty");
|
|
|
|
}
|
|
|
|
if (StringUtils.isBlank(resultFormatValue)) {
|
|
|
|
throw new CollectorException("Param 'resultFormatValue' is null or empty");
|
|
|
|
}
|
|
|
|
if (StringUtils.isBlank(queryParams)) {
|
|
|
|
throw new CollectorException("Param 'queryParams' is null or empty");
|
|
|
|
}
|
|
|
|
if (StringUtils.isBlank(entityXpath)) {
|
|
|
|
throw new CollectorException("Param 'entityXpath' is null or empty");
|
|
|
|
}
|
|
|
|
|
2021-03-15 17:17:55 +01:00
|
|
|
final String resultOutputFormat = Optional
|
|
|
|
.ofNullable(api.getParams().get("resultOutputFormat"))
|
|
|
|
.map(String::toLowerCase)
|
|
|
|
.filter(StringUtils::isNotBlank)
|
|
|
|
.orElse(resultFormatValue.toLowerCase());
|
|
|
|
|
2021-03-08 09:44:09 +01:00
|
|
|
RestIterator it = new RestIterator(
|
|
|
|
getClientParams(),
|
|
|
|
baseUrl,
|
|
|
|
resumptionType,
|
|
|
|
resumptionParam,
|
|
|
|
resumptionXpath,
|
|
|
|
resultTotalXpath,
|
|
|
|
resultFormatParam,
|
|
|
|
resultFormatValue,
|
|
|
|
resultSizeParam,
|
|
|
|
resultSizeValue,
|
|
|
|
queryParams,
|
|
|
|
entityXpath,
|
|
|
|
authMethod,
|
2021-03-15 17:17:55 +01:00
|
|
|
authToken,
|
|
|
|
resultOutputFormat);
|
2021-03-08 09:44:09 +01:00
|
|
|
|
|
|
|
return StreamSupport
|
|
|
|
.stream(
|
|
|
|
Spliterators.spliteratorUnknownSize(it, Spliterator.ORDERED), false);
|
|
|
|
}
|
|
|
|
|
|
|
|
public HttpClientParams getClientParams() {
|
|
|
|
return clientParams;
|
|
|
|
}
|
|
|
|
}
|