]> git.argeo.org Git - gpl/argeo-slc.git/blob - runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/MarshallerView.java
@update:79; Simplify the execution of flows
[gpl/argeo-slc.git] / runtime / org.argeo.slc.server / src / main / java / org / argeo / slc / web / mvc / MarshallerView.java
1 package org.argeo.slc.web.mvc;
2
3 import java.util.Map;
4
5 import javax.servlet.http.HttpServletRequest;
6 import javax.servlet.http.HttpServletResponse;
7 import javax.xml.transform.stream.StreamResult;
8
9 import org.argeo.slc.SlcException;
10 import org.springframework.oxm.Marshaller;
11 import org.springframework.web.servlet.view.AbstractView;
12
13 /** Marshal one of the object of the map to the output. */
14 public class MarshallerView extends AbstractView {
15 private String modelKey = null;
16 private final Marshaller marshaller;
17
18 public MarshallerView(Marshaller marshaller) {
19 this.marshaller = marshaller;
20 }
21
22 public MarshallerView(Marshaller marshaller, String modelKey) {
23 this(marshaller);
24 this.modelKey = modelKey;
25 }
26
27 @Override
28 protected void renderMergedOutputModel(Map model,
29 HttpServletRequest request, HttpServletResponse response)
30 throws Exception {
31 final Object answer;
32 if (modelKey != null) {
33 if (!model.containsKey(modelKey))
34 throw new SlcException("Key " + modelKey
35 + " not found in model.");
36 answer = model.get(modelKey);
37 } else {
38 if (model.size() != 1)
39 throw new SlcException(
40 "Model has a size different from 1. Specify a modelKey.");
41 answer = model.values().iterator().next();
42 }
43
44 StreamResult streamResult = new StreamResult(response.getOutputStream());
45 marshaller.marshal(answer, streamResult);
46 }
47
48 public void setModelKey(String modelKey) {
49 this.modelKey = modelKey;
50 }
51
52 }