Skip to content

Commit 94ae82a

Browse files
committed
Extract lookup into FixFunction (metafacture-core#415)
1 parent c3418a4 commit 94ae82a

File tree

2 files changed

+48
-46
lines changed

2 files changed

+48
-46
lines changed

metafix/src/main/java/org/metafacture/metafix/FixMethod.java

Lines changed: 16 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,14 @@
2323
import org.metafacture.metamorph.functions.Timestamp;
2424
import org.metafacture.metamorph.maps.FileMap;
2525

26-
import java.io.File;
2726
import java.io.IOException;
2827
import java.util.Arrays;
2928
import java.util.Collections;
3029
import java.util.Comparator;
3130
import java.util.HashMap;
3231
import java.util.List;
3332
import java.util.Map;
33+
import java.util.Optional;
3434
import java.util.Random;
3535
import java.util.concurrent.atomic.LongAdder;
3636
import java.util.function.Consumer;
@@ -96,14 +96,19 @@ public void apply(final Metafix metafix, final Record record, final List<String>
9696
put_rdfmap {
9797
@Override
9898
public void apply(final Metafix metafix, final Record record, final List<String> params, final Map<String, String> options) {
99-
final String resourceName = params.get(0);
100-
final RdfMap rdf = new RdfMap();
101-
rdf.setResource(metafix.resolvePath(resourceName));
102-
withOption(options, RdfMap.TARGET, rdf::setTarget);
103-
withOption(options, RdfMap.TARGET_LANGUAGE, rdf::setTargetLanguage);
104-
withOption(options, Maps.DEFAULT_MAP_KEY, rdf::setDefault);
105-
final String mapName = (params.size() > 1 ? params.get(1) : params.get(0)) + options.get(RdfMap.TARGET) + options.getOrDefault(RdfMap.TARGET_LANGUAGE, "");
106-
metafix.putMap(mapName, rdf);
99+
final String rdfMapName = params.size() == 1 ? params.get(0) : params.get(1) + options.get(RdfMap.TARGET) + options.getOrDefault(RdfMap.TARGET_LANGUAGE, "");
100+
final String replaceTargets = options.get(RdfMap.TARGET) + options.getOrDefault(RdfMap.TARGET_LANGUAGE, "");
101+
final String resourceName = Optional.ofNullable(params.get(0))
102+
.map(str -> str.replaceAll(replaceTargets + "$", ""))
103+
.orElse(params.get(0));
104+
final RdfMap rdfMap = new RdfMap();
105+
106+
rdfMap.setResource(metafix.resolvePath(resourceName));
107+
withOption(options, RdfMap.TARGET, rdfMap::setTarget);
108+
withOption(options, RdfMap.TARGET_LANGUAGE, rdfMap::setTargetLanguage);
109+
withOption(options, Maps.DEFAULT_MAP_KEY, rdfMap::setDefault);
110+
111+
metafix.putMap(rdfMapName, rdfMap);
107112
}
108113
},
109114
put_var {
@@ -484,6 +489,7 @@ public void apply(final Metafix metafix, final Record record, final List<String>
484489

485490
@Override
486491
public void apply(final Metafix metafix, final Record record, final List<String> params, final Map<String, String> options) {
492+
<<<<<<< HEAD
487493
final Map<String, String> map;
488494

489495
if (params.size() <= 1) {
@@ -534,11 +540,7 @@ public void apply(final Metafix metafix, final Record record, final List<String>
534540
lookup_rdf {
535541
@Override
536542
public void apply(final Metafix metafix, final Record record, final List<String> params, final Map<String, String> options) {
537-
final Map<String, String> map = getMap(metafix, record, params, options, KIND_OF_RDFMAP);
538-
record.transform(params.get(0), oldValue -> {
539-
final String newValue = map.getOrDefault(oldValue, map.get(Maps.DEFAULT_MAP_KEY));
540-
return newValue != null ? newValue : getBoolean(options, "delete") ? null : oldValue;
541-
});
543+
lookup(metafix, record, params, options, put_rdfmap);
542544
}
543545
},
544546
prepend {
@@ -663,8 +665,6 @@ public void apply(final Metafix metafix, final Record record, final List<String>
663665
}
664666
};
665667

666-
public static final String KIND_OF_RDFMAP = "rdfmap";
667-
public static final String KIND_OF_FILEMAP = "filemap";
668668
private static final Pattern NAMED_GROUP_PATTERN = Pattern.compile("\\(\\?<(.+?)>");
669669

670670
private static final String FILEMAP_SEPARATOR_OPTION = "sep_char";
@@ -674,35 +674,5 @@ public void apply(final Metafix metafix, final Record record, final List<String>
674674

675675
private static final Random RANDOM = new Random();
676676

677-
private static Map<String, String> getMap(final Metafix metafix, final Record record, final List<String> params, final Map<String, String> options, final String kindOfMap) {
678-
final Map<String, String> map;
679-
if (params.size() <= 1) {
680-
map = options;
681-
}
682-
else {
683-
final String mapName;
684-
if (kindOfMap.equals(KIND_OF_FILEMAP)) {
685-
mapName = params.get(1);
686-
}
687-
else {
688-
mapName = params.get(1) + options.get(RdfMap.TARGET) + options.getOrDefault(RdfMap.TARGET_LANGUAGE, "");
689-
}
690-
if (!metafix.getMapNames().contains(mapName)) {
691-
if (mapName.contains(".") || mapName.contains(File.separator)) {
692-
if (kindOfMap.equals(KIND_OF_FILEMAP)) {
693-
put_filemap.apply(metafix, record, Arrays.asList(mapName), options);
694-
}
695-
if (kindOfMap.equals(KIND_OF_RDFMAP)) {
696-
put_rdfmap.apply(metafix, record, Arrays.asList(params.get(1)), options);
697-
}
698-
}
699-
else {
700-
// Probably an unknown internal map? Log a warning?
701-
}
702-
}
703-
map = metafix.getMap(mapName);
704-
}
705-
return map;
706-
}
707677

708678
}

metafix/src/main/java/org/metafacture/metafix/api/FixFunction.java

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,11 @@
2121
import org.metafacture.metafix.Metafix;
2222
import org.metafacture.metafix.Record;
2323
import org.metafacture.metafix.Value;
24+
import org.metafacture.metafix.maps.RdfMap;
25+
import org.metafacture.metamorph.api.Maps;
2426

27+
import java.io.File;
28+
import java.util.Arrays;
2529
import java.util.HashSet;
2630
import java.util.List;
2731
import java.util.Map;
@@ -107,4 +111,32 @@ default Stream<Value> flatten(final Stream<Value> stream) {
107111
));
108112
}
109113

114+
default void lookup(final Metafix metafix, final Record record, final List<String> params, final Map<String, String> options, final FixFunction kindOfMap) {
115+
final Map<String, String> map = getMap(metafix, record, params, options, kindOfMap);
116+
record.transform(params.get(0), oldValue -> {
117+
final String newValue = map.getOrDefault(oldValue, map.get(Maps.DEFAULT_MAP_KEY));
118+
return newValue != null ? newValue : getBoolean(options, "delete") ? null : oldValue;
119+
});
120+
}
121+
122+
static Map<String, String> getMap(final Metafix metafix, final Record record, final List<String> params, final Map<String, String> options, final FixFunction kindOfMap) {
123+
final Map<String, String> map;
124+
if (params.size() <= 1) {
125+
map = options;
126+
}
127+
else {
128+
final String mapName = kindOfMap.toString().equals("put_rdfmap") ? (params.size() > 1 ? params.get(1) : params.get(0)) + options.get(RdfMap.TARGET) + options.getOrDefault(RdfMap.TARGET_LANGUAGE, "") : params.get(1);
129+
if (!metafix.getMapNames().contains(mapName)) {
130+
if (mapName.contains(".") || mapName.contains(File.separator)) {
131+
kindOfMap.apply(metafix, record, Arrays.asList(mapName), options);
132+
}
133+
else {
134+
// Probably an unknown internal map? Log a warning?
135+
}
136+
}
137+
map = metafix.getMap(mapName);
138+
}
139+
return map;
140+
}
141+
110142
}

0 commit comments

Comments
 (0)