]> git.argeo.org Git - gpl/argeo-slc.git/blob - runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/MarshallerView.java
Introduce H2 database support
[gpl/argeo-slc.git] / runtime / org.argeo.slc.server / src / main / java / org / argeo / slc / web / mvc / MarshallerView.java
1 /*
2 * Copyright (C) 2010 Mathieu Baudier <mbaudier@argeo.org>
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17 package org.argeo.slc.web.mvc;
18
19 import java.util.Iterator;
20 import java.util.Map;
21
22 import javax.servlet.http.HttpServletRequest;
23 import javax.servlet.http.HttpServletResponse;
24 import javax.xml.transform.stream.StreamResult;
25
26 import org.apache.commons.logging.Log;
27 import org.apache.commons.logging.LogFactory;
28 import org.argeo.slc.SlcException;
29 import org.springframework.oxm.Marshaller;
30 import org.springframework.web.servlet.view.AbstractView;
31
32 /** Marshal one of the object of the map to the output. */
33 public class MarshallerView extends AbstractView {
34
35 private final static Log log = LogFactory
36 .getLog(MarshallerView.class);
37
38
39 private String modelKey = null;
40 private final Marshaller marshaller;
41
42 public MarshallerView(Marshaller marshaller) {
43 this.marshaller = marshaller;
44 }
45
46 public MarshallerView(Marshaller marshaller, String modelKey) {
47 this(marshaller);
48 this.modelKey = modelKey;
49 }
50
51 @Override
52 @SuppressWarnings(value={"unchecked"})
53 protected void renderMergedOutputModel(Map model,
54 HttpServletRequest request, HttpServletResponse response)
55 throws Exception {
56 final Object answer;
57
58 if (log.isDebugEnabled()){
59 //log.debug("In MarshallerView :: renderMergedOutputModel");
60 if (modelKey != null )
61 log.debug("Model key : ["+modelKey+"]");
62 else log.debug("ModelKey is null");
63 }
64
65 //TODO : remove this loop
66 if (log.isDebugEnabled()){
67 Iterator it = model.keySet().iterator();
68 int i = 0;
69 while (it.hasNext())
70 log.debug(i++ + " [" + it.next().toString()+ "]");
71 }
72
73 if (modelKey != null) {
74 if (!model.containsKey(modelKey)){
75 /** //TODO : remove this loop
76 if (log.isDebugEnabled()){
77 log.debug("Key not found in Model. Available keys are : ");
78 for (Object key : model.keySet()){
79 log.debug(key.toString());
80 }
81 }
82 **/
83 throw new SlcException("Key " + modelKey
84 + " not found in model.");
85 }
86 answer = model.get(modelKey);
87 } else {
88 if (model.size() != 1)
89 throw new SlcException(
90 "Model has a size different from 1. Specify a modelKey.");
91 answer = model.values().iterator().next();
92 }
93
94 StreamResult streamResult = new StreamResult(response.getOutputStream());
95 marshaller.marshal(answer, streamResult);
96 }
97
98 public void setModelKey(String modelKey) {
99 this.modelKey = modelKey;
100 }
101
102 }