01: /* ***** BEGIN LICENSE BLOCK *****
02: * Version: MPL 1.1
03: * The contents of this file are subject to the Mozilla Public License Version
04: * 1.1 (the "License"); you may not use this file except in compliance with
05: * the License. You may obtain a copy of the License at
06: * http://www.mozilla.org/MPL/
07: *
08: * Software distributed under the License is distributed on an "AS IS" basis,
09: * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
10: * for the specific language governing rights and limitations under the
11: * License.
12: *
13: * The Original Code is Riot.
14: *
15: * The Initial Developer of the Original Code is
16: * Neteye GmbH.
17: * Portions created by the Initial Developer are Copyright (C) 2006
18: * the Initial Developer. All Rights Reserved.
19: *
20: * Contributor(s):
21: * Felix Gnass [fgnass at neteye dot de]
22: *
23: * ***** END LICENSE BLOCK ***** */
24: package org.riotfamily.components.config.component;
25:
26: import java.util.Map;
27:
28: import javax.servlet.http.HttpServletRequest;
29: import javax.servlet.http.HttpServletResponse;
30:
31: import org.riotfamily.common.web.view.ViewResolutionException;
32: import org.riotfamily.common.web.view.ViewResolverHelper;
33: import org.riotfamily.components.model.ComponentVersion;
34: import org.riotfamily.components.model.VersionContainer;
35: import org.springframework.web.servlet.ModelAndView;
36: import org.springframework.web.servlet.View;
37: import org.springframework.web.servlet.support.RequestContextUtils;
38:
39: /**
40: * Component implementation that resolves a view-name just like Spring's
41: * DispatcherServlet and renders the view passing the ComponentVersion's
42: * properties as model.
43: */
44: public class ViewComponent extends AbstractComponent {
45:
46: private String viewName;
47:
48: private boolean dynamic = false;
49:
50: public void setViewName(String viewName) {
51: this .viewName = viewName;
52: }
53:
54: protected void renderInternal(ComponentVersion componentVersion,
55: String positionClassName, HttpServletRequest request,
56: HttpServletResponse response) throws Exception {
57:
58: Map model = buildModel(componentVersion);
59: model.put(POSITION_CLASS, positionClassName);
60: model.put(COMPONENT_ID, String
61: .valueOf(componentVersion.getId()));
62: model.put(THIS, componentVersion);
63:
64: VersionContainer parentContainer = componentVersion
65: .getContainer().getList().getParent();
66: if (parentContainer != null) {
67: request.setAttribute(PARENT_ID, String
68: .valueOf(parentContainer.getId()));
69: }
70:
71: ModelAndView mv = new ModelAndView(viewName, model);
72: try {
73: View view = new ViewResolverHelper(RequestContextUtils
74: .getWebApplicationContext(request)).resolveView(
75: request, mv);
76:
77: view.render(model, request, response);
78: } catch (ViewResolutionException e) {
79: log.warn(
80: "ViewResolutionException - Skipping component ...",
81: e);
82: }
83: }
84:
85: public boolean isDynamic() {
86: return this .dynamic;
87: }
88:
89: public void setDynamic(boolean dynamic) {
90: this.dynamic = dynamic;
91: }
92:
93: }
|