Skip to content

Commit

Permalink
use a map when we got duplicated modifications
Browse files Browse the repository at this point in the history
  • Loading branch information
dbraquart committed Feb 9, 2024
1 parent db792a7 commit 0314078
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 20 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,6 @@
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.UUID;
Expand Down Expand Up @@ -258,24 +256,19 @@ public void duplicateParameters(UUID parentParameterId, ParametersType parameter
}

public void createNetworkModifications(List<ElementAttributes> modificationAttributesList, String userId, UUID parentDirectoryUuid) {
// This is important to sort on uuid, to make sure the input modification list will match the new/cloned modification list
List<ElementAttributes> sortedInputList = modificationAttributesList.stream()
.sorted(Comparator.comparing(ElementAttributes::getElementUuid))
List<UUID> existingModificationsUuids = modificationAttributesList.stream()
.map(ElementAttributes::getElementUuid)
.toList();
List<UUID> existingSortedModificationsUuids = sortedInputList.stream().map(ElementAttributes::getElementUuid).toList();

// create all duplicated modifications
List<UUID> newSortedModificationsUuids = networkModificationService.createModifications(existingSortedModificationsUuids);

// Iterate through both collection simultaneously (they have the same order)
Iterator<UUID> newUuidIterator = newSortedModificationsUuids.iterator();
Iterator<ElementAttributes> modificationAttributeIterator = sortedInputList.iterator();
while (newUuidIterator.hasNext() && modificationAttributeIterator.hasNext()) {
final UUID newid = newUuidIterator.next();
final ElementAttributes attributes = modificationAttributeIterator.next();
ElementAttributes elementAttributes = new ElementAttributes(newid, attributes.getElementName(), MODIFICATION,
null, userId, 0L, attributes.getDescription());
Map<UUID, UUID> newModificationsUuids = networkModificationService.createModifications(existingModificationsUuids);

// create all corresponding directory elements
modificationAttributesList.forEach(m -> {
final UUID newId = newModificationsUuids.get(m.getElementUuid());
ElementAttributes elementAttributes = new ElementAttributes(newId, m.getElementName(), MODIFICATION,
null, userId, 0L, m.getDescription());
directoryService.createElementWithNewName(elementAttributes, parentDirectoryUuid, userId, true);
}
});
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ public void setNetworkModificationServerBaseUri(String networkModificationServer
this.networkModificationServerBaseUri = networkModificationServerBaseUri;
}

public List<UUID> createModifications(List<UUID> modificationUuids) {
public Map<UUID, UUID> createModifications(List<UUID> modificationUuids) {
String path = UriComponentsBuilder.fromPath(DELIMITER + NETWORK_MODIFICATION_API_VERSION + DELIMITER + NETWORK_MODIFICATIONS_PATH + "/duplicate")
.buildAndExpand()
.toUriString();
Expand All @@ -61,7 +61,7 @@ public List<UUID> createModifications(List<UUID> modificationUuids) {
} catch (JsonProcessingException e) {
throw new UncheckedIOException(e);
}
return restTemplate.exchange(networkModificationServerBaseUri + path, HttpMethod.POST, httpEntity, new ParameterizedTypeReference<List<UUID>>() { })
return restTemplate.exchange(networkModificationServerBaseUri + path, HttpMethod.POST, httpEntity, new ParameterizedTypeReference<Map<UUID, UUID>>() { })
.getBody();
}

Expand Down
9 changes: 8 additions & 1 deletion src/test/java/org/gridsuite/explore/server/ExploreTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,7 @@ public void setup() throws IOException {
String caseInfosAttributesAsString = mapper.writeValueAsString(List.of(caseSpecificMetadata));
String modificationElementAttributesAsString = mapper.writeValueAsString(new ElementAttributes(MODIFICATION_UUID, "one modif", "MODIFICATION", new AccessRightsAttributes(true), USER1, 0L, null));
String modificationInfosAttributesAsString = mapper.writeValueAsString(List.of(modificationSpecificMetadata));
String modificationIdsAsString = mapper.writeValueAsString(List.of(MODIFICATION_UUID));
String modificationIdsAsString = mapper.writeValueAsString(Map.of(MODIFICATION_UUID, MODIFICATION_UUID));

final Dispatcher dispatcher = new Dispatcher() {
@SneakyThrows
Expand Down Expand Up @@ -471,6 +471,13 @@ public void deleteElementInvalidType(UUID elementUUid) throws Exception {

@Test
public void testDeleteElement() throws Exception {
deleteElement(FILTER_UUID);
deleteElement(PRIVATE_STUDY_UUID);
deleteElement(CONTINGENCY_LIST_UUID);
deleteElementInvalidType(INVALID_ELEMENT_UUID);
deleteElement(PARENT_DIRECTORY_UUID);
deleteElement(CASE_UUID);
deleteElement(PARAMETERS_UUID);
deleteElement(MODIFICATION_UUID);
}

Expand Down

0 comments on commit 0314078

Please sign in to comment.