Home Library 2.0 API Framework Specification
Contents
Home Library 2.0 API
The Home Library is a library to manage and persist the users homes. that supports file sharing Home Library user is presented with a personal workspace, where users can collaborate, share information, and access project resources using special folders. This module describes the model of Home Library 2.0 and how to use the new API interface.
Design Model
The design model for Home Library identifies a core set of capabilities that ...
The Home Library is defined through an API interface (HomeLibrary project).
Currently there is just one API implementation:
- HomeLibraryJCR: an HomeLibrary implementation based on JCR 2.0 (Java Content Repository JSR 283).
The Home Library dynamically load the implementation specified on properties file.
The core of Home Library 2.0 is a webService build on the top of the Jackrabbit web application. The goal of Home Library 2.0 is to expose content in the content repository as HTTP resources, fostering a RESTful style of application architecture.
Workspace Items
Each element contained in a workspace area is a WorkspaceItem.The workspace items are the effective user objects.
The following figure shows the WorkspaceItem model.
Objects removed
- AquaMapsItem
- Annotation
- DocumentLink
- ImageDocumentLink
- PDFDocumentLink
- Annotation
- TabularDataLink
- ExternalResourceLink
- WorkflowReport
- WorkflowTemplate
Objects mapped to gCubeItem
- Document
- ImageDocument
- Metadata
- PDFDocument
- UrlDocument
Use the next section to keep code compatible with both old and new API.
Compatibility
There is some pattern to know during the transition period to keep code base compatible with both old and new API.
If using old API you were working on Document, ImageDocument, Metadata, PDFDocument or UrlDocument, using new API your are going to work on GCubeItem that is a generic gCube Object.
But old context and model are still available using the following sections.
Document
New Home Library API to retrieve Document Objects:
import org.gcube.common.homelibrary.home.workspace.folder.items.gcube.Document; Document document = (Document) item; becomes: import org.gcube.common.homelibary.model.items.type.NodeProperty; import org.gcube.common.homelibrary.home.workspace.folder.items.GCubeItem; GCubeItem document = (GCubeItem) item;
How to retrieve properties:
document.getAlternatives(); -> document.getProperties().getProperties().get((NodeProperty.ALTERNATIVES.toString()); document.getAnnotation(); -> document.getProperties().getProperties().get((NodeProperty.ANNOTATIONS.toString()); document.getCollectionName(); -> document.getProperties().getProperties().get((NodeProperty.COLLECTION_NAME.toString()); document.getData(); -> document.getProperties().getProperties().get((NodeProperty.DATA.toString()); document.getFolderItemType(); -> document.getProperties().getProperties().get((NodeProperty.FOLDER_ITEM_TYPE.toString()); document.getLength(); -> document.getProperties().getProperties().get((NodeProperty.SIZE.toString()); document.getMetadata(); -> document.getProperties().getProperties().get((NodeProperty.METADATA.toString()); document.getMimeType(); -> document.getProperties().getProperties().get((NodeProperty.MIME_TYPE.toString()); document.getParts(); -> document.getProperties().getProperties().get((NodeProperty.PARTS.toString()); document.getURI(); -> document.getProperties().getProperties().get((NodeProperty.OID.toString()); document.getWorkflowData(); -> document.getProperties().getProperties().get((NodeProperty.WORKFLOW_DATA.toString()); document.getWorkflowId(); -> document.getProperties().getProperties().get((NodeProperty.WORKFLOW_ID.toString()); document.getWorkflowStatus(); -> document.getProperties().getProperties().get((NodeProperty.WORKFLOW_STATUS.toString());
ImageDocument
New Home Library API to retrieve ImageDocument Objects:
import org.gcube.common.homelibrary.home.workspace.folder.items.gcube.ImageDocument; ImageDocument document = (ImageDocument) item; becomes: import org.gcube.common.homelibary.model.items.type.NodeProperty; import org.gcube.common.homelibrary.home.workspace.folder.items.GCubeItem; GCubeItem document = (GCubeItem) item;
To retrieve properties, use the API for Document Object and the following API:
document.getHeight(); -> document.getProperties().getProperties().get((NodeProperty.IMAGE_HEIGHT.toString()); document.getWidth(); -> document.getProperties().getProperties().get((NodeProperty.IMAGE_WIDTH.toString()); document.getThumbnailHeight(); -> document.getProperties().getProperties().get((NodeProperty.THUMBNAIL_HEIGHT.toString()); document.getThumbnailWidth(); -> document.getProperties().getProperties().get((NodeProperty.THUMBNAIL_WIDTH.toString()); document.getThumbnail(); -> document.getProperties().getProperties().get((NodeProperty.THUMBNAIL_DATA.toString()); document.getThumbnailLength(); -> document.getThumbnail().getSize();
Metadata
New Home Library API to retrieve Metadata Objects:
import org.gcube.common.homelibrary.home.workspace.folder.items.gcube.Metadata; Metadata document = (Metadata) item; becomes: import org.gcube.common.homelibary.model.items.type.NodeProperty; import org.gcube.common.homelibrary.home.workspace.folder.items.GCubeItem; GCubeItem document = (GCubeItem) item;
To retrieve properties:
document.getURI(); -> document.getProperties().getProperties().get((NodeProperty.OID.toString()); document.getWorkflowData(); -> document.getProperties().getProperties().get((NodeProperty.WORKFLOW_DATA.toString()); document.getWorkflowId(); -> document.getProperties().getProperties().get((NodeProperty.WORKFLOW_ID.toString()); document.getWorkflowStatus(); -> document.getProperties().getProperties().get((NodeProperty.WORKFLOW_STATUS.toString()); document.getSchemaName(); -> document.getProperties().getProperties().get((NodeProperty.SCHEMA.toString()); document.getXML(); -> document.getProperties().getProperties().get((NodeProperty.ALTERNATIVES.toString()); document.getCollectionName(); -> document.getProperties().getProperties().get((NodeProperty.COLLECTION_NAME.toString()); document.getURI(); -> document.getProperties().getProperties().get((NodeProperty.OID.toString());
PDFDocument
New Home Library API to retrieve PDFDocument Objects:
import org.gcube.common.homelibrary.home.workspace.folder.items.gcube.PDFDocument; PDFDocument document = (PDFDocument) item; becomes: import org.gcube.common.homelibary.model.items.type.NodeProperty; import org.gcube.common.homelibrary.home.workspace.folder.items.GCubeItem; GCubeItem document = (GCubeItem) item;
To retrieve properties, use the API for Document Object and the following API:
document.getNumberOfPages(); -> document.getProperties().getProperties().get((NodeProperty.NUMBER_OF_PAGES.toString()); document.getVersion(); -> document.getProperties().getProperties().get((NodeProperty.VERSION.toString()); document.getAuthor(); -> document.getProperties().getProperties().get((NodeProperty.AUTHOR.toString()); document.getTitle(); -> document.getProperties().getProperties().get((NodeProperty.PDF_TITLE.toString()); document.getProducer(); -> document.getProperties().getProperties().get((NodeProperty.PRODUCER.toString());
UrlDocument
New Home Library API to retrieve UrlDocument Objects:
import org.gcube.common.homelibrary.home.workspace.folder.items.gcube.UrlDocument; UrlDocument document = (UrlDocument) item; becomes: import org.gcube.common.homelibary.model.items.type.NodeProperty; import org.gcube.common.homelibrary.home.workspace.folder.items.GCubeItem; GCubeItem document = (GCubeItem) item;
To retrieve properties, use the API for Document Object and the following API:
document.getUrl(); -> document.getProperties().getProperties().get((NodeProperty.URL.toString());
Implementation Framework
The Home Library 2.0 API is a set of components that uses Apache Jackrabbit, to store and manage content.
Home Library 2.0 uses Java servlets to process HTTP requests in a RESTful way.
Home Library is implemented in terms of the JCR API. The default implementation for Apache Jackrabbit is provided out of the box.
Through code sharing, the framework reduces development costs and ensures the consistency and correctness of library implementations.
Management Model
If Needed
How to
To use Home Library 2.0, import the following dependencies:
<dependency> <groupId>org.gcube.common</groupId> <artifactId>home-library-jcr</artifactId> <version>[2.0.0-SNAPSHOT,3.0.0-SNAPSHOT)</version> </dependency> <dependency> <groupId>org.gcube.common</groupId> <artifactId>home-library</artifactId> <version>[2.0.0-SNAPSHOT,3.0.0-SNAPSHOT)</version> </dependency>