refactoring of client methods

This commit is contained in:
Michele Artini 2023-12-11 12:48:15 +01:00
parent 6423669b86
commit 33b859f828
10 changed files with 52 additions and 72 deletions

View File

@ -2,8 +2,6 @@ package eu.dnetlib.common.clients;
import java.util.Map;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
@ -13,32 +11,29 @@ import org.springframework.web.client.RestTemplate;
public class DnetServiceClient {
private static final Log log = LogFactory.getLog(DnetServiceClient.class);
private String baseUrl;
private DnetServiceClientFactory factory;
protected final <T> T httpGet(final String path, final Class<T> clazz) {
log.debug("CALLING URL (METHOD GET): " + baseUrl + path);
return new RestTemplate().getForObject(baseUrl + path, clazz);
protected final <T> T httpGet(final String path, final Class<T> clazz, final Map<String, ?> uriVariables) {
return new RestTemplate().getForObject(baseUrl + path, clazz, uriVariables);
}
protected final void httpDelete(final String path) {
new RestTemplate().delete(baseUrl + path);
protected final void httpDelete(final String path, final Map<String, ?> uriVariables) {
new RestTemplate().delete(baseUrl + path, uriVariables);
}
protected <T> T httpPostObject(final String path, final Object obj, final Class<T> responseClazz) {
return new RestTemplate().postForObject(baseUrl + path, obj, responseClazz);
protected <T> T httpPostObject(final String path, final Object obj, final Class<T> responseClazz, final Map<String, ?> uriVariables) {
return new RestTemplate().postForObject(baseUrl + path, obj, responseClazz, uriVariables);
}
protected <T> T httpPostParams(final String path, final Map<String, Object> params, final Class<T> responseClazz) {
protected <T> T httpPostParams(final String path, final Map<String, Object> params, final Class<T> responseClazz, final Map<String, ?> uriVariables) {
final HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
final LinkedMultiValueMap<String, Object> map = new LinkedMultiValueMap<>();
params.forEach((k, v) -> map.add(k, v));
final ResponseEntity<T> response = new RestTemplate().postForEntity(baseUrl + path, new HttpEntity<>(map, headers), responseClazz);
final ResponseEntity<T> response = new RestTemplate().postForEntity(baseUrl + path, new HttpEntity<>(map, headers), responseClazz, uriVariables);
return response.getBody();
}

View File

@ -1,7 +1,5 @@
package eu.dnetlib.common.clients;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
@ -14,7 +12,7 @@ import eu.dnetlib.domain.protocol.ProtocolDesc;
public class DsmClient extends DnetServiceClient {
public List<ProtocolDesc> listProtocols() {
return Arrays.asList(httpGet("/api/protocols/", ProtocolDesc[].class));
return Arrays.asList(httpGet("/api/protocols/", ProtocolDesc[].class, Map.of()));
}
public Api updateApiCollectionInfo(final String apiId, final String mdId, final long size) {
@ -22,7 +20,7 @@ public class DsmClient extends DnetServiceClient {
params.put("mdId", mdId);
params.put("size", size);
httpPostParams("/api/ds-api/" + URLEncoder.encode(apiId, StandardCharsets.UTF_8) + "/last-collection", params, Void.class);
httpPostParams("/api/ds-api/{apiId}/last-collection", params, Void.class, Map.of("apiId", apiId));
return findApi(apiId);
}
@ -32,7 +30,7 @@ public class DsmClient extends DnetServiceClient {
params.put("mdId", mdId);
params.put("size", size);
httpPostParams("/api/ds-api/" + URLEncoder.encode(apiId, StandardCharsets.UTF_8) + "/last-aggregation", params, Void.class);
httpPostParams("/api/ds-api/{apiId}/last-aggregation", params, Void.class, Map.of("apiId", apiId));
return findApi(apiId);
}
@ -42,24 +40,24 @@ public class DsmClient extends DnetServiceClient {
params.put("objId", objId);
params.put("size", size);
httpPostParams("/api/ds-api/" + URLEncoder.encode(apiId, StandardCharsets.UTF_8) + "/last-download", params, Void.class);
httpPostParams("/api/ds-api/{apiId}/last-download", params, Void.class, Map.of("apiId", apiId));
return findApi(apiId);
}
public Datasource findDs(final String dsId) {
return httpGet("/api/ds/" + URLEncoder.encode(dsId, StandardCharsets.UTF_8), Datasource.class);
return httpGet("/api/ds/{dsId}", Datasource.class, Map.of("dsId", dsId));
}
public Api findApi(final String apiId) {
return httpGet("/api/ds-api/" + URLEncoder.encode(apiId, StandardCharsets.UTF_8), Api.class);
return httpGet("/api/ds-api/{apiId}", Api.class, Map.of("apiId", apiId));
}
public void setManaged(final Datasource ds, final boolean b) {
final Map<String, Object> params = new HashMap<>();
params.put("managed", b);
httpPostParams("/api/ds/" + URLEncoder.encode(ds.getId(), StandardCharsets.UTF_8) + "/manage", params, Void.class);
httpPostParams("/api/ds/{dsId}/manage", params, Void.class, Map.of("dsId", ds.getId()));
ds.setManaged(b);
}
@ -68,7 +66,7 @@ public class DsmClient extends DnetServiceClient {
final Map<String, Object> params = new HashMap<>();
params.put("managed", b);
httpPostParams("/api/ds-api/" + URLEncoder.encode(api.getId(), StandardCharsets.UTF_8) + "/active", params, Void.class);
httpPostParams("/api/ds-api/{apiId}/active", params, Void.class, Map.of("apiId", api.getId()));
api.setActive(b);
}

View File

@ -39,7 +39,7 @@ public class EmailClient extends DnetServiceClient {
message.setFromName(fromName);
message.setCcs(null);
final String res = httpPostObject("/api/emails/send", message, String.class);
final String res = httpPostObject("/api/emails/send", message, String.class, Map.of());
log.info(res);
}

View File

@ -1,14 +1,13 @@
package eu.dnetlib.common.clients;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.Map;
import eu.dnetlib.domain.index.IndexConfiguration;
public class IndexManagerClient extends DnetServiceClient {
public IndexConfiguration getIndexConfiguration(final String indexConfId) {
return httpGet("/api/index/configurations/" + URLEncoder.encode(indexConfId, StandardCharsets.UTF_8), IndexConfiguration.class);
return httpGet("/api/index/configurations/{id}", IndexConfiguration.class, Map.of("id", indexConfId));
}
}

View File

@ -1,7 +1,5 @@
package eu.dnetlib.common.clients;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
@ -15,11 +13,11 @@ public class IsManagerClient extends DnetServiceClient {
public ServiceStatus registerService(final ServiceType serviceType, final String serviceBaseUrl) {
final Map<String, Object> params = new HashMap<>();
params.put("baseUrl", serviceBaseUrl);
return httpPostParams("/api/register/" + URLEncoder.encode(serviceType.toString(), StandardCharsets.UTF_8), params, ServiceStatus.class);
return httpPostParams("/api/register/{serviceType}", params, ServiceStatus.class, Map.of("serviceType", serviceType));
}
public List<ServiceStatus> availableServices() {
return Arrays.asList(httpGet("/api/services", ServiceStatus[].class));
return Arrays.asList(httpGet("/api/services", ServiceStatus[].class, Map.of()));
}
}

View File

@ -1,7 +1,5 @@
package eu.dnetlib.common.clients;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
@ -19,47 +17,44 @@ public class MDStoreManagerClient extends DnetServiceClient {
final String dsId,
final String apiId) {
final String url = String.format("/api/mdstores/new/%s/%s/%s/%s", URLEncoder.encode(format, StandardCharsets.UTF_8), URLEncoder
.encode(layout, StandardCharsets.UTF_8), URLEncoder
.encode(interpretation, StandardCharsets.UTF_8), URLEncoder.encode(type.name(), StandardCharsets.UTF_8));
final Map<String, Object> params = new HashMap<>();
params.put("dsName", dsName);
params.put("dsId", dsId);
params.put("apiId", apiId);
return httpPostParams(url, params, MDStoreWithInfo.class);
return httpPostParams("/api/mdstores/new/{format}/{layout}/{interpretation}/{type}", params, MDStoreWithInfo.class, Map
.of("format", format, "layout", layout, "interpretation", interpretation, "type", type.name()));
}
public void deleteMdStore(final String mdId) {
httpDelete("/api/mdstores/mdstore/" + URLEncoder.encode(mdId, StandardCharsets.UTF_8));
httpDelete("/api/mdstores/mdstore/{mdId}", Map.of("mdId", mdId));
}
public MDStoreWithInfo findMDStore(final String mdId) {
return httpGet("/api/mdstore/" + URLEncoder.encode(mdId, StandardCharsets.UTF_8), MDStoreWithInfo.class);
return httpGet("/api/mdstore/{mdId}", MDStoreWithInfo.class, Map.of("mdId", mdId));
}
public MDStoreVersion newVersion(final String mdId) {
return httpGet("/api/mdstore/" + URLEncoder.encode(mdId, StandardCharsets.UTF_8) + "/newVersion", MDStoreVersion.class);
return httpGet("/api/mdstore/{mdId}/newVersion", MDStoreVersion.class, Map.of("mdId", mdId));
}
public void commitVersion(final MDStoreVersion version) {
httpGet("/api/version/" + URLEncoder.encode(version.getId(), StandardCharsets.UTF_8) + "/commit/" + version.getSize(), Void.class);
httpGet("/api/version/{versionId}/commit/" + version.getSize(), Void.class, Map.of("versionId", version.getId()));
}
public void abortVersion(final MDStoreVersion version) {
httpGet("/api/version/" + URLEncoder.encode(version.getId(), StandardCharsets.UTF_8) + "/abort", Void.class);
httpGet("/api/version/{versionId}/abort", Void.class, Map.of("versionId", version.getId()));
}
public MDStoreVersion findVersion(final String versionId) {
return httpGet("/api/version/" + URLEncoder.encode(versionId, StandardCharsets.UTF_8), MDStoreVersion.class);
return httpGet("/api/version/{versionId}", MDStoreVersion.class, Map.of("versionId", versionId));
}
public MDStoreVersion startReading(final String mdId) {
return httpGet("/api/mdstore/" + URLEncoder.encode(mdId, StandardCharsets.UTF_8) + "/startReading", MDStoreVersion.class);
return httpGet("/api/mdstore/{mdId}/startReading", MDStoreVersion.class, Map.of("mdId", mdId));
}
public MDStoreVersion endReading(final MDStoreVersion version) {
return httpGet("/api/version/" + URLEncoder.encode(version.getId(), StandardCharsets.UTF_8) + "/endReading", MDStoreVersion.class);
return httpGet("/api/version/{versionId}/endReading", MDStoreVersion.class, Map.of("versionId", version.getId()));
}
}

View File

@ -2,6 +2,7 @@ package eu.dnetlib.common.clients;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import eu.dnetlib.domain.oai.OaiConfiguration;
import eu.dnetlib.domain.oai.OaiSet;
@ -9,15 +10,15 @@ import eu.dnetlib.domain.oai.OaiSet;
public class OaiManagerClient extends DnetServiceClient {
public OaiConfiguration getOaiConfiguration() {
return httpGet("/api/oai/conf", OaiConfiguration.class);
return httpGet("/api/oai/conf", OaiConfiguration.class, Map.of());
}
public List<OaiSet> listSets() {
return Arrays.asList(httpGet("/api/oai/sets", OaiSet[].class));
return Arrays.asList(httpGet("/api/oai/sets", OaiSet[].class, Map.of()));
}
public void createOaiSet(final OaiSet oaiSet) {
httpPostObject("/api/oai/sets", oaiSet, OaiSet[].class);
httpPostObject("/api/oai/sets", oaiSet, OaiSet[].class, Map.of());
}
}

View File

@ -1,8 +1,6 @@
package eu.dnetlib.common.clients;
import java.io.StringWriter;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
@ -15,31 +13,31 @@ import eu.dnetlib.domain.resource.SimpleResource;
public class SimpleResourceClient extends DnetServiceClient {
public List<String> listResources(final String type) {
return Arrays.asList(httpGet("/api/resources/byType/" + URLEncoder.encode(type, StandardCharsets.UTF_8), String[].class));
return Arrays.asList(httpGet("/api/resources/byType/{type}", String[].class, Map.of("type", type)));
}
public String getResourceContent(final String id) {
return httpGet("/api/resources/" + URLEncoder.encode(id, StandardCharsets.UTF_8) + "/content", String.class);
return httpGet("/api/resources/{id}/content", String.class, Map.of("id", id));
}
public SimpleResource findResource(final String id) {
return httpGet("/api/resources/" + URLEncoder.encode(id, StandardCharsets.UTF_8) + "/metadata", SimpleResource.class);
return httpGet("/api/resources/{id}/metadata", SimpleResource.class, Map.of("id", id));
}
public <T> T findResourceContent(final String id, final Class<T> clazz) {
return httpGet("/api/resources/" + URLEncoder.encode(id, StandardCharsets.UTF_8) + "/content", clazz);
return httpGet("/api/resources/{id}/content", clazz, Map.of("id", id));
}
public void deleteResource(final String id) {
httpDelete("/api/resources/" + URLEncoder.encode(id, StandardCharsets.UTF_8));
httpDelete("/api/resources/{id}", Map.of("id", id));
}
public void updateResourceContent(final String id, final Object content) {
httpPostObject("/api/resources/" + URLEncoder.encode(id, StandardCharsets.UTF_8) + "/content", content, Void.class);
httpPostObject("/api/resources/{id}/content", content, Void.class, Map.of("id", id));
}
public void updateResourceMetadata(final String id, final Object content) {
httpPostObject("/api/resources/" + URLEncoder.encode(id, StandardCharsets.UTF_8) + "/metadata", content, Void.class);
httpPostObject("/api/resources/{id}/metadata", content, Void.class, Map.of("id", id));
}
public SimpleResource prepareNewResource(final String name,
@ -54,20 +52,19 @@ public class SimpleResourceClient extends DnetServiceClient {
params.put("subtype", subtype);
params.put("description", description);
params.put("content", content);
return httpPostParams("/api/resources/", params, SimpleResource.class);
return httpPostParams("/api/resources/", params, SimpleResource.class, Map.of());
}
public List<SimpleResource> findResources(final String type, final String subType) {
final StringWriter url = new StringWriter();
url.append("/api/resources/byType/");
url.append(URLEncoder.encode(type, StandardCharsets.UTF_8));
final StringWriter path = new StringWriter();
path.append("/api/resources/byType/{type}");
if (StringUtils.isNotBlank(subType)) {
url.append("?subtype=");
url.append(URLEncoder.encode(subType, StandardCharsets.UTF_8));
path.append("?subtype={subtype}");
}
return Arrays.asList(httpGet(url.toString(), SimpleResource[].class));
return Arrays.asList(httpGet(path.toString(), SimpleResource[].class, Map.of("type", type, "subtype", subType)));
}
}

View File

@ -1,9 +1,8 @@
package eu.dnetlib.common.clients;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import org.springframework.cache.annotation.Cacheable;
@ -14,12 +13,12 @@ public class VocabularyClient extends DnetServiceClient {
@Cacheable("vocabulary_list")
public List<Vocabulary> listVocs() {
return Arrays.asList(httpGet("/api/vocs", Vocabulary[].class));
return Arrays.asList(httpGet("/api/vocs", Vocabulary[].class, Map.of()));
}
@Cacheable("vocabulary_terms")
public List<VocabularyTerm> listTerms(final String vocId) {
return Arrays.asList(httpGet("/api/vocs/" + URLEncoder.encode(vocId, StandardCharsets.UTF_8) + "/terms", VocabularyTerm[].class));
return Arrays.asList(httpGet("/api/vocs/{vocId}/terms", VocabularyTerm[].class, Map.of("vocId", vocId)));
}
public boolean isValidTerm(final String vocId, final String termCode) {

View File

@ -1,7 +1,5 @@
package eu.dnetlib.common.clients;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.time.format.DateTimeFormatter;
import java.util.Arrays;
import java.util.List;
@ -26,7 +24,7 @@ public class WfManagerClient extends DnetServiceClient {
private static final DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
public List<AggregationInfo> getAggregationHistory(final String dsId) throws DsmException {
final WfJournalEntry[] history = httpGet("/api/history/byDsId/" + URLEncoder.encode(dsId, StandardCharsets.UTF_8), WfJournalEntry[].class);
final WfJournalEntry[] history = httpGet("/api/history/byDsId/{dsId}", WfJournalEntry[].class, Map.of("dsId", dsId));
return Arrays.stream(history)
.filter(job -> (job.getStatus() == JobStatus.success) || (job.getStatus() == JobStatus.failure))