public String getAuthorshipCache(TaxonName nonViralName);
+ /**
+ * If a name has more authors then this position
+ * add "& al." instead at the given author position.
+ */
+ public Integer getEtAlPosition();
+ /**
+ * @see #getEtAlPosition()
+ * @param etAlPosition
+ */
+ public void setEtAlPosition(Integer etAlPosition);
}
import eu.etaxonomy.cdm.common.CdmUtils;
import eu.etaxonomy.cdm.common.UTF8;
-import eu.etaxonomy.cdm.model.agent.INomenclaturalAuthor;
+import eu.etaxonomy.cdm.model.agent.Team;
+import eu.etaxonomy.cdm.model.agent.TeamOrPersonBase;
+import eu.etaxonomy.cdm.model.common.CdmBase;
import eu.etaxonomy.cdm.model.name.HybridRelationship;
import eu.etaxonomy.cdm.model.name.INonViralName;
import eu.etaxonomy.cdm.model.name.Rank;
import eu.etaxonomy.cdm.strategy.cache.TagEnum;
import eu.etaxonomy.cdm.strategy.cache.TaggedText;
import eu.etaxonomy.cdm.strategy.cache.TaggedTextBuilder;
+import eu.etaxonomy.cdm.strategy.cache.agent.TeamDefaultCacheStrategy;
import eu.etaxonomy.cdm.strategy.exceptions.UnknownCdmTypeException;
import eu.etaxonomy.cdm.strategy.parser.NonViralNameParserImplRegExBase;
private CharSequence basionymAuthorCombinationAuthorSeperator = " ";
private String zooAuthorYearSeperator = ", ";
+ private Integer etAlPosition;
private String cultivarStart = "'";
private String cultivarEnd = "'";
/* **************** GETTER / SETTER **************************************/
+ @Override
+ public Integer getEtAlPosition() {
+ return etAlPosition;
+ }
+
+ @Override
+ public void setEtAlPosition(Integer etAlPosition) {
+ this.etAlPosition = etAlPosition;
+ }
+
/**
* String that separates the NameCache part from the AuthorCache part
* @return
return this.getZoologicalNonCacheAuthorshipCache(nonViralName);
}else{
String result = "";
- INomenclaturalAuthor combinationAuthor = nonViralName.getCombinationAuthorship();
- INomenclaturalAuthor exCombinationAuthor = nonViralName.getExCombinationAuthorship();
- INomenclaturalAuthor basionymAuthor = nonViralName.getBasionymAuthorship();
- INomenclaturalAuthor exBasionymAuthor = nonViralName.getExBasionymAuthorship();
+ TeamOrPersonBase<?> combinationAuthor = nonViralName.getCombinationAuthorship();
+ TeamOrPersonBase<?> exCombinationAuthor = nonViralName.getExCombinationAuthorship();
+ TeamOrPersonBase<?> basionymAuthor = nonViralName.getBasionymAuthorship();
+ TeamOrPersonBase<?> exBasionymAuthor = nonViralName.getExBasionymAuthorship();
if (isCultivar(nonViralName) ){
exCombinationAuthor = null;
basionymAuthor = null;
return null;
}
String result = "";
- INomenclaturalAuthor combinationAuthor = nonViralName.getCombinationAuthorship();
- INomenclaturalAuthor exCombinationAuthor = nonViralName.getExCombinationAuthorship();
- INomenclaturalAuthor basionymAuthor = nonViralName.getBasionymAuthorship();
- INomenclaturalAuthor exBasionymAuthor = nonViralName.getExBasionymAuthorship();
+ TeamOrPersonBase<?> combinationAuthor = nonViralName.getCombinationAuthorship();
+ TeamOrPersonBase<?> exCombinationAuthor = nonViralName.getExCombinationAuthorship();
+ TeamOrPersonBase<?> basionymAuthor = nonViralName.getBasionymAuthorship();
+ TeamOrPersonBase<?> exBasionymAuthor = nonViralName.getExBasionymAuthorship();
Integer publicationYear = nonViralName.getPublicationYear();
Integer originalPublicationYear = nonViralName.getOriginalPublicationYear();
* The correct order is exAuthor ex author though some botanist do not know about and do it the
* other way round. (see 46.4-46.6 ICBN (Vienna Code, 2006))
*/
- protected String getAuthorAndExAuthor(INomenclaturalAuthor author, INomenclaturalAuthor exAuthor){
+ protected String getAuthorAndExAuthor(TeamOrPersonBase<?> author, TeamOrPersonBase<?> exAuthor){
String authorString = "";
String exAuthorString = "";
if (author != null){
return result;
}
- private String getNomAuthorTitle(INomenclaturalAuthor author) {
- return CdmUtils.Nz(author.getNomenclaturalTitleCache());
+ private String getNomAuthorTitle(TeamOrPersonBase<?> author) {
+ if (!author.isInstanceOf(Team.class) || this.getEtAlPosition() == null || this.getEtAlPosition() < 2) {
+ return CdmUtils.Nz(author.getNomenclaturalTitleCache());
+ }else {
+ Team team = CdmBase.deproxy(author, Team.class);
+ TeamDefaultCacheStrategy formatter = TeamDefaultCacheStrategy.NewInstanceNomEtAl(this.getEtAlPosition());
+ return formatter.getNomenclaturalTitleCache(team);
+ }
}
/**
String expected = String.format("Ophrys %skastelli E. Klein nothosubsp. kastelli", UTF8.HYBRID.toString());
Assert.assertEquals("", expected, name.getTitleCache());
}
+
+ @Test
+ public void testEtAlAuthors() {
+ TaxonName name = TaxonNameFactory.NewBotanicalInstance(Rank.SPECIES());
+ name.setGenusOrUninomial("Ophrys");
+ name.setSpecificEpithet("kastelli");
+ Team combTeam = Team.NewInstance();
+ combTeam.addTeamMember(Person.NewInstance("Mill.", "Miller", "A.", null));
+ combTeam.addTeamMember(Person.NewInstance("Ball.", "Baller", "B.", null));
+ combTeam.addTeamMember(Person.NewInstance("Cill.", "Ciller", "C.", null));
+ name.setCombinationAuthorship(combTeam);
+
+ INameCacheStrategy formatter = name.cacheStrategy();
+ Assert.assertEquals("", "Ophrys kastelli Mill., Ball. & Cill.", formatter.getTitleCache(name));
+ formatter.setEtAlPosition(3);
+ Assert.assertEquals("", "Ophrys kastelli Mill., Ball. & Cill.", formatter.getTitleCache(name));
+ formatter.setEtAlPosition(2);
+ Assert.assertEquals("", "Ophrys kastelli Mill. & al.", formatter.getTitleCache(name));
+ //null and <2 are handled as "no position defined"
+ formatter.setEtAlPosition(1);
+ Assert.assertEquals("", "Ophrys kastelli Mill., Ball. & Cill.", formatter.getTitleCache(name));
+ formatter.setEtAlPosition(null);
+ Assert.assertEquals("", "Ophrys kastelli Mill., Ball. & Cill.", formatter.getTitleCache(name));
+
+ name.setBasionymAuthorship(combTeam);
+ formatter.setEtAlPosition(2);
+ Assert.assertEquals("", "Ophrys kastelli (Mill. & al.) Mill. & al.", formatter.getTitleCache(name));
+
+ }
}
\ No newline at end of file
return null;
}
+ @Override
+ public Integer getEtAlPosition() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public void setEtAlPosition(Integer etAlPosition) {
+ // TODO Auto-generated method stub
+ }
+
}
return null;
}
+ @Override
+ public Integer getEtAlPosition() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public void setEtAlPosition(Integer etAlPosition) {
+ // TODO Auto-generated method stub
+ }
+
}
@RequestParam(value = "featureTree", required = false) UUID featureTreeUuid,
@RequestParam(value = "nameRelationsDirect", required = false) Set<UUID> directNameRelations,
@RequestParam(value = "nameRelationsInverse", required = false) Set<UUID> inverseNameRelations,
- @RequestParam(value = "etAlPos", required = false) Integer etAlPosition,
+ @RequestParam(value = "etAlPos", required = false, defaultValue = "2") Integer etAlPosition,
//distributionInfoConfig
@RequestParam(value = "part", required = false) Set<InfoPart> partSet,
import eu.etaxonomy.cdm.model.term.TermTree;
import eu.etaxonomy.cdm.strategy.cache.TaggedCacheHelper;
import eu.etaxonomy.cdm.strategy.cache.TaggedText;
+import eu.etaxonomy.cdm.strategy.cache.name.INameCacheStrategy;
import eu.etaxonomy.cdm.strategy.cache.taxon.TaxonBaseDefaultCacheStrategy;
/**
TaxonNameDto nameDto = taxonDto.new TaxonNameDto();
loadBaseData(name, nameDto);
+ INameCacheStrategy formatter = name.cacheStrategy();
+ formatter.setEtAlPosition(config.getEtAlPosition());
+
taxonDto.setName(nameDto);
- taxonDto.setNameLabel(name.getTitleCache());
+ taxonDto.setNameLabel(formatter.getTitleCache(name));
handleRelatedNames(name, taxonDto, config);
loadProtologues(name, taxonDto);
taxonDto.setNameUuid(name.getUuid());
taxonDto.setNameType(name.getNameType().toString());
loadNameFacts(name, taxonDto, config, pageDto);
- nameDto.setTaggedName(name.getTaggedFullTitle());
+ nameDto.setTaggedName(formatter.getTaggedFullTitle(name));
}
private List<TaggedText> getTaggedTaxon(TaxonBase<?> taxon, TaxonPageDtoConfiguration config) {