4444import java .util .stream .Collectors ;
4545
4646import static org .apache .iotdb .commons .pipe .config .constant .PipeSourceConstant .EXTRACTOR_PATH_EXCLUSION_KEY ;
47+ import static org .apache .iotdb .commons .pipe .config .constant .PipeSourceConstant .EXTRACTOR_PATH_INCLUSION_KEY ;
4748import static org .apache .iotdb .commons .pipe .config .constant .PipeSourceConstant .EXTRACTOR_PATH_KEY ;
4849import static org .apache .iotdb .commons .pipe .config .constant .PipeSourceConstant .EXTRACTOR_PATTERN_EXCLUSION_KEY ;
4950import static org .apache .iotdb .commons .pipe .config .constant .PipeSourceConstant .EXTRACTOR_PATTERN_FORMAT_IOTDB_VALUE ;
5253import static org .apache .iotdb .commons .pipe .config .constant .PipeSourceConstant .EXTRACTOR_PATTERN_INCLUSION_KEY ;
5354import static org .apache .iotdb .commons .pipe .config .constant .PipeSourceConstant .EXTRACTOR_PATTERN_KEY ;
5455import static org .apache .iotdb .commons .pipe .config .constant .PipeSourceConstant .SOURCE_PATH_EXCLUSION_KEY ;
56+ import static org .apache .iotdb .commons .pipe .config .constant .PipeSourceConstant .SOURCE_PATH_INCLUSION_KEY ;
5557import static org .apache .iotdb .commons .pipe .config .constant .PipeSourceConstant .SOURCE_PATH_KEY ;
5658import static org .apache .iotdb .commons .pipe .config .constant .PipeSourceConstant .SOURCE_PATTERN_EXCLUSION_KEY ;
5759import static org .apache .iotdb .commons .pipe .config .constant .PipeSourceConstant .SOURCE_PATTERN_FORMAT_KEY ;
@@ -164,49 +166,9 @@ public static TreePattern parsePipePatternFromSourceParametersInternal(
164166 final boolean isTreeModelDataAllowedToBeCaptured =
165167 isTreeModelDataAllowToBeCaptured (sourceParameters );
166168
167- final boolean hasPatternInclusionKey =
168- sourceParameters .hasAnyAttributes (
169- EXTRACTOR_PATTERN_INCLUSION_KEY , SOURCE_PATTERN_INCLUSION_KEY );
170- final boolean hasPatternExclusionKey =
171- sourceParameters .hasAnyAttributes (
172- EXTRACTOR_PATTERN_EXCLUSION_KEY , SOURCE_PATTERN_EXCLUSION_KEY );
173- final boolean hasLegacyPathKey =
174- sourceParameters .hasAnyAttributes (EXTRACTOR_PATH_KEY , SOURCE_PATH_KEY );
175- final boolean hasLegacyPatternKey =
176- sourceParameters .hasAnyAttributes (EXTRACTOR_PATTERN_KEY , SOURCE_PATTERN_KEY );
177- final boolean usePatternSyntax =
178- hasPatternInclusionKey
179- || (hasPatternExclusionKey && !hasLegacyPathKey && !hasLegacyPatternKey );
180-
181- if (hasPatternInclusionKey && (hasLegacyPathKey || hasLegacyPatternKey )) {
182- final String msg =
183- String .format (
184- PipeMessages .PATTERN_INCLUSION_CANNOT_BE_USED_WITH_PATTERN_OR_PATH ,
185- SOURCE_PATTERN_INCLUSION_KEY ,
186- SOURCE_PATTERN_KEY ,
187- SOURCE_PATH_KEY );
188- LOGGER .warn (msg );
189- throw new PipeException (msg );
190- }
191-
192169 // 1. Parse INCLUSION patterns into a list
193170 List <TreePattern > inclusionPatterns =
194- usePatternSyntax
195- ? parseIoTDBPatternList (
196- sourceParameters .getStringByKeys (
197- EXTRACTOR_PATTERN_INCLUSION_KEY , SOURCE_PATTERN_INCLUSION_KEY ),
198- isTreeModelDataAllowedToBeCaptured ,
199- true ,
200- SOURCE_PATTERN_INCLUSION_KEY )
201- : parseLegacyPatternList (
202- sourceParameters ,
203- isTreeModelDataAllowedToBeCaptured ,
204- EXTRACTOR_PATH_KEY ,
205- SOURCE_PATH_KEY ,
206- EXTRACTOR_PATTERN_KEY ,
207- SOURCE_PATTERN_KEY ,
208- SOURCE_PATH_KEY ,
209- SOURCE_PATTERN_KEY );
171+ parseInclusionPatternList (sourceParameters , isTreeModelDataAllowedToBeCaptured );
210172
211173 // If no inclusion patterns are specified, use default "root.**"
212174 if (inclusionPatterns .isEmpty ()) {
@@ -217,35 +179,8 @@ public static TreePattern parsePipePatternFromSourceParametersInternal(
217179 }
218180
219181 // 2. Parse EXCLUSION patterns into a list
220- if (usePatternSyntax
221- && sourceParameters .hasAnyAttributes (
222- EXTRACTOR_PATH_EXCLUSION_KEY , SOURCE_PATH_EXCLUSION_KEY )) {
223- final String msg =
224- String .format (
225- PipeMessages .PATTERN_INCLUSION_CANNOT_BE_USED_WITH_PATH_EXCLUSION ,
226- SOURCE_PATTERN_INCLUSION_KEY ,
227- SOURCE_PATH_EXCLUSION_KEY );
228- LOGGER .warn (msg );
229- throw new PipeException (msg );
230- }
231-
232182 List <TreePattern > exclusionPatterns =
233- usePatternSyntax
234- ? parseIoTDBPatternList (
235- sourceParameters .getStringByKeys (
236- EXTRACTOR_PATTERN_EXCLUSION_KEY , SOURCE_PATTERN_EXCLUSION_KEY ),
237- isTreeModelDataAllowedToBeCaptured ,
238- true ,
239- SOURCE_PATTERN_EXCLUSION_KEY )
240- : parseLegacyPatternList (
241- sourceParameters ,
242- isTreeModelDataAllowedToBeCaptured ,
243- EXTRACTOR_PATH_EXCLUSION_KEY ,
244- SOURCE_PATH_EXCLUSION_KEY ,
245- EXTRACTOR_PATTERN_EXCLUSION_KEY ,
246- SOURCE_PATTERN_EXCLUSION_KEY ,
247- SOURCE_PATH_EXCLUSION_KEY ,
248- SOURCE_PATTERN_EXCLUSION_KEY );
183+ parseExclusionPatternList (sourceParameters , isTreeModelDataAllowedToBeCaptured );
249184
250185 // 3. Optimize the lists: remove redundant patterns (e.g., if "root.**" exists, "root.db" is
251186 // redundant)
@@ -264,6 +199,8 @@ public static TreePattern parsePipePatternFromSourceParametersInternal(
264199 sourceParameters .getStringByKeys (
265200 EXTRACTOR_PATTERN_INCLUSION_KEY ,
266201 SOURCE_PATTERN_INCLUSION_KEY ,
202+ EXTRACTOR_PATH_INCLUSION_KEY ,
203+ SOURCE_PATH_INCLUSION_KEY ,
267204 EXTRACTOR_PATH_KEY ,
268205 SOURCE_PATH_KEY ,
269206 EXTRACTOR_PATTERN_KEY ,
@@ -382,49 +319,91 @@ public static TreePattern parsePatternFromString(
382319 parseMultiplePatterns (trimmedPattern , basePatternSupplier ));
383320 }
384321
385- /**
386- * Helper method to parse legacy pattern parameters into a list of patterns without creating the
387- * Union object immediately.
388- */
389- private static List <TreePattern > parseLegacyPatternList (
390- final PipeParameters sourceParameters ,
391- final boolean isTreeModelDataAllowedToBeCaptured ,
392- final String extractorPathKey ,
393- final String sourcePathKey ,
394- final String extractorPatternKey ,
395- final String sourcePatternKey ,
396- final String pathKeyName ,
397- final String patternKeyName ) {
322+ private static List <TreePattern > parseInclusionPatternList (
323+ final PipeParameters sourceParameters , final boolean isTreeModelDataAllowedToBeCaptured ) {
324+ final List <TreePattern > result = new ArrayList <>();
398325
399- final String path = sourceParameters .getStringByKeys (extractorPathKey , sourcePathKey );
400- final String pattern = sourceParameters .getStringByKeys (extractorPatternKey , sourcePatternKey );
326+ addPatternsFromPatternParameterIfPresent (
327+ result ,
328+ sourceParameters ,
329+ isTreeModelDataAllowedToBeCaptured ,
330+ EXTRACTOR_PATTERN_KEY ,
331+ SOURCE_PATTERN_KEY ,
332+ SOURCE_PATTERN_KEY );
333+ addIoTDBPatternsIfPresent (
334+ result ,
335+ sourceParameters ,
336+ isTreeModelDataAllowedToBeCaptured ,
337+ EXTRACTOR_PATTERN_INCLUSION_KEY ,
338+ SOURCE_PATTERN_INCLUSION_KEY ,
339+ SOURCE_PATTERN_INCLUSION_KEY );
340+ addIoTDBPatternsIfPresent (
341+ result ,
342+ sourceParameters ,
343+ isTreeModelDataAllowedToBeCaptured ,
344+ EXTRACTOR_PATH_KEY ,
345+ SOURCE_PATH_KEY ,
346+ SOURCE_PATH_KEY );
347+ addIoTDBPatternsIfPresent (
348+ result ,
349+ sourceParameters ,
350+ isTreeModelDataAllowedToBeCaptured ,
351+ EXTRACTOR_PATH_INCLUSION_KEY ,
352+ SOURCE_PATH_INCLUSION_KEY ,
353+ SOURCE_PATH_INCLUSION_KEY );
401354
402- if (path != null && pattern != null ) {
403- final String msg =
404- String .format (
405- PipeMessages .PATH_AND_PATTERN_CANNOT_BE_USED_TOGETHER , pathKeyName , patternKeyName );
406- LOGGER .warn (msg );
407- throw new PipeException (msg );
408- }
355+ return result ;
356+ }
409357
358+ private static List <TreePattern > parseExclusionPatternList (
359+ final PipeParameters sourceParameters , final boolean isTreeModelDataAllowedToBeCaptured ) {
410360 final List <TreePattern > result = new ArrayList <>();
411361
412- if (path != null ) {
362+ addIoTDBPatternsIfPresent (
363+ result ,
364+ sourceParameters ,
365+ isTreeModelDataAllowedToBeCaptured ,
366+ EXTRACTOR_PATTERN_EXCLUSION_KEY ,
367+ SOURCE_PATTERN_EXCLUSION_KEY ,
368+ SOURCE_PATTERN_EXCLUSION_KEY );
369+ addIoTDBPatternsIfPresent (
370+ result ,
371+ sourceParameters ,
372+ isTreeModelDataAllowedToBeCaptured ,
373+ EXTRACTOR_PATH_EXCLUSION_KEY ,
374+ SOURCE_PATH_EXCLUSION_KEY ,
375+ SOURCE_PATH_EXCLUSION_KEY );
376+
377+ return result ;
378+ }
379+
380+ private static void addIoTDBPatternsIfPresent (
381+ final List <TreePattern > result ,
382+ final PipeParameters sourceParameters ,
383+ final boolean isTreeModelDataAllowedToBeCaptured ,
384+ final String extractorKey ,
385+ final String sourceKey ,
386+ final String parameterKey ) {
387+ final String pattern = sourceParameters .getStringByKeys (extractorKey , sourceKey );
388+ if (pattern != null ) {
413389 result .addAll (
414- parseIoTDBPatternList (path , isTreeModelDataAllowedToBeCaptured , false , pathKeyName ));
390+ parseIoTDBPatternList (pattern , isTreeModelDataAllowedToBeCaptured , true , parameterKey ));
415391 }
392+ }
416393
394+ private static void addPatternsFromPatternParameterIfPresent (
395+ final List <TreePattern > result ,
396+ final PipeParameters sourceParameters ,
397+ final boolean isTreeModelDataAllowedToBeCaptured ,
398+ final String extractorKey ,
399+ final String sourceKey ,
400+ final String parameterKey ) {
401+ final String pattern = sourceParameters .getStringByKeys (extractorKey , sourceKey );
417402 if (pattern != null ) {
418403 result .addAll (
419404 parsePatternsFromPatternParameter (
420- pattern ,
421- sourceParameters ,
422- isTreeModelDataAllowedToBeCaptured ,
423- false ,
424- patternKeyName ));
405+ pattern , sourceParameters , isTreeModelDataAllowedToBeCaptured , true , parameterKey ));
425406 }
426-
427- return result ;
428407 }
429408
430409 private static List <TreePattern > parseIoTDBPatternList (
0 commit comments