dnet-hadoop/dhp-workflows/dhp-enrichment/src/main/java/eu/dnetlib/dhp/bulktag/criteria/VerbResolver.java

57 lines
1.7 KiB
Java
Raw Normal View History

2020-04-30 11:05:17 +02:00
package eu.dnetlib.dhp.bulktag.criteria;
2020-03-03 16:38:50 +01:00
import java.io.Serializable;
import java.lang.reflect.InvocationTargetException;
import java.util.Map;
import java.util.stream.Collectors;
2020-05-11 17:38:08 +02:00
import io.github.classgraph.ClassGraph;
import io.github.classgraph.ClassInfo;
import io.github.classgraph.ClassInfoList;
import io.github.classgraph.ScanResult;
2020-03-03 16:38:50 +01:00
public class VerbResolver implements Serializable {
2020-04-30 11:05:17 +02:00
private Map<String, Class<Selection>> map = null; // = new HashMap<>();
private final ClassGraph classgraph = new ClassGraph();
public VerbResolver() {
try (ScanResult scanResult = // Assign scanResult in try-with-resources
classgraph // Create a new ClassGraph instance
.verbose() // If you want to enable logging to stderr
.enableAllInfo() // Scan classes, methods, fields, annotations
.whitelistPackages(
"eu.dnetlib.dhp.bulktag.criteria") // Scan com.xyz and subpackages
2020-04-30 11:05:17 +02:00
.scan()) { // Perform the scan and return a ScanResult
ClassInfoList routeClassInfoList = scanResult
.getClassesWithAnnotation(
"eu.dnetlib.dhp.bulktag.criteria.VerbClass");
2020-04-30 11:05:17 +02:00
this.map = routeClassInfoList
.stream()
.collect(
Collectors
.toMap(
2020-05-22 15:38:50 +02:00
value -> (String) value
2020-04-30 11:05:17 +02:00
.getAnnotationInfo()
.get(0)
.getParameterValues()
.get(0)
.getValue(),
2021-05-14 10:58:12 +02:00
value -> (Class<Selection>) value.loadClass()));
2020-04-30 11:05:17 +02:00
} catch (Exception e) {
e.printStackTrace();
}
}
public Selection getSelectionCriteria(String name, String param)
throws NoSuchMethodException, IllegalAccessException, InvocationTargetException,
InstantiationException {
// return Class.forName(tmp_map.get(name)).
return map.get(name).getDeclaredConstructor((String.class)).newInstance(param);
}
2020-04-21 18:00:53 +02:00
}