@PATCH
    public void patchObjects(List<APIPatch<String>> patches)
            throws GuacamoleException {

        // Apply all patch operations individually
        RelatedObjectSetPatch objectPatch = new RelatedObjectSetPatch();
        for (APIPatch<String> patch : patches) {

            String path = patch.getPath();

            // Add/remove objects from set
            if (path.equals(OBJECT_PATH)) {
                String identifier = patch.getValue();
                updateRelatedObjectSet(patch.getOp(), objectPatch, identifier);
            }

            // Otherwise, the path is not supported
            else
                throw new GuacamoleClientException("Unsupported patch path: \"" + path + "\"");

        } // end for each patch operation

        // Save changes
        objectPatch.apply(objects);

    }
Applies a given list of patches to the RelatedObjectSet exposed by this
RelatedObjectSetResource. Each patch specifies either
an "add" or a "remove" operation for a particular object represented
by its identifier. The path of each operation MUST be "/", with the
identifier of the object being provided within the value of the patch.

@param patches
    The patches to apply for this request.

@throws GuacamoleException
    If an error is encountered while modifying the contents of the
    RelatedObjectSet.
guacamole/src/main/java/org/apache/guacamole/rest/identifier/RelatedObjectSetResource.java