123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226 |
- package com.vaadin.terminal.gwt.server;
-
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.OutputStream;
-
- import javax.portlet.ActionRequest;
- import javax.portlet.ActionResponse;
- import javax.portlet.ClientDataRequest;
- import javax.portlet.MimeResponse;
- import javax.portlet.PortletRequest;
- import javax.portlet.PortletResponse;
- import javax.portlet.PortletSession;
- import javax.portlet.ResourceRequest;
- import javax.portlet.ResourceResponse;
-
- import com.vaadin.Application;
- import com.vaadin.external.org.apache.commons.fileupload.FileItemIterator;
- import com.vaadin.external.org.apache.commons.fileupload.FileUpload;
- import com.vaadin.external.org.apache.commons.fileupload.FileUploadException;
- import com.vaadin.external.org.apache.commons.fileupload.portlet.PortletFileUpload;
- import com.vaadin.terminal.DownloadStream;
- import com.vaadin.ui.Window;
-
- /**
- * TODO document me!
- *
- * @author peholmst
- *
- */
- @SuppressWarnings("serial")
- public class PortletCommunicationManager extends AbstractCommunicationManager {
-
- protected String dummyURL;
-
- private static class PortletRequestWrapper implements Request {
-
- private final PortletRequest request;
-
- public PortletRequestWrapper(PortletRequest request) {
- this.request = request;
- }
-
- public Object getAttribute(String name) {
- return request.getAttribute(name);
- }
-
- public int getContentLength() {
- return ((ClientDataRequest) request).getContentLength();
- }
-
- public InputStream getInputStream() throws IOException {
- return ((ClientDataRequest) request).getPortletInputStream();
- }
-
- public String getParameter(String name) {
- return request.getParameter(name);
- }
-
- public String getRequestID() {
- return "WindowID:" + request.getWindowID();
- }
-
- public Session getSession() {
- return new PortletSessionWrapper(request.getPortletSession());
- }
-
- public Object getWrappedRequest() {
- return request;
- }
-
- public boolean isRunningInPortlet() {
- return true;
- }
-
- public void setAttribute(String name, Object o) {
- request.setAttribute(name, o);
- }
-
- }
-
- private static class PortletResponseWrapper implements Response {
-
- private final PortletResponse response;
-
- public PortletResponseWrapper(PortletResponse response) {
- this.response = response;
- }
-
- public OutputStream getOutputStream() throws IOException {
- return ((MimeResponse) response).getPortletOutputStream();
- }
-
- public Object getWrappedResponse() {
- return response;
- }
-
- public void setContentType(String type) {
- ((MimeResponse) response).setContentType(type);
- }
- }
-
- private static class PortletSessionWrapper implements Session {
-
- private final PortletSession session;
-
- public PortletSessionWrapper(PortletSession session) {
- this.session = session;
- }
-
- public Object getAttribute(String name) {
- return session.getAttribute(name);
- }
-
- public int getMaxInactiveInterval() {
- return session.getMaxInactiveInterval();
- }
-
- public Object getWrappedSession() {
- return session;
- }
-
- public boolean isNew() {
- return session.isNew();
- }
-
- public void setAttribute(String name, Object o) {
- session.setAttribute(name, o);
- }
-
- }
-
- private static class AbstractApplicationPortletWrapper implements Callback {
-
- private final AbstractApplicationPortlet portlet;
-
- public AbstractApplicationPortletWrapper(
- AbstractApplicationPortlet portlet) {
- this.portlet = portlet;
- }
-
- public void criticalNotification(Request request, Response response,
- String cap, String msg, String details, String outOfSyncURL)
- throws IOException {
- portlet.criticalNotification((PortletRequest) request
- .getWrappedRequest(), (MimeResponse) response
- .getWrappedResponse(), cap, msg, details, outOfSyncURL);
- }
-
- public String getRequestPathInfo(Request request) {
- if (request.getWrappedRequest() instanceof ResourceRequest) {
- return ((ResourceRequest) request.getWrappedRequest())
- .getResourceID();
- } else {
- // We do not use paths in portlet mode
- throw new UnsupportedOperationException(
- "PathInfo only available when using ResourceRequests");
- }
- }
-
- public InputStream getThemeResourceAsStream(String themeName,
- String resource) throws IOException {
- return portlet.getPortletContext().getResourceAsStream(
- "/" + AbstractApplicationPortlet.THEME_DIRECTORY_PATH
- + themeName + "/" + resource);
- }
-
- }
-
- public PortletCommunicationManager(Application application) {
- super(application);
- }
-
- @Override
- protected FileUpload createFileUpload() {
- return new PortletFileUpload();
- }
-
- @Override
- protected FileItemIterator getUploadItemIterator(FileUpload upload,
- Request request) throws IOException, FileUploadException {
- return ((PortletFileUpload) upload)
- .getItemIterator((ActionRequest) request.getWrappedRequest());
- }
-
- public void handleFileUpload(ActionRequest request, ActionResponse response)
- throws FileUploadException, IOException {
- doHandleFileUpload(new PortletRequestWrapper(request),
- new PortletResponseWrapper(response));
- }
-
- @Override
- protected void sendUploadResponse(Request request, Response response)
- throws IOException {
- if (response.getWrappedResponse() instanceof ActionResponse) {
- /*
- * If we do not redirect to some other page, the entire portal page
- * will be re-printed into the target of the upload request (an
- * IFRAME), which in turn will cause very strange side effects.
- */
- System.out.println("Redirecting to dummyURL: " + dummyURL);
- ((ActionResponse) response.getWrappedResponse())
- .sendRedirect(dummyURL == null ? "http://www.google.com"
- : dummyURL);
- } else
- super.sendUploadResponse(request, response);
- }
-
- public void handleUidlRequest(ResourceRequest request,
- ResourceResponse response,
- AbstractApplicationPortlet applicationPortlet)
- throws InvalidUIDLSecurityKeyException, IOException {
- doHandleUidlRequest(new PortletRequestWrapper(request),
- new PortletResponseWrapper(response),
- new AbstractApplicationPortletWrapper(applicationPortlet));
- }
-
- DownloadStream handleURI(Window window, ResourceRequest request,
- ResourceResponse response,
- AbstractApplicationPortlet applicationPortlet) {
- return handleURI(window, new PortletRequestWrapper(request),
- new PortletResponseWrapper(response),
- new AbstractApplicationPortletWrapper(applicationPortlet));
- }
-
- }
|