1 package org.cateproject.view.json.processor;
2
3 import net.sf.json.JSONObject;
4 import net.sf.json.JsonConfig;
5 import net.sf.json.processors.JsonBeanProcessor;
6
7
8 import org.hibernate.proxy.HibernateProxy;
9 import org.joda.time.format.ISODateTimeFormat;
10
11 import eu.etaxonomy.cdm.model.agent.AgentBase;
12 import eu.etaxonomy.cdm.model.common.Annotation;
13 import eu.etaxonomy.cdm.model.common.TermBase;
14 import eu.etaxonomy.cdm.model.description.DescriptionBase;
15 import eu.etaxonomy.cdm.model.media.Media;
16 import eu.etaxonomy.cdm.model.name.TaxonNameBase;
17 import eu.etaxonomy.cdm.model.occurrence.Collection;
18 import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
19 import eu.etaxonomy.cdm.model.reference.ReferenceBase;
20 import eu.etaxonomy.cdm.model.taxon.Taxon;
21
22 public class AnnotationBeanProcessor implements JsonBeanProcessor {
23 Class getDeproxiedClass(Object object) {
24 if (object instanceof HibernateProxy) {
25 return ((HibernateProxy) object).getHibernateLazyInitializer().getImplementation().getClass();
26 } else {
27 return object.getClass();
28 }
29 }
30
31 public JSONObject processBean(Object bean, JsonConfig jsonConfig) {
32 Annotation annotation = (Annotation)bean;
33 JSONObject annotationObject = new JSONObject();
34 annotationObject.element("uuid", annotation.getUuid().toString());
35 annotationObject.element("objectId", annotation.getUuid().toString());
36 JSONObject annotatedObj = new JSONObject();
37 Class clazz = getDeproxiedClass(annotation.getAnnotatedObj());
38 if(AgentBase.class.isAssignableFrom(clazz)) {
39 annotatedObj.element("clazz", "agent");
40 } else if(Collection.class.isAssignableFrom(clazz)) {
41 annotatedObj.element("clazz", "collection");
42 } else if(DescriptionBase.class.isAssignableFrom(clazz)) {
43 annotatedObj.element("clazz", "description");
44 } else if(TermBase.class.isAssignableFrom(clazz)) {
45 annotatedObj.element("clazz", "term");
46 } else if(Media.class.isAssignableFrom(clazz)) {
47 annotatedObj.element("clazz", "media");
48 } else if(TaxonNameBase.class.isAssignableFrom(clazz)) {
49 annotatedObj.element("clazz", "name");
50 } else if(SpecimenOrObservationBase.class.isAssignableFrom(clazz)) {
51 annotatedObj.element("clazz", "occurrence");
52 } else if(ReferenceBase.class.isAssignableFrom(clazz)) {
53 annotatedObj.element("clazz", "reference");
54 } else if(Taxon.class.isAssignableFrom(clazz)) {
55 annotatedObj.element("clazz", "taxon");
56 } else {
57 annotatedObj.element("clazz", "annotation");
58 }
59
60 annotatedObj.element("uuid", annotation.getAnnotatedObj().getUuid().toString());
61 annotationObject.element("annotatedObj", annotatedObj);
62 JSONObject user = new JSONObject();
63 user.element("username", annotation.getCreatedBy().getUsername());
64 annotationObject.element("createdBy",user);
65 annotationObject.element("created", ISODateTimeFormat.dateTimeNoMillis().print(annotation.getCreated()));
66 int numberOfAnnotations = annotation.getAnnotations().size();
67 annotationObject.element("numberOfAnnotations", numberOfAnnotations);
68 annotationObject.element("isFolder", numberOfAnnotations > 0);
69 annotationObject.element("widgetName", "cateproject:AnnotationTreeNode");
70 annotationObject.element("text",annotation.getText());
71
72 return annotationObject;
73 }
74
75 }