@@ -8,7 +8,8 @@ data class Topics(val cypherTopics: Map<String, String> = emptyMap(),
88 val cdcSchemaTopics : Set <String > = emptySet(),
99 val cudTopics : Set <String > = emptySet(),
1010 val nodePatternTopics : Map <String , NodePatternConfiguration > = emptyMap(),
11- val relPatternTopics : Map <String , RelationshipPatternConfiguration > = emptyMap()) {
11+ val relPatternTopics : Map <String , RelationshipPatternConfiguration > = emptyMap(),
12+ val invalid : List <String > = emptyList()) {
1213
1314 fun allTopics (): List <String > = this .asMap()
1415 .map {
@@ -25,7 +26,7 @@ data class Topics(val cypherTopics: Map<String, String> = emptyMap(),
2526 TopicType .PATTERN_NODE to nodePatternTopics, TopicType .PATTERN_RELATIONSHIP to relPatternTopics)
2627
2728 companion object {
28- fun from (config : Map <* , * >, prefix : String , toReplace : String = ""): Topics {
29+ fun from (config : Map <* , * >, prefix : String , toReplace : String = "", invalidTopics : List < String > = emptyList() ): Topics {
2930 val cypherTopicPrefix = TopicType .CYPHER .key.replace(prefix, toReplace)
3031 val sourceIdKey = TopicType .CDC_SOURCE_ID .key.replace(prefix, toReplace)
3132 val schemaKey = TopicType .CDC_SCHEMA .key.replace(prefix, toReplace)
@@ -34,14 +35,14 @@ data class Topics(val cypherTopics: Map<String, String> = emptyMap(),
3435 val relPatterKey = TopicType .PATTERN_RELATIONSHIP .key.replace(prefix, toReplace)
3536 val cypherTopics = TopicUtils .filterByPrefix(config, cypherTopicPrefix)
3637 val nodePatternTopics = TopicUtils
37- .filterByPrefix(config, nodePatterKey)
38+ .filterByPrefix(config, nodePatterKey, invalidTopics )
3839 .mapValues { NodePatternConfiguration .parse(it.value) }
3940 val relPatternTopics = TopicUtils
40- .filterByPrefix(config, relPatterKey)
41+ .filterByPrefix(config, relPatterKey, invalidTopics )
4142 .mapValues { RelationshipPatternConfiguration .parse(it.value) }
42- val cdcSourceIdTopics = TopicUtils .splitTopics(config[sourceIdKey] as ? String )
43- val cdcSchemaTopics = TopicUtils .splitTopics(config[schemaKey] as ? String )
44- val cudTopics = TopicUtils .splitTopics(config[cudKey] as ? String )
43+ val cdcSourceIdTopics = TopicUtils .splitTopics(config[sourceIdKey] as ? String , invalidTopics )
44+ val cdcSchemaTopics = TopicUtils .splitTopics(config[schemaKey] as ? String , invalidTopics )
45+ val cudTopics = TopicUtils .splitTopics(config[cudKey] as ? String , invalidTopics )
4546 return Topics (cypherTopics, cdcSourceIdTopics, cdcSchemaTopics, cudTopics, nodePatternTopics, relPatternTopics)
4647 }
4748 }
@@ -51,19 +52,22 @@ object TopicUtils {
5152
5253 @JvmStatic val TOPIC_SEPARATOR = " ;"
5354
54- fun filterByPrefix (config : Map <* , * >, prefix : String ): Map <String , String > {
55+ fun filterByPrefix (config : Map <* , * >, prefix : String , invalidTopics : List < String > = emptyList() ): Map <String , String > {
5556 val fullPrefix = " $prefix ."
5657 return config
5758 .filterKeys { it.toString().startsWith(fullPrefix) }
5859 .mapKeys { it.key.toString().replace(fullPrefix, " " ) }
60+ .filterKeys { ! invalidTopics.contains(it) }
5961 .mapValues { it.value.toString() }
6062 }
6163
62- fun splitTopics (cdcMergeTopicsString : String? ): Set <String > {
64+ fun splitTopics (cdcMergeTopicsString : String? , invalidTopics : List < String > = emptyList() ): Set <String > {
6365 return if (cdcMergeTopicsString.isNullOrBlank()) {
6466 emptySet()
6567 } else {
66- cdcMergeTopicsString.split(TOPIC_SEPARATOR ).toSet()
68+ cdcMergeTopicsString.split(TOPIC_SEPARATOR )
69+ .filter { ! invalidTopics.contains(it) }
70+ .toSet()
6771 }
6872 }
6973
0 commit comments