17
17
package org .metafacture .metafix ;
18
18
19
19
import org .metafacture .metafix .api .FixFunction ;
20
+ import org .metafacture .metafix .maps .RdfMap ;
20
21
import org .metafacture .metamorph .api .Maps ;
21
22
import org .metafacture .metamorph .functions .ISBN ;
22
23
import org .metafacture .metamorph .functions .Timestamp ;
@@ -92,6 +93,24 @@ public void apply(final Metafix metafix, final Record record, final List<String>
92
93
metafix .putMap (params .get (0 ), options );
93
94
}
94
95
},
96
+ put_rdfmap {
97
+ @ Override
98
+ public void apply (final Metafix metafix , final Record record , final List <String > params , final Map <String , String > options ) {
99
+ final String fileName = params .get (0 );
100
+ final RdfMap rdf = new RdfMap ();
101
+ rdf .setFile (metafix .resolvePath (fileName ));
102
+ if (options .containsKey ("target_language" )) {
103
+ rdf .setTargetLanguage (options .get ("target_language" ));
104
+ }
105
+ if (options .containsKey ("target" )) {
106
+ rdf .setTarget (options .get ("target" ));
107
+ }
108
+ if (options .containsKey (Maps .DEFAULT_MAP_KEY )) {
109
+ rdf .setDefault (options .get (Maps .DEFAULT_MAP_KEY ));
110
+ }
111
+ metafix .putMap (params .size () > 1 ? params .get (1 ) : fileName , rdf );
112
+ }
113
+ },
95
114
put_var {
96
115
@ Override
97
116
public void apply (final Metafix metafix , final Record record , final List <String > params , final Map <String , String > options ) {
@@ -470,6 +489,7 @@ public void apply(final Metafix metafix, final Record record, final List<String>
470
489
471
490
@ Override
472
491
public void apply (final Metafix metafix , final Record record , final List <String > params , final Map <String , String > options ) {
492
+ <<<<<<< HEAD
473
493
final Map <String , String > map ;
474
494
475
495
if (params .size () <= 1 ) {
@@ -517,6 +537,16 @@ public void apply(final Metafix metafix, final Record record, final List<String>
517
537
}
518
538
}
519
539
},
540
+ lookup_rdf {
541
+ @ Override
542
+ public void apply (final Metafix metafix , final Record record , final List <String > params , final Map <String , String > options ) {
543
+ final Map <String , String > map = extracted (metafix , record , params , options , KIND_OF_RDFMAP );
544
+ record .transform (params .get (0 ), oldValue -> {
545
+ final String newValue = map .get (oldValue );
546
+ return newValue != null ? newValue : getBoolean (options , "delete" ) ? null : oldValue ;
547
+ });
548
+ }
549
+ },
520
550
prepend {
521
551
@ Override
522
552
public void apply (final Metafix metafix , final Record record , final List <String > params , final Map <String , String > options ) {
@@ -639,6 +669,8 @@ public void apply(final Metafix metafix, final Record record, final List<String>
639
669
}
640
670
};
641
671
672
+ public static final String KIND_OF_RDFMAP = "rdfmap" ;
673
+ public static final String KIND_OF_FILEMAP = "filemap" ;
642
674
private static final Pattern NAMED_GROUP_PATTERN = Pattern .compile ("\\ (\\ ?<(.+?)>" );
643
675
644
676
private static final String FILEMAP_SEPARATOR_OPTION = "sep_char" ;
@@ -647,5 +679,33 @@ public void apply(final Metafix metafix, final Record record, final List<String>
647
679
private static final String ERROR_STRING_OPTION = "error_string" ;
648
680
649
681
private static final Random RANDOM = new Random ();
682
+ private static String defaultValue ;
683
+
684
+ private static Map <String , String > extracted (final Metafix metafix , final Record record , final List <String > params , final Map <String , String > options , final String kindOfMap ) {
685
+ final Map <String , String > map ;
686
+ if (params .size () <= 1 ) {
687
+ map = options ;
688
+ }
689
+ else {
690
+ final String mapName = params .get (1 );
691
+
692
+ if (!metafix .getMapNames ().contains (mapName )) {
693
+ if (mapName .contains ("." ) || mapName .contains (File .separator )) {
694
+ if (kindOfMap .equals (KIND_OF_FILEMAP )) {
695
+ put_filemap .apply (metafix , record , Arrays .asList (mapName ), options );
696
+ }
697
+ if (kindOfMap .equals (KIND_OF_RDFMAP )) {
698
+ put_rdfmap .apply (metafix , record , Arrays .asList (mapName ), options );
699
+ }
700
+ }
701
+ else {
702
+ // Probably an unknown internal map? Log a warning?
703
+ }
704
+ }
705
+ map = metafix .getMap (mapName );
706
+ }
707
+ defaultValue = map .get (Maps .DEFAULT_MAP_KEY ); // TODO: Catmandu uses 'default'
708
+ return map ;
709
+ }
650
710
651
711
}
0 commit comments