final PrintWriter outWriter = new PrintWriter(new BufferedWriter(
new OutputStreamWriter(out, "UTF-8")));
outWriter.print("<html><body>dummy page</body></html>");
- outWriter.flush();
- out.close();
+ outWriter.close();
} else if (requestType == RequestType.STATIC_FILE) {
serveStaticResources((ResourceRequest) request,
(ResourceResponse) response);
/* Notify listeners */
+ // Finds the window within the application
+ Window window = null;
+ synchronized (application) {
+ if (application.isRunning()) {
+ switch (requestType) {
+ case FILE_UPLOAD:
+ // no window
+ break;
+ case APPLICATION_RESOURCE:
+ // use main window - should not need any window
+ window = application.getMainWindow();
+ break;
+ default:
+ window = applicationManager.getApplicationWindow(
+ request, this, application, null);
+ }
+ // if window not found, not a problem - use null
+ }
+ }
+
// TODO Should this happen before or after the transaction
// starts?
if (request instanceof RenderRequest) {
applicationContext.firePortletRenderRequest(application,
- (RenderRequest) request, (RenderResponse) response);
+ window, (RenderRequest) request,
+ (RenderResponse) response);
} else if (request instanceof ActionRequest) {
applicationContext.firePortletActionRequest(application,
- (ActionRequest) request, (ActionResponse) response);
+ window, (ActionRequest) request,
+ (ActionResponse) response);
} else if (request instanceof EventRequest) {
applicationContext.firePortletEventRequest(application,
- (EventRequest) request, (EventResponse) response);
+ window, (EventRequest) request,
+ (EventResponse) response);
} else if (request instanceof ResourceRequest) {
applicationContext.firePortletResourceRequest(application,
- (ResourceRequest) request,
+ window, (ResourceRequest) request,
(ResourceResponse) response);
}
// Handles AJAX UIDL requests
applicationManager.handleUidlRequest(
(ResourceRequest) request,
- (ResourceResponse) response, this);
+ (ResourceResponse) response, this, window);
return;
} else {
/*
}
handleOtherRequest(request, response, requestType,
- application, applicationContext, applicationManager);
+ application, window, applicationContext,
+ applicationManager);
}
} catch (final SessionExpiredException e) {
// TODO Figure out a better way to deal with
*/
private void handleOtherRequest(PortletRequest request,
PortletResponse response, RequestType requestType,
- Application application,
+ Application application, Window window,
PortletApplicationContext2 applicationContext,
PortletCommunicationManager applicationManager)
throws PortletException, IOException, MalformedURLException {
- /*
- * Always use the main window when running inside a portlet.
- */
- Window window = application.getMainWindow();
if (window == null) {
throw new PortletException(ERROR_NO_WINDOW_FOUND);
}
while ((bytesRead = data.read(buffer)) > 0) {
out.write(buffer, 0, bytesRead);
+ // TODO this may cause problems on GateIn
out.flush();
}
out.close();
+ "\"appError\": {" + "\"caption\":" + caption + ","
+ "\"message\" : " + message + "," + "\"url\" : " + url
+ "}}, \"resources\": {}, \"locales\":[]}]");
- outWriter.flush();
outWriter.close();
- out.flush();
}
/**
return;
} else if (requestType == RequestType.UIDL) {
// Handles AJAX UIDL requests
- applicationManager.handleUidlRequest(request, response, this);
+ Window window = applicationManager.getApplicationWindow(
+ request, this, application, null);
+ applicationManager.handleUidlRequest(request, response, this,
+ window);
return;
}
package com.vaadin.terminal.gwt.server;
-import com.vaadin.Application;
-import com.vaadin.Application.SystemMessages;
-import com.vaadin.external.org.apache.commons.fileupload.FileItemIterator;
-import com.vaadin.external.org.apache.commons.fileupload.FileItemStream;
-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.ProgressListener;
-import com.vaadin.terminal.ApplicationResource;
-import com.vaadin.terminal.DownloadStream;
-import com.vaadin.terminal.PaintException;
-import com.vaadin.terminal.PaintTarget;
-import com.vaadin.terminal.Paintable;
-import com.vaadin.terminal.URIHandler;
-import com.vaadin.terminal.UploadStream;
-import com.vaadin.terminal.VariableOwner;
-import com.vaadin.terminal.Paintable.RepaintRequestEvent;
-import com.vaadin.terminal.Terminal.ErrorEvent;
-import com.vaadin.terminal.Terminal.ErrorListener;
-import com.vaadin.terminal.gwt.client.ApplicationConnection;
-import com.vaadin.terminal.gwt.server.ComponentSizeValidator.InvalidLayout;
-import com.vaadin.ui.AbstractField;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.Upload;
-import com.vaadin.ui.Window;
-import com.vaadin.ui.Upload.UploadException;
-
import java.io.BufferedWriter;
import java.io.CharArrayWriter;
import java.io.IOException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
+import com.vaadin.Application;
+import com.vaadin.Application.SystemMessages;
+import com.vaadin.external.org.apache.commons.fileupload.FileItemIterator;
+import com.vaadin.external.org.apache.commons.fileupload.FileItemStream;
+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.ProgressListener;
+import com.vaadin.terminal.ApplicationResource;
+import com.vaadin.terminal.DownloadStream;
+import com.vaadin.terminal.PaintException;
+import com.vaadin.terminal.PaintTarget;
+import com.vaadin.terminal.Paintable;
+import com.vaadin.terminal.URIHandler;
+import com.vaadin.terminal.UploadStream;
+import com.vaadin.terminal.VariableOwner;
+import com.vaadin.terminal.Paintable.RepaintRequestEvent;
+import com.vaadin.terminal.Terminal.ErrorEvent;
+import com.vaadin.terminal.Terminal.ErrorListener;
+import com.vaadin.terminal.gwt.client.ApplicationConnection;
+import com.vaadin.terminal.gwt.server.ComponentSizeValidator.InvalidLayout;
+import com.vaadin.ui.AbstractField;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.Upload;
+import com.vaadin.ui.Window;
+import com.vaadin.ui.Upload.UploadException;
+
/**
* This is a common base class for the server-side implementations of the
* communication system between the client code (compiled with GWT into
* @param request
* @param response
* @param callback
+ * @param window
+ * target window for the UIDL request, can be null if target not
+ * found
* @throws IOException
* @throws InvalidUIDLSecurityKeyException
*/
protected void doHandleUidlRequest(Request request, Response response,
- Callback callback) throws IOException,
+ Callback callback, Window window) throws IOException,
InvalidUIDLSecurityKeyException {
// repaint requested or session has timed out and new one is created
synchronized (application) {
// Finds the window within the application
- Window window = null;
if (application.isRunning()) {
- window = doGetApplicationWindow(request, callback, application,
- null);
// Returns if no window found
if (window == null) {
// This should not happen, no windows exists but
}
}
- // out.flush(); - this line will cause errors when deployed on GateIn.
- out.close();
+ outWriter.close();
}
/**
outWriter.print("}]");
}
- outWriter.flush();
outWriter.close();
}
}
return stream;
} else {
- // Resolve the prefix end inded
+ // Resolve the prefix end index
final int index = uri.indexOf('/');
if (index > 0) {
String prefix = uri.substring(0, index);
*
* @param request
* @param response
+ * @param applicationServlet
+ * @param window
+ * target window of the UIDL request, can be null if window not
+ * found
* @throws IOException
* @throws ServletException
*/
public void handleUidlRequest(HttpServletRequest request,
HttpServletResponse response,
- AbstractApplicationServlet applicationServlet) throws IOException,
- ServletException, InvalidUIDLSecurityKeyException {
+ AbstractApplicationServlet applicationServlet, Window window)
+ throws IOException, ServletException,
+ InvalidUIDLSecurityKeyException {
doHandleUidlRequest(new HttpServletRequestWrapper(request),
new HttpServletResponseWrapper(response),
- new AbstractApplicationServletWrapper(applicationServlet));
+ new AbstractApplicationServletWrapper(applicationServlet),
+ window);
}
/**
}
}
- public void firePortletRenderRequest(Application app,
+ public void firePortletRenderRequest(Application app, Window window,
RenderRequest request, RenderResponse response) {
Set<PortletListener> listeners = portletListeners.get(app);
if (listeners != null) {
for (PortletListener l : listeners) {
l.handleRenderRequest(request, new RestrictedRenderResponse(
- response));
+ response), window);
}
}
}
- public void firePortletActionRequest(Application app,
+ public void firePortletActionRequest(Application app, Window window,
ActionRequest request, ActionResponse response) {
String key = request.getParameter(ActionRequest.ACTION_NAME);
if (eventActionDestinationMap.containsKey(key)) {
Set<PortletListener> listeners = portletListeners.get(app);
if (listeners != null) {
for (PortletListener l : listeners) {
- l.handleActionRequest(request, response);
+ l.handleActionRequest(request, response, window);
}
}
}
}
- public void firePortletEventRequest(Application app, EventRequest request,
- EventResponse response) {
+ public void firePortletEventRequest(Application app, Window window,
+ EventRequest request, EventResponse response) {
Set<PortletListener> listeners = portletListeners.get(app);
if (listeners != null) {
for (PortletListener l : listeners) {
- l.handleEventRequest(request, response);
+ l.handleEventRequest(request, response, window);
}
}
}
- public void firePortletResourceRequest(Application app,
+ public void firePortletResourceRequest(Application app, Window window,
ResourceRequest request, ResourceResponse response) {
Set<PortletListener> listeners = portletListeners.get(app);
if (listeners != null) {
for (PortletListener l : listeners) {
- l.handleResourceRequest(request, response);
+ l.handleResourceRequest(request, response, window);
}
}
}
public interface PortletListener extends Serializable {
public void handleRenderRequest(RenderRequest request,
- RenderResponse response);
+ RenderResponse response, Window window);
public void handleActionRequest(ActionRequest request,
- ActionResponse response);
+ ActionResponse response, Window window);
public void handleEventRequest(EventRequest request,
- EventResponse response);
+ EventResponse response, Window window);
public void handleResourceRequest(ResourceRequest request,
- ResourceResponse response);
+ ResourceResponse response, Window window);
}
/**
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
+import java.lang.reflect.Method;
import javax.portlet.ActionRequest;
import javax.portlet.ActionResponse;
import javax.portlet.PortletSession;
import javax.portlet.ResourceRequest;
import javax.portlet.ResourceResponse;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequestWrapper;
import com.vaadin.Application;
import com.vaadin.external.org.apache.commons.fileupload.FileItemIterator;
}
public String getParameter(String name) {
- return request.getParameter(name);
+ String value = request.getParameter(name);
+ if (value == null) {
+ // for GateIn portlet container simple-portal
+ try {
+ Method getRealReq = request.getClass().getMethod(
+ "getRealRequest");
+ HttpServletRequestWrapper origRequest = (HttpServletRequestWrapper) getRealReq
+ .invoke(request);
+ value = origRequest.getParameter(name);
+ } catch (Exception e) {
+ // do nothing - not on GateIn simple-portal
+ }
+ }
+ return value;
}
public String getRequestID() {
public void handleUidlRequest(ResourceRequest request,
ResourceResponse response,
- AbstractApplicationPortlet applicationPortlet)
+ AbstractApplicationPortlet applicationPortlet, Window window)
throws InvalidUIDLSecurityKeyException, IOException {
doHandleUidlRequest(new PortletRequestWrapper(request),
new PortletResponseWrapper(response),
- new AbstractApplicationPortletWrapper(applicationPortlet));
+ new AbstractApplicationPortletWrapper(applicationPortlet),
+ window);
}
DownloadStream handleURI(Window window, ResourceRequest request,
new AbstractApplicationPortletWrapper(applicationPortlet));
}
+ /**
+ * Gets the existing application or creates a new one. Get a window within
+ * an application based on the requested URI.
+ *
+ * @param request
+ * the portlet Request.
+ * @param applicationPortlet
+ * @param application
+ * the Application to query for window.
+ * @param assumedWindow
+ * if the window has been already resolved once, this parameter
+ * must contain the window.
+ * @return Window matching the given URI or null if not found.
+ * @throws ServletException
+ * if an exception has occurred that interferes with the
+ * servlet's normal operation.
+ */
+ Window getApplicationWindow(PortletRequest request,
+ AbstractApplicationPortlet applicationPortlet,
+ Application application, Window assumedWindow) {
+ return doGetApplicationWindow(new PortletRequestWrapper(request),
+ new AbstractApplicationPortletWrapper(applicationPortlet),
+ application, assumedWindow);
+ }
+
}