Author: markt Date: Thu Oct 15 11:32:50 2015 New Revision: 1708799 URL: http://svn.apache.org/viewvc?rev=1708799&view=rev Log: Servlet 4.0 Complete PushBuilder interface Still need to complete the push() implementation
Modified: tomcat/trunk/java/javax/servlet/http/PushBuilder.java tomcat/trunk/java/org/apache/catalina/core/ApplicationPushBuilder.java Modified: tomcat/trunk/java/javax/servlet/http/PushBuilder.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/javax/servlet/http/PushBuilder.java?rev=1708799&r1=1708798&r2=1708799&view=diff ============================================================================== --- tomcat/trunk/java/javax/servlet/http/PushBuilder.java (original) +++ tomcat/trunk/java/javax/servlet/http/PushBuilder.java Thu Oct 15 11:32:50 2015 @@ -42,6 +42,45 @@ public interface PushBuilder { PushBuilder method(String method); /** + * Specifies the query string to use in subsequent push requests generated + * by a call to {@link #push()}. This will be appended to any query string + * specified in the call to {@link #path(String)}. + * + * @param queryString The query string to use to generate push requests + * + * @return This builder instance + */ + PushBuilder queryString(String queryString); + + /** + * Specifies the session ID to use in subsequent push requests generated + * by a call to {@link #push()}. The session ID will be presented the same + * way as it is on the original request (cookie or URL parameter). The + * default is determined in the following order: + * <ul> + * <li>the requested session ID for the originating request</li> + * <li>the session ID generated in the originated request</li> + * <li>{@code null}</li> + * </ul> + * + * @param sessionId The session ID to use to generate push requests + * + * @return This builder instance + */ + PushBuilder sessionId(String sessionId); + + /** + * Sets if the request will be conditional. If {@code true} the values from + * {@link #getEtag()} and {@link #getLastModified()} will be used to + * construct appropriate headers. + * + * @param conditional Should generated push requests be conditional + * + * @return This builder instance + */ + PushBuilder conditional(boolean conditional); + + /** * Sets a HTTP header on the request. Any existing headers of the same name * are first remove. * @@ -87,6 +126,28 @@ public interface PushBuilder { PushBuilder path(String path); /** + * Sets the etag to be used for conditional push requests. This will be + * set to {@code null} after a call to {@link #push()} so it must be + * explicitly set for every push request that requires it. + * + * @param etag The etag use for the push request + * + * @return This builder instance + */ + PushBuilder etag(String etag); + + /** + * Sets the last modified to be used for conditional push requests. This + * will be set to {@code null} after a call to {@link #push()} so it must be + * explicitly set for every push request that requires it. + * + * @param lastModified The last modified value to use for the push request + * + * @return This builder instance + */ + PushBuilder lastModified(String lastModified); + + /** * Generates the push request. After calling this method the following * fields are set to {@code null}: * <ul> @@ -110,6 +171,30 @@ public interface PushBuilder { String getMethod(); /** + * Obtain the query string that will be used for push requests generated by + * future calls to {@code push()}. + * + * @return The query string that will be appended to push requests. + */ + String getQueryString(); + + /** + * Obtain the session ID that will be used for push requests generated by + * future calls to {@code push()}. + * + * @return The session that will be used for push requests. + */ + String getSessionId(); + + /** + * Will push requests generated by future calls to {@code push()} be + * conditional. + * + * @return {@code true} if push requests will be conditional + */ + boolean isConditional(); + + /** * @return The current set of names of HTTP headers to be used the next time * {@code push()} is called. */ @@ -126,4 +211,29 @@ public interface PushBuilder { * then any may be returned */ String getHeader(String name); + + /** + * Obtain the path that will be used for the push request that will be + * generated by the next call to {@code push()}. + * + * @return The path value that will be associated with the next push request + */ + String getPath(); + + /** + * Obtain the etag that will be used for the push request that will be + * generated by the next call to {@code push()}. + * + * @return The etag value that will be associated with the next push request + */ + String getEtag(); + + /** + * Obtain the last modified that will be used for the push request that will + * be generated by the next call to {@code push()}. + * + * @return The last modified value that will be associated with the next + * push request + */ + String getLastModified(); } Modified: tomcat/trunk/java/org/apache/catalina/core/ApplicationPushBuilder.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/core/ApplicationPushBuilder.java?rev=1708799&r1=1708798&r2=1708799&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/core/ApplicationPushBuilder.java (original) +++ tomcat/trunk/java/org/apache/catalina/core/ApplicationPushBuilder.java Thu Oct 15 11:32:50 2015 @@ -41,8 +41,13 @@ public class ApplicationPushBuilder impl private final org.apache.coyote.Request coyoteRequest; private String method = "GET"; - private String path; private Map<String,List<String>> headers = new CaseInsensitiveKeyMap<>(); + private String path; + private String etag; + private String lastModified; + private String queryString; + private String sessionId; + private boolean conditional; public ApplicationPushBuilder(HttpServletRequest request) { baseRequest = request; @@ -92,6 +97,12 @@ public class ApplicationPushBuilder impl @Override + public String getPath() { + return path; + } + + + @Override public PushBuilder method(String method) { this.method = method; return this; @@ -105,6 +116,71 @@ public class ApplicationPushBuilder impl @Override + public PushBuilder etag(String etag) { + this.etag = etag; + return this; + } + + + @Override + public String getEtag() { + return etag; + } + + + @Override + public PushBuilder lastModified(String lastModified) { + this.lastModified = lastModified; + return this; + } + + + @Override + public String getLastModified() { + return lastModified; + } + + + @Override + public PushBuilder queryString(String queryString) { + this.queryString = queryString; + return this; + } + + + @Override + public String getQueryString() { + return queryString; + } + + + @Override + public PushBuilder sessionId(String sessionId) { + this.sessionId = sessionId; + return this; + } + + + @Override + public String getSessionId() { + return sessionId; + } + + + @Override + public PushBuilder conditional(boolean conditional) { + this.conditional = conditional; + return this; + } + + + @Override + public boolean isConditional() { + return conditional; + } + + + @Override public PushBuilder addHeader(String name, String value) { List<String> values = headers.get(name); if (values == null) { @@ -177,11 +253,13 @@ public class ApplicationPushBuilder impl // TODO Copy headers // TODO Implement other required attributes // TODO Copy across / set other required attributes + // TODO Conditional request processing coyoteRequest.action(ActionCode.PUSH_REQUEST, pushTarget); // Reset for next call to this method pushTarget = null; path = null; + etag = null; } } --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org