package org.genedb.db.taxon; import org.apache.log4j.Logger; import org.springframework.format.Formatter; import org.springframework.util.StringUtils; import java.text.ParseException; import java.util.Locale; public class TaxonNodeListFormatter implements Formatter<TaxonNodeList> { private Logger logger = Logger.getLogger(TaxonNodeListFormatter.class); private TaxonNodeManager taxonNodeManager; @Override public String print(TaxonNodeList nodeList, Locale locale) { StringBuilder builder = new StringBuilder(); boolean first = true; for (TaxonNode node : nodeList.getNodes()) { if (!first) { builder.append(":"); } builder.append(node.getLabel()); logger.debug(node.getLabel()); first = false; } return builder.toString(); } @Override public TaxonNodeList parse(String text, Locale locale) throws ParseException { System.err.println("The input text is '"+text+"'"); logger.error("The input text is '"+text+"'"); if (! StringUtils.hasText(text)) { logger.error("Returning root"); return new TaxonNodeList(taxonNodeManager.getTaxonNodeByString("Root", false)); } logger.debug("Getting the taxonNodeList"); String[] parts = text.split(":"); TaxonNodeList nodeList = new TaxonNodeList(); for (String part : parts) { TaxonNode node = taxonNodeManager.getTaxonNodeByString(part, true); if (node == null) { throw new IllegalArgumentException("Can't parse '"+part+"' as a organism identifier"); } logger.error("Adding node of '"+node+"'"); nodeList.add(node); logger.debug(node); } return nodeList; } public void setTaxonNodeManager(TaxonNodeManager taxonNodeManager) { this.taxonNodeManager = taxonNodeManager; } }