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.tree.support.TreeNodeDef; 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 sufficientConditions; private List necessaryConditions; private List clustering; private Map decisionTree; private Map> blacklists; @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 List getModel() { return model; } public void setModel(final List model) { this.model = model; } public List getSufficientConditions() { return sufficientConditions; } public void setSufficientConditions(final List sufficientConditions) { this.sufficientConditions = sufficientConditions; } public List getNecessaryConditions() { return necessaryConditions; } @JsonIgnore public List getConditionAlgos() { return asConditionAlgos(getNecessaryConditions()); } @JsonIgnore public List getStrictConditionAlgos() { return asConditionAlgos(getSufficientConditions()); } public void setNecessaryConditions(final List necessaryConditions) { this.necessaryConditions = necessaryConditions; } public List getClustering() { return clustering; } public void setClustering(final List clustering) { this.clustering = clustering; } public Map getDecisionTree() { return decisionTree; } public void setDecisionTree(Map decisionTree) { this.decisionTree = decisionTree; } public Map> getBlacklists() { return blacklists; } public void setBlacklists(final Map> blacklists) { this.blacklists = blacklists; } 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; } }