@@ -99,7 +99,7 @@ public void apply(final Metafix metafix, final Record record, final List<String>
99
99
add_field {
100
100
@ Override
101
101
public void apply (final Metafix metafix , final Record record , final List <String > params , final Map <String , String > options ) {
102
- new FixPath (params .get (0 )). appendIn ( record , params .get (1 ));
102
+ record . add (params .get (0 ), new Value ( params .get (1 ) ));
103
103
}
104
104
},
105
105
array { // array-from-hash
@@ -120,7 +120,12 @@ public void apply(final Metafix metafix, final Record record, final List<String>
120
120
copy_field {
121
121
@ Override
122
122
public void apply (final Metafix metafix , final Record record , final List <String > params , final Map <String , String > options ) {
123
- record .copy (params );
123
+ final String oldName = params .get (0 );
124
+ final String newName = params .get (1 );
125
+ Value .asList (record .get (oldName ), a -> a .forEach (newValue -> {
126
+ record .add (newName , newValue );
127
+ newValue .updatePathRename (newName );
128
+ }));
124
129
}
125
130
},
126
131
format {
@@ -149,8 +154,8 @@ public void apply(final Metafix metafix, final Record record, final List<String>
149
154
move_field {
150
155
@ Override
151
156
public void apply (final Metafix metafix , final Record record , final List <String > params , final Map <String , String > options ) {
152
- record . copy ( params );
153
- new FixPath (params .get (0 )). removeNestedFrom ( record );
157
+ FixMethod . copy_field . apply ( metafix , record , params , options );
158
+ record . remove (params .get (0 ));
154
159
}
155
160
},
156
161
parse_text {
@@ -195,10 +200,11 @@ public void apply(final Metafix metafix, final Record record, final List<String>
195
200
@ Override
196
201
public void apply (final Metafix metafix , final Record record , final List <String > params , final Map <String , String > options ) {
197
202
final String joinChar = options .get ("join_char" );
198
- new FixPath ( params . get ( 0 )). replaceIn ( record , params .subList (1 , params .size ()).stream ()
199
- .filter (f -> literalString (f ) || new FixPath ( f ). findIn ( record ) != null )
200
- .map (f -> literalString (f ) ? new Value (f .substring (1 )) : Value .asList (new FixPath ( f ). findIn ( record ), null ).asArray ().get (0 ))
203
+ final Value newValue = new Value ( params .subList (1 , params .size ()).stream ()
204
+ .filter (f -> literalString (f ) || record . get ( f ) != null )
205
+ .map (f -> literalString (f ) ? new Value (f .substring (1 )) : Value .asList (record . get ( f ), null ).asArray ().get (0 ))
201
206
.map (Value ::asString ).collect (Collectors .joining (joinChar != null ? joinChar : " " )));
207
+ record .set (params .get (0 ), newValue );
202
208
}
203
209
204
210
private boolean literalString (final String s ) {
@@ -210,8 +216,7 @@ private boolean literalString(final String s) {
210
216
public void apply (final Metafix metafix , final Record record , final List <String > params , final Map <String , String > options ) {
211
217
final String field = params .get (0 );
212
218
final int max = getInteger (params , 1 );
213
-
214
- new FixPath (field ).replaceIn (record , String .valueOf (RANDOM .nextInt (max )));
219
+ record .set (field , new Value (String .valueOf (RANDOM .nextInt (max ))));
215
220
}
216
221
},
217
222
reject {
@@ -223,7 +228,7 @@ public void apply(final Metafix metafix, final Record record, final List<String>
223
228
remove_field {
224
229
@ Override
225
230
public void apply (final Metafix metafix , final Record record , final List <String > params , final Map <String , String > options ) {
226
- params .forEach (p -> new FixPath ( p ). removeNestedFrom ( record ));
231
+ params .forEach (p -> record . remove ( p ));
227
232
}
228
233
},
229
234
rename {
@@ -234,7 +239,7 @@ public void apply(final Metafix metafix, final Record record, final List<String>
234
239
235
240
final UnaryOperator <String > operator = s -> s .replaceAll (search , replace );
236
241
237
- new FixPath (params .get (0 )). transformIn ( record , (m , c ) -> m
242
+ record . transform (params .get (0 ), (m , c ) -> m
238
243
.ifArray (a -> c .accept (renameArray (a , operator )))
239
244
.ifHash (h -> c .accept (renameHash (h , operator )))
240
245
.orElseThrow ()
@@ -267,35 +272,22 @@ public void apply(final Metafix metafix, final Record record, final List<String>
267
272
@ Override
268
273
public void apply (final Metafix metafix , final Record record , final List <String > params , final Map <String , String > options ) {
269
274
final String field = params .get (0 );
270
- final List <String > toAdd = params .subList (1 , params .size ());
271
- if (field .endsWith (DOT_APPEND )) {
272
- record .addAll (field .replace (DOT_APPEND , EMPTY ), toAdd );
273
- }
274
- else {
275
- record .put (field , newArray (toAdd .stream ().map (Value ::new )));
276
- }
275
+ final Value newValue = newArray (params .subList (1 , params .size ()).stream ().map (Value ::new ));
276
+ record .set (field , newValue );
277
277
}
278
278
},
279
279
set_field {
280
280
@ Override
281
281
public void apply (final Metafix metafix , final Record record , final List <String > params , final Map <String , String > options ) {
282
- new FixPath (params .get (0 )). replaceIn ( record , params .get (1 ));
282
+ record . set (params .get (0 ), new Value ( params .get (1 ) ));
283
283
}
284
284
},
285
285
set_hash {
286
286
@ Override
287
287
public void apply (final Metafix metafix , final Record record , final List <String > params , final Map <String , String > options ) {
288
288
final String field = params .get (0 );
289
-
290
- final Value value = record .get (field .replace (DOT_APPEND , EMPTY ));
291
289
final Value newValue = Value .newHash (h -> options .forEach ((f , v ) -> h .put (f , new Value (v ))));
292
-
293
- if (field .endsWith (DOT_APPEND ) && value .isArray ()) {
294
- value .asArray ().add (newValue );
295
- }
296
- else {
297
- record .put (field , newValue );
298
- }
290
+ record .set (field , newValue );
299
291
}
300
292
},
301
293
vacuum {
@@ -313,19 +305,19 @@ public void apply(final Metafix metafix, final Record record, final List<String>
313
305
@ Override
314
306
public void apply (final Metafix metafix , final Record record , final List <String > params , final Map <String , String > options ) {
315
307
final String value = params .get (1 );
316
- new FixPath (params .get (0 )). transformIn ( record , s -> s + value );
308
+ record . transform (params .get (0 ), s -> s + value );
317
309
}
318
310
},
319
311
capitalize {
320
312
@ Override
321
313
public void apply (final Metafix metafix , final Record record , final List <String > params , final Map <String , String > options ) {
322
- new FixPath (params .get (0 )). transformIn ( record , s -> s .substring (0 , 1 ).toUpperCase () + s .substring (1 ));
314
+ record . transform (params .get (0 ), s -> s .substring (0 , 1 ).toUpperCase () + s .substring (1 ));
323
315
}
324
316
},
325
317
count {
326
318
@ Override
327
319
public void apply (final Metafix metafix , final Record record , final List <String > params , final Map <String , String > options ) {
328
- new FixPath (params .get (0 )). transformIn ( record , (m , c ) -> m
320
+ record . transform (params .get (0 ), (m , c ) -> m
329
321
.ifArray (a -> c .accept (new Value (a .size ())))
330
322
.ifHash (h -> c .accept (new Value (h .size ())))
331
323
);
@@ -334,7 +326,7 @@ public void apply(final Metafix metafix, final Record record, final List<String>
334
326
downcase {
335
327
@ Override
336
328
public void apply (final Metafix metafix , final Record record , final List <String > params , final Map <String , String > options ) {
337
- new FixPath (params .get (0 )). transformIn ( record , s -> s .toLowerCase ());
329
+ record . transform (params .get (0 ), s -> s .toLowerCase ());
338
330
}
339
331
},
340
332
filter {
@@ -345,7 +337,7 @@ public void apply(final Metafix metafix, final Record record, final List<String>
345
337
346
338
final Predicate <Value > predicate = s -> search .matcher (s .asString ()).find ();
347
339
348
- new FixPath (params .get (0 )). transformIn ( record , (m , c ) -> m
340
+ record . transform (params .get (0 ), (m , c ) -> m
349
341
.ifArray (a -> c .accept (newArray (a .stream ().filter (invert ? predicate .negate () : predicate ))))
350
342
);
351
343
}
@@ -354,14 +346,14 @@ public void apply(final Metafix metafix, final Record record, final List<String>
354
346
@ Override
355
347
public void apply (final Metafix metafix , final Record record , final List <String > params , final Map <String , String > options ) {
356
348
final String search = params .get (1 );
357
- new FixPath (params .get (0 )). transformIn ( record , s -> String .valueOf (s .indexOf (search ))); // TODO: multiple
349
+ record . transform (params .get (0 ), s -> String .valueOf (s .indexOf (search ))); // TODO: multiple
358
350
}
359
351
},
360
352
join_field {
361
353
@ Override
362
354
public void apply (final Metafix metafix , final Record record , final List <String > params , final Map <String , String > options ) {
363
355
final String joinChar = params .size () > 1 ? params .get (1 ) : "" ;
364
- new FixPath (params .get (0 )). transformIn ( record , (m , c ) -> m
356
+ record . transform (params .get (0 ), (m , c ) -> m
365
357
.ifArray (a -> c .accept (new Value (a .stream ().map (Value ::asString ).collect (Collectors .joining (joinChar )))))
366
358
);
367
359
}
@@ -390,14 +382,17 @@ public void apply(final Metafix metafix, final Record record, final List<String>
390
382
}
391
383
392
384
final String defaultValue = map .get (Maps .DEFAULT_MAP_KEY ); // TODO: Catmandu uses 'default'
393
- new FixPath (params .get (0 )).transformIn (record , k -> map .getOrDefault (k , defaultValue ));
385
+ record .transform (params .get (0 ), oldValue -> {
386
+ final String newValue = map .getOrDefault (oldValue , defaultValue );
387
+ return newValue != null ? newValue : getBoolean (options , "delete" ) ? null : oldValue ;
388
+ });
394
389
}
395
390
},
396
391
prepend {
397
392
@ Override
398
393
public void apply (final Metafix metafix , final Record record , final List <String > params , final Map <String , String > options ) {
399
394
final String value = params .get (1 );
400
- new FixPath (params .get (0 )). transformIn ( record , s -> value + s );
395
+ record . transform (params .get (0 ), s -> value + s );
401
396
}
402
397
},
403
398
replace_all {
@@ -406,13 +401,13 @@ public void apply(final Metafix metafix, final Record record, final List<String>
406
401
final String search = params .get (1 );
407
402
final String replace = params .get (2 );
408
403
409
- new FixPath (params .get (0 )). transformIn ( record , s -> s .replaceAll (search , replace ));
404
+ record . transform (params .get (0 ), s -> s .replaceAll (search , replace ));
410
405
}
411
406
},
412
407
reverse {
413
408
@ Override
414
409
public void apply (final Metafix metafix , final Record record , final List <String > params , final Map <String , String > options ) {
415
- new FixPath (params .get (0 )). transformIn ( record , (m , c ) -> m
410
+ record . transform (params .get (0 ), (m , c ) -> m
416
411
.ifArray (a -> {
417
412
final List <Value > list = a .stream ().collect (Collectors .toList ());
418
413
Collections .reverse (list );
@@ -433,7 +428,7 @@ public void apply(final Metafix metafix, final Record record, final List<String>
433
428
final Comparator <Value > comparator = numeric ?
434
429
Comparator .comparing (function .andThen (Integer ::parseInt )) : Comparator .comparing (function );
435
430
436
- new FixPath (params .get (0 )). transformIn ( record , (m , c ) -> m
431
+ record . transform (params .get (0 ), (m , c ) -> m
437
432
.ifArray (a -> c .accept (new Value ((uniq ? unique (a .stream ()) : a .stream ())
438
433
.sorted (reverse ? comparator .reversed () : comparator ).collect (Collectors .toList ()))))
439
434
);
@@ -448,7 +443,7 @@ public void apply(final Metafix metafix, final Record record, final List<String>
448
443
final Function <String , Value > splitFunction = s ->
449
444
newArray (Arrays .stream (splitPattern .split (s )).map (Value ::new ));
450
445
451
- new FixPath (params .get (0 )). transformIn ( record , (m , c ) -> m
446
+ record . transform (params .get (0 ), (m , c ) -> m
452
447
.ifArray (a -> c .accept (newArray (a .stream ().map (Value ::asString ).map (splitFunction ))))
453
448
.ifHash (h -> c .accept (Value .newHash (n -> h .forEach ((f , w ) -> n .put (f , splitFunction .apply (w .asString ()))))))
454
449
.ifString (s -> c .accept (splitFunction .apply (s )))
@@ -462,7 +457,7 @@ public void apply(final Metafix metafix, final Record record, final List<String>
462
457
final Integer end = params .size () > 2 ? offset + getInteger (params , 2 ) : null ;
463
458
// TODO: final String replacement = params.size() > 3 ? params.get(3) : null;
464
459
465
- new FixPath (params .get (0 )). transformIn ( record , s -> {
460
+ record . transform (params .get (0 ), s -> {
466
461
final int length = s .length ();
467
462
return offset > length ? s : end == null || end > length ? s .substring (offset ) : s .substring (offset , end );
468
463
});
@@ -471,37 +466,34 @@ public void apply(final Metafix metafix, final Record record, final List<String>
471
466
sum {
472
467
@ Override
473
468
public void apply (final Metafix metafix , final Record record , final List <String > params , final Map <String , String > options ) {
474
- new FixPath (params .get (0 )). transformIn ( record , (m , c ) -> m
469
+ record . transform (params .get (0 ), (m , c ) -> m
475
470
.ifArray (a -> c .accept (new Value (a .stream ().map (Value ::asString ).mapToInt (Integer ::parseInt ).sum ())))
476
471
);
477
472
}
478
473
},
479
474
trim {
480
475
@ Override
481
476
public void apply (final Metafix metafix , final Record record , final List <String > params , final Map <String , String > options ) {
482
- new FixPath (params .get (0 )). transformIn ( record , String ::trim );
477
+ record . transform (params .get (0 ), String ::trim );
483
478
}
484
479
},
485
480
uniq {
486
481
@ Override
487
482
public void apply (final Metafix metafix , final Record record , final List <String > params , final Map <String , String > options ) {
488
- new FixPath (params .get (0 )). transformIn ( record , (m , c ) -> m
483
+ record . transform (params .get (0 ), (m , c ) -> m
489
484
.ifArray (a -> c .accept (newArray (unique (a .stream ()))))
490
485
);
491
486
}
492
487
},
493
488
upcase {
494
489
@ Override
495
490
public void apply (final Metafix metafix , final Record record , final List <String > params , final Map <String , String > options ) {
496
- new FixPath (params .get (0 )). transformIn ( record , s -> s .toUpperCase ());
491
+ record . transform (params .get (0 ), s -> s .toUpperCase ());
497
492
}
498
493
};
499
494
500
495
private static final Pattern NAMED_GROUP_PATTERN = Pattern .compile ("\\ (\\ ?<(.+?)>" );
501
496
502
- private static final String EMPTY = "" ;
503
- private static final String DOT_APPEND = "." + Value .ReservedField .$append .name ();
504
-
505
497
private static final String FILEMAP_SEPARATOR_OPTION = "sep_char" ;
506
498
private static final String FILEMAP_DEFAULT_SEPARATOR = "," ;
507
499
0 commit comments