View Javadoc

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  }