dnet-core/dnet-data-services/src/main/java/eu/dnetlib/data/utility/cleaner/inspector/CleanerInspector.java

92 lines
2.7 KiB
Java

package eu.dnetlib.data.utility.cleaner.inspector;
import java.util.List;
import javax.annotation.Resource;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import com.google.common.collect.Lists;
import eu.dnetlib.data.utility.cleaner.CleaningRule;
import eu.dnetlib.data.utility.cleaner.CleaningRuleFactory;
import eu.dnetlib.data.utility.cleaner.rmi.CleanerException;
import eu.dnetlib.enabling.inspector.AbstractInspectorController;
import eu.dnetlib.miscutils.collections.MappedCollection;
import eu.dnetlib.miscutils.functional.UnaryFunction;
@Controller
public class CleanerInspector extends AbstractInspectorController {
@Resource
private CleaningRuleFactory cleaningRuleFactory;
public static class SelectOption {
private String value;
private boolean selected;
public SelectOption(final String value, final boolean selected) {
super();
this.value = value;
this.selected = selected;
}
public String getValue() {
return value;
}
public void setValue(final String value) {
this.value = value;
}
public boolean isSelected() {
return selected;
}
public void setSelected(final boolean selected) {
this.selected = selected;
}
}
@RequestMapping(value = "/inspector/cleaner.do")
public void cleaner(final Model model,
@RequestParam(value = "rule", required = false) final String ruleId,
@RequestParam(value = "dirtyText", required = false) final String dirtyText) throws CleanerException {
List<String> rules = Lists.newArrayList(cleaningRuleFactory.getRuleIds());
model.addAttribute("rules", selectOptions(rules, ruleId));
if ((ruleId != null) && (dirtyText != null)) {
CleaningRule rule = cleaningRuleFactory.obtainCleaningRule(ruleId);
model.addAttribute("dirtyText", dirtyText);
model.addAttribute("cleanedText", rule.evaluate(dirtyText));
}
}
/**
* Given an list of values, return a list of SelectOption instances which have the "selected" boolean field set to true only for the
* element matching "current".
*
* @param input
* list of input strings
* @param current
* current value to select
* @return
*/
private List<SelectOption> selectOptions(final List<String> input, final String current) {
final UnaryFunction<SelectOption, String> mapper = new UnaryFunction<SelectOption, String>() {
@Override
public SelectOption evaluate(final String value) {
return new SelectOption(value, value.equals(current));
}
};
return Lists.newArrayList(new MappedCollection<SelectOption, String>(input, mapper));
}
}