Skip to content

Commit f2317f5

Browse files
authored
Fix subdirectories count. (#140)
--------- Signed-off-by: AAJELLAL <[email protected]>
1 parent 29469e5 commit f2317f5

File tree

4 files changed

+25
-45
lines changed

4 files changed

+25
-45
lines changed

src/main/java/org/gridsuite/directory/server/DirectoryController.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -118,9 +118,8 @@ public ResponseEntity<Void> deleteElements(@Parameter(description = "elements UU
118118
@GetMapping(value = "/root-directories", produces = MediaType.APPLICATION_JSON_VALUE)
119119
@Operation(summary = "Get root directories")
120120
@ApiResponses(@ApiResponse(responseCode = "200", description = "The root directories"))
121-
public ResponseEntity<List<ElementAttributes>> getRootDirectories(@RequestHeader(name = "userId") String userId,
122-
@RequestParam(value = "elementTypes", required = false, defaultValue = "") List<String> types) {
123-
return ResponseEntity.ok().body(service.getRootDirectories(userId, types));
121+
public ResponseEntity<List<ElementAttributes>> getRootDirectories(@RequestParam(value = "elementTypes", required = false, defaultValue = "") List<String> types) {
122+
return ResponseEntity.ok().body(service.getRootDirectories(types));
124123
}
125124

126125
@RequestMapping(value = "/root-directories", method = RequestMethod.HEAD)
@@ -138,9 +137,8 @@ public ResponseEntity<Void> rootDirectoryExists(@RequestParam("directoryName") S
138137
@Operation(summary = "Get directory elements")
139138
@ApiResponses(@ApiResponse(responseCode = "200", description = "List directory's elements"))
140139
public ResponseEntity<List<ElementAttributes>> getDirectoryElements(@PathVariable("directoryUuid") UUID directoryUuid,
141-
@RequestHeader("userId") String userId,
142140
@RequestParam(value = "elementTypes", required = false, defaultValue = "") List<String> types) {
143-
return ResponseEntity.ok().contentType(MediaType.APPLICATION_JSON).body(service.getDirectoryElements(directoryUuid, userId, types));
141+
return ResponseEntity.ok().contentType(MediaType.APPLICATION_JSON).body(service.getDirectoryElements(directoryUuid, types));
144142
}
145143

146144
@GetMapping(value = "/elements/{elementUuid}", produces = MediaType.APPLICATION_JSON_VALUE)

src/main/java/org/gridsuite/directory/server/DirectoryService.java

Lines changed: 19 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -250,21 +250,14 @@ public void createElementInDirectoryPath(String directoryPath, ElementAttributes
250250
insertElement(elementAttributes, parentDirectoryUuid);
251251
}
252252

253-
private Map<UUID, Long> getSubElementsCount(List<UUID> subDirectories, List<String> types) {
254-
List<DirectoryElementRepository.SubDirectoryCount> subdirectoriesCountsList = repositoryService.getSubdirectoriesCounts(subDirectories, types);
253+
private Map<UUID, Long> getSubDirectoriesCounts(List<UUID> subDirectories, List<String> types) {
254+
List<DirectoryElementRepository.SubDirectoryCount> subdirectoriesCountsList = repositoryService.getSubDirectoriesCounts(subDirectories, types);
255255
Map<UUID, Long> subdirectoriesCountsMap = new HashMap<>();
256256
subdirectoriesCountsList.forEach(e -> subdirectoriesCountsMap.put(e.getId(), e.getCount()));
257257
return subdirectoriesCountsMap;
258258
}
259259

260-
private Map<UUID, Long> getSubElementsCount(List<UUID> subDirectories, List<String> types, String userId) {
261-
List<DirectoryElementRepository.SubDirectoryCount> subdirectoriesCountsList = repositoryService.getSubdirectoriesCounts(subDirectories, types, userId);
262-
Map<UUID, Long> subdirectoriesCountsMap = new HashMap<>();
263-
subdirectoriesCountsList.forEach(e -> subdirectoriesCountsMap.put(e.getId(), e.getCount()));
264-
return subdirectoriesCountsMap;
265-
}
266-
267-
public List<ElementAttributes> getDirectoryElements(UUID directoryUuid, String userId, List<String> types) {
260+
public List<ElementAttributes> getDirectoryElements(UUID directoryUuid, List<String> types) {
268261
ElementAttributes elementAttributes = getElement(directoryUuid);
269262
if (elementAttributes == null) {
270263
throw DirectoryException.createElementNotFound(DIRECTORY, directoryUuid);
@@ -274,45 +267,41 @@ public List<ElementAttributes> getDirectoryElements(UUID directoryUuid, String u
274267
return List.of();
275268
}
276269

277-
return getAllDirectoryElementsStream(directoryUuid, types, userId).toList();
270+
return getAllDirectoryElementsStream(directoryUuid, types).toList();
278271
}
279272

280-
private Stream<ElementAttributes> getOnlyElementsStream(UUID directoryUuid, String userId, List<String> types) {
281-
return getAllDirectoryElementsStream(directoryUuid, types, userId)
273+
private Stream<ElementAttributes> getOnlyElementsStream(UUID directoryUuid, List<String> types) {
274+
return getAllDirectoryElementsStream(directoryUuid, types)
282275
.filter(elementAttributes -> !elementAttributes.getType().equals(DIRECTORY));
283276
}
284277

285-
private Stream<ElementAttributes> getAllDirectoryElementsStream(UUID directoryUuid, List<String> types, String userId) {
278+
private Stream<ElementAttributes> getAllDirectoryElementsStream(UUID directoryUuid, List<String> types) {
286279
List<DirectoryElementEntity> directoryElements = repositoryService.findAllByParentId(directoryUuid);
287-
Map<UUID, Long> subdirectoriesCountsMap = getSubDirectoriesCountMap(userId, types, directoryElements);
280+
Map<UUID, Long> subdirectoriesCountsMap = getSubDirectoriesCountsMap(types, directoryElements);
288281
return directoryElements
289282
.stream()
290283
.filter(e -> e.getType().equals(DIRECTORY) || types.isEmpty() || types.contains(e.getType()))
291284
.map(e -> toElementAttributes(e, subdirectoriesCountsMap.getOrDefault(e.getId(), 0L)));
292285
}
293286

294-
public List<ElementAttributes> getRootDirectories(String userId, List<String> types) {
287+
public List<ElementAttributes> getRootDirectories(List<String> types) {
295288
List<DirectoryElementEntity> directoryElements = repositoryService.findRootDirectories();
296-
Map<UUID, Long> subdirectoriesCountsMap = getSubDirectoriesCountMap(userId, types, directoryElements);
289+
Map<UUID, Long> subdirectoriesCountsMap = getSubDirectoriesCountsMap(types, directoryElements);
297290
return directoryElements.stream()
298291
.map(e -> toElementAttributes(e, subdirectoriesCountsMap.getOrDefault(e.getId(), 0L)))
299292
.toList();
300293
}
301294

302-
private Map<UUID, Long> getSubDirectoriesCountMap(String userId, List<String> types, List<DirectoryElementEntity> directoryElements) {
303-
if (!types.isEmpty()) {
304-
return getSubElementsCount(directoryElements.stream().map(DirectoryElementEntity::getId).toList(), types);
305-
} else {
306-
return getSubElementsCount(directoryElements.stream().map(DirectoryElementEntity::getId).toList(), types, userId);
307-
}
295+
private Map<UUID, Long> getSubDirectoriesCountsMap(List<String> types, List<DirectoryElementEntity> directoryElements) {
296+
return getSubDirectoriesCounts(directoryElements.stream().map(DirectoryElementEntity::getId).toList(), types);
308297
}
309298

310299
public void updateElement(UUID elementUuid, ElementAttributes newElementAttributes, String userId) {
311300
DirectoryElementEntity directoryElement = getDirectoryElementEntity(elementUuid);
312301
if (!isDirectoryElementUpdatable(toElementAttributes(directoryElement), userId) ||
313302
!directoryElement.isAttributesUpdatable(newElementAttributes, userId) ||
314303
!directoryElement.getName().equals(newElementAttributes.getElementName()) &&
315-
directoryHasElementOfNameAndType(directoryElement.getParentId(), userId, newElementAttributes.getElementName(), directoryElement.getType())) {
304+
directoryHasElementOfNameAndType(directoryElement.getParentId(), newElementAttributes.getElementName(), directoryElement.getType())) {
316305
throw new DirectoryException(NOT_ALLOWED);
317306
}
318307

@@ -368,7 +357,7 @@ private void validateElementForMove(DirectoryElementEntity element, UUID newDire
368357
throw new DirectoryException(IS_DIRECTORY);
369358
}
370359
if (!isDirectoryElementUpdatable(toElementAttributes(element), userId) ||
371-
directoryHasElementOfNameAndType(newDirectoryUuid, userId, element.getName(), element.getType())) {
360+
directoryHasElementOfNameAndType(newDirectoryUuid, element.getName(), element.getType())) {
372361
throw new DirectoryException(NOT_ALLOWED);
373362
}
374363
}
@@ -398,8 +387,8 @@ private void validateNewDirectory(UUID newDirectoryUuid) {
398387
}
399388
}
400389

401-
private boolean directoryHasElementOfNameAndType(UUID directoryUUID, String userId, String elementName, String elementType) {
402-
return getOnlyElementsStream(directoryUUID, userId, List.of(elementType))
390+
private boolean directoryHasElementOfNameAndType(UUID directoryUUID, String elementName, String elementType) {
391+
return getOnlyElementsStream(directoryUUID, List.of(elementType))
403392
.anyMatch(
404393
e -> e.getElementName().equals(elementName)
405394
);
@@ -412,7 +401,7 @@ private boolean isDirectoryElementUpdatable(ElementAttributes element, String us
412401
private boolean isDirectoryElementDeletable(ElementAttributes element, String userId) {
413402
if (element.getType().equals(DIRECTORY)) {
414403
return element.isOwnedBy(userId) &&
415-
getAllDirectoryElementsStream(element.getElementUuid(), List.of(), userId)
404+
getAllDirectoryElementsStream(element.getElementUuid(), List.of())
416405
.allMatch(e -> isDirectoryElementDeletable(e, userId));
417406
} else {
418407
return element.isOwnedBy(userId);
@@ -449,7 +438,7 @@ private void deleteElement(ElementAttributes elementAttributes, String userId) {
449438
}
450439

451440
private void deleteSubElements(UUID elementUuid, String userId) {
452-
getAllDirectoryElementsStream(elementUuid, List.of(), userId).forEach(elementAttributes -> deleteElement(elementAttributes, userId));
441+
getAllDirectoryElementsStream(elementUuid, List.of()).forEach(elementAttributes -> deleteElement(elementAttributes, userId));
453442
}
454443

455444
/**
@@ -535,7 +524,7 @@ public List<ElementAttributes> getElements(List<UUID> ids, boolean strictMode, L
535524
throw new DirectoryException(NOT_FOUND);
536525
}
537526

538-
Map<UUID, Long> subElementsCount = getSubElementsCount(elementEntities.stream().map(DirectoryElementEntity::getId).toList(), types);
527+
Map<UUID, Long> subElementsCount = getSubDirectoriesCounts(elementEntities.stream().map(DirectoryElementEntity::getId).toList(), types);
539528

540529
return elementEntities.stream()
541530
.map(attribute -> toElementAttributes(attribute, subElementsCount.getOrDefault(attribute.getId(), 0L)))

src/main/java/org/gridsuite/directory/server/repository/DirectoryElementRepository.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -60,10 +60,7 @@ interface SubDirectoryCount {
6060
}
6161

6262
@Query("SELECT d.parentId AS id, COUNT(*) AS count FROM DirectoryElementEntity d WHERE d.parentId IN :subDirectories AND (d.type = 'DIRECTORY' OR d.type IN :elementTypes) AND d.stashed = FALSE GROUP BY d.parentId")
63-
List<SubDirectoryCount> getSubdirectoriesCounts(List<UUID> subDirectories, List<String> elementTypes);
64-
65-
@Query("SELECT d.parentId AS id, COUNT(*) AS count FROM DirectoryElementEntity d WHERE d.parentId IN :subDirectories AND (d.type = 'DIRECTORY' OR d.type IN :elementTypes) AND d.owner=:owner AND d.stashed = FALSE GROUP BY d.parentId")
66-
List<SubDirectoryCount> getSubdirectoriesCounts(List<UUID> subDirectories, List<String> elementTypes, String owner);
63+
List<SubDirectoryCount> getSubDirectoriesCounts(List<UUID> subDirectories, List<String> elementTypes);
6764

6865
@Transactional
6966
void deleteById(UUID id);

src/main/java/org/gridsuite/directory/server/services/DirectoryRepositoryService.java

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -96,12 +96,8 @@ public UUID getParentUuid(UUID elementUuid) {
9696
.orElse(null);
9797
}
9898

99-
public List<DirectoryElementRepository.SubDirectoryCount> getSubdirectoriesCounts(List<UUID> subDirectories, List<String> elementTypes) {
100-
return directoryElementRepository.getSubdirectoriesCounts(subDirectories, elementTypes);
101-
}
102-
103-
public List<DirectoryElementRepository.SubDirectoryCount> getSubdirectoriesCounts(List<UUID> subDirectories, List<String> elementTypes, String owner) {
104-
return directoryElementRepository.getSubdirectoriesCounts(subDirectories, elementTypes, owner);
99+
public List<DirectoryElementRepository.SubDirectoryCount> getSubDirectoriesCounts(List<UUID> subDirectories, List<String> elementTypes) {
100+
return directoryElementRepository.getSubDirectoriesCounts(subDirectories, elementTypes);
105101
}
106102

107103
public List<DirectoryElementEntity> findAllByIdIn(List<UUID> uuids) {

0 commit comments

Comments
 (0)