You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2017/03/06 11:10:57 UTC

[12/15] camel git commit: CAMEL-9047: Rename box2 to box

http://git-wip-us.apache.org/repos/asf/camel/blob/db0ca734/components/camel-box/camel-box-api/src/main/java/org/apache/camel/component/box/api/BoxGroupsManager.java
----------------------------------------------------------------------
diff --git a/components/camel-box/camel-box-api/src/main/java/org/apache/camel/component/box/api/BoxGroupsManager.java b/components/camel-box/camel-box-api/src/main/java/org/apache/camel/component/box/api/BoxGroupsManager.java
new file mode 100644
index 0000000..b8c914f
--- /dev/null
+++ b/components/camel-box/camel-box-api/src/main/java/org/apache/camel/component/box/api/BoxGroupsManager.java
@@ -0,0 +1,274 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.apache.camel.component.box.api;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+import com.box.sdk.BoxAPIConnection;
+import com.box.sdk.BoxAPIException;
+import com.box.sdk.BoxGroup;
+import com.box.sdk.BoxGroupMembership;
+import com.box.sdk.BoxUser;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Box Groups Manager
+ * 
+ * <p>
+ * Provides operations to manage Box groups.
+ * 
+ * 
+ *
+ */
+public class BoxGroupsManager {
+
+    private static final Logger LOG = LoggerFactory.getLogger(BoxGroupsManager.class);
+
+    /**
+     * Box connection to authenticated user account.
+     */
+    private BoxAPIConnection boxConnection;
+
+    /**
+     * Create groups manager to manage the users of Box connection's
+     * authenticated user.
+     * 
+     * @param boxConnection
+     *            - Box connection to authenticated user account.
+     */
+    public BoxGroupsManager(BoxAPIConnection boxConnection) {
+        this.boxConnection = boxConnection;
+    }
+
+    /**
+     * Get all the groups in the enterprise.
+     * 
+     * @return Collection containing all the enterprise's groups.
+     */
+    public Collection<BoxGroup> getAllGroups() {
+        try {
+            LOG.debug("Getting all groups");
+
+            Collection<BoxGroup> groups = new ArrayList<BoxGroup>();
+            for (BoxGroup.Info groupInfo : BoxGroup.getAllGroups(boxConnection)) {
+                groups.add(groupInfo.getResource());
+            }
+            return groups;
+        } catch (BoxAPIException e) {
+            throw new RuntimeException(
+                    String.format("Box API returned the error code %d\n\n%s", e.getResponseCode(), e.getResponse()), e);
+        }
+    }
+
+    /**
+     * Create a new group with a specified name.
+     * 
+     * @param name
+     *            - the name of the new group.
+     * @return The newly created group.
+     */
+    public BoxGroup createGroup(String name) {
+        try {
+            LOG.debug("Creating group name=" + name);
+            if (name == null) {
+                throw new IllegalArgumentException("Parameter 'name' can not be null");
+            }
+
+            return BoxGroup.createGroup(boxConnection, name).getResource();
+        } catch (BoxAPIException e) {
+            throw new RuntimeException(
+                    String.format("Box API returned the error code %d\n\n%s", e.getResponseCode(), e.getResponse()), e);
+        }
+    }
+
+    /**
+     * Delete group.
+     * 
+     * @param groupId
+     *            - the id of group to delete.
+     */
+    public void deleteGroup(String groupId) {
+        try {
+            LOG.debug("Deleting group(" + groupId + ")");
+            if (groupId == null) {
+                throw new IllegalArgumentException("Parameter 'groupId' can not be null");
+            }
+
+            BoxGroup group = new BoxGroup(boxConnection, groupId);
+            group.delete();
+        } catch (BoxAPIException e) {
+            throw new RuntimeException(
+                    String.format("Box API returned the error code %d\n\n%s", e.getResponseCode(), e.getResponse()), e);
+        }
+    }
+
+    /**
+     * Get group information.
+     * 
+     * @param groupId
+     *            - the id of group.
+     * @return The group information.
+     */
+    public BoxGroup.Info getGroupInfo(String groupId) {
+        try {
+            LOG.debug("Getting info for group(id=" + groupId + ")");
+            if (groupId == null) {
+                throw new IllegalArgumentException("Parameter 'groupId' can not be null");
+            }
+
+            BoxGroup group = new BoxGroup(boxConnection, groupId);
+
+            return group.getInfo();
+        } catch (BoxAPIException e) {
+            throw new RuntimeException(
+                    String.format("Box API returned the error code %d\n\n%s", e.getResponseCode(), e.getResponse()), e);
+        }
+    }
+
+    /**
+     * Get information about all of the group memberships for this group.
+     * 
+     * @param groupId
+     *            - the id of group.
+     * @return The group information.
+     */
+    public Collection<BoxGroupMembership.Info> getGroupMemberships(String groupId) {
+        try {
+            LOG.debug("Getting information about all memberships for group(id=" + groupId + ")");
+            if (groupId == null) {
+                throw new IllegalArgumentException("Parameter 'groupId' can not be null");
+            }
+
+            BoxGroup group = new BoxGroup(boxConnection, groupId);
+
+            return group.getMemberships();
+        } catch (BoxAPIException e) {
+            throw new RuntimeException(
+                    String.format("Box API returned the error code %d\n\n%s", e.getResponseCode(), e.getResponse()), e);
+        }
+    }
+
+    /**
+     * Add a member to group with the specified role.
+     * 
+     * @param groupId
+     *            - the id of group.
+     * @param userId
+     *            - the id of user to be added to group.
+     * @param role
+     *            - the role of the user in this group. Can be <code>null</code>
+     *            to assign the default role.
+     * @return The group information.
+     */
+    public BoxGroupMembership addGroupMembership(String groupId, String userId, BoxGroupMembership.Role role) {
+        try {
+            LOG.debug("Adding user(id=" + userId + ") as member to group(id=" + groupId
+                    + (role == null ? ")" : ") with role=" + role.name()));
+            if (groupId == null) {
+                throw new IllegalArgumentException("Parameter 'groupId' can not be null");
+            }
+            if (userId == null) {
+                throw new IllegalArgumentException("Parameter 'userId' can not be null");
+            }
+
+            BoxGroup group = new BoxGroup(boxConnection, groupId);
+            BoxUser user = new BoxUser(boxConnection, userId);
+
+            return group.addMembership(user, role).getResource();
+        } catch (BoxAPIException e) {
+            throw new RuntimeException(
+                    String.format("Box API returned the error code %d\n\n%s", e.getResponseCode(), e.getResponse()), e);
+        }
+    }
+
+    /**
+     * Delete group membership.
+     * 
+     * @param groupMembershipId
+     *            - the id of group membership to delete.
+     */
+    public void deleteGroupMembership(String groupMembershipId) {
+        try {
+            LOG.debug("Deleting groupMembership(id=" + groupMembershipId + ")");
+            if (groupMembershipId == null) {
+                throw new IllegalArgumentException("Parameter 'groupMemebershipId' can not be null");
+            }
+
+            BoxGroupMembership groupMembership = new BoxGroupMembership(boxConnection, groupMembershipId);
+
+            groupMembership.delete();
+        } catch (BoxAPIException e) {
+            throw new RuntimeException(
+                    String.format("Box API returned the error code %d\n\n%s", e.getResponseCode(), e.getResponse()), e);
+        }
+    }
+
+    /**
+     * Get group membership information.
+     * 
+     * @param groupMemebershipId
+     *            - the id of group membership.
+     * @return The group information.
+     */
+    public BoxGroupMembership.Info getGroupMembershipInfo(String groupMemebershipId) {
+        try {
+            LOG.debug("Getting info for groupMemebership(id=" + groupMemebershipId + ")");
+            if (groupMemebershipId == null) {
+                throw new IllegalArgumentException("Parameter 'groupMemebershipId' can not be null");
+            }
+
+            BoxGroupMembership group = new BoxGroupMembership(boxConnection, groupMemebershipId);
+
+            return group.getInfo();
+        } catch (BoxAPIException e) {
+            throw new RuntimeException(
+                    String.format("Box API returned the error code %d\n\n%s", e.getResponseCode(), e.getResponse()), e);
+        }
+    }
+
+    /**
+     * Update group membership information.
+     * 
+     * @param groupMembershipId
+     *            - the id of group membership to update.
+     * @param info
+     *            - the updated information.
+     * @return The group information.
+     */
+    public BoxGroupMembership updateGroupMembershipInfo(String groupMemebershipId, BoxGroupMembership.Info info) {
+        try {
+            LOG.debug("Updating info for groupMembership(id=" + groupMemebershipId + ")");
+            if (groupMemebershipId == null) {
+                throw new IllegalArgumentException("Parameter 'groupMemebershipId' can not be null");
+            }
+            if (info == null) {
+                throw new IllegalArgumentException("Parameter 'info' can not be null");
+            }
+
+            BoxGroupMembership groupMembership = new BoxGroupMembership(boxConnection, groupMemebershipId);
+
+            groupMembership.updateInfo(info);
+            return groupMembership;
+        } catch (BoxAPIException e) {
+            throw new RuntimeException(
+                    String.format("Box API returned the error code %d\n\n%s", e.getResponseCode(), e.getResponse()), e);
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/camel/blob/db0ca734/components/camel-box/camel-box-api/src/main/java/org/apache/camel/component/box/api/BoxSearchManager.java
----------------------------------------------------------------------
diff --git a/components/camel-box/camel-box-api/src/main/java/org/apache/camel/component/box/api/BoxSearchManager.java b/components/camel-box/camel-box-api/src/main/java/org/apache/camel/component/box/api/BoxSearchManager.java
new file mode 100644
index 0000000..c44e44f
--- /dev/null
+++ b/components/camel-box/camel-box-api/src/main/java/org/apache/camel/component/box/api/BoxSearchManager.java
@@ -0,0 +1,93 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.apache.camel.component.box.api;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+import com.box.sdk.BoxAPIConnection;
+import com.box.sdk.BoxAPIException;
+import com.box.sdk.BoxFolder;
+import com.box.sdk.BoxItem;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Box Search Manager
+ * 
+ * <p>
+ * Provides operations to manage Box searches.
+ * 
+ * 
+ *
+ */
+public class BoxSearchManager {
+
+    private static final Logger LOG = LoggerFactory.getLogger(BoxSearchManager.class);
+
+    /**
+     * Box connection to authenticated user account.
+     */
+    private BoxAPIConnection boxConnection;
+
+    /**
+     * Create search manager to manage the searches of Box connection's
+     * authenticated user.
+     * 
+     * @param boxConnection
+     *            - Box connection to authenticated user account.
+     */
+    public BoxSearchManager(BoxAPIConnection boxConnection) {
+        this.boxConnection = boxConnection;
+    }
+
+    /**
+     * Search folder and all descendant folders using the given query.
+     * 
+     * @param folderId
+     *            - the id of folder searched.
+     * @param query
+     *            - the search query.
+     * 
+     * @return A collection of matching items.
+     */
+    public Collection<BoxItem> searchFolder(String folderId, String query) {
+        try {
+            LOG.debug("Searching folder(id=" + folderId + ") with query=" + query);
+
+            if (folderId == null) {
+                throw new IllegalArgumentException("Parameter 'folderId' can not be null");
+            }
+            if (query == null) {
+                throw new IllegalArgumentException("Parameter 'query' can not be null");
+            }
+
+            BoxFolder folder = new BoxFolder(boxConnection, folderId);
+
+            Collection<BoxItem> results = new ArrayList<BoxItem>();
+            for (BoxItem.Info info : folder.search(query)) {
+                results.add((BoxItem) info.getResource());
+            }
+
+            return results;
+        } catch (BoxAPIException e) {
+            throw new RuntimeException(
+                    String.format("Box API returned the error code %d\n\n%s", e.getResponseCode(), e.getResponse()), e);
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/camel/blob/db0ca734/components/camel-box/camel-box-api/src/main/java/org/apache/camel/component/box/api/BoxTasksManager.java
----------------------------------------------------------------------
diff --git a/components/camel-box/camel-box-api/src/main/java/org/apache/camel/component/box/api/BoxTasksManager.java b/components/camel-box/camel-box-api/src/main/java/org/apache/camel/component/box/api/BoxTasksManager.java
new file mode 100644
index 0000000..a345e8d
--- /dev/null
+++ b/components/camel-box/camel-box-api/src/main/java/org/apache/camel/component/box/api/BoxTasksManager.java
@@ -0,0 +1,324 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.apache.camel.component.box.api;
+
+import java.util.Date;
+import java.util.List;
+
+import com.box.sdk.BoxAPIConnection;
+import com.box.sdk.BoxAPIException;
+import com.box.sdk.BoxFile;
+import com.box.sdk.BoxTask;
+import com.box.sdk.BoxTaskAssignment;
+import com.box.sdk.BoxUser;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Box Tasks Manager
+ * 
+ * <p>
+ * Provides operations to manage Box tasks.
+ * 
+ * 
+ *
+ */
+public class BoxTasksManager {
+
+    private static final Logger LOG = LoggerFactory.getLogger(BoxTasksManager.class);
+
+    /**
+     * Box connection to authenticated user account.
+     */
+    private BoxAPIConnection boxConnection;
+
+    /**
+     * Create tasks manager to manage the tasks of Box connection's
+     * authenticated user.
+     * 
+     * @param boxConnection
+     *            - Box connection to authenticated user account.
+     */
+    public BoxTasksManager(BoxAPIConnection boxConnection) {
+        this.boxConnection = boxConnection;
+    }
+
+    /**
+     * Get a list of any tasks on file.
+     * 
+     * @param fileId
+     *            - the id of file.
+     * @return The list of tasks on file.
+     */
+    public List<BoxTask.Info> getFileTasks(String fileId) {
+        try {
+            LOG.debug("Getting tasks of file(id=" + fileId + ")");
+            if (fileId == null) {
+                throw new IllegalArgumentException("Parameter 'fileId' can not be null");
+            }
+
+            BoxFile file = new BoxFile(boxConnection, fileId);
+
+            return file.getTasks();
+
+        } catch (BoxAPIException e) {
+            throw new RuntimeException(
+                    String.format("Box API returned the error code %d\n\n%s", e.getResponseCode(), e.getResponse()), e);
+        }
+    }
+
+    /**
+     * Add task to file.
+     * 
+     * @param fileId
+     *            - the id of file to add task to.
+     * @param action
+     *            - the action the task assignee will be prompted to do.
+     * @param dueAt
+     *            - - the day at which this task is due.
+     * @param message
+     *            - an optional message to include with the task.
+     * @return The new task.
+     */
+    public BoxTask addFileTask(String fileId, BoxTask.Action action, Date dueAt, String message) {
+        try {
+            LOG.debug("Adding task to file(id=" + fileId + ") to '" + message + "'");
+            if (fileId == null) {
+                throw new IllegalArgumentException("Parameter 'fileId' can not be null");
+            }
+            if (action == null) {
+                throw new IllegalArgumentException("Parameter 'action' can not be null");
+            }
+            if (dueAt == null) {
+                throw new IllegalArgumentException("Parameter 'dueAt' can not be null");
+            }
+
+            BoxFile fileToAddTaskOn = new BoxFile(boxConnection, fileId);
+            return (BoxTask) fileToAddTaskOn.addTask(action, message, dueAt).getResource();
+        } catch (BoxAPIException e) {
+            throw new RuntimeException(
+                    String.format("Box API returned the error code %d\n\n%s", e.getResponseCode(), e.getResponse()), e);
+        }
+    }
+
+    /**
+     * Delete task.
+     * 
+     * @param taskId
+     *            - the id of task to delete.
+     */
+    public void deleteTask(String taskId) {
+        try {
+            LOG.debug("Deleting task(id=" + taskId + ")");
+            if (taskId == null) {
+                throw new IllegalArgumentException("Parameter 'taskId' can not be null");
+            }
+            BoxTask task = new BoxTask(boxConnection, taskId);
+            task.delete();
+        } catch (BoxAPIException e) {
+            throw new RuntimeException(
+                    String.format("Box API returned the error code %d\n\n%s", e.getResponseCode(), e.getResponse()), e);
+        }
+    }
+
+    /**
+     * Get task information.
+     * 
+     * @param taskId
+     *            - the id of task.
+     * @return The task information.
+     */
+    public BoxTask.Info getTaskInfo(String taskId) {
+        try {
+            LOG.debug("Getting info for task(id=" + taskId + ")");
+            if (taskId == null) {
+                throw new IllegalArgumentException("Parameter 'taskId' can not be null");
+            }
+
+            BoxTask task = new BoxTask(boxConnection, taskId);
+
+            return task.getInfo();
+        } catch (BoxAPIException e) {
+            throw new RuntimeException(
+                    String.format("Box API returned the error code %d\n\n%s", e.getResponseCode(), e.getResponse()), e);
+        }
+    }
+
+    /**
+     * Update task information.
+     * 
+     * @param taskId
+     *            - the id of task.
+     * @param info
+     *            - the updated information
+     * @return The updated task.
+     */
+    public BoxTask updateTaskInfo(String taskId, BoxTask.Info info) {
+        try {
+            LOG.debug("Updating info for task(id=" + taskId + ")");
+            if (taskId == null) {
+                throw new IllegalArgumentException("Parameter 'taskId' can not be null");
+            }
+            if (info == null) {
+                throw new IllegalArgumentException("Parameter 'info' can not be null");
+            }
+
+            BoxTask task = new BoxTask(boxConnection, taskId);
+            task.updateInfo(info);
+
+            return task;
+        } catch (BoxAPIException e) {
+            throw new RuntimeException(
+                    String.format("Box API returned the error code %d\n\n%s", e.getResponseCode(), e.getResponse()), e);
+        }
+    }
+
+    /**
+     * Get a list of any assignments for task.
+     * 
+     * @param taskId
+     *            - the id of task.
+     * @return The list of assignments for task.
+     */
+    public List<BoxTaskAssignment.Info> getTaskAssignments(String taskId) {
+        try {
+            LOG.debug("Getting assignments for task(id=" + taskId + ")");
+            if (taskId == null) {
+                throw new IllegalArgumentException("Parameter 'taskId' can not be null");
+            }
+
+            BoxTask file = new BoxTask(boxConnection, taskId);
+
+            return file.getAssignments();
+
+        } catch (BoxAPIException e) {
+            throw new RuntimeException(
+                    String.format("Box API returned the error code %d\n\n%s", e.getResponseCode(), e.getResponse()), e);
+        }
+    }
+
+    /**
+     * Add assignment for task.
+     * 
+     * @param taskId
+     *            - the id of task to add assignment for.
+     * @param assignTo
+     *            - the user to assign to task.
+     * @return The assigned task.
+     */
+    @SuppressWarnings("unused") // compiler for some reason thinks 'if (assignTo
+                                // == null)' clause is dead code.
+    public BoxTask addAssignmentToTask(String taskId, BoxUser assignTo) {
+        try {
+            LOG.debug("Assigning task(id=" + taskId + ") to user(id=" + assignTo.getID() + ")");
+            if (taskId == null) {
+                throw new IllegalArgumentException("Parameter 'commentId' can not be null");
+            }
+            if (assignTo == null) {
+                throw new IllegalArgumentException("Parameter 'assignTo' can not be null");
+            }
+
+            BoxTask task = new BoxTask(boxConnection, taskId);
+            task.addAssignment(assignTo);
+
+            return task;
+        } catch (BoxAPIException e) {
+            throw new RuntimeException(
+                    String.format("Box API returned the error code %d\n\n%s", e.getResponseCode(), e.getResponse()), e);
+        }
+    }
+
+    /**
+     * Get task assignment information.
+     * 
+     * @param taskAssignmentId
+     *            - the id of task assignment.
+     * @return The task assignment information.
+     */
+    public BoxTaskAssignment.Info getTaskAssignmentInfo(String taskAssignmentId) {
+        try {
+            LOG.debug("Getting info for task(id=" + taskAssignmentId + ")");
+            if (taskAssignmentId == null) {
+                throw new IllegalArgumentException("Parameter 'taskAssignmentId' can not be null");
+            }
+
+            BoxTaskAssignment taskAssignment = new BoxTaskAssignment(boxConnection, taskAssignmentId);
+
+            return taskAssignment.getInfo();
+        } catch (BoxAPIException e) {
+            throw new RuntimeException(
+                    String.format("Box API returned the error code %d\n\n%s", e.getResponseCode(), e.getResponse()), e);
+        }
+    }
+
+    // TODO Add this method when BoxTaskAssignment API fixed:
+    // BoxTaskAssignment.update method currently
+    // takes BoxTask.Info instead of BoxTaskAssignment.Info
+    // /**
+    // * Update task assignment information.
+    // *
+    // * @param taskAssignmentId
+    // * - the id of task assignment.
+    // * @param info
+    // * - the updated information
+    // * @return The updated task assignment.
+    // */
+    // public BoxTaskAssignment updateTaskAssignmentInfo(String
+    // taskAssignmentId, BoxTaskAssignment.Info info) {
+    // try {
+    // LOG.debug("Updating info for task(id=" + taskAssignmentId + ")");
+    // if (taskAssignmentId == null) {
+    // throw new IllegalArgumentException("Parameter 'taskAssignmentId' can not
+    // be null");
+    // }
+    // if (info == null) {
+    // throw new IllegalArgumentException("Parameter 'info' can not be null");
+    // }
+    //
+    // BoxTaskAssignment taskAssignment = new BoxTaskAssignment(boxConnection,
+    // taskAssignmentId);
+    // taskAssignment.updateInfo(info);
+    //
+    // return taskAssignment;
+    // } catch (BoxAPIException e) {
+    // throw new RuntimeException(
+    // String.format("Box API returned the error code %d\n\n%s",
+    // e.getResponseCode(), e.getResponse()), e);
+    // }
+    // }
+
+    /**
+     * Delete task assignment.
+     * 
+     * @param taskAssignmentId
+     *            - the id of task assignment to delete.
+     */
+    public void deleteTaskAssignment(String taskAssignmentId) {
+        try {
+            LOG.debug("Deleting task(id=" + taskAssignmentId + ")");
+            if (taskAssignmentId == null) {
+                throw new IllegalArgumentException("Parameter 'taskAssignmentId' can not be null");
+            }
+            BoxTaskAssignment taskAssignment = new BoxTaskAssignment(boxConnection, taskAssignmentId);
+            taskAssignment.delete();
+        } catch (BoxAPIException e) {
+            throw new RuntimeException(
+                    String.format("Box API returned the error code %d\n\n%s", e.getResponseCode(), e.getResponse()), e);
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/camel/blob/db0ca734/components/camel-box/camel-box-api/src/main/java/org/apache/camel/component/box/api/BoxUsersManager.java
----------------------------------------------------------------------
diff --git a/components/camel-box/camel-box-api/src/main/java/org/apache/camel/component/box/api/BoxUsersManager.java b/components/camel-box/camel-box-api/src/main/java/org/apache/camel/component/box/api/BoxUsersManager.java
new file mode 100644
index 0000000..dda4821
--- /dev/null
+++ b/components/camel-box/camel-box-api/src/main/java/org/apache/camel/component/box/api/BoxUsersManager.java
@@ -0,0 +1,333 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.apache.camel.component.box.api;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import com.box.sdk.BoxAPIConnection;
+import com.box.sdk.BoxAPIException;
+import com.box.sdk.BoxUser;
+import com.box.sdk.CreateUserParams;
+import com.box.sdk.EmailAlias;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Box Users Manager
+ * 
+ * <p>
+ * Provides operations to manage Box users.
+ * 
+ * 
+ *
+ */
+public class BoxUsersManager {
+
+    private static final Logger LOG = LoggerFactory.getLogger(BoxUsersManager.class);
+
+    /**
+     * Box connection to authenticated user account.
+     */
+    private BoxAPIConnection boxConnection;
+
+    /**
+     * Create users manager to manage the users of Box connection's
+     * authenticated user.
+     * 
+     * @param boxConnection
+     *            - Box connection to authenticated user account.
+     */
+    public BoxUsersManager(BoxAPIConnection boxConnection) {
+        this.boxConnection = boxConnection;
+    }
+
+    /**
+     * Get current user.
+     * 
+     * @return The current user.
+     */
+    public BoxUser getCurrentUser() {
+        try {
+            LOG.debug("Getting current user");
+
+            return BoxUser.getCurrentUser(boxConnection);
+        } catch (BoxAPIException e) {
+            throw new RuntimeException(
+                    String.format("Box API returned the error code %d\n\n%s", e.getResponseCode(), e.getResponse()), e);
+        }
+    }
+
+    /**
+     * Get any managed users that match the filter term as well as any external
+     * users that match the filter term. For managed users it matches any users
+     * names or emails that start with the term. For external, it only does full
+     * match on email. This method is ideal to use in the case where you have a
+     * full email for a user and you don't know if they're managed or external.
+     * 
+     * @param filterTerm
+     *            - The filter term to lookup users by (login for external,
+     *            login or name for managed); if <code>null</code> all managed
+     *            users are returned.
+     * @param fields
+     *            - the fields to retrieve. Leave this out for the standard
+     *            fields.
+     * @return All the enterprise users or enterprise users that matches the
+     *         filter.
+     */
+    public List<BoxUser.Info> getAllEnterpriseOrExternalUsers(String filterTerm, String... fields) {
+        try {
+            LOG.debug("Getting all enterprise users matching filterTerm=" + filterTerm);
+
+            List<BoxUser.Info> users = new ArrayList<BoxUser.Info>();
+            Iterable<BoxUser.Info> iterable;
+            if (filterTerm == null) {
+                iterable = BoxUser.getAllEnterpriseUsers(boxConnection);
+            } else {
+                iterable = BoxUser.getAllEnterpriseUsers(boxConnection, filterTerm, fields);
+            }
+            for (BoxUser.Info info : iterable) {
+                users.add(info);
+            }
+            return users;
+        } catch (BoxAPIException e) {
+            throw new RuntimeException(
+                    String.format("Box API returned the error code %d\n\n%s", e.getResponseCode(), e.getResponse()), e);
+        }
+    }
+
+    /**
+     * Provision a new user in an enterprise with additional user information.
+     * 
+     * @param login
+     *            - the email address the user will use to login.
+     * @param name
+     *            - the name of the user.
+     * @param params
+     *            - additional user information.
+     * @return All the enterprise users or enterprise users that matches the
+     *         filter.
+     */
+    public BoxUser createEnterpriseUser(String login, String name, CreateUserParams params) {
+        try {
+            LOG.debug("Creating enterprise user with login=" + login + " name=" + name);
+            if (login == null) {
+                throw new IllegalArgumentException("Parameter 'login' can not be null");
+            }
+            if (name == null) {
+                throw new IllegalArgumentException("Parameter 'name' can not be null");
+            }
+
+            if (params != null) {
+                return BoxUser.createEnterpriseUser(boxConnection, login, name, params).getResource();
+            } else {
+                return BoxUser.createEnterpriseUser(boxConnection, login, name).getResource();
+            }
+        } catch (BoxAPIException e) {
+            throw new RuntimeException(
+                    String.format("Box API returned the error code %d\n\n%s", e.getResponseCode(), e.getResponse()), e);
+        }
+    }
+
+    /**
+     * Provision a new app user in an enterprise with additional user
+     * information using Box Developer Edition.
+     * 
+     * @param name
+     *            - the name of the user.
+     * @param params
+     *            - additional user information.
+     * @return All the enterprise users or enterprise users that matches the
+     *         filter.
+     */
+    public BoxUser createAppUser(String name, CreateUserParams params) {
+        try {
+            LOG.debug("Creating app user with name=" + name);
+            if (name == null) {
+                throw new IllegalArgumentException("Parameter 'name' can not be null");
+            }
+
+            if (params != null) {
+                return BoxUser.createAppUser(boxConnection, name, params).getResource();
+            } else {
+                return BoxUser.createAppUser(boxConnection, name).getResource();
+            }
+        } catch (BoxAPIException e) {
+            throw new RuntimeException(
+                    String.format("Box API returned the error code %d\n\n%s", e.getResponseCode(), e.getResponse()), e);
+        }
+    }
+
+    /**
+     * Get user information.
+     * 
+     * @param userId
+     *            - the id of user.
+     * @return The user information.
+     */
+    public BoxUser.Info getUserInfo(String userId) {
+        try {
+            LOG.debug("Getting info for user(id=" + userId + ")");
+            if (userId == null) {
+                throw new IllegalArgumentException("Parameter 'userId' can not be null");
+            }
+
+            BoxUser user = new BoxUser(boxConnection, userId);
+
+            return user.getInfo();
+        } catch (BoxAPIException e) {
+            throw new RuntimeException(
+                    String.format("Box API returned the error code %d\n\n%s", e.getResponseCode(), e.getResponse()), e);
+        }
+    }
+
+    /**
+     * Update user information.
+     * 
+     * @param userId
+     *            - the id of user to update.
+     * @param info
+     *            - the updated information
+     * @return The updated user.
+     */
+    public BoxUser updateUserInfo(String userId, BoxUser.Info info) {
+        try {
+            LOG.debug("Updating info for user(id=" + userId + ")");
+            if (userId == null) {
+                throw new IllegalArgumentException("Parameter 'userId' can not be null");
+            }
+            if (info == null) {
+                throw new IllegalArgumentException("Parameter 'info' can not be null");
+            }
+
+            BoxUser user = new BoxUser(boxConnection, userId);
+            user.updateInfo(info);
+            return user;
+        } catch (BoxAPIException e) {
+            throw new RuntimeException(
+                    String.format("Box API returned the error code %d\n\n%s", e.getResponseCode(), e.getResponse()), e);
+        }
+    }
+
+    /**
+     * Delete user from an enterprise account.
+     * 
+     * @param userId
+     *            - the id of user to delete.
+     * @param notifyUser
+     *            - whether or not to send an email notification to the user
+     *            that their account has been deleted.
+     * @param force
+     *            - whether or not this user should be deleted even if they
+     *            still own files.
+     */
+    public void deleteUser(String userId, boolean notifyUser, boolean force) {
+        try {
+            LOG.debug("Deleting user(id=" + userId + ") notifyUser=" + notifyUser + " force=" + force);
+            if (userId == null) {
+                throw new IllegalArgumentException("Parameter 'fileId' can not be null");
+            }
+
+            BoxUser file = new BoxUser(boxConnection, userId);
+            file.delete(notifyUser, force);
+        } catch (BoxAPIException e) {
+            throw new RuntimeException(
+                    String.format("Box API returned the error code %d\n\n%s", e.getResponseCode(), e.getResponse()), e);
+        }
+    }
+
+    /**
+     * Add a new email alias to user's account.
+     * 
+     * @param userId
+     *            - the id of user.
+     * @param email
+     *            - the email address to add as an alias.
+     * @return The newly created email alias.
+     */
+    public EmailAlias addUserEmailAlias(String userId, String email) {
+        try {
+            LOG.debug("Adding email alias '" + email + "' to user(id=" + userId + ")");
+            if (userId == null) {
+                throw new IllegalArgumentException("Parameter 'userId' can not be null");
+            }
+            if (email == null) {
+                throw new IllegalArgumentException("Paramerer 'email' can not be null");
+            }
+
+            BoxUser user = new BoxUser(boxConnection, userId);
+
+            return user.addEmailAlias(email);
+        } catch (BoxAPIException e) {
+            throw new RuntimeException(
+                    String.format("Box API returned the error code %d\n\n%s", e.getResponseCode(), e.getResponse()), e);
+        }
+    }
+
+    /**
+     * Get a collection of all the email aliases for user.
+     * 
+     * @param userId
+     *            - the id of user.
+     * @return A collection of all the email aliases for user.
+     */
+    public Collection<EmailAlias> getUserEmailAlias(String userId) {
+        try {
+            LOG.debug("Get email aliases for user(id=" + userId + ")");
+            if (userId == null) {
+                throw new IllegalArgumentException("Parameter 'userId' can not be null");
+            }
+
+            BoxUser user = new BoxUser(boxConnection, userId);
+
+            return user.getEmailAliases();
+        } catch (BoxAPIException e) {
+            throw new RuntimeException(
+                    String.format("Box API returned the error code %d\n\n%s", e.getResponseCode(), e.getResponse()), e);
+        }
+    }
+
+    /**
+     * Delete an email alias from user's account.
+     * 
+     * @param userId
+     *            - the id of user.
+     * @param emailAliasId
+     *            - the id of the email alias to delete.
+     */
+    public void deleteUserEmailAlias(String userId, String emailAliasId) {
+        try {
+            LOG.debug("Deleting email_alias(" + emailAliasId + ") for user(id=" + userId + ")");
+            if (userId == null) {
+                throw new IllegalArgumentException("Parameter 'userId' can not be null");
+            }
+            if (emailAliasId == null) {
+                throw new IllegalArgumentException("Parameter 'emailAliasId' can not be null");
+            }
+
+            BoxUser user = new BoxUser(boxConnection, userId);
+
+            user.deleteEmailAlias(emailAliasId);
+        } catch (BoxAPIException e) {
+            throw new RuntimeException(
+                    String.format("Box API returned the error code %d\n\n%s", e.getResponseCode(), e.getResponse()), e);
+        }
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/camel/blob/db0ca734/components/camel-box/camel-box-component/pom.xml
----------------------------------------------------------------------
diff --git a/components/camel-box/camel-box-component/pom.xml b/components/camel-box/camel-box-component/pom.xml
new file mode 100644
index 0000000..3f9f39d
--- /dev/null
+++ b/components/camel-box/camel-box-component/pom.xml
@@ -0,0 +1,627 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You 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.
+  -->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+	<modelVersion>4.0.0</modelVersion>
+
+	<parent>
+		<groupId>org.apache.camel</groupId>
+		<artifactId>camel-box-parent</artifactId>
+		<version>2.19.0-SNAPSHOT</version>
+	</parent>
+
+	<artifactId>camel-box</artifactId>
+	<packaging>jar</packaging>
+	<name>Camel :: Box :: Component</name>
+	<description>Camel Box component</description>
+
+	<properties>
+		<schemeName>box</schemeName>
+		<componentName>Box</componentName>
+		<componentPackage>org.apache.camel.component.box</componentPackage>
+		<outPackage>org.apache.camel.component.box.internal</outPackage>
+		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
+	</properties>
+
+	<dependencies>
+		<dependency>
+			<groupId>org.apache.camel</groupId>
+			<artifactId>camel-core</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.camel</groupId>
+			<artifactId>camel-box-api</artifactId>
+		</dependency>
+
+		<dependency>
+			<groupId>com.box</groupId>
+			<artifactId>box-java-sdk</artifactId>
+			<version>2.1.1</version>
+		</dependency>
+
+		<dependency>
+			<groupId>net.sourceforge.htmlunit</groupId>
+			<artifactId>htmlunit</artifactId>
+			<version>2.24</version>
+		</dependency>
+
+		<!-- Camel annotations in provided scope to avoid compile errors in IDEs -->
+		<dependency>
+			<groupId>org.apache.camel</groupId>
+			<artifactId>spi-annotations</artifactId>
+			<scope>provided</scope>
+		</dependency>
+
+		<!-- Component API javadoc in provided scope to read API signatures -->
+		<dependency>
+			<groupId>org.apache.camel</groupId>
+			<artifactId>camel-box-api</artifactId>
+			<version>${project.version}</version>
+			<classifier>javadoc</classifier>
+			<scope>provided</scope>
+		</dependency>
+
+		<!-- Component API javadoc in provided scope to read API signatures -->
+		<dependency>
+			<groupId>com.box</groupId>
+			<artifactId>box-java-sdk</artifactId>
+			<version>2.1.1</version>
+			<classifier>javadoc</classifier>
+			<scope>provided</scope>
+		</dependency>
+
+		<!-- logging -->
+		<dependency>
+			<groupId>org.slf4j</groupId>
+			<artifactId>slf4j-api</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>org.slf4j</groupId>
+			<artifactId>slf4j-log4j12</artifactId>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>log4j</groupId>
+			<artifactId>log4j</artifactId>
+			<scope>test</scope>
+		</dependency>
+
+		<!-- testing -->
+		<dependency>
+			<groupId>org.apache.camel</groupId>
+			<artifactId>camel-test</artifactId>
+			<scope>test</scope>
+		</dependency>
+	</dependencies>
+
+	<build>
+		<defaultGoal>install</defaultGoal>
+
+		<plugins>
+
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-compiler-plugin</artifactId>
+			</plugin>
+
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-resources-plugin</artifactId>
+			</plugin>
+
+			<plugin>
+				<groupId>org.apache.camel</groupId>
+				<artifactId>camel-api-component-maven-plugin</artifactId>
+				<executions>
+					<execution>
+						<id>generate-test-component-classes</id>
+						<goals>
+							<goal>fromApis</goal>
+						</goals>
+						<configuration>
+							<apis>
+								<api>
+									<apiName>collaborations</apiName>
+									<proxyClass>org.apache.camel.component.box.api.BoxCollaborationsManager</proxyClass>
+									<fromJavadoc />
+									<aliases>
+										<alias>
+											<methodPattern>addFolderCollaboration</methodPattern>
+											<methodAlias>add</methodAlias>
+										</alias>
+										<alias>
+											<methodPattern>addFolderCollaborationByEmail</methodPattern>
+											<methodAlias>addByEmail</methodAlias>
+										</alias>
+										<alias>
+											<methodPattern>deleteCollaboration</methodPattern>
+											<methodAlias>delete</methodAlias>
+										</alias>
+										<alias>
+											<methodPattern>getFolderCollaborations</methodPattern>
+											<methodAlias>collaborations</methodAlias>
+										</alias>
+										<alias>
+											<methodPattern>getPendingCollaborations</methodPattern>
+											<methodAlias>pendingCollaborations</methodAlias>
+										</alias>
+										<alias>
+											<methodPattern>getCollaborationInfo</methodPattern>
+											<methodAlias>info</methodAlias>
+										</alias>
+										<alias>
+											<methodPattern>updateCollaborationInfo</methodPattern>
+											<methodAlias>updateInfo</methodAlias>
+										</alias>
+									</aliases>
+								</api>
+								<api>
+									<apiName>comments</apiName>
+									<proxyClass>org.apache.camel.component.box.api.BoxCommentsManager</proxyClass>
+									<fromJavadoc />
+									<aliases>
+										<alias>
+											<methodPattern>addFileComment</methodPattern>
+											<methodAlias>add</methodAlias>
+										</alias>
+										<alias>
+											<methodPattern>changeCommentMessage</methodPattern>
+											<methodAlias>updateMessage</methodAlias>
+										</alias>
+										<alias>
+											<methodPattern>deleteComment</methodPattern>
+											<methodAlias>delete</methodAlias>
+										</alias>
+										<alias>
+											<methodPattern>getCommentInfo</methodPattern>
+											<methodAlias>info</methodAlias>
+										</alias>
+										<alias>
+											<methodPattern>getFileComments</methodPattern>
+											<methodAlias>comments</methodAlias>
+										</alias>
+										<alias>
+											<methodPattern>replyToComment</methodPattern>
+											<methodAlias>reply</methodAlias>
+										</alias>
+									</aliases>
+								</api>
+								<api>
+									<apiName>event-logs</apiName>
+									<proxyClass>org.apache.camel.component.box.api.BoxEventLogsManager</proxyClass>
+									<fromJavadoc />
+									<aliases>
+										<alias>
+											<methodPattern>getEnterpriseEvents</methodPattern>
+											<methodAlias>events</methodAlias>
+										</alias>
+									</aliases>
+									<nullableOptions>
+										<nullableOption>position</nullableOption>
+										<nullableOption>types</nullableOption>
+									</nullableOptions>
+								</api>
+								<api>
+									<apiName>files</apiName>
+									<proxyClass>org.apache.camel.component.box.api.BoxFilesManager</proxyClass>
+									<fromJavadoc />
+									<aliases>
+										<alias>
+											<methodPattern>uploadFile</methodPattern>
+											<methodAlias>upload</methodAlias>
+										</alias>
+										<alias>
+											<methodPattern>downloadFile</methodPattern>
+											<methodAlias>download</methodAlias>
+										</alias>
+										<alias>
+											<methodPattern>copyFile</methodPattern>
+											<methodAlias>copy</methodAlias>
+										</alias>
+ 										<alias>
+											<methodPattern>moveFile</methodPattern>
+											<methodAlias>move</methodAlias>
+										</alias>
+										<alias>
+											<methodPattern>renameFile</methodPattern>
+											<methodAlias>rename</methodAlias>
+										</alias>
+										<alias>
+											<methodPattern>createFileSharedLink</methodPattern>
+											<methodAlias>link</methodAlias>
+										</alias>
+										<alias>
+											<methodPattern>deleteFile</methodPattern>
+											<methodAlias>delete</methodAlias>
+										</alias>
+										<alias>
+											<methodPattern>uploadNewFileVersion</methodPattern>
+											<methodAlias>uploadVersion</methodAlias>
+										</alias>
+										<alias>
+											<methodPattern>promoteFileVersion</methodPattern>
+											<methodAlias>promoteVersion</methodAlias>
+										</alias>
+										<alias>
+											<methodPattern>getFileVersions</methodPattern>
+											<methodAlias>versions</methodAlias>
+										</alias>
+										<alias>
+											<methodPattern>downloadPreviousFileVersions</methodPattern>
+											<methodAlias>downloadVersion</methodAlias>
+										</alias>
+										<alias>
+											<methodPattern>deleteFileVersion</methodPattern>
+											<methodAlias>deleteVersion</methodAlias>
+										</alias>
+										<alias>
+											<methodPattern>getFileInfo</methodPattern>
+											<methodAlias>info</methodAlias>
+										</alias>
+										<alias>
+											<methodPattern>updateFileInfo</methodPattern>
+											<methodAlias>updateInfo</methodAlias>
+										</alias>
+										<alias>
+											<methodPattern>createFileMetadata</methodPattern>
+											<methodAlias>createMetadata</methodAlias>
+										</alias>
+										<alias>
+											<methodPattern>getFileMetadata</methodPattern>
+											<methodAlias>metadata</methodAlias>
+										</alias>
+										<alias>
+											<methodPattern>updateFileMetadata</methodPattern>
+											<methodAlias>updateMetadata</methodAlias>
+										</alias>
+										<alias>
+											<methodPattern>deleteFileMetadata</methodPattern>
+											<methodAlias>deleteMetadata</methodAlias>
+										</alias>
+										<alias>
+											<methodPattern>getDownloadUrl</methodPattern>
+											<methodAlias>url</methodAlias>
+										</alias>
+										<alias>
+											<methodPattern>getPreviewLink</methodPattern>
+											<methodAlias>preview</methodAlias>
+										</alias>
+										<alias>
+											<methodPattern>getFileThumbnail</methodPattern>
+											<methodAlias>thumbnail</methodAlias>
+										</alias>
+ 									</aliases>
+									<nullableOptions>
+										<nullableOption>fields</nullableOption>
+										<nullableOption>created</nullableOption>
+										<nullableOption>modified</nullableOption>
+										<nullableOption>size</nullableOption>
+										<nullableOption>fileSize</nullableOption>
+										<nullableOption>rangeStart</nullableOption>
+										<nullableOption>rangeEnd</nullableOption>
+										<nullableOption>listener</nullableOption>
+										<nullableOption>fileSize</nullableOption>
+										<nullableOption>newName</nullableOption>
+										<nullableOption>unshareDate</nullableOption>
+										<nullableOption>permissions</nullableOption>
+										<nullableOption>typeName</nullableOption>
+									</nullableOptions>
+								</api>
+								<api>
+									<apiName>folders</apiName>
+									<proxyClass>org.apache.camel.component.box.api.BoxFoldersManager</proxyClass>
+									<fromJavadoc>
+									</fromJavadoc>
+									<aliases>
+ 										<alias>
+											<methodPattern>getRootFolder</methodPattern>
+											<methodAlias>root</methodAlias>
+										</alias>
+										<alias>
+											<methodPattern>createFolder</methodPattern>
+											<methodAlias>create</methodAlias>
+										</alias>
+										<alias>
+											<methodPattern>copyFolder</methodPattern>
+											<methodAlias>copy</methodAlias>
+										</alias>
+ 										<alias>
+											<methodPattern>moveFolder</methodPattern>
+											<methodAlias>move</methodAlias>
+										</alias>
+										<alias>
+											<methodPattern>renameFolder</methodPattern>
+											<methodAlias>rename</methodAlias>
+										</alias>
+										<alias>
+											<methodPattern>createFolderSharedLink</methodPattern>
+											<methodAlias>link</methodAlias>
+										</alias>
+										<alias>
+											<methodPattern>deleteFolder</methodPattern>
+											<methodAlias>delete</methodAlias>
+										</alias>
+										<alias>
+											<methodPattern>getFolder</methodPattern>
+											<methodAlias>folder</methodAlias>
+										</alias>
+										<alias>
+											<methodPattern>getFolderInfo</methodPattern>
+											<methodAlias>info</methodAlias>
+										</alias>
+										<alias>
+											<methodPattern>getFolderItems</methodPattern>
+											<methodAlias>items</methodAlias>
+										</alias>
+										<alias>
+											<methodPattern>updateFolderInfo</methodPattern>
+											<methodAlias>updateInfo</methodAlias>
+										</alias>
+ 									</aliases>
+									<nullableOptions>
+										<nullableOption>offset</nullableOption>
+										<nullableOption>limit</nullableOption>
+										<nullableOption>fields</nullableOption>
+									</nullableOptions>
+								</api>
+								<api>
+									<apiName>groups</apiName>
+									<proxyClass>org.apache.camel.component.box.api.BoxGroupsManager</proxyClass>
+									<fromJavadoc>
+									</fromJavadoc>
+									<aliases>
+										<alias>
+											<methodPattern>createGroup</methodPattern>
+											<methodAlias>create</methodAlias>
+										</alias>
+										<alias>
+											<methodPattern>deleteGroup</methodPattern>
+											<methodAlias>delete</methodAlias>
+										</alias>
+										<alias>
+											<methodPattern>getAllGroups</methodPattern>
+											<methodAlias>groups</methodAlias>
+										</alias>
+										<alias>
+											<methodPattern>getGroupInfo</methodPattern>
+											<methodAlias>info</methodAlias>
+										</alias>
+										<alias>
+											<methodPattern>addGroupMembership</methodPattern>
+											<methodAlias>addMembership</methodAlias>
+										</alias>
+										<alias>
+											<methodPattern>deleteGroupMembership</methodPattern>
+											<methodAlias>deleteMembership</methodAlias>
+										</alias>
+										<alias>
+											<methodPattern>getGroupMemberships</methodPattern>
+											<methodAlias>memberships</methodAlias>
+										</alias>
+										<alias>
+											<methodPattern>getGroupMembershipInfo</methodPattern>
+											<methodAlias>membershipInfo</methodAlias>
+										</alias>
+										<alias>
+											<methodPattern>updateGroupMembershipInfo</methodPattern>
+											<methodAlias>updateMembershipInfo</methodAlias>
+										</alias>
+									</aliases>
+									<nullableOptions>
+										<nullableOption>role</nullableOption>
+									</nullableOptions>
+								</api>
+								<api>
+									<apiName>events</apiName>
+									<proxyClass>org.apache.camel.component.box.api.BoxEventsManager</proxyClass>
+									<fromJavadoc>
+										<excludeMethods>stopListening</excludeMethods>
+									</fromJavadoc>
+									<excludeConfigNames>listener</excludeConfigNames>
+									<nullableOptions>
+										<nullableOption>startingPosition</nullableOption>
+									</nullableOptions>
+								</api>
+								<api>
+									<apiName>search</apiName>
+									<proxyClass>org.apache.camel.component.box.api.BoxSearchManager</proxyClass>
+									<fromJavadoc/>
+									<aliases>
+										<alias>
+											<methodPattern>searchFolder</methodPattern>
+											<methodAlias>search</methodAlias>
+										</alias>
+									</aliases>
+								</api>
+								<api>
+									<apiName>tasks</apiName>
+									<proxyClass>org.apache.camel.component.box.api.BoxTasksManager</proxyClass>
+									<fromJavadoc>
+									</fromJavadoc>
+									<aliases>
+										<alias>
+											<methodPattern>addFileTask</methodPattern>
+											<methodAlias>add</methodAlias>
+										</alias>
+										<alias>
+											<methodPattern>deleteTask</methodPattern>
+											<methodAlias>delete</methodAlias>
+										</alias>
+										<alias>
+											<methodPattern>getFileTasks</methodPattern>
+											<methodAlias>tasks</methodAlias>
+										</alias>
+										<alias>
+											<methodPattern>getTaskInfo</methodPattern>
+											<methodAlias>info</methodAlias>
+										</alias>
+										<alias>
+											<methodPattern>updateTaskInfo</methodPattern>
+											<methodAlias>updateInfo</methodAlias>
+										</alias>
+										<alias>
+											<methodPattern>addAssignmentToTask</methodPattern>
+											<methodAlias>addAssignment</methodAlias>
+										</alias>
+										<alias>
+											<methodPattern>deleteTaskAssignment</methodPattern>
+											<methodAlias>deleteAssignment</methodAlias>
+										</alias>
+										<alias>
+											<methodPattern>getTaskAssignments</methodPattern>
+											<methodAlias>assignments</methodAlias>
+										</alias>
+										<alias>
+											<methodPattern>getTaskAssignmentInfo</methodPattern>
+											<methodAlias>assignmentInfo</methodAlias>
+										</alias>
+									</aliases>
+									<nullableOptions>
+										<nullableOption>message</nullableOption>
+									</nullableOptions>
+								</api>
+								<api>
+									<apiName>users</apiName>
+									<proxyClass>org.apache.camel.component.box.api.BoxUsersManager</proxyClass>
+									<fromJavadoc/>
+									<aliases>
+										<alias>
+											<methodPattern>getCurrentUser</methodPattern>
+											<methodAlias>currentUser</methodAlias>
+										</alias>
+										<alias>
+											<methodPattern>getAllEnterpriseOrExternalUsers</methodPattern>
+											<methodAlias>users</methodAlias>
+										</alias>
+										<alias>
+											<methodPattern>createAppUser</methodPattern>
+											<methodAlias>create</methodAlias>
+										</alias>
+										<alias>
+											<methodPattern>createEnterpriseUser</methodPattern>
+											<methodAlias>create</methodAlias>
+										</alias>
+										<alias>
+											<methodPattern>deleteUser</methodPattern>
+											<methodAlias>delete</methodAlias>
+										</alias>
+										<alias>
+											<methodPattern>addUserEmailAlias</methodPattern>
+											<methodAlias>addEmailAlias</methodAlias>
+										</alias>
+										<alias>
+											<methodPattern>getUserEmailAlias</methodPattern>
+											<methodAlias>emailAlias</methodAlias>
+										</alias>
+										<alias>
+											<methodPattern>deleteUserEmailAlias</methodPattern>
+											<methodAlias>deleteEmailAlias</methodAlias>
+										</alias>
+										<alias>
+											<methodPattern>getUserInfo</methodPattern>
+											<methodAlias>info</methodAlias>
+										</alias>
+										<alias>
+											<methodPattern>updateUserInfo</methodPattern>
+											<methodAlias>updateInfo</methodAlias>
+										</alias>
+									</aliases>
+									<nullableOptions>
+										<nullableOption>filterTerm</nullableOption>
+										<nullableOption>fields</nullableOption>
+										<nullableOption>params</nullableOption>
+									</nullableOptions>
+								</api>
+							</apis>
+							<!-- Specify global values for all APIs here, these are overridden 
+								at API level <substitutions/> <excludeConfigNames/> <excludeConfigTypes/> 
+								<extraOptions> <fromJavadoc/> <aliases/> -->
+						</configuration>
+					</execution>
+				</executions>
+			</plugin>
+
+			<!-- add generated source and test source to build -->
+			<plugin>
+				<groupId>org.codehaus.mojo</groupId>
+				<artifactId>build-helper-maven-plugin</artifactId>
+				<executions>
+					<execution>
+						<id>add-generated-sources</id>
+						<goals>
+							<goal>add-source</goal>
+						</goals>
+						<configuration>
+							<sources>
+								<source>${project.build.directory}/generated-sources/camel-component</source>
+							</sources>
+						</configuration>
+					</execution>
+					<execution>
+						<id>add-generated-test-sources</id>
+						<goals>
+							<goal>add-test-source</goal>
+						</goals>
+						<configuration>
+							<sources>
+								<source>${project.build.directory}/generated-test-sources/camel-component</source>
+							</sources>
+						</configuration>
+					</execution>
+				</executions>
+			</plugin>
+
+		</plugins>
+
+		<pluginManagement>
+			<plugins>
+				<plugin>
+					<groupId>org.apache.camel</groupId>
+					<artifactId>camel-api-component-maven-plugin</artifactId>
+					<version>${project.version}</version>
+					<configuration>
+						<scheme>${schemeName}</scheme>
+						<componentName>${componentName}</componentName>
+						<componentPackage>${componentPackage}</componentPackage>
+						<outPackage>${outPackage}</outPackage>
+					</configuration>
+				</plugin>
+			</plugins>
+		</pluginManagement>
+
+	</build>
+
+	<reporting>
+		<plugins>
+			<plugin>
+				<groupId>org.apache.camel</groupId>
+				<artifactId>camel-api-component-maven-plugin</artifactId>
+				<version>${project.version}</version>
+				<configuration>
+					<scheme>${schemeName}</scheme>
+					<componentName>${componentName}</componentName>
+					<componentPackage>${componentPackage}</componentPackage>
+					<outPackage>${outPackage}</outPackage>
+				</configuration>
+			</plugin>
+		</plugins>
+	</reporting>
+
+</project>

http://git-wip-us.apache.org/repos/asf/camel/blob/db0ca734/components/camel-box/camel-box-component/src/main/docs/box2-component.adoc
----------------------------------------------------------------------
diff --git a/components/camel-box/camel-box-component/src/main/docs/box2-component.adoc b/components/camel-box/camel-box-component/src/main/docs/box2-component.adoc
new file mode 100644
index 0000000..1e3a810
--- /dev/null
+++ b/components/camel-box/camel-box-component/src/main/docs/box2-component.adoc
@@ -0,0 +1,744 @@
+## Box Component
+
+*Available as of Camel version *
+
+The Box component provides access to all of the Box.com APIs accessible
+using https://github.com/box/box-java-sdk/[box-java-sdk]. It
+allows producing messages to upload and download files, create, edit,
+and manage folders, etc. It also supports APIs that allow polling for
+updates to user accounts and even changes to enterprise accounts, etc.
+
+Box.com requires the use of OAuth2.0 for all client application
+authentication. In order to use camel-box with your account, you'll need
+to create a new application within Box.com at
+https://app.box.com/developers/services/edit/[https://app.box.com/developers/services/edit/].
+The Box application's client id and secret will allow access to Box APIs
+which require a current user. A user access token is generated and
+managed by the API for an end user. 
+
+Maven users will need to add the following dependency to their pom.xml
+for this component:
+
+[source,java]
+-------------------------------------------
+    <dependency>
+        <groupId>org.apache.camel</groupId>
+        <artifactId>camel-box</artifactId>
+        <version>${camel-version}</version>
+    </dependency>
+-------------------------------------------
+
+### Connection Authentication Types 
+
+The Box component supports three different types of authenticated connections.
+
+#### Standard Authentication
+
+*Standard Authentication* uses the *OAuth 2.0 three-legged authentication process* to authenticate its connections with Box.com. This type of authentication enables Box *managed users* and *external users* to access, edit, and save their Box content through the Box component.
+
+#### App Enterprise Authentication
+
+*App Enterprise Authentication* uses the *OAuth 2.0 with JSON Web Tokens (JWT)* to authenticate its connections as a *Service Account* for a *Box Application*. This type of authentication enables a service account to access, edit, and save the Box content of its *Box Application* through the Box component.
+
+#### App User Authentication
+
+*App User Authentication* uses the *OAuth 2.0 with JSON Web Tokens (JWT)* to authenticate its connections as an *App User* for a *Box Application*. This type of authentication enables app users to access, edit, and save their Box content in its *Box Application* through the Box component.
+
+### URI format
+
+[source,java]
+--------------------------------------------
+    box://endpoint-prefix/endpoint?[options]
+--------------------------------------------
+
+Endpoint prefix can be one of:
+
+* collaborations
+* comments
+* event-logs
+* files
+* folders
+* groups
+* events
+* search
+* tasks
+* users
+
+### BoxComponent
+
+The Box Component can be configured with the options below. These
+options can be provided using the component's bean
+property�*`configuration`*�of
+type�*`org.apache.camel.component.box.BoxConfiguration`*. These options
+can also be specified in the endpoint URI.�
+
+[width="100%",cols="10%,10%,80%",options="header",]
+|=======================================================================  custom access token cachecom.box.sdk
+|Option |Type |Description
+
+|accessTokenCache |com.box.sdk.IAccessTokenCache |A custom access token cache. For production applications it is recommended to use a distributed cache like Memcached or Redis, and to implement this interface to store and retrieve access tokens appropriately for your environment; when not set an internal access token cache is used; ONLY used when using App Enterprise or User authentication.
+
+|clientId |String |Box application client ID
+
+|clientSecret |String |Box application client secret
+
+|encryptionAlgorithm |com.box.sdk.EncryptionAlgorithm |Algorithm used by OAuth 2.0 with JWT; MUST be provided when using App Enterprise and User authentication
+
+|enterpriseId |String |The enterprise ID to use for requesting access token; MUST be provided when using App Enterprise authentication
+
+|httpParams |java.util.Map |Custom HTTP params for settings like proxy host
+
+|maxCacheEntries |Integer |The maximum number of access tokens in cache; ONLY used when internal access token cache is used
+
+|privateKeyFile |String |Path to file containing private key used to generate signature in OAuth 2.0 with JWT; MUST be provided when using App Enterprise and User authentication
+
+|privateKeyPassword |String |Password for private key; only used for App Enterprise and User authentication; MUST be provided when using App Enterprise and User authentication
+
+|publicKeyId |String |The ID of public key used to generate signature in OAuth 2.0 with JWT; MUST be provided when using App Enterprise and User authentication 
+
+|userId |String |The user ID to use for an App user Authentication; MUST be provided when using App User authentication
+
+|userName |String |Box user name for a Managed user; MUST be provided when using Standard Authentication
+
+|userPassword |String |Box user password, MUST be provided when using Standard Authentication and if authSecureStorage is not set, or
+returns null on first call
+|=======================================================================
+
+### Producer Endpoints:
+
+Producer endpoints can use endpoint prefixes followed by endpoint names
+and associated options described next. A shorthand alias can be used for
+some endpoints. The endpoint URI MUST contain a prefix.
+
+Endpoint options that are not mandatory are denoted by *[]*. When there
+are no mandatory options for an endpoint, one of the set of *[]* options
+MUST be provided. Producer endpoints can also use a special
+option�*`inBody`*�that in turn should contain the name of the endpoint
+option whose value will be contained in the Camel Exchange In message.
+
+Any of the endpoint options can be provided in either the endpoint URI,
+or dynamically in a message header. The message header name must be of
+the format�*`CamelBox.<option>`*. Note that the�*`inBody`*�option
+overrides message header, i.e. the endpoint
+option�*`inBody=option`*�would override a�*`CamelBox.option`*�header.
+
+If a value is not provided for the option *defaultRequest* either in the
+endpoint URI or in a message header, it will be assumed to be�`null`.
+Note that the�`null`�value will only be used if other options do not
+satisfy matching endpoints.
+
+In case of Box API errors the endpoint will throw a
+RuntimeCamelException with a
+*com.box.sdk.BoxAPIException*�derived exception
+cause.
+
+#### Endpoint Prefix�_collaborations_
+
+For more information on Box collaborations see
+https://docs.box.com/reference#collaboration-object[https://docs.box.com/reference#collaboration-object].�The
+following endpoints can be invoked with the prefix�*`collaborations`*�as
+follows:
+
+[source,java]
+-------------------------------------------
+    box://collaborations/endpoint?[options]
+-------------------------------------------
+
+[width="100%",cols="10%,10%,10%,70%",options="header",]
+|=======================================================================
+|Endpoint |Shorthand Alias |Options |Result Body Type
+
+|addFolderCollaboration |add |folderId, collaborator, role |com.box.sdk.BoxCollaboration
+
+|addFolderCollaborationByEmail |addByEmail |folderId, email, role |com.box.sdk.BoxCollaboration
+
+|deleteCollaboration |delete |collaborationId |
+
+|getFolderCollaborations |collaborations |folderId |java.util.Collection
+
+|getPendingCollaborations |pendingCollaborations | |java.util.Collection
+
+|getCollaborationInfo |info |collaborationId |com.box.sdk.BoxCollaboration.Info
+
+|updateCollaborationInfo |updateInfo |collaborationId, info |com.box.sdk.BoxCollaboration
+|=======================================================================
+
+[[Box-URIOptionsforcollaborations]]
+URI Options for�_collaborations_
+
+
+[width="100%",cols="10%,90%",options="header",]
+|=======================================================================
+|Name |Type
+
+|collaborationId |String
+
+|collaborator |com.box.sdk.BoxCollaborator
+
+|role |com.box.sdk.BoxCollaboration.Role
+
+|folderId |String
+
+|email |String
+
+|info |com.box.sdk.BoxCollaboration.Info
+|=======================================================================
+
+#### Endpoint Prefix�_comments_
+
+For more information on Box comments see
+https://docs.box.com/reference#comment-object[https://docs.box.com/reference#comment-object].�The
+following endpoints can be invoked with the prefix�*`comments`*�as
+follows:
+
+[source,java]
+-------------------------------------------
+    box://comments/endpoint?[options]
+-------------------------------------------
+
+[width="100%",cols="10%,10%,10%,70%",options="header",]
+|=======================================================================
+|Endpoint |Shorthand Alias |Options |Result Body Type
+
+|addFileComment |add |fileId, message |com.box.sdk.BoxFile
+
+|changeCommentMessage |updateMessage |commentId, message |com.box.sdk.BoxComment
+
+|deleteComment |delete |commentId |
+
+|getCommentInfo |info |commentId |com.box.sdk.BoxComment.Info
+
+|getFileComments |comments |fileId |java.util.List
+
+|replyToComment |reply |commentId, message |com.box.sdk.BoxComment
+|=======================================================================
+
+[[Box-URIOptionsforcollaborations]]
+URI Options for�_collaborations_
+
+
+[width="100%",cols="10%,90%",options="header",]
+|=======================================================================
+|Name |Type
+
+|commentId |String
+
+|fileId |String
+
+|message |String
+
+|=======================================================================
+
+#### Endpoint Prefix�_events-logs_
+
+For more information on Box event logs see
+https://docs.box.com/reference#events[https://docs.box.com/reference#events].
+The following endpoints can be invoked with the prefix�*`events`*�as follows:
+
+[source,java]
+---------------------------------
+  box://event-logs/endpoint?[options]
+---------------------------------
+
+[width="100%",cols="10%,10%,10%,70%",options="header",]
+|=======================================================================
+|Endpoint |Shorthand Alias |Options |Result Body Type
+
+|getEnterpriseEvents |events |position, after, before, [types] |java.util.List
+|=======================================================================
+
+[[Box-URIOptionsforevent-logs]]
+URI Options for�_event-logs_
+
+[width="100%",cols="10%,90%",options="header",]
+|=======================================================================
+|Name |Type
+
+|position |String
+
+|after |Date
+
+|before |Date
+
+|types |com.box.sdk.BoxEvent.Types[]
+|=======================================================================
+
+#### Endpoint Prefix�_files_
+
+For more information on Box files see
+https://docs.box.com/reference#file-object[https://docs.box.com/reference#file-object].
+The following endpoints can be invoked with the
+prefix�*`files`*�as follows. 
+
+[source,java]
+----------------------------------------
+   box://files/endpoint?[options]
+----------------------------------------
+
+[width="100%",cols="10%,10%,10%,70%",options="header",]
+|=======================================================================
+|Endpoint |Shorthand Alias |Options |Result Body Type
+
+|uploadFile |upload |parentFolderId, content, fileName, [created], [modified], [size], [listener] |com.box.sdk.BoxFile
+
+|downloadFile |download |fileId, output, [rangeStart], [rangeEnd], [listener]  |java.io.OutputStream
+
+|copyFile |copy |fileId, destinationFolderId, [newName] |com.box.sdk.BoxFile
+
+|moveFile |move |fileId, destinationFolderId,  [newName] |com.box.sdk.BoxFile
+
+|renameFile |rename |fileId, newFileName |com.box.sdk.BoxFile 
+
+|createFileSharedLink |link |fileId, access, [unshareDate], [permissions] |com.box.sdk.BoxSharedLink
+
+|deleteFile |delete |fileId |
+
+|uploadNewFileVersion |uploadVersion |fileId, fileContent, [modified], [fileSize], [listener] |com.box.boxsdk.BoxFile
+
+|promoteFileVersion |promoteVersion |fileId, version |com.box.sdk.BoxFileVersion
+
+|getFileVersions |versions |fileId |java.util.Collection
+
+|downloadPreviousFileVersions |downloadVersion |fileId, version, output, [listener] |java.io.OutputStream
+
+|deleteFileVersion |deleteVersion |fileId, version |
+
+|getFileInfo |info |fileId, fields |com.box.sdk.BoxFile.Info
+
+|updateFileInfo |updateInfo |fileId, info |com.box.sdk.BoxFile
+
+|createFileMetadata |createMetadata |fileId, metadata, [typeName] |com.box.sdk.Metadata
+
+|getFileMetadata |metadata |fileId, [typeName] |com.box.sdk.Metadata
+
+|updateFileMetadata |updateMetadata |fileId, metadata |com.box.sdk.Metadata
+
+|deleteFileMetadata |deleteMetadata |fileId | 
+
+|getDownloadUrl |url |fileId |java.net.URL
+
+|getPreviewLink |preview |fileId |java.net.URL
+
+|getFileThumbnail |thumbnail |fileId, fileType, minWidth, minHeight, maxWidth, maxHeight |byte[]
+|=======================================================================
+
+[[Box-URIOptionsforfiles]]
+URI Options for _files_
+
+[width="100%",cols="10%,90%",options="header",]
+|=======================================================================
+|Name |Type
+
+|parentFolderId |String
+
+|content |java.io.InputStream
+
+|fileName |String
+
+|created |Date
+
+|modified |Date
+
+|size |Long
+
+|listener |com.box.sdk.ProgressListener 
+
+|output |java.io.OutputStream
+
+|rangeStart |Long
+
+|rangeEnd |Long
+
+|outputStreams |java.io.OutputStream[]
+
+|destinationFolderId |String
+
+|newName |String
+
+|fields |String[]
+
+|info |com.box.sdk.BoxFile.Info
+
+|fileSize |Long
+
+|version |Integer
+
+|access |com.box.sdk.BoxSharedLink.Access
+
+|unshareDate |Date
+
+|permissions |com.box.sdk.BoxSharedLink.Permissions
+
+|fileType |com.box.sdk.BoxFile.ThumbnailFileType
+
+|minWidth |Integer
+
+|minHeight |Integer
+
+|maxWidth |Integer
+
+|maxHeight |Integer
+
+|metadata |com.box.sdk.Metadata
+
+|typeName |String
+|=======================================================================
+
+#### Endpoint Prefix _folders_
+
+For more information on Box folders see
+https://docs.box.com/reference#folder-object[https://docs.box.com/reference#folder-object].
+The following endpoints can be invoked with the prefix
+*`folders`*�as follows. 
+
+[source,java]
+-------------------------------------------
+    box://folders/endpoint?[options]
+-------------------------------------------
+
+[width="100%",cols="10%,10%,10%,70%",options="header",]
+|=======================================================================
+|Endpoint |Shorthand Alias |Options |Result Body Type
+
+|getRootFolder |root  | |com.box.sdk.BoxFolder
+
+|createFolder |create |parentFolderId, folderName |com.box.sdk.BoxFolder
+
+|copyFolder |copy |folderId, destinationfolderId, [newName] |com.box.sdk.BoxFolder 
+
+|moveFolder |move |folderId, destinationFolderId, newName |com.box.sdk.BoxFolder
+
+|renameFolder |rename |folderId, newFolderName |com.box.sdk.BoxFolder
+
+|createFolderSharedLink |link |folderId, access, [unsharedDate], [permissions] |java.util.List
+
+|deleteFolder |delete |folderId |
+
+|getFolder |folder |path |com.box.sdk.BoxFolder
+
+|getFolderInfo |info |folderId, fields |com.box.sdk.BoxFolder.Info
+
+|getFolderItems |items |folderId, offset, limit, fields |com.box.sdk.BoxFolder
+
+|updateFolderInfo |updateInfo |folderId, info |com.box.sdk.BoxFolder
+|=======================================================================
+
+[[Box-URIOptionsforfolders]]
+URI Options for _folders_
+
+[width="100%",cols="10%,90%",options="header",]
+|=======================================================================
+|Name |Type
+
+|path |String[]
+
+|folderId |String
+
+|offset |Long
+
+|limit |Long
+
+|fields |String[]
+
+|parentFolderId |String
+
+|folderName |String
+
+|destinationFolderId |String
+
+|newName |String
+
+|newFolderName |String
+
+|info |String
+
+|access |com.box.sdk.BoxSharedLink.Access
+
+|unshareDate |Date
+
+|permissions |com.box.sdk.BoxSharedLink.Permissions
+|=======================================================================
+
+#### Endpoint Prefix�_groups_
+
+For more information on Box groups see
+https://docs.box.com/reference#group-object[https://docs.box.com/reference#group-object].
+The following endpoints can be invoked with the prefix�*`groups`*�as
+follows:
+
+[source,java]
+-----------------------------------
+    box://groups/endpoint?[options]
+-----------------------------------
+
+[width="100%",cols="10%,10%,10%,70%",options="header",]
+|=======================================================================
+|Endpoint |Shorthand Alias |Options |Result Body Type
+
+|createGroup |create |name |com.box.sdk.BoxGroup 
+
+|addGroupMembership |createMembership |groupId, userId, role |com.box.sdk.BoxGroupMembership
+
+|deleteGroup |delete |groupId |
+
+|getAllGroups |groups | |java.util.Collection
+
+|getGroupInfo |info |groupId |com.box.sdk.BoxGroup.Info
+
+|addGroupMembership |addMembership |groupId, userId, role |com.box.sdk.BoxGroupMembership
+
+|deleteGroupMembership |deleteMembership |groupMembershipId |
+
+|getGroupMemberships |memberships |groupId |java.uti.Collection
+
+|getGroupMembershipInfo |membershipInfo |groupMemebershipId |com.box.sdk.BoxGroup.Info
+
+|updateGroupMembershipInfo |updateMembershipInfo |groupMemebershipId, info |com.box.sdk.BoxGroupMembership
+|=======================================================================
+
+[[Box-URIOptionsforgroups]]
+URI Options for�_groups_
+
+[width="100%",cols="10%,90%",options="header",]
+|=======================================================================
+|Name |Type
+
+|name |String
+
+|groupId |String
+
+|userId |String
+
+|role |com.box.sdk.BoxGroupMembership.Role
+
+|groupMembershipId |String
+
+|info |com.box.sdk.BoxGroupMembership.Info
+
+|=======================================================================
+
+#### Endpoint Prefix�_search_
+
+For more information on Box search API see
+https://docs.box.com/reference#searching-for-content[https://docs.box.com/reference#searching-for-content].�The
+following endpoints can be invoked with the prefix�*`search`*�as
+follows:
+
+[source,java]
+-----------------------------------
+    box://search/endpoint?[options]
+-----------------------------------
+
+[width="100%",cols="10%,10%,10%,70%",options="header",]
+|=======================================================================
+|Endpoint |Shorthand Alias |Options |Result Body Type
+
+|searchFolder |search |folderId, query |java.util.Collection
+|=======================================================================
+
+[[Box-URIOptionsforsearch]]
+URI Options for�_search_
+
+[width="100%",cols="10%,90%",options="header",]
+|=======================================================================
+|Name |Type
+
+|folderId |String
+
+|query |String
+|=======================================================================
+
+#### Endpoint Prefix�_tasks_
+
+For information on Box tasks see
+https://docs.box.com/reference#task-object-1[https://docs.box.com/reference#task-object-1].
+The following endpoints can be invoked with the prefix�*`tasks`*�as
+follows:
+
+[source,java]
+----------------------------------
+    box://tasks/endpoint?[options]
+----------------------------------
+
+[width="100%",cols="10%,10%,10%,70%",options="header",]
+|=======================================================================
+|Endpoint |Shorthand Alias |Options |Result Body Type
+
+|addFileTask |add  |fileId, action, dueAt, [message] |com.box.sdk.BoxUser
+
+|deleteTask |delete |taskId |
+
+|getFileTasks |tasks  |fileId |java.util.List
+
+|getTaskInfo |info  |taskId |com.box.sdk.BoxTask.Info
+
+|updateTaskInfo |updateInfo |taskId, info |com.box.sdk.BoxTask
+
+|addAssignmentToTask |addAssignment |taskId, assignTo |com.box.sdk.BoxTask
+
+|deleteTaskAssignment |deleteAssignment |taskAssignmentId |
+
+|getTaskAssignments |assignments  | taskId |java.util.List
+
+|getTaskAssignmentInfo |assignmentInfo |taskAssignmentId |com.box.sdk.BoxTaskAssignment.Info
+|=======================================================================
+
+[[Box-URIOptionsfortasks]]
+URI Options for�_tasks_
+
+[width="100%",cols="10%,90%",options="header",]
+|=======================================================================
+|Name |Type
+
+|fileId |String
+
+|action |com.box.sdk.BoxTask.Action
+
+|dueAt |Date
+
+|message |String
+
+|taskId |String
+
+|info |com.box.sdk.BoxTask.Info
+
+|assignTo |com.box.sdk.BoxUser
+
+|taskAssignmentId |String
+|=======================================================================
+
+#### Endpoint Prefix�_users_
+
+For information on Box users see
+https://docs.box.com/reference#user-object[https://docs.box.com/reference#user-object].
+The following endpoints can be invoked with the prefix�*`users`*�as
+follows:
+
+[source,java]
+----------------------------------
+    box://users/endpoint?[options]
+----------------------------------
+
+[width="100%",cols="10%,10%,10%,70%",options="header",]
+|=======================================================================
+|Endpoint |Shorthand Alias |Options |Result Body Type
+
+|getCurrentUser |currentUser  | |com.box.sdk.BoxUser
+
+|getAllEnterpriseOrExternalUsers |users |filterTerm, [fields] |com.box.sdk.BoxUser
+
+|createAppUser |create  |name, [params] |com.box.sdk.BoxUser
+
+|createEnterpriseUser |create  |login, name, [params] |com.box.sdk.BoxUser
+
+|deleteUser |delete |userId, notifyUser, force |
+
+|getUserEmailAlias |emailAlias |userId |com.box.sdk.BoxUser
+
+|deleteUserEmailAlias |deleteEmailAlias |userId, emailAliasId |java.util.List
+
+|getUserInfo |info  | userId |com.box.sdk.BoxUser.Info
+
+|updateUserInfo |updateInfo |userId, info |com.box.sdk.BoxUser
+|=======================================================================
+
+[[Box-URIOptionsforusers]]
+URI Options for�_users_
+
+[width="100%",cols="10%,90%",options="header",]
+|=======================================================================
+|Name |Type
+
+|defaultRequest |com.box.restclientv2.requestsbase.BoxDefaultRequestObject
+
+|emailAliasRequest |com.box.boxjavalibv2.requests.requestobjects.BoxEmailAliasRequestObject
+
+|emailId |String
+
+|filterTerm |String
+
+|folderId |String
+
+|simpleUserRequest |com.box.boxjavalibv2.requests.requestobjects.BoxSimpleUserRequestObject
+
+|userDeleteRequest |com.box.boxjavalibv2.requests.requestobjects.BoxUserDeleteRequestObject
+
+|userId |String
+
+|userRequest |com.box.boxjavalibv2.requests.requestobjects.BoxUserRequestObject
+
+|userUpdateLoginRequest |com.box.boxjavalibv2.requests.requestobjects.BoxUserUpdateLoginRequestObject
+|=======================================================================
+
+### Consumer Endpoints:
+
+For more information on Box events see
+https://docs.box.com/reference#events[https://docs.box.com/reference#events].
+Consumer endpoints can only use the endpoint prefix *events* as
+shown in the example next.
+
+[source,java]
+----------------------------------------
+    box://events/endpoint?[options]
+----------------------------------------
+
+[width="100%",cols="10%,10%,10%,70%",options="header",]
+|=======================================================================
+|Endpoint |Shorthand Alias |Options |Result Body Type
+
+|events |  |[startingPosition] |com.box.sdk.BoxEvent 
+|=======================================================================
+
+[[Box-URIOptionsforevents]]
+URI Options for�_events_
+
+[width="100%",cols="10%,90%",options="header",]
+|=======================================================================
+|Name |Type
+
+|startingPosition |Long
+|=======================================================================
+
+### Message header
+
+Any of the options�can be provided in a message header for producer
+endpoints with *CamelBox.* prefix.
+
+### Message body
+
+All result message bodies utilize objects provided by the Box Java SDK.
+Producer endpoints can specify the option name for incoming message body
+in the *inBody* endpoint parameter.
+
+### Use cases
+
+The following route uploads new files to the user's root folder:
+
+[source,java]
+-----------------------------------------------------------
+    from("file:...")
+        .to("box://files/upload/inBody=fileUploadRequest");
+-----------------------------------------------------------
+
+The following route polls user's account for updates:
+
+[source,java]
+-----------------------------------------------------------------------------
+    from("box://events/listen?startingPosition=-1")
+        .to("bean:blah");
+-----------------------------------------------------------------------------
+
+The following route uses a producer with dynamic header options.�The
+*fileId*�property has the Box file id and the *output* property has 
+the output stream of the file contents, so they are assigned to the
+*CamelBox.fileId* header and *CamelBox.output* header respectively
+as follows:
+
+[source,java]
+-------------------------------------------------------
+    from("direct:foo")
+        .setHeader("CamelBox.fileId", header("fileId"))
+        .setHeader("CamelBox.output", header("output"))
+        .to("box://files/download")
+        .to("file://...");
+-------------------------------------------------------