missing implementations for the generic controller architeture (works for data portal...
[cdmlib.git] / cdmlib-remote / src / main / java / eu / etaxonomy / cdm / remote / json / processor / bean / TermBaseBeanProcessor.java
1 // $Id: TaxonBeanProcessor.java 5561 2009-04-07 12:25:33Z a.kohlbecker $
2 /**
3 * Copyright (C) 2009 EDIT
4 * European Distributed Institute of Taxonomy
5 * http://www.e-taxonomy.eu
6 *
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.
9 */
10
11 package eu.etaxonomy.cdm.remote.json.processor.bean;
12
13 import java.util.Arrays;
14 import java.util.List;
15
16 import net.sf.json.JSONObject;
17 import net.sf.json.JsonConfig;
18
19 import org.apache.log4j.Logger;
20 import org.hibernate.Hibernate;
21
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;
29
30 /**
31 * @author a.kohlbecker
32 *
33 */
34 public class TermBaseBeanProcessor extends AbstractCdmBeanProcessor<TermBase> {
35
36 public static final Logger logger = Logger.getLogger(TermBaseBeanProcessor.class);
37
38 private static final List<String> IGNORE_LIST = Arrays.asList(new String[] {
39 "representations",
40 "inversRepresentations",
41 "terms"
42 });
43
44 private boolean replaceRepresentations = false;
45
46 public boolean isReplaceRepresentations() {
47 return replaceRepresentations;
48 }
49
50 public void setReplaceRepresentations(boolean replace) {
51 this.replaceRepresentations = replace;
52 }
53
54 /* (non-Javadoc)
55 * @see eu.etaxonomy.cdm.remote.json.processor.AbstractCdmBeanProcessor#getIgnorePropNames()
56 */
57 @Override
58 public List<String> getIgnorePropNames() {
59 return IGNORE_LIST;
60 }
61
62 /* (non-Javadoc)
63 * @see eu.etaxonomy.cdm.remote.json.processor.AbstractCdmBeanProcessor#processBeanSecondStep(eu.etaxonomy.cdm.model.common.CdmBase, net.sf.json.JSONObject, net.sf.json.JsonConfig)
64 */
65 @Override
66 public JSONObject processBeanSecondStep(TermBase term, JSONObject json, JsonConfig jsonConfig) {
67
68 // handle OrderedTermVocabulary
69 if(OrderedTermVocabulary.class.isAssignableFrom(term.getClass())){
70 OrderedTermVocabulary otv = (OrderedTermVocabulary)term;
71 if(Hibernate.isInitialized(otv.getTerms())){
72 json.element("terms", otv.getOrderedTerms(), jsonConfig);
73 }
74 } else if(TermVocabulary.class.isAssignableFrom(term.getClass())) {
75 TermVocabulary tv = (TermVocabulary)term;
76 if(Hibernate.isInitialized(tv.getTerms())){
77 json.element("terms", tv.getTerms(), jsonConfig);
78 }
79 }
80
81 List<Language> languages = LocaleContext.getLanguages();
82
83 Representation representation;
84 if(Hibernate.isInitialized(term.getRepresentations())){
85 representation = term.getPreferredRepresentation(languages);
86 if(representation != null){
87 if(representation.getText() != null && representation.getText().length() != 0){
88 json.element("representation_L10n", representation.getText());
89 } else if (representation.getLabel() != null && representation.getLabel().length() !=0) {
90 json.element("representation_L10n", representation.getLabel());
91 }
92
93 json.element("representation_L10n_abbreviated", representation.getAbbreviatedLabel());
94
95 }
96 if(!replaceRepresentations){
97 json.element("representations", term.getRepresentations(), jsonConfig);
98 }
99 } else {
100 logger.debug("representations of term not initialized " + term.getUuid().toString());
101 }
102
103 // add additional representation for RelationShipBase
104 if(RelationshipTermBase.class.isAssignableFrom(term.getClass())){
105 RelationshipTermBase<?> relTerm = (RelationshipTermBase<?>)term;
106 Representation inversRepresentation;
107 if(Hibernate.isInitialized(relTerm.getInverseRepresentations())){
108 inversRepresentation = relTerm.getPreferredInverseRepresentation(languages);
109 if(inversRepresentation != null){
110 if(inversRepresentation.getText() != null && inversRepresentation.getText().length() != 0){
111 json.element("inverseRepresentation_L10n", inversRepresentation.getText());
112 } else if (inversRepresentation.getLabel() != null && inversRepresentation.getLabel().length() !=0) {
113 json.element("inverseRepresentation_L10n", inversRepresentation.getLabel());
114 } else {
115 json.element("inverseRepresentation_L10n", inversRepresentation.getAbbreviatedLabel());
116 }
117 }
118 if(!replaceRepresentations){
119 json.element("inverseRepresentations", relTerm.getRepresentations(), jsonConfig);
120 }
121 } else {
122 logger.debug("inverseRepresentations of term not initialized " + relTerm.getUuid().toString());
123 }
124 }
125 return json;
126 }
127
128 }