Skip to content
This repository was archived by the owner on Aug 1, 2025. It is now read-only.

Commit 78e5868

Browse files
authored
Merge pull request #44 from Breeding-Insight/bug/BI-2438
BI-2438 Regression: Append Workflow Messes Up Experiment Display And Download
2 parents b378f08 + f307a60 commit 78e5868

File tree

2 files changed

+34
-20
lines changed

2 files changed

+34
-20
lines changed

src/main/java/org/brapi/test/BrAPITestServer/model/entity/core/ListItemEntity.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
@Table(name = "list_item")
1010
@Where(clause = "soft_deleted = false")
1111
public class ListItemEntity extends BrAPIBaseEntity {
12-
@ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
12+
@ManyToOne(fetch = FetchType.LAZY)
1313
private ListEntity list;
1414
@Column
1515
private String item;

src/main/java/org/brapi/test/BrAPITestServer/service/core/ListService.java

Lines changed: 33 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020

2121
import javax.transaction.Transactional;
2222
import java.util.*;
23+
import java.util.function.Function;
2324
import java.util.stream.Collectors;
2425

2526
@Service
@@ -247,7 +248,7 @@ private ListBaseFieldsInterface convertToBaseFields(ListEntity entity, ListBaseF
247248
}
248249

249250
private void updateEntity(ListEntity entity, @Valid ListNewRequest list) throws BrAPIServerException {
250-
251+
// Update simple fields
251252
if (list.getAdditionalInfo() != null)
252253
entity.setAdditionalInfo(list.getAdditionalInfo());
253254
if (list.getListDescription() != null)
@@ -268,33 +269,46 @@ private void updateEntity(ListEntity entity, @Valid ListNewRequest list) throws
268269
entity.setListOwnerPerson(person);
269270
}
270271

272+
// Update list items
271273
if (list.getData() != null) {
272-
// Clear existing items
274+
// Initialize entity.getData() if it's null
273275
if (entity.getData() == null) {
274276
entity.setData(new ArrayList<>());
275-
} else {
276-
entity.getData().clear();
277277
}
278278

279-
// Add new items
280-
ListIterator<String> iter = list.getData().listIterator();
281-
while (iter.hasNext()) {
282-
String item = iter.next();
279+
// Create a map of existing items for efficient lookup
280+
Map<String, ListItemEntity> existingItems = entity.getData().stream()
281+
.filter(item -> item.getItem() != null)
282+
.collect(Collectors.toMap(
283+
ListItemEntity::getItem,
284+
Function.identity(),
285+
(existing, replacement) -> existing,
286+
HashMap::new
287+
));
288+
289+
List<ListItemEntity> updatedItems = new ArrayList<>();
290+
int position = 0;
291+
292+
for (String item : list.getData()) {
283293
if (item != null) {
284-
ListItemEntity itemEntity = new ListItemEntity();
285-
itemEntity.setPosition(iter.nextIndex());
286-
itemEntity.setItem(item);
287-
itemEntity.setList(entity);
288-
entity.getData().add(itemEntity);
294+
ListItemEntity itemEntity = existingItems.get(item);
295+
if (itemEntity == null) {
296+
// Create new item if it doesn't exist
297+
itemEntity = new ListItemEntity();
298+
itemEntity.setItem(item);
299+
itemEntity.setList(entity);
300+
}
301+
itemEntity.setPosition(position++);
302+
updatedItems.add(itemEntity);
289303
}
290304
}
305+
306+
// Update the list with new and updated items
307+
entity.getData().clear();
308+
entity.getData().addAll(updatedItems);
291309
} else {
292-
if (entity.getData() == null) {
293-
entity.setData(new ArrayList<>());
294-
} else {
295-
entity.getData().clear();
296-
}
310+
// If data is null, initialize an empty list
311+
entity.setData(new ArrayList<>());
297312
}
298-
299313
}
300314
}

0 commit comments

Comments
 (0)