Resources are objects which can be stored in a resource repository. Resources
have a path, under which they are stored in the repository.
Depending on the implementation, resources may offer additional functionality:
* Resources that are similar to files in that they have a body and a size
should implement {@link BodyResource}.
Resources can be attached to a repository by calling {@link attachTo()}. They
can be detached again by calling {@link detach()}. Use {@link isAttached()}
to find out whether a resource is attached and {@link getRepository()} to
obtain the attached repository.
You can create a reference to a resource by calling {@link createReference()}.
References can have different paths than the resource they are referencing.
Otherwise, they are identical to the referenced resource. Use
{@link isReference()} to check whether a resource is a reference. You can
call {@link getRepositoryPath()} to retrieve the path of the referenced
resource.
If you implement a custom resource, let your test extend
{@link AbstractResourceTest} to make sure your resource satisfies the
constraints of the interface. Extend {@link GenericResource} if you want to
avoid reimplementing basic functionality.