Skip to content

Commit 9c19d7a

Browse files
committed
Switch from Set to List to maintain order
1 parent c0704e0 commit 9c19d7a

File tree

9 files changed

+28
-29
lines changed

9 files changed

+28
-29
lines changed

src/main/java/io/github/ngbsn/generator/BiDirectionalMappingsGenerator.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010

1111
import java.util.ArrayList;
1212
import java.util.List;
13-
import java.util.Set;
1413

1514
/**
1615
* Generate BiDirectional Mappings (many-to-many) for a specific table
@@ -26,7 +25,7 @@ private BiDirectionalMappingsGenerator() {
2625
* @param table The table to be processed
2726
* @param foreignKeyConstraintList List of generated foreignKeyConstraintList models
2827
*/
29-
static void addBiDirectionalMappings(Table table, List<ForeignKeyConstraint> foreignKeyConstraintList) {
28+
static void addBiDirectionalMappings(final Table table, final List<ForeignKeyConstraint> foreignKeyConstraintList) {
3029
Table table1 = ModelGenerator.getTablesMap().get(foreignKeyConstraintList.get(0).getReferencedTableName().replaceAll("[\"']", ""));
3130
Table table2 = ModelGenerator.getTablesMap().get(foreignKeyConstraintList.get(1).getReferencedTableName().replaceAll("[\"']", ""));
3231

src/main/java/io/github/ngbsn/generator/ModelGenerator.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525
import java.util.*;
2626
import java.util.regex.Matcher;
2727
import java.util.regex.Pattern;
28-
import java.util.stream.Collectors;
2928

3029
/**
3130
* This class will parse the SQL script and generate the Table models for each table in the script
@@ -93,7 +92,7 @@ static List<Table> parse(final String sqlScript) throws SQLParsingException {
9392
/**
9493
* Iterate over all the JSQL Create Table statements and prepare the list of Table Model
9594
*
96-
* @param statements Set of JSQL statements
95+
* @param statements List of JSQL statements
9796
*/
9897
private static void processCreateTableStatements(final List<Statement> statements) {
9998
statements.forEach(statement -> {
@@ -137,7 +136,7 @@ private static void processCreateTableStatements(final List<Statement> statement
137136
/**
138137
* Iterate over all the JSQL Alter Table statements and prepare the list of Table Model
139138
*
140-
* @param statements Set of JSQL statements
139+
* @param statements List of JSQL statements
141140
*/
142141
private static void processAlterTableStatements(final List<Statement> statements) {
143142
statements.forEach(statement -> {
@@ -194,8 +193,8 @@ private static void extractForeignKeys(final List<Index> foreignKeyIndexes, fina
194193
private static void extractPrimaryKeys(final Index primaryKeyIndex, final Table table) {
195194
List<Index.ColumnParams> columnParamsList = primaryKeyIndex != null ? primaryKeyIndex.getColumns() : null;
196195
if (columnParamsList != null) {
197-
Set<Column> primaryKeyColumns = table.getColumns().stream().
198-
filter(column -> columnParamsList.stream().anyMatch(columnParams -> columnParams.getColumnName().replaceAll(REGEX_ALL_QUOTES, "").equals(column.getColumnName()))).collect(Collectors.toSet());
196+
List<Column> primaryKeyColumns = table.getColumns().stream().
197+
filter(column -> columnParamsList.stream().anyMatch(columnParams -> columnParams.getColumnName().replaceAll(REGEX_ALL_QUOTES, "").equals(column.getColumnName()))).toList();
199198

200199
if (columnParamsList.size() > 1) {
201200
table.setNumOfPrimaryKeyColumns(columnParamsList.size());

src/main/java/io/github/ngbsn/generator/UniDirectionalMappingsGenerator.java

Lines changed: 22 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,10 @@
88
import io.github.ngbsn.util.Util;
99
import org.apache.commons.text.WordUtils;
1010

11-
import java.util.*;
11+
import java.util.ArrayList;
12+
import java.util.HashSet;
13+
import java.util.List;
14+
import java.util.Optional;
1215
import java.util.stream.Collectors;
1316
import java.util.stream.Stream;
1417

@@ -26,7 +29,7 @@ private UniDirectionalMappingsGenerator() {
2629
* @param table Table model
2730
* @param foreignKeyConstraint ForeignKeyConstraint model
2831
*/
29-
static void addBothSideUniDirectionalMappings(Table table, ForeignKeyConstraint foreignKeyConstraint) {
32+
static void addBothSideUniDirectionalMappings(final Table table, final ForeignKeyConstraint foreignKeyConstraint) {
3033
Table referencedTable = ModelGenerator.getTablesMap().get(foreignKeyConstraint.getReferencedTableName().replaceAll("[\"']", ""));
3134

3235
//In the Child table, create a new column having field name as Parent(Referenced) Table.
@@ -49,7 +52,7 @@ static void addBothSideUniDirectionalMappings(Table table, ForeignKeyConstraint
4952
//get EmbeddedId for this table
5053
Optional<EmbeddableClass> optionalEmbeddableId = table.getEmbeddableClasses().stream().filter(EmbeddableClass::isEmbeddedId).findFirst();
5154
EmbeddableClass embeddableId = optionalEmbeddableId.orElse(null);
52-
Set<Column> allPrimaryKeyColumns = getAllPrimaryKeys(table, embeddableId); //get all primary keys
55+
List<Column> allPrimaryKeyColumns = getAllPrimaryKeys(table, embeddableId); //get all primary keys
5356

5457
//Case: Composite Foreign key
5558
if (foreignKeyConstraint.getColumns().size() > 1) {
@@ -62,7 +65,8 @@ static void addBothSideUniDirectionalMappings(Table table, ForeignKeyConstraint
6265
}
6366
}
6467

65-
private static void handleSingleForeignKey(Table table, ForeignKeyConstraint foreignKeyConstraint, Column parentTableField, Set<Column> allPrimaryKeyColumns) {
68+
private static void handleSingleForeignKey(final Table table, final ForeignKeyConstraint foreignKeyConstraint,
69+
final Column parentTableField, final List<Column> allPrimaryKeyColumns) {
6670
//Get the foreign key column from the table
6771
Optional<Column> optionalColumn = table.getColumns().stream().filter(column -> column.getColumnName() != null && column.getColumnName().equals(foreignKeyConstraint.getColumns().get(0))).findFirst();
6872
if (optionalColumn.isPresent()) {
@@ -85,18 +89,19 @@ private static void handleSingleForeignKey(Table table, ForeignKeyConstraint for
8589
parentTableField.getAnnotations().add(JoinColumnAnnotation.builder().name(foreignKeyConstraint.getColumns().get(0)).referencedColumnName(foreignKeyConstraint.getReferencedColumns().get(0)).build().toString());
8690
}
8791

88-
private static void handleCompositeForeignKey(Table table, ForeignKeyConstraint foreignKeyConstraint, Column parentTableField, EmbeddableClass embeddableId, Set<Column> allPrimaryKeyColumns) {
89-
Set<Column> setOfForeignKeyColumns = setOfForeignKeys(table, foreignKeyConstraint);
92+
private static void handleCompositeForeignKey(final Table table, final ForeignKeyConstraint foreignKeyConstraint, final Column parentTableField,
93+
final EmbeddableClass embeddableId, final List<Column> allPrimaryKeyColumns) {
94+
List<Column> listOfForeignKeyColumns = listOfForeignKeys(table, foreignKeyConstraint);
9095
//Case: Shared Composite Primary Key
9196
//If composite foreign key is inside the composite primary key, don't remove them from table.
9297
//This case assumes there is a primary composite key
9398
//Add a @MapsId annotation to the referenced table field
94-
if (embeddableId != null && allPrimaryKeyColumns.containsAll(setOfForeignKeyColumns)) {
95-
handleSharedCompositePrimaryKey(table, parentTableField, embeddableId, setOfForeignKeyColumns);
99+
if (embeddableId != null && new HashSet<>(allPrimaryKeyColumns).containsAll(listOfForeignKeyColumns)) {
100+
handleSharedCompositePrimaryKey(table, parentTableField, embeddableId, listOfForeignKeyColumns);
96101
} else {
97102
//There is no primary Composite key
98103
//If composite foreign key is not inside the composite primary key, then remove it from the table
99-
setOfForeignKeyColumns.forEach(column -> table.getColumns().remove(column));
104+
listOfForeignKeyColumns.forEach(column -> table.getColumns().remove(column));
100105
}
101106

102107
List<JoinColumnAnnotation> joinColumns = new ArrayList<>();
@@ -108,7 +113,8 @@ private static void handleCompositeForeignKey(Table table, ForeignKeyConstraint
108113
parentTableField.getAnnotations().add(JoinColumnsAnnotation.builder().joinColumns(joinColumns).build().toString());
109114
}
110115

111-
private static void handleSharedCompositePrimaryKey(Table table, Column parentTableField, EmbeddableClass embeddableId, Set<Column> setOfForeignKeyColumns) {
116+
private static void handleSharedCompositePrimaryKey(final Table table, final Column parentTableField,
117+
final EmbeddableClass embeddableId, final List<Column> setOfForeignKeyColumns) {
112118
EmbeddableClass foreignCompositeKeyEmbedded = new EmbeddableClass(); //Create a new embeddable for this foreign composite key
113119
String embeddableName = setOfForeignKeyColumns.stream().map(Column::getFieldName).collect(Collectors.joining());
114120
foreignCompositeKeyEmbedded.setClassName(WordUtils.capitalize(embeddableName));
@@ -129,18 +135,18 @@ private static void handleSharedCompositePrimaryKey(Table table, Column parentTa
129135
parentTableField.getAnnotations().add(MapsIdAnnotation.builder().fieldName(foreignCompositeField.getFieldName()).build().toString());
130136
}
131137

132-
private static Set<Column> setOfForeignKeys(Table table, ForeignKeyConstraint foreignKeyConstraint) {
138+
private static List<Column> listOfForeignKeys(final Table table, final ForeignKeyConstraint foreignKeyConstraint) {
133139
Stream<Column> allTableForeignKeyColumns = table.getColumns().stream();
134140
Stream<Column> allEmbeddedForeignKeyColumns = table.getEmbeddableClasses().stream().flatMap(embeddableClass -> embeddableClass.getColumns().stream());
135-
return Stream.concat(allTableForeignKeyColumns, allEmbeddedForeignKeyColumns).filter(column -> foreignKeyConstraint.getColumns().stream().anyMatch(s -> s.equals(column.getColumnName()))).collect(Collectors.toSet());
141+
return Stream.concat(allTableForeignKeyColumns, allEmbeddedForeignKeyColumns).filter(column -> foreignKeyConstraint.getColumns().stream().anyMatch(s -> s.equals(column.getColumnName()))).toList();
136142
}
137143

138-
private static Set<Column> getAllPrimaryKeys(Table table, EmbeddableClass embeddableId) {
139-
//Get set of primary Keys
144+
private static List<Column> getAllPrimaryKeys(final Table table, final EmbeddableClass embeddableId) {
145+
//Get list of primary Keys
140146
if (embeddableId != null) {
141-
return embeddableId.getColumns().stream().filter(Column::isPrimaryKey).collect(Collectors.toSet());
147+
return embeddableId.getColumns().stream().filter(Column::isPrimaryKey).toList();
142148
} else {
143-
return table.getColumns().stream().filter(Column::isPrimaryKey).collect(Collectors.toSet());
149+
return table.getColumns().stream().filter(Column::isPrimaryKey).toList();
144150
}
145151
}
146152

src/main/java/io/github/ngbsn/model/Column.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55

66
import java.util.ArrayList;
77
import java.util.List;
8-
import java.util.Set;
98

109
@Setter
1110
@Getter

src/main/java/io/github/ngbsn/model/EmbeddableClass.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55

66
import java.util.ArrayList;
77
import java.util.List;
8-
import java.util.Set;
98

109
@Setter
1110
@Getter

src/main/java/io/github/ngbsn/model/Table.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55

66
import java.util.ArrayList;
77
import java.util.List;
8-
import java.util.Set;
98

109

1110
@Setter

src/main/java/io/github/ngbsn/model/annotations/field/JoinColumnsAnnotation.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
import lombok.Builder;
55

66
import java.util.List;
7-
import java.util.Set;
87
import java.util.stream.Collectors;
98

109
@Builder

src/main/java/io/github/ngbsn/model/annotations/field/JoinTableAnnotation.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
import lombok.Builder;
55

66
import java.util.List;
7-
import java.util.Set;
87
import java.util.stream.Collectors;
98

109
@Builder

src/main/java/io/github/ngbsn/util/Util.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ public static String packageNameToFolderStructure(final String packageName) {
3232
* @param captializeFirstChar Whether the first char is upper case. This is applicable for Table names
3333
* @return Field names and class names
3434
*/
35-
public static String convertSnakeCaseToCamelCase(String word, boolean captializeFirstChar) {
35+
public static String convertSnakeCaseToCamelCase(String word, final boolean captializeFirstChar) {
3636
word = captializeFirstChar ? WordUtils.capitalize(word) : WordUtils.uncapitalize(word);
3737
return word.contains("_") ? CaseUtils.toCamelCase(word, captializeFirstChar, '_') : word;
3838
}

0 commit comments

Comments
 (0)