1 // $Id: TaxonBaseBeanProcessor.java 5473 2009-03-25 13:42:07Z a.kohlbecker $
3 * Copyright (C) 2009 EDIT
4 * European Distributed Institute of Taxonomy
5 * http://www.e-taxonomy.eu
7 * The contents of this file are subject to the Mozilla Public License Version 1.1
8 * See LICENSE.TXT at the top of this package for the full license terms.
11 package eu
.etaxonomy
.cdm
.remote
.json
.processor
.bean
;
13 import java
.util
.ArrayList
;
14 import java
.util
.Arrays
;
15 import java
.util
.Date
;
16 import java
.util
.List
;
18 import org
.apache
.log4j
.Logger
;
19 import org
.hibernate
.Hibernate
;
21 import eu
.etaxonomy
.cdm
.hibernate
.HibernateProxyHelper
;
22 import eu
.etaxonomy
.cdm
.model
.agent
.Team
;
23 import eu
.etaxonomy
.cdm
.model
.name
.NonViralName
;
24 import eu
.etaxonomy
.cdm
.model
.name
.Rank
;
25 import eu
.etaxonomy
.cdm
.model
.name
.TaxonNameBase
;
26 import eu
.etaxonomy
.cdm
.model
.reference
.INomenclaturalReference
;
27 import eu
.etaxonomy
.cdm
.model
.reference
.ReferenceBase
;
28 import eu
.etaxonomy
.cdm
.model
.taxon
.Taxon
;
29 import eu
.etaxonomy
.cdm
.remote
.dto
.TagEnum
;
30 import eu
.etaxonomy
.cdm
.remote
.dto
.TaggedText
;
31 import eu
.etaxonomy
.cdm
.strategy
.cache
.name
.INameCacheStrategy
;
32 import eu
.etaxonomy
.cdm
.strategy
.cache
.name
.NameCacheStrategyBase
;
34 import net
.sf
.json
.JSONObject
;
35 import net
.sf
.json
.JsonConfig
;
36 import net
.sf
.json
.processors
.JsonBeanProcessor
;
39 * @author a.kohlbecker
42 public class TaxonNameBaseBeanProcessor
extends AbstractCdmBeanProcessor
<TaxonNameBase
> {
44 public static final Logger logger
= Logger
.getLogger(TaxonNameBaseBeanProcessor
.class);
47 * @see eu.etaxonomy.cdm.remote.json.processor.AbstractCdmBeanProcessor#getIgnorePropNames()
50 public List
<String
> getIgnorePropNames() {
51 return Arrays
.asList(new String
[]{
52 // ignore nameRelations to avoid LazyLoadingExceptions coming
53 // from NameRelationshipBeanProcessor.secondStep() in which
54 // the transient field fromName is added to the serialization
55 "relationsFromThisName",
56 "relationsToThisName",
57 "combinationAuthorTeam",
59 "exCombinationAuthorTeam",
60 "exBasionymAuthorTeam"
65 * @see eu.etaxonomy.cdm.remote.json.processor.AbstractCdmBeanProcessor#processBeanSecondStage(java.lang.Object, net.sf.json.JSONObject, net.sf.json.JsonConfig)
68 public JSONObject
processBeanSecondStep(TaxonNameBase bean
, JSONObject json
, JsonConfig jsonConfig
) {
69 if(logger
.isDebugEnabled()){
70 logger
.debug("processing second step" + bean
);
72 json
.element("taggedName", getTaggedName(bean
), jsonConfig
);
77 * FIXME ugly method - this functionality mainly be performed by ChachStrategies ?
79 * @param taxonNameBase
82 public static List
<TaggedText
> getTaggedName(TaxonNameBase
<TaxonNameBase
<?
,?
>, INameCacheStrategy
<TaxonNameBase
<?
,?
>>> taxonNameBase
){
84 List
<TaggedText
> tags
= new ArrayList
<TaggedText
>();
87 * taxonNameBase.getHibernateLazyInitializer().getImplementation();
88 * class eu.etaxonomy.cdm.model.name.TaxonNameBase$$EnhancerByCGLIB$$3683183d
89 * @link( CGLIBLazyInitializer.getImplementation())
91 // if(taxonNameBase instanceof HibernateProxy) {
92 // LazyInitializer lazyInitializer = ((HibernateProxy)taxonNameBase).getHibernateLazyInitializer();
93 // taxonNameBase = (TaxonNameBase)lazyInitializer.getImplementation();
95 taxonNameBase
= HibernateProxyHelper
.deproxy(taxonNameBase
, TaxonNameBase
.class);
98 if(!(taxonNameBase
instanceof NonViralName
)){
102 // --- end of rude hack
103 //FIXME infrageneric epithets are not jet handled!
104 // - infraGenericEpithet "Cicerbita"
105 // - infraSpecificEpithet null
107 List
<Object
> taggedName
= taxonNameBase
.getCacheStrategy().getTaggedName(taxonNameBase
);
109 for (Object token
: taggedName
){
110 TaggedText tag
= new TaggedText();
111 if (String
.class.isInstance(token
)){
112 tag
.setText((String
)token
);
113 tag
.setType(TagEnum
.name
);
115 else if (Rank
.class.isInstance(token
)){
116 Rank r
= (Rank
)token
;
117 tag
.setText(r
.getAbbreviation());
118 tag
.setType(TagEnum
.rank
);
120 else if (Date
.class.isInstance(token
)){
121 Date d
= (Date
)token
;
122 tag
.setText(String
.valueOf(d
.getYear()));
123 tag
.setType(TagEnum
.year
);
125 else if (Team
.class.isInstance(token
)){
126 Team t
= (Team
)token
;
127 tag
.setText(String
.valueOf(t
.getTitleCache()));
128 tag
.setType(TagEnum
.authors
);