Data in LabKey Server is stored in a hierarchy of projects and folders. The hierarchy looks looks similar to a file system, although it is managed by the database. The Container
class represents a project or folder in the hierarchy. This topic covers implementation details of containers.
The Container on the URL
The container hierarchy is always included in the URL. For example, the URL for this page shows that it is in the /Documentation folder:
method of the ViewURLHelper class returns the container path from the URL. On the Container object, the getPath()
method returns the container's path.
The Root Container
LabKey Server also has a root container which is not apparent in the user interface, but which contains all other containers. When you are debugging LabKey Server code, you may see the Container object for the root container; its name appears as "/".
In the core.Containers table in the LabKey Server database, the root container has a null value for both the Parent and the Name field.
You can use the isRoot()
method to determine whether a given container is the root container.
Projects Versus Folders
Given that they are both objects of type Container, projects and folders are essentially the same at the level of the implementation. A project will always have the root container as its parent, while a folder's parent will be either a project or another folder.
You can use the isProject()
method to determine whether a given container is a project or a folder.
Useful Classes and Methods
Container Class Methods
The Container class represents a given container and persists all of the properties of that container. Some of the useful methods on the Container class include:
- getName(): Returns the container name
- getPath(): Returns the container path
- getId(): Returns the GUID that identifies this container
- getParent(): Returns the container's parent container
- hasPermission(user, perm): Returns a boolean indicating whether the specified user has the given level of permissions on the container
The ContainerManager Class
The ContainerManager class includes a number of static methods for managing containers. Some useful methods include:
- create(container, string): Creates a new container
- delete(container): Deletes an existing container
- ensureContainer(string): Checks to make sure the specified container exists, and creates it if it doesn't
- getForId(): Returns the container with this EntityId (a GUID value)
- getForPath(): Returns the container with this path
The ViewController Class
The controller class in your LabKey Server module extends the ViewController class, which provides the getContainer()
method. You can use this method to retrieve the Container object corresponding to the container in which the user is currently working.