package uni.projecte.dataLayer.utils; import android.util.Log; import android.util.Pair; import uni.projecte.dataLayer.ThesaurusManager.ThesaurusElement; import uni.projecte.dataTypes.TaxonElement; public class TaxonUtils { public static String removeAuthors(String taxon){ String[] splittedTaxon=taxon.split(" "); if(splittedTaxon.length>=2){ String genus=splittedTaxon[0]; String specie=splittedTaxon[1]; int rankPos=containsSubEpitet(taxon); if(rankPos>-1){ String sub=taxon.substring(rankPos); String[] split=sub.split(" "); if(split.length>=2) return genus+" "+specie+" "+split[1]; else return genus+" "+specie; } else return genus+" "+specie; } else return taxon; } private static int containsSubEpitet(String taxon) { int i=taxon.indexOf("subsp."); if(i<0){ i=taxon.indexOf("form."); if(i<0){ i=taxon.indexOf("var."); if(i<0){ return -1; } else{ return i+4; } } else{ return i+5; } } else{ return i+6; } // if(taxon.contains("subsp.") || taxon.contains("form.") || taxon.contains("var.") || taxon.contains("subvar.") ) return true; // else return false; } private static Pair<Integer, Integer> rankPosition(String taxon) { int i=taxon.indexOf("subsp."); if(i<0){ i=taxon.indexOf("form."); if(i<0){ i=taxon.indexOf("var."); if(i<0){ return new Pair<Integer,Integer>(-1, -1); } else{ return new Pair<Integer,Integer>(i, 4); } } else{ return new Pair<Integer,Integer>(i, 5); } } else{ return new Pair<Integer,Integer>(i, 6); } // if(taxon.contains("subsp.") || taxon.contains("form.") || taxon.contains("var.") || taxon.contains("subvar.") ) return true; // else return false; } public static TaxonElement mapThesaurusElement(String taxonName) { //genus, specificEpitet, specificEpitetAuthor, [ {rank: subsp., form., var. } infraSpecEpitet, infraSpecEpitetAuthor ] if(taxonName!=null) taxonName=taxonName.trim(); //Log.i("Thesaurus","MapTh: "+taxonName); String genus=""; String specificEpithet=""; String specificEpithetAuthor=""; String rank=""; String infraspecEpithet=""; String infraspecEpithetAuthor=""; String[] taxonSplitet=taxonName.split(" "); if(taxonSplitet.length>0) { genus=taxonSplitet[0]; if(taxonSplitet.length>1){ specificEpithet=taxonSplitet[1]; if(taxonSplitet.length>2){ Pair<Integer,Integer> subEpPos=rankPosition(taxonName); if(subEpPos.first<0){ specificEpithetAuthor=taxonName.substring(taxonName.indexOf(taxonSplitet[2])); } else{ //No specific Epithet Autor if(taxonName.indexOf(taxonSplitet[2])>=subEpPos.first-1){ specificEpithetAuthor=""; } else{ specificEpithetAuthor=taxonName.substring(taxonName.indexOf(taxonSplitet[2]),subEpPos.first-1); } String infraSpec=taxonName.substring(subEpPos.first); String[] infraSpecSplited=infraSpec.split(" "); if(infraSpecSplited.length>1){ rank=infraSpecSplited[0]; infraspecEpithet=infraSpecSplited[1]; if(infraSpecSplited.length>2){ infraspecEpithetAuthor=infraSpec.substring(infraSpec.indexOf(infraSpecSplited[2])); } } } } } } TaxonElement taxElem=new TaxonElement(genus, specificEpithet, specificEpithetAuthor, rank, infraspecEpithet, infraspecEpithetAuthor, "",""); return taxElem; } }