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.

PortletBootstrapHandler.java 4.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. /*
  2. * Copyright 2000-2014 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.communication;
  17. import java.io.IOException;
  18. import javax.portlet.MimeResponse;
  19. import javax.portlet.PortletRequest;
  20. import javax.portlet.PortletResponse;
  21. import javax.portlet.RenderRequest;
  22. import javax.portlet.RenderResponse;
  23. import javax.portlet.ResourceURL;
  24. import com.vaadin.server.BootstrapHandler;
  25. import com.vaadin.server.PaintException;
  26. import com.vaadin.server.VaadinPortlet;
  27. import com.vaadin.server.VaadinPortlet.VaadinLiferayRequest;
  28. import com.vaadin.server.VaadinPortletRequest;
  29. import com.vaadin.server.VaadinPortletResponse;
  30. import com.vaadin.server.VaadinRequest;
  31. import com.vaadin.server.VaadinResponse;
  32. import com.vaadin.server.VaadinService;
  33. import com.vaadin.server.VaadinSession;
  34. import com.vaadin.shared.ApplicationConstants;
  35. import elemental.json.JsonObject;
  36. public class PortletBootstrapHandler extends BootstrapHandler {
  37. @Override
  38. public boolean handleRequest(VaadinSession session, VaadinRequest request,
  39. VaadinResponse response) throws IOException {
  40. PortletRequest portletRequest = ((VaadinPortletRequest) request)
  41. .getPortletRequest();
  42. if (portletRequest instanceof RenderRequest) {
  43. return super.handleRequest(session, request, response);
  44. } else {
  45. return false;
  46. }
  47. }
  48. @Override
  49. protected String getServiceUrl(BootstrapContext context) {
  50. ResourceURL portletResourceUrl = getRenderResponse(context)
  51. .createResourceURL();
  52. portletResourceUrl.setResourceID(VaadinPortlet.RESOURCE_URL_ID);
  53. return portletResourceUrl.toString();
  54. }
  55. private RenderResponse getRenderResponse(BootstrapContext context) {
  56. PortletResponse response = ((VaadinPortletResponse) context
  57. .getResponse()).getPortletResponse();
  58. RenderResponse renderResponse = (RenderResponse) response;
  59. return renderResponse;
  60. }
  61. @Override
  62. protected void appendMainScriptTagContents(BootstrapContext context,
  63. StringBuilder builder) throws IOException {
  64. // fixed base theme to use - all portal pages with Vaadin
  65. // applications will load this exactly once
  66. String portalTheme = ((VaadinPortletRequest) context.getRequest())
  67. .getPortalProperty(VaadinPortlet.PORTAL_PARAMETER_VAADIN_THEME);
  68. if (portalTheme != null && !portalTheme.equals(context.getThemeName())) {
  69. String portalThemeUri = getThemeUri(context, portalTheme);
  70. // XSS safe - originates from portal properties
  71. builder.append("vaadin.loadTheme('" + portalThemeUri + "');");
  72. }
  73. super.appendMainScriptTagContents(context, builder);
  74. }
  75. @Override
  76. protected String getMainDivStyle(BootstrapContext context) {
  77. VaadinService vaadinService = context.getRequest().getService();
  78. return vaadinService.getDeploymentConfiguration()
  79. .getApplicationOrSystemProperty(
  80. VaadinPortlet.PORTLET_PARAMETER_STYLE, null);
  81. }
  82. @Override
  83. protected JsonObject getApplicationParameters(BootstrapContext context)
  84. throws PaintException {
  85. JsonObject parameters = super.getApplicationParameters(context);
  86. VaadinPortletResponse response = (VaadinPortletResponse) context
  87. .getResponse();
  88. VaadinPortletRequest request = (VaadinPortletRequest) context
  89. .getRequest();
  90. MimeResponse portletResponse = (MimeResponse) response
  91. .getPortletResponse();
  92. ResourceURL resourceURL = portletResponse.createResourceURL();
  93. resourceURL.setResourceID("v-browserDetails");
  94. parameters.put("browserDetailsUrl", resourceURL.toString());
  95. // Always send path info as a query parameter
  96. parameters
  97. .put(ApplicationConstants.SERVICE_URL_PATH_AS_PARAMETER, true);
  98. // If we are running in Liferay then we need to prefix all parameters
  99. // with the portlet namespace
  100. if (request instanceof VaadinLiferayRequest) {
  101. parameters.put(
  102. ApplicationConstants.SERVICE_URL_PARAMETER_NAMESPACE,
  103. response.getPortletResponse().getNamespace());
  104. }
  105. return parameters;
  106. }
  107. }