25
25
import org .apache .kafka .connect .data .SchemaAndValue ;
26
26
import org .apache .kafka .connect .data .SchemaBuilder ;
27
27
import org .apache .kafka .connect .data .Struct ;
28
- import org .apache .kafka .connect .transforms .Transformation ;
29
28
import org .slf4j .Logger ;
30
29
import org .slf4j .LoggerFactory ;
31
30
34
33
import java .util .Map ;
35
34
import java .util .regex .Matcher ;
36
35
37
- public abstract class PatternRename <R extends ConnectRecord <R >> implements Transformation <R > {
36
+ public abstract class PatternRename <R extends ConnectRecord <R >> extends BaseTransformation <R > {
38
37
private static final Logger log = LoggerFactory .getLogger (PatternRename .class );
39
38
40
39
@ Override
@@ -54,7 +53,8 @@ public void close() {
54
53
55
54
}
56
55
57
- SchemaAndValue processStruct (R record , SchemaAndValue schemaAndValue ) {
56
+ @ Override
57
+ protected SchemaAndValue processStruct (R record , SchemaAndValue schemaAndValue ) {
58
58
final Schema inputSchema = schemaAndValue .schema ();
59
59
final Struct inputStruct = (Struct ) schemaAndValue .value ();
60
60
final SchemaBuilder outputSchemaBuilder = SchemaBuilder .struct ();
@@ -94,7 +94,8 @@ SchemaAndValue processStruct(R record, SchemaAndValue schemaAndValue) {
94
94
return new SchemaAndValue (outputSchema , outputStruct );
95
95
}
96
96
97
- SchemaAndValue processMap (R record , SchemaAndValue schemaAndValue ) {
97
+ @ Override
98
+ protected SchemaAndValue processMap (R record , SchemaAndValue schemaAndValue ) {
98
99
final Map <String , Object > inputMap = (Map <String , Object >) schemaAndValue .value ();
99
100
final Map <String , Object > outputMap = new LinkedHashMap <>(inputMap .size ());
100
101
@@ -114,84 +115,6 @@ SchemaAndValue processMap(R record, SchemaAndValue schemaAndValue) {
114
115
return new SchemaAndValue (null , outputMap );
115
116
}
116
117
117
- SchemaAndValue process (R record , SchemaAndValue schemaAndValue ) {
118
- final SchemaAndValue result ;
119
- if (schemaAndValue .value () instanceof Struct ) {
120
- result = processStruct (record , schemaAndValue );
121
- } else if (schemaAndValue .value () instanceof Map ) {
122
- result = processMap (record , schemaAndValue );
123
- } else {
124
- throw new UnsupportedOperationException ();
125
- }
126
- return result ;
127
- }
128
-
129
-
130
- // R process(R record, boolean isKey) {
131
- // final Schema inputSchema = isKey ? record.keySchema() : record.valueSchema();
132
- // final Struct inputStruct = (Struct) (isKey ? record.key() : record.value());
133
- // final SchemaBuilder outputSchemaBuilder = SchemaBuilder.struct();
134
- // outputSchemaBuilder.name(inputSchema.name());
135
- // outputSchemaBuilder.doc(inputSchema.doc());
136
- // if (null != inputSchema.defaultValue()) {
137
- // outputSchemaBuilder.defaultValue(inputSchema.defaultValue());
138
- // }
139
- // if (null != inputSchema.parameters() && !inputSchema.parameters().isEmpty()) {
140
- // outputSchemaBuilder.parameters(inputSchema.parameters());
141
- // }
142
- // if (inputSchema.isOptional()) {
143
- // outputSchemaBuilder.optional();
144
- // }
145
- // Map<String, String> fieldMappings = new HashMap<>(inputSchema.fields().size());
146
- // for (final Field inputField : inputSchema.fields()) {
147
- // log.trace("process() - Processing field '{}'", inputField.name());
148
- // final Matcher fieldMatcher = this.config.pattern.matcher(inputField.name());
149
- // final String outputFieldName;
150
- // if (fieldMatcher.find()) {
151
- // outputFieldName = fieldMatcher.replaceAll(this.config.replacement);
152
- // } else {
153
- // outputFieldName = inputField.name();
154
- // }
155
- // log.trace("process() - Mapping field '{}' to '{}'", inputField.name(), outputFieldName);
156
- // fieldMappings.put(inputField.name(), outputFieldName);
157
- // outputSchemaBuilder.field(outputFieldName, inputField.schema());
158
- // }
159
- // final Schema outputSchema = outputSchemaBuilder.build();
160
- // final Struct outputStruct = new Struct(outputSchema);
161
- // for (Map.Entry<String, String> entry : fieldMappings.entrySet()) {
162
- // final String inputField = entry.getKey(), outputField = entry.getValue();
163
- // log.trace("process() - Copying '{}' to '{}'", inputField, outputField);
164
- // final Object value = inputStruct.get(inputField);
165
- // outputStruct.put(outputField, value);
166
- // }
167
- //
168
- // final R result;
169
- // if (isKey) {
170
- // result = record.newRecord(
171
- // record.topic(),
172
- // record.kafkaPartition(),
173
- // outputSchema,
174
- // outputStruct,
175
- // record.valueSchema(),
176
- // record.value(),
177
- // record.timestamp()
178
- // );
179
- // } else {
180
- // result = record.newRecord(
181
- // record.topic(),
182
- // record.kafkaPartition(),
183
- // record.keySchema(),
184
- // record.key(),
185
- // outputSchema,
186
- // outputStruct,
187
- // record.timestamp()
188
- // );
189
- // }
190
- // return result;
191
- //
192
- //
193
- // }
194
-
195
118
@ Title ("PatternRename(Key)" )
196
119
@ Description ("This transformation is used to rename fields in the key of an input struct based on a regular expression and a replacement string." )
197
120
@ DocumentationTip ("This transformation is used to manipulate fields in the Key of the record." )
0 commit comments