1 // $Id: TaxonBeanProcessor.java 5561 2009-04-07 12:25:33Z 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
.Arrays
;
14 import java
.util
.List
;
16 import net
.sf
.json
.JSONObject
;
17 import net
.sf
.json
.JsonConfig
;
19 import org
.apache
.log4j
.Logger
;
20 import org
.hibernate
.Hibernate
;
22 import eu
.etaxonomy
.cdm
.model
.common
.Language
;
23 import eu
.etaxonomy
.cdm
.model
.common
.OrderedTermVocabulary
;
24 import eu
.etaxonomy
.cdm
.model
.common
.RelationshipTermBase
;
25 import eu
.etaxonomy
.cdm
.model
.common
.Representation
;
26 import eu
.etaxonomy
.cdm
.model
.common
.TermBase
;
27 import eu
.etaxonomy
.cdm
.model
.common
.TermVocabulary
;
28 import eu
.etaxonomy
.cdm
.remote
.l10n
.LocaleContext
;
31 * @author a.kohlbecker
34 public class TermBaseBeanProcessor
extends AbstractCdmBeanProcessor
<TermBase
> {
36 public static final Logger logger
= Logger
.getLogger(TermBaseBeanProcessor
.class);
38 private static final List
<String
> IGNORE_LIST
= Arrays
.asList(new String
[] {
40 "inversRepresentations",
42 "infraGenericMarker", //FIXME leads to IllegalStateException if not excluded
43 "partOf" // exclude partOf to avoid lazy loading exceptions,
46 private boolean replaceRepresentations
= false;
48 public boolean isReplaceRepresentations() {
49 return replaceRepresentations
;
52 public void setReplaceRepresentations(boolean replace
) {
53 this.replaceRepresentations
= replace
;
57 * @see eu.etaxonomy.cdm.remote.json.processor.AbstractCdmBeanProcessor#getIgnorePropNames()
60 public List
<String
> getIgnorePropNames() {
65 * @see eu.etaxonomy.cdm.remote.json.processor.AbstractCdmBeanProcessor#processBeanSecondStep(eu.etaxonomy.cdm.model.common.CdmBase, net.sf.json.JSONObject, net.sf.json.JsonConfig)
68 public JSONObject
processBeanSecondStep(TermBase term
, JSONObject json
, JsonConfig jsonConfig
) {
70 // handle OrderedTermVocabulary
71 if(OrderedTermVocabulary
.class.isAssignableFrom(term
.getClass())){
72 OrderedTermVocabulary otv
= (OrderedTermVocabulary
)term
;
73 if(Hibernate
.isInitialized(otv
.getTerms())){
74 json
.element("terms", otv
.getOrderedTerms(), jsonConfig
);
76 } else if(TermVocabulary
.class.isAssignableFrom(term
.getClass())) {
77 TermVocabulary tv
= (TermVocabulary
)term
;
78 if(Hibernate
.isInitialized(tv
.getTerms())){
79 json
.element("terms", tv
.getTerms(), jsonConfig
);
83 List
<Language
> languages
= LocaleContext
.getLanguages();
85 Representation representation
;
86 if(Hibernate
.isInitialized(term
.getRepresentations())){
87 representation
= term
.getPreferredRepresentation(languages
);
88 if(representation
!= null){
89 if(representation
.getText() != null && representation
.getText().length() != 0){
90 json
.element("representation_L10n", representation
.getText());
91 } else if (representation
.getLabel() != null && representation
.getLabel().length() !=0) {
92 json
.element("representation_L10n", representation
.getLabel());
95 json
.element("representation_L10n_abbreviated", representation
.getAbbreviatedLabel());
98 if(!replaceRepresentations
){
99 json
.element("representations", term
.getRepresentations(), jsonConfig
);
102 logger
.debug("representations of term not initialized " + term
.getUuid().toString());
105 // add additional representation for RelationShipBase
106 if(RelationshipTermBase
.class.isAssignableFrom(term
.getClass())){
107 RelationshipTermBase
<?
> relTerm
= (RelationshipTermBase
<?
>)term
;
108 Representation inversRepresentation
;
109 if(Hibernate
.isInitialized(relTerm
.getInverseRepresentations())){
110 inversRepresentation
= relTerm
.getPreferredInverseRepresentation(languages
);
111 if(inversRepresentation
!= null){
112 if(inversRepresentation
.getText() != null && inversRepresentation
.getText().length() != 0){
113 json
.element("inverseRepresentation_L10n", inversRepresentation
.getText());
114 } else if (inversRepresentation
.getLabel() != null && inversRepresentation
.getLabel().length() !=0) {
115 json
.element("inverseRepresentation_L10n", inversRepresentation
.getLabel());
117 json
.element("inverseRepresentation_L10n", inversRepresentation
.getAbbreviatedLabel());
120 if(!replaceRepresentations
){
121 json
.element("inverseRepresentations", relTerm
.getRepresentations(), jsonConfig
);
124 logger
.debug("inverseRepresentations of term not initialized " + relTerm
.getUuid().toString());