diff options
Diffstat (limited to 'simple/simple-http/src/main/java/org/simpleframework/http/Scheme.java')
-rw-r--r-- | simple/simple-http/src/main/java/org/simpleframework/http/Scheme.java | 136 |
1 files changed, 136 insertions, 0 deletions
diff --git a/simple/simple-http/src/main/java/org/simpleframework/http/Scheme.java b/simple/simple-http/src/main/java/org/simpleframework/http/Scheme.java new file mode 100644 index 0000000..b6df799 --- /dev/null +++ b/simple/simple-http/src/main/java/org/simpleframework/http/Scheme.java @@ -0,0 +1,136 @@ +/* +* Scheme.java February 2014 +* +* Copyright (C) 2014, Niall Gallagher <niallg@users.sf.net> +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + * implied. See the License for the specific language governing + * permissions and limitations under the License. +*/ + +package org.simpleframework.http; + +import java.net.URI; + +/** +* The <code>Scheme</code> represents a scheme used for a URI. Here + * only schemes that directly relate to HTTP are provided, which + * includes HTTP/1.1 schemes and WebSocket 1.0 schemes. + * + * @author Niall Gallagher +*/ +public enum Scheme { + + /** + * This represents the scheme for a plaintext HTTP connection. + */ + HTTP("http", false), + + /** + * This represents the scheme for a HTTP over TLS connection. + */ + HTTPS("https", true), + + /** + * This represents the scheme for a plaintext WebSocket connection. + */ + WS("ws", false), + + /** + * This represents the scheme for WebSocket over TLS connection. + */ + WSS("wss", true); + + /** + * This is the actual scheme token that is to be used in the URI. + */ + public final String scheme; + + /** + * This is used to determine if the connection is secure or not. + */ + public final boolean secure; + + /** + * Constructor for the <code>Scheme</code> object. This is used + * create an entry using the specific scheme token and a boolean + * indicating if the scheme is secure or not. + * + * @param scheme this is the scheme token to be used + * @param secure this determines if the scheme is secure or not + */ + private Scheme(String scheme, boolean secure) { + this.scheme = scheme; + this.secure = secure; + } + + /** + * This is used to determine if the scheme is secure or not. In + * general a secure scheme is one sent over a SSL/TLS connection. + * + * @return this returns true if the scheme is a secure one + */ + public boolean isSecure() { + return secure; + } + + /** + * This is used to acquire the scheme token for this. The scheme + * token can be used to prefix a absolute fully qualified URI. + * + * @return the scheme token representing this scheme + */ + public String getScheme() { + return scheme; + } + + /** + * This is used to resolve the scheme given a token. If there is + * no matching scheme for the provided token a default of HTTP + * is provided. + * + * @param token this is the token used to determine the scheme + * + * @return this returns the match or HTTP if none matched + */ + public static Scheme resolveScheme(String token) { + if(token != null) { + for(Scheme scheme : values()) { + if(token.equalsIgnoreCase(scheme.scheme)) { + return scheme; + } + } + } + return HTTP; + } + + /** + * This is used to resolve the scheme given a <code>URI</code>. If + * there is no matching scheme for the provided instance then this + * will return null. + * + * @param token this is the object to resolve a scheme for + * + * @return this returns the match or null if none matched + */ + public static Scheme resolveScheme(URI target) { + if(target != null) { + String scheme = target.getScheme(); + + for(Scheme option : values()) { + if(option.scheme.equalsIgnoreCase(scheme)) { + return option; + } + } + } + return null; + } +}
\ No newline at end of file |