package eu.dnetlib.pace.config; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import eu.dnetlib.pace.condition.ConditionAlgo; import eu.dnetlib.pace.model.ClusteringDef; import eu.dnetlib.pace.model.CondDef; import eu.dnetlib.pace.model.FieldDef; import eu.dnetlib.pace.util.PaceResolver; import org.apache.commons.collections.CollectionUtils; import org.codehaus.jackson.annotate.JsonIgnore; import java.io.Serializable; import java.util.List; import java.util.Map; import java.util.stream.Collectors; public class PaceConfig implements Serializable { private List model; private List strictConditions; private List conditions; private List clustering; private Map> blacklists; private Map> synonyms; @JsonIgnore private Map translationMap; @JsonIgnore private Map modelMap; @JsonIgnore public static PaceResolver resolver = new PaceResolver(); public PaceConfig() {} public void initModel() { modelMap = Maps.newHashMap(); for (FieldDef fd : getModel()) { modelMap.put(fd.getName(), fd); } } public void initTranslationMap(){ translationMap = Maps.newHashMap(); for (String key : synonyms.keySet()) { for (String term : synonyms.get(key)){ translationMap.put(term.toLowerCase(), key); } } } public Map translationMap(){ return translationMap; } public List getModel() { return model; } public void setModel(final List model) { this.model = model; } public List getStrictConditions() { return strictConditions; } public void setStrictConditions(final List strictConditions) { this.strictConditions = strictConditions; } public List getConditions() { return conditions; } @JsonIgnore public List getConditionAlgos() { return asConditionAlgos(getConditions()); } @JsonIgnore public List getStrictConditionAlgos() { return asConditionAlgos(getStrictConditions()); } public void setConditions(final List conditions) { this.conditions = conditions; } public List getClustering() { return clustering; } public void setClustering(final List clustering) { this.clustering = clustering; } public Map> getBlacklists() { return blacklists; } public void setBlacklists(final Map> blacklists) { this.blacklists = blacklists; } public Map> getSynonyms() { return synonyms; } public void setSynonyms(Map> synonyms) { this.synonyms = synonyms; } public Map getModelMap() { return modelMap; } public void setModelMap(final Map modelMap) { this.modelMap = modelMap; } // helper private List asConditionAlgos(final List defs) { final List algos = Lists.newArrayList(); if (CollectionUtils.isEmpty(defs)) return algos; for (final CondDef cd : defs) { final List fields = getModel().stream() .filter(fd -> cd.getFields().contains(fd.getName())) .collect(Collectors.toList()); algos.add(cd.conditionAlgo(fields)); } return algos; } }