You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

PortletCommunicationManager.java 5.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. /*
  2. * Copyright 2011 Vaadin Ltd.
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  5. * use this file except in compliance with the License. You may obtain a copy of
  6. * 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, WITHOUT
  12. * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
  13. * License for the specific language governing permissions and limitations under
  14. * the License.
  15. */
  16. package com.vaadin.server;
  17. import java.io.IOException;
  18. import java.io.InputStream;
  19. import javax.portlet.MimeResponse;
  20. import javax.portlet.PortletContext;
  21. import javax.portlet.PortletRequest;
  22. import javax.portlet.PortletResponse;
  23. import javax.portlet.RenderRequest;
  24. import javax.portlet.RenderResponse;
  25. import javax.portlet.ResourceURL;
  26. import org.json.JSONException;
  27. import org.json.JSONObject;
  28. import com.vaadin.shared.ApplicationConstants;
  29. import com.vaadin.ui.UI;
  30. /**
  31. * TODO document me!
  32. *
  33. * @author peholmst
  34. *
  35. *
  36. * @deprecated might be refactored or removed before 7.0.0
  37. */
  38. @Deprecated
  39. @SuppressWarnings("serial")
  40. public class PortletCommunicationManager extends AbstractCommunicationManager {
  41. public PortletCommunicationManager(VaadinServiceSession session) {
  42. super(session);
  43. }
  44. @Override
  45. protected BootstrapHandler createBootstrapHandler() {
  46. return new BootstrapHandler() {
  47. @Override
  48. public boolean handleRequest(VaadinServiceSession session,
  49. VaadinRequest request, VaadinResponse response)
  50. throws IOException {
  51. PortletRequest portletRequest = VaadinPortletRequest.cast(
  52. request).getPortletRequest();
  53. if (portletRequest instanceof RenderRequest) {
  54. return super.handleRequest(session, request, response);
  55. } else {
  56. return false;
  57. }
  58. }
  59. @Override
  60. protected String getServiceUrl(BootstrapContext context) {
  61. ResourceURL portletResourceUrl = getRenderResponse(context)
  62. .createResourceURL();
  63. portletResourceUrl.setResourceID(VaadinPortlet.RESOURCE_URL_ID);
  64. return portletResourceUrl.toString();
  65. }
  66. private RenderResponse getRenderResponse(BootstrapContext context) {
  67. PortletResponse response = ((VaadinPortletResponse) context
  68. .getResponse()).getPortletResponse();
  69. RenderResponse renderResponse = (RenderResponse) response;
  70. return renderResponse;
  71. }
  72. @Override
  73. protected void appendMainScriptTagContents(
  74. BootstrapContext context, StringBuilder builder)
  75. throws JSONException, IOException {
  76. // fixed base theme to use - all portal pages with Vaadin
  77. // applications will load this exactly once
  78. String portalTheme = VaadinPortletRequest.cast(
  79. context.getRequest()).getPortalProperty(
  80. VaadinPortlet.PORTAL_PARAMETER_VAADIN_THEME);
  81. if (portalTheme != null
  82. && !portalTheme.equals(context.getThemeName())) {
  83. String portalThemeUri = getThemeUri(context, portalTheme);
  84. // XSS safe - originates from portal properties
  85. builder.append("vaadin.loadTheme('" + portalThemeUri
  86. + "');");
  87. }
  88. super.appendMainScriptTagContents(context, builder);
  89. }
  90. @Override
  91. protected String getMainDivStyle(BootstrapContext context) {
  92. VaadinService vaadinService = context.getRequest().getService();
  93. return vaadinService.getDeploymentConfiguration()
  94. .getApplicationOrSystemProperty(
  95. VaadinPortlet.PORTLET_PARAMETER_STYLE, null);
  96. }
  97. @Override
  98. protected JSONObject getApplicationParameters(
  99. BootstrapContext context) throws JSONException,
  100. PaintException {
  101. JSONObject parameters = super.getApplicationParameters(context);
  102. VaadinPortletResponse response = (VaadinPortletResponse) context
  103. .getResponse();
  104. MimeResponse portletResponse = (MimeResponse) response
  105. .getPortletResponse();
  106. ResourceURL resourceURL = portletResponse.createResourceURL();
  107. resourceURL.setResourceID("browserDetails");
  108. parameters.put("browserDetailsUrl", resourceURL.toString());
  109. // Always send path info as a query parameter
  110. parameters.put(
  111. ApplicationConstants.SERVICE_URL_PATH_AS_PARAMETER,
  112. true);
  113. return parameters;
  114. }
  115. };
  116. }
  117. @Override
  118. protected InputStream getThemeResourceAsStream(UI uI, String themeName,
  119. String resource) {
  120. VaadinPortletSession session = (VaadinPortletSession) uI.getSession();
  121. PortletContext portletContext = session.getPortletSession()
  122. .getPortletContext();
  123. return portletContext.getResourceAsStream("/"
  124. + VaadinPortlet.THEME_DIRECTORY_PATH + themeName + "/"
  125. + resource);
  126. }
  127. }