package org.gcube.portlets.user.speciesdiscovery.server.service; import java.util.ArrayList; import java.util.List; import org.apache.log4j.Logger; import org.gcube.application.framework.core.session.ASLSession; import org.gcube.data.spd.model.TaxonomyItem; import org.gcube.data.spd.model.util.ElementProperty; import org.gcube.portlets.user.speciesdiscovery.client.ConstantsSpeciesDiscovery; import org.gcube.portlets.user.speciesdiscovery.server.TaxonomySearchServiceImpl; import org.gcube.portlets.user.speciesdiscovery.server.stream.Converter; import org.gcube.portlets.user.speciesdiscovery.shared.CommonName; import org.gcube.portlets.user.speciesdiscovery.shared.ItemParameter; import org.gcube.portlets.user.speciesdiscovery.shared.TaxonomyRow; import org.gcube.portlets.user.speciesdiscovery.shared.util.NormalizeString; /** * * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it * */ public class TaxonomyItemConverter implements Converter { protected Logger logger = Logger.getLogger(TaxonomyItemConverter.class); protected int id = 0; private ASLSession session; /** * @param dataProviderId */ public TaxonomyItemConverter(ASLSession session) { this.session = session; } @Override public TaxonomyRow convert(TaxonomyItem input) throws Exception { TaxonomyRow taxonomy = createTaxonomyRow(input); //SET PARENTS taxonomy.setParent(convertParentsTaxonomy(input)); //SET BASE TAXON taxonomy.setBaseTaxonValue(NormalizeString.lowerCaseUpFirstChar(getTaxonomyValue(TaxonomySearchServiceImpl.BASETAXONOMY,taxonomy))); // System.out.println("#############################PARENT ID: " + taxonomy.getParent().getId()); if(taxonomy.getParents()!=null && taxonomy.getParents().size()>0) taxonomy.setParentID(""+taxonomy.getParents().get(0).getId()); return taxonomy; } protected TaxonomyRow createTaxonomyRow(TaxonomyItem input) throws Exception{ TaxonomyRow tax = new TaxonomyRow(id++); //Retrieve Properties List listProperties = input.getProperties(); //Fill properties if(listProperties!=null){ for (ElementProperty elementProperty : listProperties) tax.getProperties().add(new ItemParameter(elementProperty.getName(), elementProperty.getValue())); tax.setExistsProperties(true); } if(input.getId()!=null){ tax.setServiceId(input.getId()); } if(input.getAuthor()!=null && !input.getAuthor().isEmpty()){ tax.setAuthor(input.getAuthor()); } else tax.setAuthor(ConstantsSpeciesDiscovery.NOT_FOUND); if(input.getCredits()!=null && !input.getCredits().isEmpty()){ tax.setCredits(input.getCredits()); } else tax.setCredits(ConstantsSpeciesDiscovery.NOT_FOUND); if(input.getLsid()!=null && !input.getLsid().isEmpty()){ tax.setLsid(input.getLsid()); } else tax.setLsid(ConstantsSpeciesDiscovery.NOT_FOUND); if(input.getProvider()!=null && !input.getProvider().isEmpty()){ tax.setDataProviderId(input.getProvider()); tax.setDataProviderName(input.getProvider()); }else{ tax.setDataProviderId(ConstantsSpeciesDiscovery.NOT_FOUND); tax.setDataProviderName(ConstantsSpeciesDiscovery.NOT_FOUND); } if(input.getCitation()!=null && !input.getCitation().isEmpty()){ tax.setDataSetCitation(input.getCitation()); }else{ tax.setDataSetCitation(ConstantsSpeciesDiscovery.NOT_FOUND); } if(input.getRank()!=null && !input.getRank().isEmpty()){ tax.setRank(NormalizeString.lowerCaseUpFirstChar(input.getRank())); }else{ tax.setRank(ConstantsSpeciesDiscovery.NOT_FOUND); } if(input.getScientificName()!=null && !input.getScientificName().isEmpty()){ tax.setName(input.getScientificName()); }else{ tax.setName(ConstantsSpeciesDiscovery.NOT_FOUND); } if(input.getStatus()!=null){ if(input.getStatus().getRefId()!=null && !input.getStatus().getRefId().isEmpty()){ tax.setStatusRefId(input.getStatus().getRefId()); }else{ tax.setStatusRefId(""); } if(input.getStatus().getStatusAsString()!=null && !input.getStatus().getStatusAsString().isEmpty()){ tax.setStatusRemarks(input.getStatus().getStatusAsString()); }else{ tax.setStatusRemarks(ConstantsSpeciesDiscovery.NOT_FOUND); } if(input.getStatus().getStatus()!=null){ if(input.getStatus().getStatus().name()!=null && !input.getStatus().getStatus().name().isEmpty()){ tax.setStatusName(input.getStatus().getStatus().name()); }else{ tax.setStatusName(ConstantsSpeciesDiscovery.NOT_FOUND); } } } if(input.getModified()!=null){ tax.setDateModified(input.getModified().getTime().toString()); } if(input.getCommonNames()!=null){ for (org.gcube.data.spd.model.CommonName commonName : input.getCommonNames()){ CommonName com = new CommonName(commonName.getName(), commonName.getLanguage(), tax.getId()); // DaoSession.createOrUpdateCommonName(com, session); tax.getCommonNames().add(com); tax.setExistsCommonName(true); } } // System.out.println("convert completed: " +tax); return tax; } private String getTaxonomyValue(String rank, TaxonomyRow taxon){ List listTaxonomy = taxon.getParents(); for (TaxonomyRow taxonomyRow : listTaxonomy) { if(taxonomyRow.getRank().compareToIgnoreCase(rank)==0) return taxonomyRow.getName(); } return TaxonomySearchServiceImpl.TAXONOMYUNKNOWN; } protected List convertParentsTaxonomy(TaxonomyItem taxon) throws Exception { if (taxon == null) return null; List listTaxonomy = new ArrayList(); TaxonomyItem parent = taxon.getParent(); while(parent!=null){ TaxonomyRow row = createTaxonomyRow(parent); row.setParent(true); listTaxonomy.add(row); parent = parent.getParent(); } return listTaxonomy; } }