From 62f8f102fab8933f2209b8aa7fe9b56ef3c7fa78 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Leif=20=C3=85strand?= Date: Tue, 20 Nov 2012 15:24:46 +0200 Subject: [PATCH] Rename DependencyResource to PublishedFile (#10224) Change-Id: I18bd5fbaba7d443cab0626ddd477626995b5f16a --- .../vaadin/client/ApplicationConnection.java | 10 +-- .../com/vaadin/annotations/JavaScript.java | 2 +- .../com/vaadin/annotations/StyleSheet.java | 4 + .../server/AbstractCommunicationManager.java | 83 +++++++++---------- .../vaadin/server/ServletPortletHelper.java | 4 +- .../src/com/vaadin/server/VaadinPortlet.java | 10 +-- .../src/com/vaadin/server/VaadinServlet.java | 10 +-- .../vaadin/shared/ApplicationConstants.java | 8 +- 8 files changed, 66 insertions(+), 65 deletions(-) diff --git a/client/src/com/vaadin/client/ApplicationConnection.java b/client/src/com/vaadin/client/ApplicationConnection.java index 4c3eaff6aa..4357e431b3 100644 --- a/client/src/com/vaadin/client/ApplicationConnection.java +++ b/client/src/com/vaadin/client/ApplicationConnection.java @@ -2765,14 +2765,14 @@ public class ApplicationConnection { uidlUri = themeUri + uidlUri.substring(7); } - if (uidlUri.startsWith(ApplicationConstants.DEPENDENCY_PROTOCOL_PREFIX)) { + if (uidlUri.startsWith(ApplicationConstants.PUBLISHED_PROTOCOL_PREFIX)) { // getAppUri *should* always end with / - // substring *should* always start with / (dependency:///foo.bar - // without dependency://) + // substring *should* always start with / (published:///foo.bar + // without published://) uidlUri = ApplicationConstants.APP_PROTOCOL_PREFIX - + ApplicationConstants.DEPENDENCY_RESOURCE_PREFIX + + ApplicationConstants.PUBLISHED_FILE_PATH + uidlUri - .substring(ApplicationConstants.DEPENDENCY_PROTOCOL_PREFIX + .substring(ApplicationConstants.PUBLISHED_PROTOCOL_PREFIX .length()); // Let translation of app:// urls take care of the rest } diff --git a/server/src/com/vaadin/annotations/JavaScript.java b/server/src/com/vaadin/annotations/JavaScript.java index 1a2fdf7583..95e74ddc1a 100644 --- a/server/src/com/vaadin/annotations/JavaScript.java +++ b/server/src/com/vaadin/annotations/JavaScript.java @@ -29,7 +29,7 @@ import com.vaadin.server.ClientConnector; * method for the corresponding client-side connector is invoked. *

* Absolute URLs including protocol and host are used as is on the client-side. - * Relative urls are mapped to APP/CONNECTOR/[url] which are by default served + * Relative urls are mapped to APP/PUBLISHED/[url] which are by default served * from the classpath relative to the class where the annotation is defined. *

* Example: {@code @JavaScript( "http://host.com/file1.js", "file2.js"})} on the diff --git a/server/src/com/vaadin/annotations/StyleSheet.java b/server/src/com/vaadin/annotations/StyleSheet.java index e1a9efd696..18e78f3530 100644 --- a/server/src/com/vaadin/annotations/StyleSheet.java +++ b/server/src/com/vaadin/annotations/StyleSheet.java @@ -28,6 +28,10 @@ import com.vaadin.server.ClientConnector; * framework ensures the referenced style sheets are loaded before the init * method for the corresponding client-side connector is invoked. *

+ * Absolute URLs including protocol and host are used as is on the client-side. + * Relative urls are mapped to APP/PUBLISHED/[url] which are by default served + * from the classpath relative to the class where the annotation is defined. + *

