/**
*
*/
package org.inbio.m3s.web.converter;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.lang.StringUtils;
import org.inbio.m3s.dto.taxonomy.TaxonLiteDTO;
import org.inbio.m3s.service.TaxonomyManager;
/**
* The simple data for the taxon case is this way:
*
* Scientific Name1 [Kingdom NameX];Scientific Name2 [Kingdom NameY]; ... Scientific NameN [Kingdom NameZ];
*
* where:
* - N as an integer (we hope the taxons list is a finite number ;))
* - X,Y and Z could be what ever kingdom.
*
* In a general way, one scientific name with the corresponding Kingdom name
*
*
* @author jgutierrez
*
*/
public class TaxonGuiOrDTOConverter implements GuiOrDTOConverter<TaxonLiteDTO> {
private TaxonomyManager taxonomyManager;
/*
*
* @param simpleData: should be something with the format 'Scientific Name [Kingdom Name]'
*
* (non-Javadoc)
* @see org.inbio.m3s.web.converter.GuiOrDTOConverter#toDTO(java.lang.String)
*/
public TaxonLiteDTO toDTO(String simpleData) {
String kingdomName = StringUtils.substringBetween(simpleData, "[", "]");
String taxonName = StringUtils.substringBefore(simpleData, "[");
TaxonLiteDTO tlDTO = taxonomyManager.getTaxonLite(taxonName.trim(), kingdomName.trim());
return taxonomyManager.setKingdomName(tlDTO);
}
/*
* The main goal of this method should be to create tokens with the simpleData into more simpler
* data chunks that should be pack in a DTO using the toDTO method.
*
* (non-Javadoc)
* @see org.inbio.m3s.web.converter.GuiOrDTOConverter#toDTOList(java.lang.String)
*/
public List<TaxonLiteDTO> toDTOList(String simpleData) {
List<TaxonLiteDTO> taxonLiteDTOList = new ArrayList<TaxonLiteDTO>();
TaxonLiteDTO tlDTO;
if(simpleData != null && simpleData != "" ){
String[] tokens = StringUtils.split(simpleData, ';');
for(String token : tokens){
tlDTO = toDTO(token);
taxonLiteDTOList.add(tlDTO);
}
}
return taxonLiteDTOList;
}
/*
* (non-Javadoc)
* @see org.inbio.m3s.web.converter.GuiOrDTOConverter#toString(java.util.List)
*/
public String toString(List<TaxonLiteDTO> dtoList) {
String simpleData ="";
if(dtoList!=null && dtoList.size()>0){
//no kingdom names...
if(dtoList.get(0).getKingdomName() == null)
dtoList = taxonomyManager.setKingdomName(dtoList);
for(TaxonLiteDTO tlDTO : dtoList)
simpleData += tlDTO.getDefaultName()+" ["+tlDTO.getKingdomName()+"];";
}
return simpleData;
}
/**
* @return the taxonomyManager
*/
public TaxonomyManager getTaxonomyManager() {
return taxonomyManager;
}
/**
* @param taxonomyManager the taxonomyManager to set
*/
public void setTaxonomyManager(TaxonomyManager taxonomyManager) {
this.taxonomyManager = taxonomyManager;
}
}