change version to 3.3.0-SNAPSHOT in cdm-3.3 branch
[cdmlib.git] / cdmlib-remote / src / main / java / eu / etaxonomy / cdm / remote / view / RdfView.java
1 // $Id$
2 package eu.etaxonomy.cdm.remote.view;
3
4 import java.util.HashMap;
5 import java.util.Map;
6
7 import javax.servlet.http.HttpServletRequest;
8 import javax.servlet.http.HttpServletResponse;
9 import javax.xml.transform.stream.StreamResult;
10
11 import org.dozer.Mapper;
12 import org.joda.time.DateTime;
13 import org.springframework.beans.factory.annotation.Autowired;
14 import org.springframework.oxm.Marshaller;
15 import org.springframework.web.servlet.view.AbstractView;
16
17 import com.ibm.lsid.http.HTTPConstants;
18
19 import eu.etaxonomy.cdm.model.common.CdmBase;
20 import eu.etaxonomy.cdm.model.common.IdentifiableEntity;
21 import eu.etaxonomy.cdm.model.description.TaxonDescription;
22 import eu.etaxonomy.cdm.model.taxon.Synonym;
23 import eu.etaxonomy.cdm.model.taxon.Taxon;
24 import eu.etaxonomy.cdm.remote.dto.tdwg.BaseThing;
25 import eu.etaxonomy.cdm.remote.dto.tdwg.voc.SpeciesProfileModel;
26 import eu.etaxonomy.cdm.remote.dto.tdwg.voc.TaxonConcept;
27 import eu.etaxonomy.remote.dto.rdf.Rdf;
28
29 /**
30 * View class which takes a MetadataResponse and returns the Source for serialization
31 * @author ben
32 * @see javax.xml.transform.Source
33 * @see com.ibm.lsid.MetadataResponse
34 */
35 public class RdfView extends AbstractView {
36
37 private Marshaller marshaller;
38
39 private Mapper mapper;
40
41 private Map<Class<? extends CdmBase>,Class<? extends BaseThing>> classMap = new HashMap<Class<? extends CdmBase>,Class<? extends BaseThing>>();
42
43 private Integer expiresPlus;
44
45 public RdfView() {
46 classMap.put(Taxon.class, TaxonConcept.class);
47 classMap.put(Synonym.class, TaxonConcept.class);
48 classMap.put(TaxonDescription.class, SpeciesProfileModel.class);
49 }
50
51 @Autowired
52 public void setMarshaller(Marshaller marshaller) {
53 this.marshaller = marshaller;
54 }
55
56 @Autowired
57 public void setMapper(Mapper mapper) {
58 this.mapper = mapper;
59 }
60
61 public void setExpiresPlus(Integer expiresPlus) {
62 this.expiresPlus = expiresPlus;
63 }
64
65 @Override
66 protected void renderMergedOutputModel(Map model,HttpServletRequest request, HttpServletResponse response)
67 throws Exception {
68 if(expiresPlus != null) {
69 DateTime expires = new DateTime();
70 response.setHeader(HTTPConstants.EXPIRES_HEADER, HTTPConstants.HTTP_DATE_FORMAT.format(expires.plusDays(expiresPlus).toDate()));
71 }
72
73 Rdf rdf = new Rdf();
74 for(Object object : model.values()) {
75 if(object instanceof IdentifiableEntity) {
76 IdentifiableEntity identifiableEntity = (IdentifiableEntity)object;
77 Class clazz = classMap.get(identifiableEntity.getClass());
78 if(clazz != null) {
79 rdf.addThing((BaseThing)mapper.map(identifiableEntity, clazz));
80 }
81 }
82 }
83
84 marshaller.marshal(rdf, new StreamResult(response.getOutputStream()));
85 }
86
87 }