diff --git a/network-store-client/src/main/java/com/powsybl/network/store/client/RestClient.java b/network-store-client/src/main/java/com/powsybl/network/store/client/RestClient.java index 044d9da57..6982718d4 100644 --- a/network-store-client/src/main/java/com/powsybl/network/store/client/RestClient.java +++ b/network-store-client/src/main/java/com/powsybl/network/store/client/RestClient.java @@ -6,8 +6,8 @@ */ package com.powsybl.network.store.client; -import com.powsybl.network.store.model.AbstractTopLevelDocument; import com.powsybl.network.store.model.Attributes; +import com.powsybl.network.store.model.ExtensionAttributes; import com.powsybl.network.store.model.IdentifiableAttributes; import com.powsybl.network.store.model.Resource; import org.springframework.core.ParameterizedTypeReference; @@ -22,9 +22,16 @@ public interface RestClient { void createAll(String url, List> resources, Object... uriVariables); - > Optional getOne(String target, String url, ParameterizedTypeReference parameterizedTypeReference, Object... uriVariables); + Optional> getOne(String target, String url, Object... uriVariables); - > List getAll(String target, String url, ParameterizedTypeReference parameterizedTypeReference, Object... uriVariables); + /** + * Retrieves one extension attributes from the server. + * @return {@link ExtensionAttributes} which is a subset of an identifiable resource. The extension attributes can be put in the extensionAttributes + * map of an {@link IdentifiableAttributes} or used to load an extension. + */ + Optional getOneExtensionAttributes(String url, Object... uriVariables); + + List> getAll(String target, String url, Object... uriVariables); void updateAll(String url, List> resources, Object... uriVariables); diff --git a/network-store-client/src/main/java/com/powsybl/network/store/client/RestClientImpl.java b/network-store-client/src/main/java/com/powsybl/network/store/client/RestClientImpl.java index 305330f07..db8ced1da 100644 --- a/network-store-client/src/main/java/com/powsybl/network/store/client/RestClientImpl.java +++ b/network-store-client/src/main/java/com/powsybl/network/store/client/RestClientImpl.java @@ -90,7 +90,18 @@ public void createAll(String url, List> Optional getOne(String target, String url, ParameterizedTypeReference parameterizedTypeReference, Object... uriVariables) { + public Optional> getOne(String target, String url, Object... uriVariables) { + return getOneDocument(target, url, new ParameterizedTypeReference>() { + }, uriVariables); + } + + @Override + public Optional getOneExtensionAttributes(String url, Object... uriVariables) { + return getOneDocument(null, url, new ParameterizedTypeReference() { + }, uriVariables); + } + + public > Optional getOneDocument(String target, String url, ParameterizedTypeReference parameterizedTypeReference, Object... uriVariables) { ResponseEntity response = getDocument(url, parameterizedTypeReference, uriVariables); if (response.getStatusCode() == HttpStatus.OK) { AbstractTopLevelDocument body = getBody(response); @@ -103,12 +114,13 @@ public > Optional getOne(String targ } @Override - public > List getAll(String target, String url, ParameterizedTypeReference parameterizedTypeReference, Object... uriVariables) { - ResponseEntity response = getDocument(url, parameterizedTypeReference, uriVariables); + public List> getAll(String target, String url, Object... uriVariables) { + ResponseEntity> response = getDocument(url, new ParameterizedTypeReference<>() { + }, uriVariables); if (response.getStatusCode() != HttpStatus.OK) { throw createHttpException(url, "get", response.getStatusCode()); } - AbstractTopLevelDocument body = getBody(response); + TopLevelDocument body = getBody(response); return body.getData(); } diff --git a/network-store-client/src/main/java/com/powsybl/network/store/client/RestNetworkStoreClient.java b/network-store-client/src/main/java/com/powsybl/network/store/client/RestNetworkStoreClient.java index 79a05d9d7..a0c68d986 100644 --- a/network-store-client/src/main/java/com/powsybl/network/store/client/RestNetworkStoreClient.java +++ b/network-store-client/src/main/java/com/powsybl/network/store/client/RestNetworkStoreClient.java @@ -98,8 +98,7 @@ private List> getAll(String targe LOGGER.info("Loading {} resources {}", target, UriComponentsBuilder.fromUriString(url).buildAndExpand(uriVariables)); } Stopwatch stopwatch = Stopwatch.createStarted(); - List> resourceList = restClient.getAll(target, url, new ParameterizedTypeReference>() { - }, uriVariables); + List> resourceList = restClient.getAll(target, url, uriVariables); stopwatch.stop(); LOGGER.info("{} {} resources loaded in {} ms", resourceList.size(), target, stopwatch.elapsed(TimeUnit.MILLISECONDS)); return resourceList; @@ -110,8 +109,7 @@ private Optional> get(String targ LOGGER.info("Loading {} resource {}", target, UriComponentsBuilder.fromUriString(url).buildAndExpand(uriVariables)); } Stopwatch stopwatch = Stopwatch.createStarted(); - Optional> resource = restClient.getOne(target, url, new ParameterizedTypeReference>() { - }, uriVariables); + Optional> resource = restClient.getOne(target, url, uriVariables); stopwatch.stop(); LOGGER.info("{} resource (empty={}) loaded in {} ms", target, resource.isEmpty(), stopwatch.elapsed(TimeUnit.MILLISECONDS)); return resource; @@ -120,8 +118,7 @@ private Optional> get(String targ private Optional getExtensionAttributes(String urlTemplate, Object... uriVariables) { logGetExtensionAttributesUrl(urlTemplate, uriVariables); Stopwatch stopwatch = Stopwatch.createStarted(); - Optional extensionAttributes = restClient.getOne(null, urlTemplate, new ParameterizedTypeReference() { - }, uriVariables); + Optional extensionAttributes = restClient.getOneExtensionAttributes(urlTemplate, uriVariables); stopwatch.stop(); logGetExtensionAttributesTime(extensionAttributes.isPresent() ? 1 : 0, stopwatch.elapsed(TimeUnit.MILLISECONDS));