Skip to content

Commit b0d7d53

Browse files
committed
Fix duplicated column renaming, to avoid unaccepted characters
Signed-off-by: Franck LECUYER <[email protected]>
1 parent b3910a7 commit b0d7d53

File tree

2 files changed

+26
-22
lines changed

2 files changed

+26
-22
lines changed

src/main/java/org/gridsuite/studyconfig/server/service/SpreadsheetConfigService.java

Lines changed: 22 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -373,30 +373,34 @@ private static void reorderColumns(List<UUID> columnOrder, List<ColumnEntity> co
373373
}
374374

375375
private String newCandidate(String base, int n) {
376-
return base + '(' + n + ')';
376+
return base + '_' + n;
377+
}
378+
379+
/**
380+
* Generates a unique value by appending a numeric suffix if the original value already exists.
381+
*
382+
* @param originalValue the original value to make unique
383+
* @param existingValues set of existing values to avoid conflicts with
384+
* @return a unique value, either the original or with a numeric suffix
385+
*/
386+
private String getUniqueValue(String originalValue, Set<String> existingValues) {
387+
if (!existingValues.contains(originalValue)) {
388+
return originalValue;
389+
}
390+
391+
int i = 1;
392+
while (existingValues.contains(newCandidate(originalValue, i))) {
393+
++i;
394+
}
395+
return newCandidate(originalValue, i);
377396
}
378397

379398
private Pair<String, String> getDuplicateIdAndNameCandidate(SpreadsheetConfigEntity entity, String columnId, String columnName) {
380-
String newColumnId = columnId;
381-
String newColumnName = columnName;
382-
383399
var existingColumnIds = entity.getColumns().stream().map(ColumnEntity::getId).collect(Collectors.toSet());
384400
var existingColumnNames = entity.getColumns().stream().map(ColumnEntity::getName).collect(Collectors.toSet());
401+
String newColumnId = getUniqueValue(columnId, existingColumnIds);
402+
String newColumnName = getUniqueValue(columnName, existingColumnNames);
385403

386-
if (existingColumnIds.contains(columnId)) {
387-
int i = 1;
388-
while (existingColumnIds.contains(newCandidate(columnId, i))) {
389-
++i;
390-
}
391-
newColumnId = newCandidate(columnId, i);
392-
}
393-
if (existingColumnNames.contains(columnName)) {
394-
int i = 1;
395-
while (existingColumnNames.contains(newCandidate(columnName, i))) {
396-
++i;
397-
}
398-
newColumnName = newCandidate(columnName, i);
399-
}
400404

401405
return Pair.of(newColumnId, newColumnName);
402406
}

src/test/java/org/gridsuite/studyconfig/server/SpreadsheetConfigIntegrationTest.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -329,8 +329,8 @@ void testDuplicateColumn() throws Exception {
329329
ColumnInfos duplicatedColumnInfos = configAfterDuplicate.columns().get(1);
330330

331331
assertThat(columnInfos.uuid()).isNotEqualTo(duplicatedColumnInfos.uuid());
332-
assertEquals(columnInfos.id() + "(1)", duplicatedColumnInfos.id());
333-
assertEquals(columnInfos.name() + "(1)", duplicatedColumnInfos.name());
332+
assertEquals(columnInfos.id() + "_1", duplicatedColumnInfos.id());
333+
assertEquals(columnInfos.name() + "_1", duplicatedColumnInfos.name());
334334
assertThat(columnInfos.visible()).isEqualTo(duplicatedColumnInfos.visible());
335335
assertThat(columnInfos.formula()).isEqualTo(duplicatedColumnInfos.formula());
336336
assertThat(columnInfos.dependencies()).isEqualTo(duplicatedColumnInfos.dependencies());
@@ -342,8 +342,8 @@ void testDuplicateColumn() throws Exception {
342342
assertThat(configAfterDuplicate.columns()).hasSize(6);
343343
duplicatedColumnInfos = configAfterDuplicate.columns().get(1);
344344
assertThat(columnInfos.uuid()).isNotEqualTo(duplicatedColumnInfos.uuid());
345-
assertEquals(columnInfos.id() + "(2)", duplicatedColumnInfos.id());
346-
assertEquals(columnInfos.name() + "(2)", duplicatedColumnInfos.name());
345+
assertEquals(columnInfos.id() + "_2", duplicatedColumnInfos.id());
346+
assertEquals(columnInfos.name() + "_2", duplicatedColumnInfos.name());
347347

348348
mockMvc.perform(post(URI_SPREADSHEET_CONFIG_GET_PUT + configId + URI_COLUMN_BASE + "/" + UUID.randomUUID() + "/duplicate"))
349349
.andExpect(status().isNotFound());

0 commit comments

Comments
 (0)