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-2016 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.VaadinPortlet;
  26. import com.vaadin.server.VaadinPortlet.VaadinLiferayRequest;
  27. import com.vaadin.server.VaadinPortletRequest;
  28. import com.vaadin.server.VaadinPortletResponse;
  29. import com.vaadin.server.VaadinRequest;
  30. import com.vaadin.server.VaadinResponse;
  31. import com.vaadin.server.VaadinService;
  32. import com.vaadin.server.VaadinSession;
  33. import com.vaadin.shared.ApplicationConstants;
  34. import elemental.json.JsonObject;
  35. public class PortletBootstrapHandler extends BootstrapHandler {
  36. @Override
  37. public boolean handleRequest(VaadinSession session, VaadinRequest request,
  38. VaadinResponse response) throws IOException {
  39. PortletRequest portletRequest = ((VaadinPortletRequest) request)
  40. .getPortletRequest();
  41. if (portletRequest instanceof RenderRequest) {
  42. return super.handleRequest(session, request, response);
  43. } else {
  44. return false;
  45. }
  46. }
  47. @Override
  48. protected String getServiceUrl(BootstrapContext context) {
  49. ResourceURL portletResourceUrl = getRenderResponse(context)
  50. .createResourceURL();
  51. portletResourceUrl.setResourceID(VaadinPortlet.RESOURCE_URL_ID);
  52. return portletResourceUrl.toString();
  53. }
  54. private RenderResponse getRenderResponse(BootstrapContext context) {
  55. PortletResponse response = ((VaadinPortletResponse) context
  56. .getResponse()).getPortletResponse();
  57. RenderResponse renderResponse = (RenderResponse) response;
  58. return renderResponse;
  59. }
  60. @Override
  61. protected void appendMainScriptTagContents(BootstrapContext context,
  62. StringBuilder builder) throws IOException {
  63. // fixed base theme to use - all portal pages with Vaadin
  64. // applications will load this exactly once
  65. String portalTheme = ((VaadinPortletRequest) context.getRequest())
  66. .getPortalProperty(VaadinPortlet.PORTAL_PARAMETER_VAADIN_THEME);
  67. if (portalTheme != null
  68. && !portalTheme.equals(context.getThemeName())) {
  69. String portalThemeUri = getThemeUri(context, portalTheme);
  70. // XSS safe - originates from portal properties
  71. builder.append("vaadin.loadTheme('").append(portalThemeUri)
  72. .append("');");
  73. }
  74. super.appendMainScriptTagContents(context, builder);
  75. }
  76. @Override
  77. protected String getMainDivStyle(BootstrapContext context) {
  78. VaadinService vaadinService = context.getRequest().getService();
  79. return vaadinService.getDeploymentConfiguration()
  80. .getApplicationOrSystemProperty(
  81. VaadinPortlet.PORTLET_PARAMETER_STYLE, null);
  82. }
  83. @Override
  84. protected JsonObject getApplicationParameters(BootstrapContext context) {
  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. String serviceUrlParameterName = ApplicationConstants.V_RESOURCE_PATH;
  96. // If we are running in Liferay then we need to prefix all parameters
  97. // with the portlet namespace
  98. if (request instanceof VaadinLiferayRequest) {
  99. serviceUrlParameterName = response.getPortletResponse()
  100. .getNamespace() + serviceUrlParameterName;
  101. }
  102. parameters.put(ApplicationConstants.SERVICE_URL_PARAMETER_NAME,
  103. serviceUrlParameterName);
  104. return parameters;
  105. }
  106. }