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.

JSR286Portlet.java 8.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241
  1. package com.vaadin.tests.integration;
  2. import java.io.ByteArrayOutputStream;
  3. import java.io.OutputStream;
  4. import java.util.Iterator;
  5. import java.util.Map;
  6. import java.util.logging.Level;
  7. import java.util.logging.Logger;
  8. import javax.portlet.ActionRequest;
  9. import javax.portlet.ActionResponse;
  10. import javax.portlet.EventRequest;
  11. import javax.portlet.EventResponse;
  12. import javax.portlet.PortletMode;
  13. import javax.portlet.PortletRequest;
  14. import javax.portlet.PortletURL;
  15. import javax.portlet.RenderRequest;
  16. import javax.portlet.RenderResponse;
  17. import javax.portlet.ResourceRequest;
  18. import javax.portlet.ResourceResponse;
  19. import javax.portlet.WindowState;
  20. import com.vaadin.annotations.StyleSheet;
  21. import com.vaadin.server.ExternalResource;
  22. import com.vaadin.server.VaadinPortletRequest;
  23. import com.vaadin.server.VaadinPortletService;
  24. import com.vaadin.server.VaadinPortletSession;
  25. import com.vaadin.server.VaadinPortletSession.PortletListener;
  26. import com.vaadin.shared.ui.ContentMode;
  27. import com.vaadin.server.VaadinRequest;
  28. import com.vaadin.ui.Embedded;
  29. import com.vaadin.ui.Label;
  30. import com.vaadin.ui.Link;
  31. import com.vaadin.ui.Notification;
  32. import com.vaadin.ui.Notification.Type;
  33. import com.vaadin.ui.UI;
  34. import com.vaadin.ui.Upload;
  35. import com.vaadin.ui.Upload.Receiver;
  36. import com.vaadin.ui.VerticalLayout;
  37. import com.vaadin.v7.ui.TextField;
  38. /**
  39. * Adapted from old PortletDemo to support integration testing.
  40. */
  41. @StyleSheet("PortletConnectorResource.css")
  42. public class JSR286Portlet extends UI {
  43. TextField tf = new TextField("Some value");
  44. Label userInfo = new Label();
  45. Link portletEdit = new Link();
  46. Link portletMax = new Link();
  47. Link someAction = null;
  48. Label userAgent = new Label();
  49. Label screenWidth = new Label();
  50. Label screenHeight = new Label();
  51. private VerticalLayout main = new VerticalLayout();
  52. @Override
  53. protected void init(VaadinRequest request) {
  54. setContent(main);
  55. Embedded appResourceTest = new Embedded(
  56. "Test of ApplicationResources with full path",
  57. new FlagSeResource());
  58. main.addComponent(appResourceTest);
  59. Embedded specialNameResourceTest = new Embedded(
  60. "Test ApplicationResources with special names",
  61. new SpecialNameResource());
  62. specialNameResourceTest.addStyleName("hugeBorder");
  63. main.addComponent(specialNameResourceTest);
  64. userInfo.setCaption("User info");
  65. userInfo.setContentMode(ContentMode.PREFORMATTED);
  66. main.addComponent(userInfo);
  67. tf.setEnabled(false);
  68. tf.setImmediate(true);
  69. main.addComponent(tf);
  70. portletEdit.setEnabled(false);
  71. main.addComponent(portletEdit);
  72. portletMax.setEnabled(false);
  73. main.addComponent(portletMax);
  74. Upload upload = new Upload("Upload a file", new Receiver() {
  75. @Override
  76. public OutputStream receiveUpload(String filename,
  77. String mimeType) {
  78. return new ByteArrayOutputStream();
  79. }
  80. });
  81. main.addComponent(upload);
  82. possiblyChangedModeOrState();
  83. userAgent.setCaption("User Agent");
  84. main.addComponent(userAgent);
  85. screenWidth.setCaption("Screen width");
  86. main.addComponent(screenWidth);
  87. screenHeight.setCaption("Screen height");
  88. main.addComponent(screenHeight);
  89. getSession().addPortletListener(new DemoPortletListener());
  90. }
  91. @Override
  92. public VaadinPortletSession getSession() {
  93. return (VaadinPortletSession) super.getSession();
  94. }
  95. private void possiblyChangedModeOrState() {
  96. VaadinPortletRequest request = VaadinPortletService.getCurrentRequest();
  97. String censoredUserAgent = getPage().getWebBrowser()
  98. .getBrowserApplication();
  99. if (censoredUserAgent != null
  100. && censoredUserAgent.contains("Chrome/")) {
  101. // Censor version info as it tends to change
  102. censoredUserAgent = censoredUserAgent.replaceAll("Chrome/[^ ]* ",
  103. "Chrome/xyz ");
  104. }
  105. userAgent.setValue(censoredUserAgent);
  106. screenWidth.setValue(String.valueOf(getPage().getBrowserWindowWidth()));
  107. screenHeight
  108. .setValue(String.valueOf(getPage().getBrowserWindowHeight()));
  109. boolean inViewMode = (request.getPortletMode() == PortletMode.VIEW);
  110. boolean inNormalState = (request
  111. .getWindowState() == WindowState.NORMAL);
  112. // Portlet up-and-running, enable stuff
  113. portletEdit.setEnabled(true);
  114. portletMax.setEnabled(true);
  115. // Editable if we're in editmode
  116. tf.setEnabled(!inViewMode);
  117. // Show notification about current mode and state
  118. getPage().showNotification(new Notification(
  119. "Portlet status", "Mode: " + request.getPortletMode()
  120. + " State: " + request.getWindowState(),
  121. Type.WARNING_MESSAGE));
  122. // Display current user info
  123. Map<?, ?> uinfo = (Map<?, ?>) request
  124. .getAttribute(PortletRequest.USER_INFO);
  125. if (uinfo != null) {
  126. String s = "";
  127. for (Iterator<?> it = uinfo.keySet().iterator(); it.hasNext();) {
  128. Object key = it.next();
  129. Object val = uinfo.get(key);
  130. s += key + ": " + val + "\n";
  131. }
  132. if (request.isUserInRole("administrator")) {
  133. s += "(administrator)";
  134. }
  135. userInfo.setValue(s);
  136. } else {
  137. userInfo.setValue("-");
  138. }
  139. // Create Edit/Done link (actionUrl)
  140. PortletURL url = getSession().generateActionURL("changeMode");
  141. try {
  142. if (inViewMode) {
  143. url.setPortletMode(PortletMode.EDIT);
  144. portletEdit.setCaption("Edit");
  145. } else {
  146. url.setPortletMode(PortletMode.VIEW);
  147. portletEdit.setCaption("Done");
  148. }
  149. portletEdit.setResource(new ExternalResource(url.toString()));
  150. } catch (Exception e) {
  151. portletEdit.setEnabled(false);
  152. Logger.getLogger(getClass().getName()).log(Level.SEVERE,
  153. "Error creating edit mode link", e);
  154. }
  155. // Create Maximize/Normal link (actionUrl)
  156. url = getSession().generateActionURL("changeState");
  157. try {
  158. if (inNormalState) {
  159. url.setWindowState(WindowState.MAXIMIZED);
  160. portletMax.setCaption("Maximize");
  161. } else {
  162. url.setWindowState(WindowState.NORMAL);
  163. portletMax.setCaption("Back to normal");
  164. }
  165. portletMax.setResource(new ExternalResource(url.toString()));
  166. } catch (Exception e) {
  167. portletMax.setEnabled(false);
  168. Logger.getLogger(getClass().getName()).log(Level.SEVERE,
  169. "Error creating state change link", e);
  170. }
  171. if (someAction == null) {
  172. url = getSession().generateActionURL("someAction");
  173. try {
  174. someAction = new Link("An action",
  175. new ExternalResource(url.toString()));
  176. main.addComponent(someAction);
  177. } catch (Exception e) {
  178. // Oops
  179. System.err.println("Could not create someAction: " + e);
  180. }
  181. }
  182. }
  183. private class DemoPortletListener implements PortletListener {
  184. @Override
  185. public void handleActionRequest(ActionRequest request,
  186. ActionResponse response, UI window) {
  187. main.addComponent(new Label(
  188. "Action '" + request.getParameter("javax.portlet.action")
  189. + "' received"));
  190. }
  191. @Override
  192. public void handleRenderRequest(RenderRequest request,
  193. RenderResponse response, UI window) {
  194. possiblyChangedModeOrState();
  195. }
  196. @Override
  197. public void handleEventRequest(EventRequest request,
  198. EventResponse response, UI window) {
  199. // events not used by this test
  200. }
  201. @Override
  202. public void handleResourceRequest(ResourceRequest request,
  203. ResourceResponse response, UI window) {
  204. // nothing special to do here
  205. }
  206. }
  207. }