/**
* TODO Document me!
- *
+ *
* @author peholmst
*/
public abstract class AbstractApplicationPortlet extends GenericPortlet
/**
* Gets an application property value.
- *
+ *
* @param parameterName
* the Name or the parameter.
* @return String value or null if not found
/**
* Gets an system property value.
- *
+ *
* @param parameterName
* the Name or the parameter.
* @return String value or null if not found
/**
* Gets an application or system property value.
- *
+ *
* @param parameterName
* the Name or the parameter.
* @param defaultValue
/**
* Returns true if the servlet is running in production mode. Production
* mode disables all debug facilities.
- *
+ *
* @return true if in production mode, false if in debug mode
*/
public boolean isProductionMode() {
}
/* Update browser information from request */
- applicationContext.getBrowser()
- .updateBrowserProperties(request);
+ updateBrowserProperties(applicationContext.getBrowser(),
+ request);
/* Start the newly created application */
startApplication(request, application, applicationContext);
}
}
+ private void updateBrowserProperties(WebBrowser browser,
+ PortletRequest request) {
+ browser.updateBrowserProperties(request.getLocale(), null, request
+ .isSecure(), request.getProperty("user-agent"), request
+ .getParameter("sw"), request.getParameter("sh"));
+ }
+
@Override
public void processEvent(EventRequest request, EventResponse response)
throws PortletException, IOException {
throws IOException, MalformedURLException, PortletException {
System.out.println("writeAjaxPage");
-
+
response.setContentType("text/html");
final BufferedWriter page = new BufferedWriter(new OutputStreamWriter(
response.getPortletOutputStream(), "UTF-8"));
String widgetsetURL = getWidgetsetURL(widgetset, request);
String themeURI = getThemeURI(themeName, request);
-
+
//System.out.println("themeName : " + themeName);
//System.out.println("widgetsetURL : " + widgetsetURL);
//System.out.println("themeURI : " + themeURI);
/*
* We need this in order to get uploads to work.
- *
+ *
* TODO This may cause weird side effects on other places where appUri
* is used!
*/
}
// System.out.println("Printing default portal theme " + portalTheme);
-
+
page.write("if(!vaadin.themesLoaded['" + portalTheme + "']) {\n");
page.write("var defaultStylesheet = document.createElement('link');\n");
page.write("defaultStylesheet.setAttribute('rel', 'stylesheet');\n");
.write("document.getElementsByTagName('head')[0].appendChild(stylesheet);\n");
page.write("vaadin.themesLoaded['" + themeName + "'] = true;\n}\n");
}
-
+
page.write("</script>\n");
// TODO Warn if widgetset has not been loaded after 15 seconds
/**
* Returns the theme for given request/window
- *
+ *
* @param request
* @param window
* @return
/**
* Get system messages from the current application class
- *
+ *
* @return
*/
protected SystemMessages getSystemMessages() {
* Send notification to client's application. Used to notify client of
* critical errors and session expiration due to long inactivity. Server has
* no knowledge of what application client refers to.
- *
+ *
* @param request
* the Portlet request instance.
* @param response
/**
* Abstract implementation of the ApplicationServlet which handles all
* communication between the client and the server.
- *
+ *
* It is possible to extend this class to provide own functionality but in most
* cases this is unnecessary.
- *
- *
+ *
+ *
* @author IT Mill Ltd.
* @version
* @VERSION@
@SuppressWarnings("serial")
public abstract class AbstractApplicationServlet extends HttpServlet implements Constants {
-
+
// TODO Move some (all?) of the constants to a separate interface (shared with portlet)
/**
/**
* Called by the servlet container to indicate to a servlet that the servlet
* is being placed into service.
- *
+ *
* @param servletConfig
* the object containing the servlet's configuration and
* initialization parameters
/**
* Gets an application property value.
- *
+ *
* @param parameterName
* the Name or the parameter.
* @return String value or null if not found
/**
* Gets an system property value.
- *
+ *
* @param parameterName
* the Name or the parameter.
* @return String value or null if not found
/**
* Gets an application or system property value.
- *
+ *
* @param parameterName
* the Name or the parameter.
* @param defaultValue
/**
* Returns true if the servlet is running in production mode. Production
* mode disables all debug facilities.
- *
+ *
* @return true if in production mode, false if in debug mode
*/
public boolean isProductionMode() {
/**
* Receives standard HTTP requests from the public service method and
* dispatches them.
- *
+ *
* @param request
* the object that contains the request the client made of the
* servlet.
.getApplicationManager(application, this);
/* Update browser information from the request */
- webApplicationContext.getBrowser().updateBrowserProperties(request);
+ updateBrowserProperties(webApplicationContext.getBrowser(), request);
// Start the newly created application
startApplication(request, application, webApplicationContext);
}
}
+ private void updateBrowserProperties(WebBrowser browser,
+ HttpServletRequest request) {
+ browser.updateBrowserProperties(request.getLocale(), request
+ .getRemoteAddr(), request.isSecure(), request
+ .getHeader("user-agent"), request.getParameter("sw"), request
+ .getParameter("sh"));
+ }
+
protected ClassLoader getClassLoader() throws ServletException {
// Gets custom class loader
final String classLoaderName = getApplicationOrSystemProperty(
* Send notification to client's application. Used to notify client of
* critical errors and session expiration due to long inactivity. Server has
* no knowledge of what application client refers to.
- *
+ *
* @param request
* the HTTP request instance.
* @param response
* Returns the application instance to be used for the request. If an
* existing instance is not found a new one is created or null is returned
* to indicate that the application is not available.
- *
+ *
* @param request
* @param requestType
* @return
/**
* Check if the request should create an application if an existing
* application is not found.
- *
+ *
* @param request
* @param requestType
* @return true if an application should be created, false otherwise
* Gets resource path using different implementations. Required to
* supporting different servlet container implementations (application
* servers).
- *
+ *
* @param servletContext
* @param path
* the resource path.
* processing, when a certain URI is requested. The handlers are invoked
* before any windows URIs are processed and if a DownloadStream is returned
* it is sent to the client.
- *
+ *
* @param stream
* the download stream.
- *
+ *
* @param request
* the HTTP request instance.
* @param response
* the HTTP response to write to.
* @throws IOException
- *
+ *
* @see com.vaadin.terminal.URIHandler
*/
@SuppressWarnings("unchecked")
* Creates a new application and registers it into WebApplicationContext
* (aka session). This is not meant to be overridden. Override
* getNewApplication to create the application instance in a custom way.
- *
+ *
* @param request
* @return
* @throws ServletException
/**
* Returns the theme for given request/window
- *
+ *
* @param request
* @param window
* @return
/**
* Returns the default theme. Must never return null.
- *
+ *
* @return
*/
public static String getDefaultTheme() {
/**
* Calls URI handlers for the request. If an URI handler returns a
* DownloadStream the stream is passed to the client for downloading.
- *
+ *
* @param applicationManager
* @param window
* @param request
* Invalidate session (weird to have session if we're saying
* that it's expired, and worse: portal integration will fail
* since the session is not created by the portal.
- *
+ *
* Session must be invalidated before criticalNotification as it
* commits the response.
*/
/**
* Creates a new application for the given request.
- *
+ *
* @param request
* the HTTP request.
* @return A new Application instance.
/**
* Starts the application if it is not already running.
- *
+ *
* @param request
* @param application
* @param webApplicationContext
* Check if this is a request for a static resource and, if it is, serve the
* resource to the client. Returns true if a file was served and the request
* has been handled, false otherwise.
- *
+ *
* @param request
* @param response
* @return
/**
* Serve resources from VAADIN directory.
- *
+ *
* @param request
* @param response
* @throws IOException
/**
* Get system messages from the current application class
- *
+ *
* @return
*/
protected SystemMessages getSystemMessages() {
* Return the URL from where static files, e.g. the widgetset and the theme,
* are served. In a standard configuration the VAADIN folder inside the
* returned folder is what is used for widgetsets and themes.
- *
+ *
* The returned folder is usually the same as the context path and
* independent of the application.
- *
+ *
* @param request
* @return The location of static resources (should contain the VAADIN
* directory). Never ends with a slash (/).
/**
* The default method to fetch static files location. This method does not
* check for request attribute {@value #REQUEST_VAADIN_STATIC_FILE_PATH}.
- *
+ *
* @param request
* @return
*/
/**
* Remove any heading or trailing "what" from the "string".
- *
+ *
* @param string
* @param what
* @return
/**
* Write a redirect response to the main page of the application.
- *
+ *
* @param request
* @param response
* @throws IOException
* {@link #writeAjaxPageHtmlMainDiv(BufferedWriter, String, String, String)}
* <li> {@link #writeAjaxPageHtmlBodyEnd(BufferedWriter)}
* </ul>
- *
+ *
* @param request
* the HTTP request.
* @param response
* Returns the application class identifier for use in the application CSS
* class name in the root DIV. The application CSS class name is of form
* "v-app-"+getApplicationCSSClassName().
- *
+ *
* This method should normally not be overridden.
- *
+ *
* @return The CSS class name to use in combination with "v-app-".
*/
protected String getApplicationCSSClassName() {
/**
* Get the URI for the application theme.
- *
+ *
* A portal-wide default theme is fetched from the portal shared resource
* directory (if any), other themes from the portlet.
- *
+ *
* @param themeName
* @param request
* @return
* Override this method if you want to add some custom html around around
* the div element into which the actual vaadin application will be
* rendered.
- *
+ *
* @param page
* @param appId
* @param classNames
}
/**
- *
+ *
* * Method to write the script part of the page which loads needed vaadin
* scripts and themes.
* <p>
* Override this method if you want to add some custom html around scripts.
- *
+ *
* @param window
* @param themeName
* @param application
}
/**
- *
+ *
* Method to open the body tag of the html kickstart page.
* <p>
* This method is responsible for closing the head tag and opening the body
* tag.
* <p>
* Override this method if you want to add some custom html to the page.
- *
+ *
* @param page
* @throws IOException
*/
* <p>
* Override this method if you want to add some custom html to the header of
* the page.
- *
+ *
* @param page
* @param title
* @param themeUri
* <p>
* Override this method if you want to add some custom html to the very
* beginning of the page.
- *
+ *
* @param page
* @throws IOException
*/
* Method to set http request headers for the Vaadin kickstart page.
* <p>
* Override this method if you need to customize http headers of the page.
- *
+ *
* @param response
*/
protected void setAjaxPageHeaders(HttpServletResponse response) {
/**
* Gets the current application URL from request.
- *
+ *
* @param request
* the HTTP request.
* @throws MalformedURLException
/**
* Gets the existing application for given request. Looks for application
* instance for given request based on the requested URL.
- *
+ *
* @param request
* the HTTP request.
* @param allowSessionCreation
/**
* Ends the application.
- *
+ *
* @param request
* the HTTP request.
* @param response
/**
* Gets the existing application or create a new one. Get a window within an
* application based on the requested URI.
- *
+ *
* @param request
* the HTTP Request.
* @param application
/**
* Returns the path info; note that this _can_ be different than
* request.getPathInfo() (e.g application runner).
- *
+ *
* @param request
* @return
*/
/**
* Gets relative location of a theme resource.
- *
+ *
* @param theme
* the Theme name.
* @param resource
/**
* Gets the contained throwable.
- *
+ *
* @see com.vaadin.terminal.Terminal.ErrorEvent#getThrowable()
*/
public Throwable getThrowable() {
/**
* Gets the source ParameterHandler.
- *
+ *
* @see com.vaadin.terminal.ParameterHandler.ErrorEvent#getParameterHandler()
*/
public ParameterHandler getParameterHandler() {
private final Throwable throwable;
/**
- *
+ *
* @param owner
* @param throwable
*/
/**
* Gets the contained throwable.
- *
+ *
* @see com.vaadin.terminal.Terminal.ErrorEvent#getThrowable()
*/
public Throwable getThrowable() {
/**
* Gets the source URIHandler.
- *
+ *
* @see com.vaadin.terminal.URIHandler.ErrorEvent#getURIHandler()
*/
public URIHandler getURIHandler() {
-/*
+/*
@ITMillApache2LicenseForJavaFiles@
*/
import java.util.Locale;
-import javax.portlet.PortletRequest;
-import javax.servlet.http.HttpServletRequest;
-
import com.vaadin.terminal.Terminal;
@SuppressWarnings("serial")
/**
* There is no default-theme for this terminal type.
- *
+ *
* @return Allways returns null.
*/
public String getDefaultTheme() {
/**
* Get the height of the users display in pixels.
- *
+ *
*/
public int getScreenHeight() {
return screenHeight;
/**
* Get the width of the users display in pixels.
- *
+ *
*/
public int getScreenWidth() {
return screenWidth;
/**
* Get the browser user-agent string.
- *
+ *
* @return
*/
public String getBrowserApplication() {
return browserApplication;
}
- void updateBrowserProperties(HttpServletRequest request) {
- locale = request.getLocale();
- address = request.getRemoteAddr();
- secureConnection = request.isSecure();
-
- final String agent = request.getHeader("user-agent");
- if (agent != null) {
- browserApplication = agent;
- }
-
- final String sw = request.getParameter("sw");
- if (sw != null) {
- final String sh = request.getParameter("sh");
- try {
- screenHeight = Integer.parseInt(sh);
- screenWidth = Integer.parseInt(sw);
- } catch (final NumberFormatException e) {
- screenHeight = screenWidth = 0;
- }
- }
- }
-
- /*
- * TODO: This method depends on the Portlet API, although this should not be
- * a problem as the portlet API will only be required if the method is
- * invoked.
+ /**
+ * For internal use by AbstractApplicationServlet/AbstractApplicationPortlet
+ * only.
*/
- void updateBrowserProperties(PortletRequest request) {
- locale = request.getLocale();
- address = null;
- secureConnection = request.isSecure();
-
- final String agent = request.getProperty("user-agent");
+ void updateBrowserProperties(Locale locale, String address,
+ boolean secureConnection, String agent, String sw, String sh) {
+ this.locale = locale;
+ this.address = address;
+ this.secureConnection = secureConnection;
if (agent != null) {
browserApplication = agent;
}
- final String sw = request.getParameter("sw");
if (sw != null) {
- final String sh = request.getParameter("sh");
try {
screenHeight = Integer.parseInt(sh);
screenWidth = Integer.parseInt(sw);
/**
* Get the IP-address of the web browser. If the application is running
* inside a portlet, this method will return null.
- *
+ *
* @return IP-address in 1.12.123.123 -format
*/
public String getAddress() {