Skip to content

Commit 6318f3c

Browse files
committed
Refactored builder to only have on table and a type with a separate argument for ids
1 parent 5bc098d commit 6318f3c

26 files changed

Lines changed: 541 additions & 536 deletions

.idea/misc.xml

Lines changed: 43 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,24 @@
11
package dev.mhh.cloner.api;
22

3+
import dev.mhh.cloner.api.builder.CloneConfigurationBuilder;
34
import dev.mhh.cloner.api.table.TableConfig;
45
import dev.mhh.cloner.impl.builder.CloneConfigurationBuilderImpl;
56

67
import java.io.Serializable;
78
import java.util.List;
9+
import java.util.function.Function;
810

9-
public record CloneConfiguration(
10-
List<TableConfig<?>> rootTables,
11+
public record CloneConfiguration<T extends Serializable>(
12+
TableConfig<T> rootTable,
1113
String idColumnName,
12-
String schema
14+
String schema,
15+
Function<T, String> idToDatabaseStringFunction
1316
) implements Serializable {
14-
public static CloneConfigurationBuilder builder() {
15-
return new CloneConfigurationBuilderImpl();
17+
public static <T extends Serializable> CloneConfigurationBuilder<T> builder(
18+
final String tableName,
19+
final String columnName,
20+
final Class<T> columnClass
21+
) {
22+
return new CloneConfigurationBuilderImpl<>(tableName, columnName, columnClass);
1623
}
1724
}

core/src/main/java/dev/mhh/cloner/api/CloneConfigurationBuilder.java

Lines changed: 0 additions & 204 deletions
This file was deleted.

core/src/main/java/dev/mhh/cloner/api/Cloner.java

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,19 @@
22

33
import java.io.InputStream;
44
import java.io.OutputStream;
5+
import java.io.Serializable;
56
import java.sql.Connection;
7+
import java.util.List;
68

7-
public interface Cloner {
8-
void exportClone(OutputStream outputStream, CloneConfiguration configuration, Connection connection) throws CloneException;
9-
void importClone(InputStream inputStream, Connection connection) throws CloneException;
9+
public interface Cloner<T extends Serializable> {
10+
void exportClone(
11+
OutputStream outputStream,
12+
Connection connection,
13+
CloneConfiguration<T> configuration,
14+
List<T> ids
15+
) throws CloneException;
16+
void importClone(
17+
InputStream inputStream,
18+
Connection connection
19+
) throws CloneException;
1020
}
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
package dev.mhh.cloner.api.builder;
2+
3+
import dev.mhh.cloner.api.CloneConfiguration;
4+
5+
import java.io.Serializable;
6+
import java.util.List;
7+
import java.util.function.Consumer;
8+
import java.util.function.Function;
9+
10+
/**
11+
* Builder for configuring how a root table and its related tables
12+
* should be cloned, including join relationships and nested sub-tables.
13+
*
14+
* <p>The configuration forms a tree where each table may define
15+
* joins to related tables using different join strategies.</p>
16+
*/
17+
public interface CloneConfigurationBuilder<T extends Serializable> extends CloneConfigurationSubBuilder<T> {
18+
19+
/**
20+
* Defines the name of the column used to identify rows with foreign key joins
21+
*
22+
* @param columnName defaults it "id"
23+
* @return this builder for fluent chaining
24+
*/
25+
CloneConfigurationBuilder<T> idColumnName(final String columnName);
26+
27+
/**
28+
* Defines the PostgreSQL schema to use for the clone.
29+
* @param schema defaults to "public"
30+
* @return this builder for fluent chaining
31+
*/
32+
CloneConfigurationBuilder<T> schema(final String schema);
33+
34+
/**
35+
* Function that is used to convert the id columns given as T to a database string that can be used in a where.
36+
* Some defaults already exist, so this is only needed if T is a custom type
37+
* @param idsToDatabaseStringFunction the function to convert
38+
* @return this builder for fluent chaining
39+
*/
40+
CloneConfigurationBuilder<T> idsToDatabaseStringFunction(final Function<T, String> idsToDatabaseStringFunction);
41+
42+
@Override
43+
CloneConfigurationBuilder<T> joinByJoinTableForeignKey(String tableName, String foreignKey, Consumer<CloneConfigurationSubBuilder<T>> subTables);
44+
45+
@Override
46+
default CloneConfigurationBuilder<T> joinByJoinTableForeignKey(String tableName, String foreignKey) {
47+
return joinByJoinTableForeignKey(tableName, foreignKey, _ -> {});
48+
}
49+
50+
@Override
51+
CloneConfigurationBuilder<T> joinByMainTableForeignKey(String tableName, String foreignKey, Consumer<CloneConfigurationSubBuilder<T>> subTables);
52+
53+
@Override
54+
default CloneConfigurationBuilder<T> joinByMainTableForeignKey(String tableName, String foreignKey) {
55+
return joinByMainTableForeignKey(tableName, foreignKey, _ -> {});
56+
}
57+
58+
@Override
59+
CloneConfigurationBuilder<T> joinByMatchingColumns(String tableName, String mainTableColumn, String joinedTableColumn, Consumer<CloneConfigurationSubBuilder<T>> subTables);
60+
61+
@Override
62+
default CloneConfigurationBuilder<T> joinByMatchingColumns(String tableName, String mainTableColumn, String joinedTableColumn) {
63+
return joinByMatchingColumns(tableName, mainTableColumn, joinedTableColumn, _ -> {});
64+
}
65+
66+
/**
67+
* @return the fully configured clone configuration
68+
*/
69+
CloneConfiguration<T> build();
70+
}

0 commit comments

Comments
 (0)