* Example: {@code @StyleSheet( "http://host.com/file1.css", "file2.css"})} on * the class com.example.MyConnector would load the file * http://host.com/file1.css as is and file2.css from /com/example/file2.css on diff --git a/server/src/com/vaadin/server/AbstractCommunicationManager.java b/server/src/com/vaadin/server/AbstractCommunicationManager.java index b0199a3886..731d83067e 100644 --- a/server/src/com/vaadin/server/AbstractCommunicationManager.java +++ b/server/src/com/vaadin/server/AbstractCommunicationManager.java @@ -163,7 +163,7 @@ public abstract class AbstractCommunicationManager implements Serializable { private ClientConnector highlightedConnector; - private Map> dependencyResourceContexts = new HashMap>(); + private Map> publishedFileContexts = new HashMap>(); private Map> pidToNameToStreamVariable; @@ -1196,18 +1196,16 @@ public abstract class AbstractCommunicationManager implements Serializable { JavaScript jsAnnotation = class1 .getAnnotation(JavaScript.class); if (jsAnnotation != null) { - for (String resource : jsAnnotation.value()) { - scriptDependencies.add(registerDependency(resource, - class1)); + for (String uri : jsAnnotation.value()) { + scriptDependencies.add(registerDependency(uri, class1)); } } StyleSheet styleAnnotation = class1 .getAnnotation(StyleSheet.class); if (styleAnnotation != null) { - for (String resource : styleAnnotation.value()) { - styleDependencies.add(registerDependency(resource, - class1)); + for (String uri : styleAnnotation.value()) { + styleDependencies.add(registerDependency(uri, class1)); } } } @@ -1286,18 +1284,18 @@ public abstract class AbstractCommunicationManager implements Serializable { URI uri = new URI(resourceUri); String protocol = uri.getScheme(); - if (ApplicationConstants.DEPENDENCY_PROTOCOL_NAME.equals(protocol)) { + if (ApplicationConstants.PUBLISHED_PROTOCOL_NAME.equals(protocol)) { // Strip initial slash String resourceName = uri.getPath().substring(1); - return registerDependencyResource(resourceName, context); + return registerPublishedFile(resourceName, context); } if (protocol != null || uri.getHost() != null) { return resourceUri; } - // Bare path interpreted as dependency resource - return registerDependencyResource(resourceUri, context); + // Bare path interpreted as published file + return registerPublishedFile(resourceUri, context); } catch (URISyntaxException e) { getLogger().log(Level.WARNING, "Could not parse resource url " + resourceUri, e); @@ -1305,24 +1303,23 @@ public abstract class AbstractCommunicationManager implements Serializable { } } - private String registerDependencyResource(String name, Class context) { - synchronized (dependencyResourceContexts) { - // Add to map of names accepted by serveDependencyResource - if (dependencyResourceContexts.containsKey(name)) { - Class oldContext = dependencyResourceContexts.get(name); + private String registerPublishedFile(String name, Class context) { + synchronized (publishedFileContexts) { + // Add to map of names accepted by servePublishedFile + if (publishedFileContexts.containsKey(name)) { + Class oldContext = publishedFileContexts.get(name); if (oldContext != context) { getLogger().warning( - "Dependency " + name + " defined by both " - + context + " and " + oldContext - + ". Dependency from " + oldContext + name + " published by both " + context + " and " + + oldContext + ". File from " + oldContext + " will be used."); } } else { - dependencyResourceContexts.put(name, context); + publishedFileContexts.put(name, context); } } - return ApplicationConstants.DEPENDENCY_PROTOCOL_PREFIX + "/" + name; + return ApplicationConstants.PUBLISHED_PROTOCOL_PREFIX + "/" + name; } /** @@ -2623,64 +2620,64 @@ public abstract class AbstractCommunicationManager implements Serializable { /** * Serve a connector resource from the classpath if the resource has * previously been registered by calling - * {@link #registerDependency(String, Class)}. Sending arbitrary files from - * the classpath is prevented by only accepting resource names that have - * explicitly been registered. Resources can currently only be registered by - * including a {@link JavaScript} or {@link StyleSheet} annotation on a - * Connector class. + * {@link #registerPublishedFile(String, Class)}. Sending arbitrary files + * from the classpath is prevented by only accepting resource names that + * have explicitly been registered. Resources can currently only be + * registered by including a {@link JavaScript} or {@link StyleSheet} + * annotation on a Connector class. * * @param request * @param response * * @throws IOException */ - public void serveDependencyResource(VaadinRequest request, + public void servePublishedFile(VaadinRequest request, VaadinResponse response) throws IOException { String pathInfo = request.getPathInfo(); // + 2 to also remove beginning and ending slashes - String resourceName = pathInfo - .substring(ApplicationConstants.DEPENDENCY_RESOURCE_PREFIX + String fileName = pathInfo + .substring(ApplicationConstants.PUBLISHED_FILE_PATH .length() + 2); - final String mimetype = response.getService().getMimeType(resourceName); + final String mimetype = response.getService().getMimeType(fileName); // Security check: avoid accidentally serving from the UI of the // classpath instead of relative to the context class - if (resourceName.startsWith("/")) { + if (fileName.startsWith("/")) { getLogger().warning( - "Dependency resource request starting with / rejected: " - + resourceName); - response.sendError(HttpServletResponse.SC_NOT_FOUND, resourceName); + "Published file request starting with / rejected: " + + fileName); + response.sendError(HttpServletResponse.SC_NOT_FOUND, fileName); return; } // Check that the resource name has been registered Class context; - synchronized (dependencyResourceContexts) { - context = dependencyResourceContexts.get(resourceName); + synchronized (publishedFileContexts) { + context = publishedFileContexts.get(fileName); } // Security check: don't serve resource if the name hasn't been // registered in the map if (context == null) { getLogger().warning( - "Dependency resource request for unknown resource rejected: " - + resourceName); - response.sendError(HttpServletResponse.SC_NOT_FOUND, resourceName); + "Rejecting published file request for file that has not been published: " + + fileName); + response.sendError(HttpServletResponse.SC_NOT_FOUND, fileName); return; } // Resolve file relative to the location of the context class - InputStream in = context.getResourceAsStream(resourceName); + InputStream in = context.getResourceAsStream(fileName); if (in == null) { getLogger().warning( - resourceName + " defined by " + context.getName() + fileName + " published by " + context.getName() + " not found. Verify that the file " + context.getPackage().getName().replace('.', '/') - + '/' + resourceName + + '/' + fileName + " is available on the classpath."); - response.sendError(HttpServletResponse.SC_NOT_FOUND, resourceName); + response.sendError(HttpServletResponse.SC_NOT_FOUND, fileName); return; } diff --git a/server/src/com/vaadin/server/ServletPortletHelper.java b/server/src/com/vaadin/server/ServletPortletHelper.java index 07218f9abd..00fdccdeb7 100644 --- a/server/src/com/vaadin/server/ServletPortletHelper.java +++ b/server/src/com/vaadin/server/ServletPortletHelper.java @@ -100,9 +100,9 @@ class ServletPortletHelper implements Serializable { return hasPathPrefix(request, UPLOAD_URL_PREFIX); } - public static boolean isDependencyResourceRequest(VaadinRequest request) { + public static boolean isPublishedFileRequest(VaadinRequest request) { return hasPathPrefix(request, - ApplicationConstants.DEPENDENCY_RESOURCE_PREFIX + "/"); + ApplicationConstants.PUBLISHED_FILE_PATH + "/"); } public static boolean isUIDLRequest(VaadinRequest request) { diff --git a/server/src/com/vaadin/server/VaadinPortlet.java b/server/src/com/vaadin/server/VaadinPortlet.java index caa15b7ffd..ac2d81b202 100644 --- a/server/src/com/vaadin/server/VaadinPortlet.java +++ b/server/src/com/vaadin/server/VaadinPortlet.java @@ -311,7 +311,7 @@ public class VaadinPortlet extends GenericPortlet implements Constants { */ @Deprecated protected enum RequestType { - FILE_UPLOAD, UIDL, RENDER, STATIC_FILE, APP, DUMMY, EVENT, ACTION, UNKNOWN, BROWSER_DETAILS, DEPENDENCY_RESOURCE, HEARTBEAT; + FILE_UPLOAD, UIDL, RENDER, STATIC_FILE, APP, DUMMY, EVENT, ACTION, UNKNOWN, BROWSER_DETAILS, PUBLISHED_FILE, HEARTBEAT; } /** @@ -334,8 +334,8 @@ public class VaadinPortlet extends GenericPortlet implements Constants { } else if (ServletPortletHelper.isFileUploadRequest(vaadinRequest)) { return RequestType.FILE_UPLOAD; } else if (ServletPortletHelper - .isDependencyResourceRequest(vaadinRequest)) { - return RequestType.DEPENDENCY_RESOURCE; + .isPublishedFileRequest(vaadinRequest)) { + return RequestType.PUBLISHED_FILE; } else if (ServletPortletHelper.isAppRequest(vaadinRequest)) { return RequestType.APP; } else if (ServletPortletHelper.isHeartbeatRequest(vaadinRequest)) { @@ -427,8 +427,8 @@ public class VaadinPortlet extends GenericPortlet implements Constants { PortletCommunicationManager communicationManager = (PortletCommunicationManager) vaadinSession .getCommunicationManager(); - if (requestType == RequestType.DEPENDENCY_RESOURCE) { - communicationManager.serveDependencyResource( + if (requestType == RequestType.PUBLISHED_FILE) { + communicationManager.servePublishedFile( vaadinRequest, vaadinResponse); return; } else if (requestType == RequestType.HEARTBEAT) { diff --git a/server/src/com/vaadin/server/VaadinServlet.java b/server/src/com/vaadin/server/VaadinServlet.java index 47c2944b10..60f2fed123 100644 --- a/server/src/com/vaadin/server/VaadinServlet.java +++ b/server/src/com/vaadin/server/VaadinServlet.java @@ -301,8 +301,8 @@ public class VaadinServlet extends HttpServlet implements Constants { CommunicationManager communicationManager = (CommunicationManager) vaadinSession .getCommunicationManager(); - if (requestType == RequestType.DEPENDENCY_RESOURCE) { - communicationManager.serveDependencyResource(request, response); + if (requestType == RequestType.PUBLISHED_FILE) { + communicationManager.servePublishedFile(request, response); return; } else if (requestType == RequestType.HEARTBEAT) { communicationManager.handleHeartbeatRequest(request, response, @@ -1085,7 +1085,7 @@ public class VaadinServlet extends HttpServlet implements Constants { */ @Deprecated protected enum RequestType { - FILE_UPLOAD, BROWSER_DETAILS, UIDL, OTHER, STATIC_FILE, APP, DEPENDENCY_RESOURCE, HEARTBEAT; + FILE_UPLOAD, BROWSER_DETAILS, UIDL, OTHER, STATIC_FILE, APP, PUBLISHED_FILE, HEARTBEAT; } /** @@ -1098,8 +1098,8 @@ public class VaadinServlet extends HttpServlet implements Constants { protected RequestType getRequestType(VaadinServletRequest request) { if (ServletPortletHelper.isFileUploadRequest(request)) { return RequestType.FILE_UPLOAD; - } else if (ServletPortletHelper.isDependencyResourceRequest(request)) { - return RequestType.DEPENDENCY_RESOURCE; + } else if (ServletPortletHelper.isPublishedFileRequest(request)) { + return RequestType.PUBLISHED_FILE; } else if (isBrowserDetailsRequest(request)) { return RequestType.BROWSER_DETAILS; } else if (ServletPortletHelper.isUIDLRequest(request)) { diff --git a/shared/src/com/vaadin/shared/ApplicationConstants.java b/shared/src/com/vaadin/shared/ApplicationConstants.java index a5eb109cb6..61bb33521d 100644 --- a/shared/src/com/vaadin/shared/ApplicationConstants.java +++ b/shared/src/com/vaadin/shared/ApplicationConstants.java @@ -26,12 +26,12 @@ public class ApplicationConstants { public static final String HEARTBEAT_REQUEST_PATH = "HEARTBEAT/"; - public static final String DEPENDENCY_RESOURCE_PREFIX = APP_REQUEST_PATH - + '/' + "DEPENDENCY"; + public static final String PUBLISHED_FILE_PATH = APP_REQUEST_PATH + + '/' + "PUBLISHED"; public static final String APP_PROTOCOL_PREFIX = "app://"; - public static final String DEPENDENCY_PROTOCOL_NAME = "dependency"; - public static final String DEPENDENCY_PROTOCOL_PREFIX = DEPENDENCY_PROTOCOL_NAME + public static final String PUBLISHED_PROTOCOL_NAME = "published"; + public static final String PUBLISHED_PROTOCOL_PREFIX = PUBLISHED_PROTOCOL_NAME + "://"; public static final String UIDL_SECURITY_TOKEN_ID = "Vaadin-Security-Key"; -- 2.39.5