You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@guacamole.apache.org by jm...@apache.org on 2016/03/29 06:20:19 UTC
[10/51] [abbrv] incubator-guacamole-client git commit: GUACAMOLE-1:
Remove useless .net.basic subpackage, now that everything is being renamed.
http://git-wip-us.apache.org/repos/asf/incubator-guacamole-client/blob/648a6c96/guacamole/src/main/java/org/apache/guacamole/net/basic/properties/StringSetProperty.java
----------------------------------------------------------------------
diff --git a/guacamole/src/main/java/org/apache/guacamole/net/basic/properties/StringSetProperty.java b/guacamole/src/main/java/org/apache/guacamole/net/basic/properties/StringSetProperty.java
deleted file mode 100644
index 34fb58a..0000000
--- a/guacamole/src/main/java/org/apache/guacamole/net/basic/properties/StringSetProperty.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright (C) 2015 Glyptodon LLC
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-package org.apache.guacamole.net.basic.properties;
-
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-import java.util.regex.Pattern;
-import org.apache.guacamole.GuacamoleException;
-import org.apache.guacamole.properties.GuacamoleProperty;
-
-/**
- * A GuacamoleProperty whose value is a Set of unique Strings. The string value
- * parsed to produce this set is a comma-delimited list. Duplicate values are
- * ignored, as is any whitespace following delimiters. To maintain
- * compatibility with the behavior of Java properties in general, only
- * whitespace at the beginning of each value is ignored; trailing whitespace
- * becomes part of the value.
- *
- * @author Michael Jumper
- */
-public abstract class StringSetProperty implements GuacamoleProperty<Set<String>> {
-
- /**
- * A pattern which matches against the delimiters between values. This is
- * currently simply a comma and any following whitespace. Parts of the
- * input string which match this pattern will not be included in the parsed
- * result.
- */
- private static final Pattern DELIMITER_PATTERN = Pattern.compile(",\\s*");
-
- @Override
- public Set<String> parseValue(String values) throws GuacamoleException {
-
- // If no property provided, return null.
- if (values == null)
- return null;
-
- // Split string into a set of individual values
- List<String> valueList = Arrays.asList(DELIMITER_PATTERN.split(values));
- return new HashSet<String>(valueList);
-
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-guacamole-client/blob/648a6c96/guacamole/src/main/java/org/apache/guacamole/net/basic/properties/package-info.java
----------------------------------------------------------------------
diff --git a/guacamole/src/main/java/org/apache/guacamole/net/basic/properties/package-info.java b/guacamole/src/main/java/org/apache/guacamole/net/basic/properties/package-info.java
deleted file mode 100644
index 6ca9523..0000000
--- a/guacamole/src/main/java/org/apache/guacamole/net/basic/properties/package-info.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Copyright (C) 2013 Glyptodon LLC
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-/**
- * Classes related to the properties which the Guacamole web application
- * (and stock parts of it) read from guacamole.properties.
- */
-package org.apache.guacamole.net.basic.properties;
-
http://git-wip-us.apache.org/repos/asf/incubator-guacamole-client/blob/648a6c96/guacamole/src/main/java/org/apache/guacamole/net/basic/resource/AbstractResource.java
----------------------------------------------------------------------
diff --git a/guacamole/src/main/java/org/apache/guacamole/net/basic/resource/AbstractResource.java b/guacamole/src/main/java/org/apache/guacamole/net/basic/resource/AbstractResource.java
deleted file mode 100644
index c4489a4..0000000
--- a/guacamole/src/main/java/org/apache/guacamole/net/basic/resource/AbstractResource.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Copyright (C) 2015 Glyptodon LLC
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-package org.apache.guacamole.net.basic.resource;
-
-/**
- * Base abstract resource implementation which provides an associated mimetype,
- * and modification time. Classes which extend AbstractResource must provide
- * their own InputStream, however.
- *
- * @author Michael Jumper
- */
-public abstract class AbstractResource implements Resource {
-
- /**
- * The mimetype of this resource.
- */
- private final String mimetype;
-
- /**
- * The time this resource was last modified, in milliseconds since midnight
- * of January 1, 1970 UTC.
- */
- private final long lastModified;
-
- /**
- * Initializes this AbstractResource with the given mimetype and
- * modification time.
- *
- * @param mimetype
- * The mimetype of this resource.
- *
- * @param lastModified
- * The time this resource was last modified, in milliseconds since
- * midnight of January 1, 1970 UTC.
- */
- public AbstractResource(String mimetype, long lastModified) {
- this.mimetype = mimetype;
- this.lastModified = lastModified;
- }
-
- /**
- * Initializes this AbstractResource with the given mimetype. The
- * modification time of the resource is set to the current system time.
- *
- * @param mimetype
- * The mimetype of this resource.
- */
- public AbstractResource(String mimetype) {
- this(mimetype, System.currentTimeMillis());
- }
-
- @Override
- public long getLastModified() {
- return lastModified;
- }
-
- @Override
- public String getMimeType() {
- return mimetype;
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-guacamole-client/blob/648a6c96/guacamole/src/main/java/org/apache/guacamole/net/basic/resource/ByteArrayResource.java
----------------------------------------------------------------------
diff --git a/guacamole/src/main/java/org/apache/guacamole/net/basic/resource/ByteArrayResource.java b/guacamole/src/main/java/org/apache/guacamole/net/basic/resource/ByteArrayResource.java
deleted file mode 100644
index af071d8..0000000
--- a/guacamole/src/main/java/org/apache/guacamole/net/basic/resource/ByteArrayResource.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright (C) 2015 Glyptodon LLC
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-package org.apache.guacamole.net.basic.resource;
-
-import java.io.ByteArrayInputStream;
-import java.io.InputStream;
-
-/**
- * A resource which contains a defined byte array.
- *
- * @author Michael Jumper
- */
-public class ByteArrayResource extends AbstractResource {
-
- /**
- * The bytes contained by this resource.
- */
- private final byte[] bytes;
-
- /**
- * Creates a new ByteArrayResource which provides access to the given byte
- * array. Changes to the given byte array will affect this resource even
- * after the resource is created. Changing the byte array while an input
- * stream from this resource is in use has undefined behavior.
- *
- * @param mimetype
- * The mimetype of the resource.
- *
- * @param bytes
- * The bytes that this resource should contain.
- */
- public ByteArrayResource(String mimetype, byte[] bytes) {
- super(mimetype);
- this.bytes = bytes;
- }
-
- @Override
- public InputStream asStream() {
- return new ByteArrayInputStream(bytes);
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-guacamole-client/blob/648a6c96/guacamole/src/main/java/org/apache/guacamole/net/basic/resource/ClassPathResource.java
----------------------------------------------------------------------
diff --git a/guacamole/src/main/java/org/apache/guacamole/net/basic/resource/ClassPathResource.java b/guacamole/src/main/java/org/apache/guacamole/net/basic/resource/ClassPathResource.java
deleted file mode 100644
index 5dc5392..0000000
--- a/guacamole/src/main/java/org/apache/guacamole/net/basic/resource/ClassPathResource.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Copyright (C) 2015 Glyptodon LLC
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-package org.apache.guacamole.net.basic.resource;
-
-import java.io.InputStream;
-
-/**
- * A resource which is located within the classpath of an arbitrary
- * ClassLoader.
- *
- * @author Michael Jumper
- */
-public class ClassPathResource extends AbstractResource {
-
- /**
- * The classloader to use when reading this resource.
- */
- private final ClassLoader classLoader;
-
- /**
- * The path of this resource relative to the classloader.
- */
- private final String path;
-
- /**
- * Creates a new ClassPathResource which uses the given ClassLoader to
- * read the resource having the given path.
- *
- * @param classLoader
- * The ClassLoader to use when reading the resource.
- *
- * @param mimetype
- * The mimetype of the resource.
- *
- * @param path
- * The path of the resource relative to the given ClassLoader.
- */
- public ClassPathResource(ClassLoader classLoader, String mimetype, String path) {
- super(mimetype);
- this.classLoader = classLoader;
- this.path = path;
- }
-
- /**
- * Creates a new ClassPathResource which uses the ClassLoader associated
- * with the ClassPathResource class to read the resource having the given
- * path.
- *
- * @param mimetype
- * The mimetype of the resource.
- *
- * @param path
- * The path of the resource relative to the ClassLoader associated
- * with the ClassPathResource class.
- */
- public ClassPathResource(String mimetype, String path) {
- this(ClassPathResource.class.getClassLoader(), mimetype, path);
- }
-
- @Override
- public InputStream asStream() {
- return classLoader.getResourceAsStream(path);
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-guacamole-client/blob/648a6c96/guacamole/src/main/java/org/apache/guacamole/net/basic/resource/Resource.java
----------------------------------------------------------------------
diff --git a/guacamole/src/main/java/org/apache/guacamole/net/basic/resource/Resource.java b/guacamole/src/main/java/org/apache/guacamole/net/basic/resource/Resource.java
deleted file mode 100644
index f8accdd..0000000
--- a/guacamole/src/main/java/org/apache/guacamole/net/basic/resource/Resource.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright (C) 2015 Glyptodon LLC
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-package org.apache.guacamole.net.basic.resource;
-
-import java.io.InputStream;
-
-/**
- * An arbitrary resource that can be served to a user via HTTP. Resources are
- * anonymous but have a defined mimetype and corresponding input stream.
- *
- * @author Michael Jumper
- */
-public interface Resource {
-
- /**
- * Returns the mimetype of this resource. This function MUST always return
- * a value. If the type is unknown, return "application/octet-stream".
- *
- * @return
- * The mimetype of this resource.
- */
- String getMimeType();
-
- /**
- * Returns the time the resource was last modified in milliseconds since
- * midnight of January 1, 1970 UTC.
- *
- * @return
- * The time the resource was last modified, in milliseconds.
- */
- long getLastModified();
-
- /**
- * Returns an InputStream which reads the contents of this resource,
- * starting with the first byte. Reading from the returned InputStream will
- * not affect reads from other InputStreams returned by other calls to
- * asStream(). The returned InputStream must be manually closed when no
- * longer needed. If the resource is unexpectedly unavailable, this will
- * return null.
- *
- * @return
- * An InputStream which reads the contents of this resource, starting
- * with the first byte, or null if the resource is unavailable.
- */
- InputStream asStream();
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-guacamole-client/blob/648a6c96/guacamole/src/main/java/org/apache/guacamole/net/basic/resource/ResourceServlet.java
----------------------------------------------------------------------
diff --git a/guacamole/src/main/java/org/apache/guacamole/net/basic/resource/ResourceServlet.java b/guacamole/src/main/java/org/apache/guacamole/net/basic/resource/ResourceServlet.java
deleted file mode 100644
index 8266049..0000000
--- a/guacamole/src/main/java/org/apache/guacamole/net/basic/resource/ResourceServlet.java
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- * Copyright (C) 2015 Glyptodon LLC
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-package org.apache.guacamole.net.basic.resource;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Servlet which serves a given resource for all HTTP GET requests. The HEAD
- * method is correctly supported, and HTTP 304 ("Not Modified") responses will
- * be properly returned for GET requests depending on the last time the
- * resource was modified.
- *
- * @author Michael Jumper
- */
-public class ResourceServlet extends HttpServlet {
-
- /**
- * Logger for this class.
- */
- private static final Logger logger = LoggerFactory.getLogger(ResourceServlet.class);
-
- /**
- * The size of the buffer to use when transferring data from the input
- * stream of a resource to the output stream of a request.
- */
- private static final int BUFFER_SIZE = 10240;
-
- /**
- * The resource to serve for every GET request.
- */
- private final Resource resource;
-
- /**
- * Creates a new ResourceServlet which serves the given Resource for all
- * HTTP GET requests.
- *
- * @param resource
- * The Resource to serve.
- */
- public ResourceServlet(Resource resource) {
- this.resource = resource;
- }
-
- @Override
- protected void doHead(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
-
- // Set last modified and content type headers
- response.addDateHeader("Last-Modified", resource.getLastModified());
- response.setContentType(resource.getMimeType());
-
- }
-
- @Override
- protected void doGet(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
-
- // Get input stream from resource
- InputStream input = resource.asStream();
-
- // If resource does not exist, return not found
- if (input == null) {
- logger.debug("Resource does not exist: \"{}\"", request.getServletPath());
- response.setStatus(HttpServletResponse.SC_NOT_FOUND);
- return;
- }
-
- try {
-
- // Write headers
- doHead(request, response);
-
- // If not modified since "If-Modified-Since" header, return not modified
- long ifModifiedSince = request.getDateHeader("If-Modified-Since");
- if (resource.getLastModified() - ifModifiedSince < 1000) {
- logger.debug("Resource not modified: \"{}\"", request.getServletPath());
- response.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
- return;
- }
-
- int length;
- byte[] buffer = new byte[BUFFER_SIZE];
-
- // Write resource to response body
- OutputStream output = response.getOutputStream();
- while ((length = input.read(buffer)) != -1)
- output.write(buffer, 0, length);
-
- }
-
- // Ensure input stream is always closed
- finally {
- input.close();
- }
-
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-guacamole-client/blob/648a6c96/guacamole/src/main/java/org/apache/guacamole/net/basic/resource/SequenceResource.java
----------------------------------------------------------------------
diff --git a/guacamole/src/main/java/org/apache/guacamole/net/basic/resource/SequenceResource.java b/guacamole/src/main/java/org/apache/guacamole/net/basic/resource/SequenceResource.java
deleted file mode 100644
index 635adf5..0000000
--- a/guacamole/src/main/java/org/apache/guacamole/net/basic/resource/SequenceResource.java
+++ /dev/null
@@ -1,153 +0,0 @@
-/*
- * Copyright (C) 2015 Glyptodon LLC
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-package org.apache.guacamole.net.basic.resource;
-
-import java.io.InputStream;
-import java.io.SequenceInputStream;
-import java.util.Arrays;
-import java.util.Enumeration;
-import java.util.Iterator;
-
-/**
- * A resource which is the logical concatenation of other resources.
- *
- * @author Michael Jumper
- */
-public class SequenceResource extends AbstractResource {
-
- /**
- * The resources to be concatenated.
- */
- private final Iterable<Resource> resources;
-
- /**
- * Returns the mimetype of the first resource in the given Iterable, or
- * "application/octet-stream" if no resources are provided.
- *
- * @param resources
- * The resources from which the mimetype should be retrieved.
- *
- * @return
- * The mimetype of the first resource, or "application/octet-stream"
- * if no resources were provided.
- */
- private static String getMimeType(Iterable<Resource> resources) {
-
- // If no resources, just assume application/octet-stream
- Iterator<Resource> resourceIterator = resources.iterator();
- if (!resourceIterator.hasNext())
- return "application/octet-stream";
-
- // Return mimetype of first resource
- return resourceIterator.next().getMimeType();
-
- }
-
- /**
- * Creates a new SequenceResource as the logical concatenation of the
- * given resources. Each resource is concatenated in iteration order as
- * needed when reading from the input stream of the SequenceResource.
- *
- * @param mimetype
- * The mimetype of the resource.
- *
- * @param resources
- * The resources to concatenate within the InputStream of this
- * SequenceResource.
- */
- public SequenceResource(String mimetype, Iterable<Resource> resources) {
- super(mimetype);
- this.resources = resources;
- }
-
- /**
- * Creates a new SequenceResource as the logical concatenation of the
- * given resources. Each resource is concatenated in iteration order as
- * needed when reading from the input stream of the SequenceResource. The
- * mimetype of the resulting concatenation is derived from the first
- * resource.
- *
- * @param resources
- * The resources to concatenate within the InputStream of this
- * SequenceResource.
- */
- public SequenceResource(Iterable<Resource> resources) {
- super(getMimeType(resources));
- this.resources = resources;
- }
-
- /**
- * Creates a new SequenceResource as the logical concatenation of the
- * given resources. Each resource is concatenated in iteration order as
- * needed when reading from the input stream of the SequenceResource.
- *
- * @param mimetype
- * The mimetype of the resource.
- *
- * @param resources
- * The resources to concatenate within the InputStream of this
- * SequenceResource.
- */
- public SequenceResource(String mimetype, Resource... resources) {
- this(mimetype, Arrays.asList(resources));
- }
-
- /**
- * Creates a new SequenceResource as the logical concatenation of the
- * given resources. Each resource is concatenated in iteration order as
- * needed when reading from the input stream of the SequenceResource. The
- * mimetype of the resulting concatenation is derived from the first
- * resource.
- *
- * @param resources
- * The resources to concatenate within the InputStream of this
- * SequenceResource.
- */
- public SequenceResource(Resource... resources) {
- this(Arrays.asList(resources));
- }
-
- @Override
- public InputStream asStream() {
- return new SequenceInputStream(new Enumeration<InputStream>() {
-
- /**
- * Iterator over all resources associated with this
- * SequenceResource.
- */
- private final Iterator<Resource> resourceIterator = resources.iterator();
-
- @Override
- public boolean hasMoreElements() {
- return resourceIterator.hasNext();
- }
-
- @Override
- public InputStream nextElement() {
- return resourceIterator.next().asStream();
- }
-
- });
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-guacamole-client/blob/648a6c96/guacamole/src/main/java/org/apache/guacamole/net/basic/resource/WebApplicationResource.java
----------------------------------------------------------------------
diff --git a/guacamole/src/main/java/org/apache/guacamole/net/basic/resource/WebApplicationResource.java b/guacamole/src/main/java/org/apache/guacamole/net/basic/resource/WebApplicationResource.java
deleted file mode 100644
index 5e22831..0000000
--- a/guacamole/src/main/java/org/apache/guacamole/net/basic/resource/WebApplicationResource.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * Copyright (C) 2015 Glyptodon LLC
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-package org.apache.guacamole.net.basic.resource;
-
-import java.io.InputStream;
-import javax.servlet.ServletContext;
-
-/**
- * A resource which is located within the classpath associated with another
- * class.
- *
- * @author Michael Jumper
- */
-public class WebApplicationResource extends AbstractResource {
-
- /**
- * The servlet context to use when reading the resource and, if necessary,
- * when determining the mimetype of the resource.
- */
- private final ServletContext context;
-
- /**
- * The path of this resource relative to the ServletContext.
- */
- private final String path;
-
- /**
- * Derives a mimetype from the filename within the given path using the
- * given ServletContext, if possible.
- *
- * @param context
- * The ServletContext to use to derive the mimetype.
- *
- * @param path
- * The path to derive the mimetype from.
- *
- * @return
- * An appropriate mimetype based on the name of the file in the path,
- * or "application/octet-stream" if no mimetype could be determined.
- */
- private static String getMimeType(ServletContext context, String path) {
-
- // If mimetype is known, use defined mimetype
- String mimetype = context.getMimeType(path);
- if (mimetype != null)
- return mimetype;
-
- // Otherwise, default to application/octet-stream
- return "application/octet-stream";
-
- }
-
- /**
- * Creates a new WebApplicationResource which serves the resource at the
- * given path relative to the given ServletContext. Rather than deriving
- * the mimetype of the resource from the filename within the path, the
- * mimetype given is used.
- *
- * @param context
- * The ServletContext to use when reading the resource.
- *
- * @param mimetype
- * The mimetype of the resource.
- *
- * @param path
- * The path of the resource relative to the given ServletContext.
- */
- public WebApplicationResource(ServletContext context, String mimetype, String path) {
- super(mimetype);
- this.context = context;
- this.path = path;
- }
-
- /**
- * Creates a new WebApplicationResource which serves the resource at the
- * given path relative to the given ServletContext. The mimetype of the
- * resource is automatically determined based on the filename within the
- * path.
- *
- * @param context
- * The ServletContext to use when reading the resource and deriving the
- * mimetype.
- *
- * @param path
- * The path of the resource relative to the given ServletContext.
- */
- public WebApplicationResource(ServletContext context, String path) {
- this(context, getMimeType(context, path), path);
- }
-
- @Override
- public InputStream asStream() {
- return context.getResourceAsStream(path);
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-guacamole-client/blob/648a6c96/guacamole/src/main/java/org/apache/guacamole/net/basic/resource/package-info.java
----------------------------------------------------------------------
diff --git a/guacamole/src/main/java/org/apache/guacamole/net/basic/resource/package-info.java b/guacamole/src/main/java/org/apache/guacamole/net/basic/resource/package-info.java
deleted file mode 100644
index 6e1829f..0000000
--- a/guacamole/src/main/java/org/apache/guacamole/net/basic/resource/package-info.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Copyright (C) 2015 Glyptodon LLC
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-/**
- * Classes which describe and provide access to arbitrary resources, such as
- * the contents of the classpath of a classloader, or files within the web
- * application itself.
- */
-package org.apache.guacamole.net.basic.resource;
http://git-wip-us.apache.org/repos/asf/incubator-guacamole-client/blob/648a6c96/guacamole/src/main/java/org/apache/guacamole/net/basic/rest/APIError.java
----------------------------------------------------------------------
diff --git a/guacamole/src/main/java/org/apache/guacamole/net/basic/rest/APIError.java b/guacamole/src/main/java/org/apache/guacamole/net/basic/rest/APIError.java
deleted file mode 100644
index 642fb39..0000000
--- a/guacamole/src/main/java/org/apache/guacamole/net/basic/rest/APIError.java
+++ /dev/null
@@ -1,183 +0,0 @@
-/*
- * Copyright (C) 2015 Glyptodon LLC
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-package org.apache.guacamole.net.basic.rest;
-
-import java.util.Collection;
-import javax.ws.rs.core.Response;
-import org.apache.guacamole.form.Field;
-
-/**
- * Describes an error that occurred within a REST endpoint.
- *
- * @author James Muehlner
- * @author Michael Jumper
- */
-public class APIError {
-
- /**
- * The error message.
- */
- private final String message;
-
- /**
- * All expected request parameters, if any, as a collection of fields.
- */
- private final Collection<Field> expected;
-
- /**
- * The type of error that occurred.
- */
- private final Type type;
-
- /**
- * All possible types of REST API errors.
- */
- public enum Type {
-
- /**
- * The requested operation could not be performed because the request
- * itself was malformed.
- */
- BAD_REQUEST(Response.Status.BAD_REQUEST),
-
- /**
- * The credentials provided were invalid.
- */
- INVALID_CREDENTIALS(Response.Status.FORBIDDEN),
-
- /**
- * The credentials provided were not necessarily invalid, but were not
- * sufficient to determine validity.
- */
- INSUFFICIENT_CREDENTIALS(Response.Status.FORBIDDEN),
-
- /**
- * An internal server error has occurred.
- */
- INTERNAL_ERROR(Response.Status.INTERNAL_SERVER_ERROR),
-
- /**
- * An object related to the request does not exist.
- */
- NOT_FOUND(Response.Status.NOT_FOUND),
-
- /**
- * Permission was denied to perform the requested operation.
- */
- PERMISSION_DENIED(Response.Status.FORBIDDEN);
-
- /**
- * The HTTP status associated with this error type.
- */
- private final Response.Status status;
-
- /**
- * Defines a new error type associated with the given HTTP status.
- *
- * @param status
- * The HTTP status to associate with the error type.
- */
- Type(Response.Status status) {
- this.status = status;
- }
-
- /**
- * Returns the HTTP status associated with this error type.
- *
- * @return
- * The HTTP status associated with this error type.
- */
- public Response.Status getStatus() {
- return status;
- }
-
- }
-
- /**
- * Create a new APIError with the specified error message.
- *
- * @param type
- * The type of error that occurred.
- *
- * @param message
- * The error message.
- */
- public APIError(Type type, String message) {
- this.type = type;
- this.message = message;
- this.expected = null;
- }
-
- /**
- * Create a new APIError with the specified error message and parameter
- * information.
- *
- * @param type
- * The type of error that occurred.
- *
- * @param message
- * The error message.
- *
- * @param expected
- * All parameters expected in the original request, or now required as
- * a result of the original request, as a collection of fields.
- */
- public APIError(Type type, String message, Collection<Field> expected) {
- this.type = type;
- this.message = message;
- this.expected = expected;
- }
-
- /**
- * Returns the type of error that occurred.
- *
- * @return
- * The type of error that occurred.
- */
- public Type getType() {
- return type;
- }
-
- /**
- * Returns a collection of all required parameters, where each parameter is
- * represented by a field.
- *
- * @return
- * A collection of all required parameters.
- */
- public Collection<Field> getExpected() {
- return expected;
- }
-
- /**
- * Returns a human-readable error message describing the error that
- * occurred.
- *
- * @return
- * A human-readable error message.
- */
- public String getMessage() {
- return message;
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-guacamole-client/blob/648a6c96/guacamole/src/main/java/org/apache/guacamole/net/basic/rest/APIException.java
----------------------------------------------------------------------
diff --git a/guacamole/src/main/java/org/apache/guacamole/net/basic/rest/APIException.java b/guacamole/src/main/java/org/apache/guacamole/net/basic/rest/APIException.java
deleted file mode 100644
index 50f05a2..0000000
--- a/guacamole/src/main/java/org/apache/guacamole/net/basic/rest/APIException.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Copyright (C) 2014 Glyptodon LLC
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-package org.apache.guacamole.net.basic.rest;
-
-import java.util.Collection;
-import javax.ws.rs.WebApplicationException;
-import javax.ws.rs.core.Response;
-import org.apache.guacamole.form.Field;
-
-/**
- * An exception that will result in the given error error information being
- * returned from the API layer. All error messages have the same format which
- * is defined by APIError.
- *
- * @author James Muehlner
- * @author Michael Jumper
- */
-public class APIException extends WebApplicationException {
-
- /**
- * Construct a new APIException with the given error. All information
- * associated with this new exception will be extracted from the given
- * APIError.
- *
- * @param error
- * The error that occurred.
- */
- public APIException(APIError error) {
- super(Response.status(error.getType().getStatus()).entity(error).build());
- }
-
- /**
- * Creates a new APIException with the given type and message. The
- * corresponding APIError will be created from the provided information.
- *
- * @param type
- * The type of error that occurred.
- *
- * @param message
- * A human-readable message describing the error.
- */
- public APIException(APIError.Type type, String message) {
- this(new APIError(type, message));
- }
-
- /**
- * Creates a new APIException with the given type, message, and parameter
- * information. The corresponding APIError will be created from the
- * provided information.
- *
- * @param type
- * The type of error that occurred.
- *
- * @param message
- * A human-readable message describing the error.
- *
- * @param expected
- * All parameters expected in the original request, or now required as
- * a result of the original request, as a collection of fields.
- */
- public APIException(APIError.Type type, String message, Collection<Field> expected) {
- this(new APIError(type, message, expected));
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-guacamole-client/blob/648a6c96/guacamole/src/main/java/org/apache/guacamole/net/basic/rest/APIPatch.java
----------------------------------------------------------------------
diff --git a/guacamole/src/main/java/org/apache/guacamole/net/basic/rest/APIPatch.java b/guacamole/src/main/java/org/apache/guacamole/net/basic/rest/APIPatch.java
deleted file mode 100644
index 3be1eac..0000000
--- a/guacamole/src/main/java/org/apache/guacamole/net/basic/rest/APIPatch.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * Copyright (C) 2014 Glyptodon LLC
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-package org.apache.guacamole.net.basic.rest;
-
-/**
- * An object for representing the body of a HTTP PATCH method.
- * See https://tools.ietf.org/html/rfc6902
- *
- * @author James Muehlner
- * @param <T> The type of object being patched.
- */
-public class APIPatch<T> {
-
- /**
- * The possible operations for a PATCH request.
- */
- public enum Operation {
- add, remove, test, copy, replace, move
- }
-
- /**
- * The operation to perform for this patch.
- */
- private Operation op;
-
- /**
- * The value for this patch.
- */
- private T value;
-
- /**
- * The path for this patch.
- */
- private String path;
-
- /**
- * Returns the operation for this patch.
- * @return the operation for this patch.
- */
- public Operation getOp() {
- return op;
- }
-
- /**
- * Set the operation for this patch.
- * @param op The operation for this patch.
- */
- public void setOp(Operation op) {
- this.op = op;
- }
-
- /**
- * Returns the value of this patch.
- * @return The value of this patch.
- */
- public T getValue() {
- return value;
- }
-
- /**
- * Sets the value of this patch.
- * @param value The value of this patch.
- */
- public void setValue(T value) {
- this.value = value;
- }
-
- /**
- * Returns the path for this patch.
- * @return The path for this patch.
- */
- public String getPath() {
- return path;
- }
-
- /**
- * Set the path for this patch.
- * @param path The path for this patch.
- */
- public void setPath(String path) {
- this.path = path;
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-guacamole-client/blob/648a6c96/guacamole/src/main/java/org/apache/guacamole/net/basic/rest/APIRequest.java
----------------------------------------------------------------------
diff --git a/guacamole/src/main/java/org/apache/guacamole/net/basic/rest/APIRequest.java b/guacamole/src/main/java/org/apache/guacamole/net/basic/rest/APIRequest.java
deleted file mode 100644
index 566990a..0000000
--- a/guacamole/src/main/java/org/apache/guacamole/net/basic/rest/APIRequest.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * Copyright (C) 2015 Glyptodon LLC
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-package org.apache.guacamole.net.basic.rest;
-
-import java.util.Collections;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletRequestWrapper;
-import javax.ws.rs.core.MultivaluedMap;
-
-/**
- * Wrapper for HttpServletRequest which uses a given MultivaluedMap to provide
- * the values of all request parameters.
- *
- * @author Michael Jumper
- */
-public class APIRequest extends HttpServletRequestWrapper {
-
- /**
- * Map of all request parameter names to their corresponding values.
- */
- private final Map<String, String[]> parameters;
-
- /**
- * Wraps the given HttpServletRequest, using the given MultivaluedMap to
- * provide all request parameters. All HttpServletRequest functions which
- * do not deal with parameter names and values are delegated to the wrapped
- * request.
- *
- * @param request
- * The HttpServletRequest to wrap.
- *
- * @param parameters
- * All request parameters.
- */
- public APIRequest(HttpServletRequest request,
- MultivaluedMap<String, String> parameters) {
-
- super(request);
-
- // Copy parameters from given MultivaluedMap
- this.parameters = new HashMap<String, String[]>(parameters.size());
- for (Map.Entry<String, List<String>> entry : parameters.entrySet()) {
-
- // Get parameter name and all corresponding values
- String name = entry.getKey();
- List<String> values = entry.getValue();
-
- // Add parameters to map
- this.parameters.put(name, values.toArray(new String[values.size()]));
-
- }
-
- }
-
- @Override
- public String[] getParameterValues(String name) {
- return parameters.get(name);
- }
-
- @Override
- public Enumeration<String> getParameterNames() {
- return Collections.enumeration(parameters.keySet());
- }
-
- @Override
- public Map<String, String[]> getParameterMap() {
- return Collections.unmodifiableMap(parameters);
- }
-
- @Override
- public String getParameter(String name) {
-
- // If no such parameter exists, just return null
- String[] values = getParameterValues(name);
- if (values == null)
- return null;
-
- // Otherwise, return first value
- return values[0];
-
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-guacamole-client/blob/648a6c96/guacamole/src/main/java/org/apache/guacamole/net/basic/rest/ObjectRetrievalService.java
----------------------------------------------------------------------
diff --git a/guacamole/src/main/java/org/apache/guacamole/net/basic/rest/ObjectRetrievalService.java b/guacamole/src/main/java/org/apache/guacamole/net/basic/rest/ObjectRetrievalService.java
deleted file mode 100644
index 90dcf9e..0000000
--- a/guacamole/src/main/java/org/apache/guacamole/net/basic/rest/ObjectRetrievalService.java
+++ /dev/null
@@ -1,280 +0,0 @@
-/*
- * Copyright (C) 2015 Glyptodon LLC
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-package org.apache.guacamole.net.basic.rest;
-
-import java.util.List;
-import org.apache.guacamole.GuacamoleException;
-import org.apache.guacamole.GuacamoleResourceNotFoundException;
-import org.apache.guacamole.net.auth.AuthenticationProvider;
-import org.apache.guacamole.net.auth.Connection;
-import org.apache.guacamole.net.auth.ConnectionGroup;
-import org.apache.guacamole.net.auth.Directory;
-import org.apache.guacamole.net.auth.User;
-import org.apache.guacamole.net.auth.UserContext;
-import org.apache.guacamole.net.basic.GuacamoleSession;
-import org.apache.guacamole.net.basic.rest.connectiongroup.APIConnectionGroup;
-
-/**
- * Provides easy access and automatic error handling for retrieval of objects,
- * such as users, connections, or connection groups. REST API semantics, such
- * as the special root connection group identifier, are also handled
- * automatically.
- */
-public class ObjectRetrievalService {
-
- /**
- * Retrieves a single UserContext from the given GuacamoleSession, which
- * may contain multiple UserContexts.
- *
- * @param session
- * The GuacamoleSession to retrieve the UserContext from.
- *
- * @param authProviderIdentifier
- * The unique identifier of the AuthenticationProvider that created the
- * UserContext being retrieved. Only one UserContext per User per
- * AuthenticationProvider can exist.
- *
- * @return
- * The UserContext that was created by the AuthenticationProvider
- * having the given identifier.
- *
- * @throws GuacamoleException
- * If an error occurs while retrieving the UserContext, or if the
- * UserContext does not exist.
- */
- public UserContext retrieveUserContext(GuacamoleSession session,
- String authProviderIdentifier) throws GuacamoleException {
-
- // Get list of UserContexts
- List<UserContext> userContexts = session.getUserContexts();
-
- // Locate and return the UserContext associated with the
- // AuthenticationProvider having the given identifier, if any
- for (UserContext userContext : userContexts) {
-
- // Get AuthenticationProvider associated with current UserContext
- AuthenticationProvider authProvider = userContext.getAuthenticationProvider();
-
- // If AuthenticationProvider identifier matches, done
- if (authProvider.getIdentifier().equals(authProviderIdentifier))
- return userContext;
-
- }
-
- throw new GuacamoleResourceNotFoundException("Session not associated with authentication provider \"" + authProviderIdentifier + "\".");
-
- }
-
- /**
- * Retrieves a single user from the given user context.
- *
- * @param userContext
- * The user context to retrieve the user from.
- *
- * @param identifier
- * The identifier of the user to retrieve.
- *
- * @return
- * The user having the given identifier.
- *
- * @throws GuacamoleException
- * If an error occurs while retrieving the user, or if the
- * user does not exist.
- */
- public User retrieveUser(UserContext userContext,
- String identifier) throws GuacamoleException {
-
- // Get user directory
- Directory<User> directory = userContext.getUserDirectory();
-
- // Pull specified user
- User user = directory.get(identifier);
- if (user == null)
- throw new GuacamoleResourceNotFoundException("No such user: \"" + identifier + "\"");
-
- return user;
-
- }
-
- /**
- * Retrieves a single user from the given GuacamoleSession.
- *
- * @param session
- * The GuacamoleSession to retrieve the user from.
- *
- * @param authProviderIdentifier
- * The unique identifier of the AuthenticationProvider that created the
- * UserContext from which the user should be retrieved. Only one
- * UserContext per User per AuthenticationProvider can exist.
- *
- * @param identifier
- * The identifier of the user to retrieve.
- *
- * @return
- * The user having the given identifier.
- *
- * @throws GuacamoleException
- * If an error occurs while retrieving the user, or if the
- * user does not exist.
- */
- public User retrieveUser(GuacamoleSession session, String authProviderIdentifier,
- String identifier) throws GuacamoleException {
-
- UserContext userContext = retrieveUserContext(session, authProviderIdentifier);
- return retrieveUser(userContext, identifier);
-
- }
-
- /**
- * Retrieves a single connection from the given user context.
- *
- * @param userContext
- * The user context to retrieve the connection from.
- *
- * @param identifier
- * The identifier of the connection to retrieve.
- *
- * @return
- * The connection having the given identifier.
- *
- * @throws GuacamoleException
- * If an error occurs while retrieving the connection, or if the
- * connection does not exist.
- */
- public Connection retrieveConnection(UserContext userContext,
- String identifier) throws GuacamoleException {
-
- // Get connection directory
- Directory<Connection> directory = userContext.getConnectionDirectory();
-
- // Pull specified connection
- Connection connection = directory.get(identifier);
- if (connection == null)
- throw new GuacamoleResourceNotFoundException("No such connection: \"" + identifier + "\"");
-
- return connection;
-
- }
-
- /**
- * Retrieves a single connection from the given GuacamoleSession.
- *
- * @param session
- * The GuacamoleSession to retrieve the connection from.
- *
- * @param authProviderIdentifier
- * The unique identifier of the AuthenticationProvider that created the
- * UserContext from which the connection should be retrieved. Only one
- * UserContext per User per AuthenticationProvider can exist.
- *
- * @param identifier
- * The identifier of the connection to retrieve.
- *
- * @return
- * The connection having the given identifier.
- *
- * @throws GuacamoleException
- * If an error occurs while retrieving the connection, or if the
- * connection does not exist.
- */
- public Connection retrieveConnection(GuacamoleSession session,
- String authProviderIdentifier, String identifier)
- throws GuacamoleException {
-
- UserContext userContext = retrieveUserContext(session, authProviderIdentifier);
- return retrieveConnection(userContext, identifier);
-
- }
-
- /**
- * Retrieves a single connection group from the given user context. If
- * the given identifier the REST API root identifier, the root connection
- * group will be returned. The underlying authentication provider may
- * additionally use a different identifier for root.
- *
- * @param userContext
- * The user context to retrieve the connection group from.
- *
- * @param identifier
- * The identifier of the connection group to retrieve.
- *
- * @return
- * The connection group having the given identifier, or the root
- * connection group if the identifier the root identifier.
- *
- * @throws GuacamoleException
- * If an error occurs while retrieving the connection group, or if the
- * connection group does not exist.
- */
- public ConnectionGroup retrieveConnectionGroup(UserContext userContext,
- String identifier) throws GuacamoleException {
-
- // Use root group if identifier is the standard root identifier
- if (identifier != null && identifier.equals(APIConnectionGroup.ROOT_IDENTIFIER))
- return userContext.getRootConnectionGroup();
-
- // Pull specified connection group otherwise
- Directory<ConnectionGroup> directory = userContext.getConnectionGroupDirectory();
- ConnectionGroup connectionGroup = directory.get(identifier);
-
- if (connectionGroup == null)
- throw new GuacamoleResourceNotFoundException("No such connection group: \"" + identifier + "\"");
-
- return connectionGroup;
-
- }
-
- /**
- * Retrieves a single connection group from the given GuacamoleSession. If
- * the given identifier is the REST API root identifier, the root
- * connection group will be returned. The underlying authentication
- * provider may additionally use a different identifier for root.
- *
- * @param session
- * The GuacamoleSession to retrieve the connection group from.
- *
- * @param authProviderIdentifier
- * The unique identifier of the AuthenticationProvider that created the
- * UserContext from which the connection group should be retrieved.
- * Only one UserContext per User per AuthenticationProvider can exist.
- *
- * @param identifier
- * The identifier of the connection group to retrieve.
- *
- * @return
- * The connection group having the given identifier, or the root
- * connection group if the identifier is the root identifier.
- *
- * @throws GuacamoleException
- * If an error occurs while retrieving the connection group, or if the
- * connection group does not exist.
- */
- public ConnectionGroup retrieveConnectionGroup(GuacamoleSession session,
- String authProviderIdentifier, String identifier) throws GuacamoleException {
-
- UserContext userContext = retrieveUserContext(session, authProviderIdentifier);
- return retrieveConnectionGroup(userContext, identifier);
-
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-guacamole-client/blob/648a6c96/guacamole/src/main/java/org/apache/guacamole/net/basic/rest/PATCH.java
----------------------------------------------------------------------
diff --git a/guacamole/src/main/java/org/apache/guacamole/net/basic/rest/PATCH.java b/guacamole/src/main/java/org/apache/guacamole/net/basic/rest/PATCH.java
deleted file mode 100644
index 84350c6..0000000
--- a/guacamole/src/main/java/org/apache/guacamole/net/basic/rest/PATCH.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (C) 2014 Glyptodon LLC
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-
-package org.apache.guacamole.net.basic.rest;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-import javax.ws.rs.HttpMethod;
-
-/**
- * An annotation for using the HTTP PATCH method in the REST endpoints.
- *
- * @author James Muehlner
- */
-@Target({ElementType.METHOD})
-@Retention(RetentionPolicy.RUNTIME)
-@HttpMethod("PATCH")
-public @interface PATCH {}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-guacamole-client/blob/648a6c96/guacamole/src/main/java/org/apache/guacamole/net/basic/rest/RESTExceptionWrapper.java
----------------------------------------------------------------------
diff --git a/guacamole/src/main/java/org/apache/guacamole/net/basic/rest/RESTExceptionWrapper.java b/guacamole/src/main/java/org/apache/guacamole/net/basic/rest/RESTExceptionWrapper.java
deleted file mode 100644
index 319bc62..0000000
--- a/guacamole/src/main/java/org/apache/guacamole/net/basic/rest/RESTExceptionWrapper.java
+++ /dev/null
@@ -1,274 +0,0 @@
-/*
- * Copyright (C) 2015 Glyptodon LLC
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-package org.apache.guacamole.net.basic.rest;
-
-import com.google.inject.Inject;
-import java.lang.annotation.Annotation;
-import java.lang.reflect.Method;
-import javax.ws.rs.FormParam;
-import javax.ws.rs.QueryParam;
-import org.aopalliance.intercept.MethodInterceptor;
-import org.aopalliance.intercept.MethodInvocation;
-import org.apache.guacamole.GuacamoleClientException;
-import org.apache.guacamole.GuacamoleException;
-import org.apache.guacamole.GuacamoleResourceNotFoundException;
-import org.apache.guacamole.GuacamoleSecurityException;
-import org.apache.guacamole.GuacamoleUnauthorizedException;
-import org.apache.guacamole.net.auth.credentials.GuacamoleInsufficientCredentialsException;
-import org.apache.guacamole.net.auth.credentials.GuacamoleInvalidCredentialsException;
-import org.apache.guacamole.net.basic.rest.auth.AuthenticationService;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * A method interceptor which wraps custom exception handling around methods
- * which can throw GuacamoleExceptions and which are exposed through the REST
- * interface. The various types of GuacamoleExceptions are automatically
- * translated into appropriate HTTP responses, including JSON describing the
- * error that occurred.
- *
- * @author James Muehlner
- * @author Michael Jumper
- */
-public class RESTExceptionWrapper implements MethodInterceptor {
-
- /**
- * Logger for this class.
- */
- private final Logger logger = LoggerFactory.getLogger(RESTExceptionWrapper.class);
-
- /**
- * Service for authenticating users and managing their Guacamole sessions.
- */
- @Inject
- private AuthenticationService authenticationService;
-
- /**
- * Determines whether the given set of annotations describes an HTTP
- * request parameter of the given name. For a parameter to be associated
- * with an HTTP request parameter, it must be annotated with either the
- * <code>@QueryParam</code> or <code>@FormParam</code> annotations.
- *
- * @param annotations
- * The annotations associated with the Java parameter being checked.
- *
- * @param name
- * The name of the HTTP request parameter.
- *
- * @return
- * true if the given set of annotations describes an HTTP request
- * parameter having the given name, false otherwise.
- */
- private boolean isRequestParameter(Annotation[] annotations, String name) {
-
- // Search annotations for associated HTTP parameters
- for (Annotation annotation : annotations) {
-
- // Check if parameter is associated with the HTTP query string
- if (annotation instanceof QueryParam && name.equals(((QueryParam) annotation).value()))
- return true;
-
- // Failing that, check whether the parameter is associated with the
- // HTTP request body
- if (annotation instanceof FormParam && name.equals(((FormParam) annotation).value()))
- return true;
-
- }
-
- // No parameter annotations are present
- return false;
-
- }
-
- /**
- * Returns the authentication token that was passed in the given method
- * invocation. If the given method invocation is not associated with an
- * HTTP request (it lacks the appropriate JAX-RS annotations) or there is
- * no authentication token, null is returned.
- *
- * @param invocation
- * The method invocation whose corresponding authentication token
- * should be determined.
- *
- * @return
- * The authentication token passed in the given method invocation, or
- * null if there is no such token.
- */
- private String getAuthenticationToken(MethodInvocation invocation) {
-
- Method method = invocation.getMethod();
-
- // Get the types and annotations associated with each parameter
- Annotation[][] parameterAnnotations = method.getParameterAnnotations();
- Class<?>[] parameterTypes = method.getParameterTypes();
-
- // The Java standards require these to be parallel arrays
- assert(parameterAnnotations.length == parameterTypes.length);
-
- // Iterate through all parameters, looking for the authentication token
- for (int i = 0; i < parameterTypes.length; i++) {
-
- // Only inspect String parameters
- Class<?> parameterType = parameterTypes[i];
- if (parameterType != String.class)
- continue;
-
- // Parameter must be declared as a REST service parameter
- Annotation[] annotations = parameterAnnotations[i];
- if (!isRequestParameter(annotations, "token"))
- continue;
-
- // The token parameter has been found - return its value
- Object[] args = invocation.getArguments();
- return (String) args[i];
-
- }
-
- // No token parameter is defined
- return null;
-
- }
-
- @Override
- public Object invoke(MethodInvocation invocation) throws Throwable {
-
- try {
-
- // Invoke wrapped method
- try {
- return invocation.proceed();
- }
-
- // Ensure any associated session is invalidated if unauthorized
- catch (GuacamoleUnauthorizedException e) {
-
- // Pull authentication token from request
- String token = getAuthenticationToken(invocation);
-
- // If there is an associated auth token, invalidate it
- if (authenticationService.destroyGuacamoleSession(token))
- logger.debug("Implicitly invalidated session for token \"{}\".", token);
-
- // Continue with exception processing
- throw e;
-
- }
-
- }
-
- // Additional credentials are needed
- catch (GuacamoleInsufficientCredentialsException e) {
-
- // Generate default message
- String message = e.getMessage();
- if (message == null)
- message = "Permission denied.";
-
- throw new APIException(
- APIError.Type.INSUFFICIENT_CREDENTIALS,
- message,
- e.getCredentialsInfo().getFields()
- );
- }
-
- // The provided credentials are wrong
- catch (GuacamoleInvalidCredentialsException e) {
-
- // Generate default message
- String message = e.getMessage();
- if (message == null)
- message = "Permission denied.";
-
- throw new APIException(
- APIError.Type.INVALID_CREDENTIALS,
- message,
- e.getCredentialsInfo().getFields()
- );
- }
-
- // Generic permission denied
- catch (GuacamoleSecurityException e) {
-
- // Generate default message
- String message = e.getMessage();
- if (message == null)
- message = "Permission denied.";
-
- throw new APIException(
- APIError.Type.PERMISSION_DENIED,
- message
- );
-
- }
-
- // Arbitrary resource not found
- catch (GuacamoleResourceNotFoundException e) {
-
- // Generate default message
- String message = e.getMessage();
- if (message == null)
- message = "Not found.";
-
- throw new APIException(
- APIError.Type.NOT_FOUND,
- message
- );
-
- }
-
- // Arbitrary bad requests
- catch (GuacamoleClientException e) {
-
- // Generate default message
- String message = e.getMessage();
- if (message == null)
- message = "Invalid request.";
-
- throw new APIException(
- APIError.Type.BAD_REQUEST,
- message
- );
-
- }
-
- // All other errors
- catch (GuacamoleException e) {
-
- // Generate default message
- String message = e.getMessage();
- if (message == null)
- message = "Unexpected server error.";
-
- // Ensure internal errors are logged at the debug level
- logger.debug("Unexpected exception in REST endpoint.", e);
-
- throw new APIException(
- APIError.Type.INTERNAL_ERROR,
- message
- );
-
- }
-
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-guacamole-client/blob/648a6c96/guacamole/src/main/java/org/apache/guacamole/net/basic/rest/RESTMethodMatcher.java
----------------------------------------------------------------------
diff --git a/guacamole/src/main/java/org/apache/guacamole/net/basic/rest/RESTMethodMatcher.java b/guacamole/src/main/java/org/apache/guacamole/net/basic/rest/RESTMethodMatcher.java
deleted file mode 100644
index 08f14e1..0000000
--- a/guacamole/src/main/java/org/apache/guacamole/net/basic/rest/RESTMethodMatcher.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * Copyright (C) 2015 Glyptodon LLC
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-package org.apache.guacamole.net.basic.rest;
-
-import com.google.inject.matcher.AbstractMatcher;
-import java.lang.annotation.Annotation;
-import java.lang.reflect.Method;
-import javax.ws.rs.HttpMethod;
-import org.apache.guacamole.GuacamoleException;
-
-/**
- * A Guice Matcher which matches only methods which throw GuacamoleException
- * (or a subclass thereof) and are explicitly annotated as with an HTTP method
- * annotation like <code>@GET</code> or <code>@POST</code>. Any method which
- * throws GuacamoleException and is annotated with an annotation that is
- * annotated with <code>@HttpMethod</code> will match.
- *
- * @author Michael Jumper
- */
-public class RESTMethodMatcher extends AbstractMatcher<Method> {
-
- /**
- * Returns whether the given method throws the specified exception type,
- * including any subclasses of that type.
- *
- * @param method
- * The method to test.
- *
- * @param exceptionType
- * The exception type to test for.
- *
- * @return
- * true if the given method throws an exception of the specified type,
- * false otherwise.
- */
- private boolean methodThrowsException(Method method,
- Class<? extends Exception> exceptionType) {
-
- // Check whether the method throws an exception of the specified type
- for (Class<?> thrownType : method.getExceptionTypes()) {
- if (exceptionType.isAssignableFrom(thrownType))
- return true;
- }
-
- // No such exception is declared to be thrown
- return false;
-
- }
-
- /**
- * Returns whether the given method is annotated as a REST method. A REST
- * method is annotated with an annotation which is annotated with
- * <code>@HttpMethod</code>.
- *
- * @param method
- * The method to test.
- *
- * @return
- * true if the given method is annotated as a REST method, false
- * otherwise.
- */
- private boolean isRESTMethod(Method method) {
-
- // Check whether the required REST annotations are present
- for (Annotation annotation : method.getAnnotations()) {
-
- // A method is a REST method if it is annotated with @HttpMethod
- Class<? extends Annotation> annotationType = annotation.annotationType();
- if (annotationType.isAnnotationPresent(HttpMethod.class))
- return true;
-
- }
-
- // The method is not an HTTP method
- return false;
-
- }
-
- @Override
- public boolean matches(Method method) {
-
- // Guacamole REST methods are REST methods which throw
- // GuacamoleExceptions
- return isRESTMethod(method)
- && methodThrowsException(method, GuacamoleException.class);
-
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-guacamole-client/blob/648a6c96/guacamole/src/main/java/org/apache/guacamole/net/basic/rest/RESTServiceModule.java
----------------------------------------------------------------------
diff --git a/guacamole/src/main/java/org/apache/guacamole/net/basic/rest/RESTServiceModule.java b/guacamole/src/main/java/org/apache/guacamole/net/basic/rest/RESTServiceModule.java
deleted file mode 100644
index 9174aad..0000000
--- a/guacamole/src/main/java/org/apache/guacamole/net/basic/rest/RESTServiceModule.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * Copyright (C) 2015 Glyptodon LLC
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-package org.apache.guacamole.net.basic.rest;
-
-import com.google.inject.Scopes;
-import com.google.inject.matcher.Matchers;
-import com.google.inject.servlet.ServletModule;
-import com.sun.jersey.guice.spi.container.servlet.GuiceContainer;
-import org.aopalliance.intercept.MethodInterceptor;
-import org.codehaus.jackson.jaxrs.JacksonJsonProvider;
-import org.apache.guacamole.net.basic.rest.auth.TokenRESTService;
-import org.apache.guacamole.net.basic.rest.connection.ConnectionRESTService;
-import org.apache.guacamole.net.basic.rest.connectiongroup.ConnectionGroupRESTService;
-import org.apache.guacamole.net.basic.rest.activeconnection.ActiveConnectionRESTService;
-import org.apache.guacamole.net.basic.rest.auth.AuthTokenGenerator;
-import org.apache.guacamole.net.basic.rest.auth.AuthenticationService;
-import org.apache.guacamole.net.basic.rest.auth.SecureRandomAuthTokenGenerator;
-import org.apache.guacamole.net.basic.rest.auth.TokenSessionMap;
-import org.apache.guacamole.net.basic.rest.history.HistoryRESTService;
-import org.apache.guacamole.net.basic.rest.language.LanguageRESTService;
-import org.apache.guacamole.net.basic.rest.patch.PatchRESTService;
-import org.apache.guacamole.net.basic.rest.schema.SchemaRESTService;
-import org.apache.guacamole.net.basic.rest.user.UserRESTService;
-
-/**
- * A Guice Module to set up the servlet mappings and authentication-specific
- * dependency injection for the Guacamole REST API.
- *
- * @author James Muehlner
- * @author Michael Jumper
- */
-public class RESTServiceModule extends ServletModule {
-
- /**
- * Singleton instance of TokenSessionMap.
- */
- private final TokenSessionMap tokenSessionMap;
-
- /**
- * Creates a module which handles binding of REST services and related
- * authentication objects, including the singleton TokenSessionMap.
- *
- * @param tokenSessionMap
- * An instance of TokenSessionMap to inject as a singleton wherever
- * needed.
- */
- public RESTServiceModule(TokenSessionMap tokenSessionMap) {
- this.tokenSessionMap = tokenSessionMap;
- }
-
- @Override
- protected void configureServlets() {
-
- // Bind session map
- bind(TokenSessionMap.class).toInstance(tokenSessionMap);
-
- // Bind low-level services
- bind(AuthenticationService.class);
- bind(AuthTokenGenerator.class).to(SecureRandomAuthTokenGenerator.class);
-
- // Automatically translate GuacamoleExceptions for REST methods
- MethodInterceptor interceptor = new RESTExceptionWrapper();
- requestInjection(interceptor);
- bindInterceptor(Matchers.any(), new RESTMethodMatcher(), interceptor);
-
- // Bind convenience services used by the REST API
- bind(ObjectRetrievalService.class);
-
- // Set up the API endpoints
- bind(ActiveConnectionRESTService.class);
- bind(ConnectionGroupRESTService.class);
- bind(ConnectionRESTService.class);
- bind(HistoryRESTService.class);
- bind(LanguageRESTService.class);
- bind(PatchRESTService.class);
- bind(SchemaRESTService.class);
- bind(TokenRESTService.class);
- bind(UserRESTService.class);
-
- // Set up the servlet and JSON mappings
- bind(GuiceContainer.class);
- bind(JacksonJsonProvider.class).in(Scopes.SINGLETON);
- serve("/api/*").with(GuiceContainer.class);
-
- }
-
-}