Home Library 2.0 API Framework Specification

From Gcube Wiki
Revision as of 17:03, 15 June 2015 by Valentina.marioli (Talk | contribs) (From ImageDocument to gCubeItem)

Jump to: navigation, search

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. WebApp.png

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. Areamodel.png

The following objects have been removed:

AquaMapsItem();
Annotation();
DocumentLink();
ImageDocumentLink();
PDFDocumentLink();
Annotation();
TabularDataLink();
ExternalResourceLink();
WorkflowReport();
WorkflowTemplate();

Objects mapped to gCubeItem:

Document();
DocumentMetadata();
ImageDocument();
Metadata();
PDFDocument();
UrlDocument();

Compatibility

From Document to gCubeItem

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:

doc.getAlternatives(); -> document.getProperties().getProperties().get((NodeProperty.ALTERNATIVES.toString()); 
doc.getAnnotation(); -> document.getProperties().getProperties().get((NodeProperty.ANNOTATIONS.toString()); 
doc.getCollectionName(); -> document.getProperties().getProperties().get((NodeProperty.COLLECTION_NAME.toString()); 
doc.getData(); -> document.getProperties().getProperties().get((NodeProperty.DATA.toString());
doc.getFolderItemType(); -> document.getProperties().getProperties().get((NodeProperty.FOLDER_ITEM_TYPE.toString());
doc.getLength(); -> document.getProperties().getProperties().get((NodeProperty.SIZE.toString());
doc.getMetadata(); -> document.getProperties().getProperties().get((NodeProperty.METADATA.toString());
doc.getMimeType(); -> document.getProperties().getProperties().get((NodeProperty.MIME_TYPE.toString());  
doc.getParts(); -> document.getProperties().getProperties().get((NodeProperty.PARTS.toString()); 
doc.getURI(); -> document.getProperties().getProperties().get((NodeProperty.OID.toString());  
doc.getWorkflowData(); -> document.getProperties().getProperties().get((NodeProperty.WORKFLOW_DATA.toString());  
doc.getWorkflowId(); -> document.getProperties().getProperties().get((NodeProperty.WORKFLOW_ID.toString());  
doc.getWorkflowStatus(); -> document.getProperties().getProperties().get((NodeProperty.WORKFLOW_STATUS.toString());

From DocumentMetadata to gCubeItem

import org.gcube.common.homelibrary.home.workspace.folder.items.gcube.DocumentMetadata;
 
DocumentMetadata document = (DocumentMetadata) 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());

From ImageDocument to gCubeItem

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:

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());

From Metadata to gCubeItem

import org.gcube.common.homelibary.model.items.type.NodeProperty;
import org.gcube.common.homelibrary.home.workspace.folder.items.GCubeItem;
 
ImageDocument image = (ImageDocument) item;
becomes 
gCubeItem image = (gCubeItem) item; 
 
image.getWidth() -> image.getItemProperties().getPropertyValue(NodeProperty.IMAGE_WIDTH.toString()); 
image.getHeight() -> image.getItemProperties().getPropertyValue(NodeProperty.IMAGE_HEIGHT.toString()); 
image.getThumbnailWidth() -> image.getItemProperties().getPropertyValue(NodeProperty.THUMBNAIL_WIDTH.toString()); 
image.getThumbnailHeight() -> image.getItemProperties().getPropertyValue(NodeProperty.THUMBNAIL_HEIGHT.toString()); 
image.getThumbnailLength() -> image.getItemProperties().getPropertyValue(NodeProperty.IMAGE_WIDTH.toString());  ?
image.getURI() -> image.getItemProperties().getPropertyValue(NodeProperty.OID.toString()); 
image.getCollectionName() -> image.getItemProperties().getPropertyValue(NodeProperty.COLLECTION_NAME.toString()); 
image.getAlternatives() -> image.getItemProperties().getPropertyValue(NodeProperty.ALTERNATIVES.toString()); 
image.getParts() -> image.getItemProperties().getPropertyValue(NodeProperty.PARTS.toString()); 
image.getMetadata() -> image.getItemProperties().getPropertyValue(NodeProperty.METADATA.toString());

From PDFDocument to gCubeItem

import org.gcube.common.homelibary.model.items.type.NodeProperty;
import org.gcube.common.homelibrary.home.workspace.folder.items.GCubeItem;
 
ImageDocument image = (ImageDocument) item;
becomes 
gCubeItem image = (gCubeItem) item; 
 
image.getWidth() -> image.getItemProperties().getPropertyValue(NodeProperty.IMAGE_WIDTH.toString()); 
image.getHeight() -> image.getItemProperties().getPropertyValue(NodeProperty.IMAGE_HEIGHT.toString()); 
image.getThumbnailWidth() -> image.getItemProperties().getPropertyValue(NodeProperty.THUMBNAIL_WIDTH.toString()); 
image.getThumbnailHeight() -> image.getItemProperties().getPropertyValue(NodeProperty.THUMBNAIL_HEIGHT.toString()); 
image.getThumbnailLength() -> image.getItemProperties().getPropertyValue(NodeProperty.IMAGE_WIDTH.toString());  ?
image.getURI() -> image.getItemProperties().getPropertyValue(NodeProperty.OID.toString()); 
image.getCollectionName() -> image.getItemProperties().getPropertyValue(NodeProperty.COLLECTION_NAME.toString()); 
image.getAlternatives() -> image.getItemProperties().getPropertyValue(NodeProperty.ALTERNATIVES.toString()); 
image.getParts() -> image.getItemProperties().getPropertyValue(NodeProperty.PARTS.toString()); 
image.getMetadata() -> image.getItemProperties().getPropertyValue(NodeProperty.METADATA.toString());

From UrlDocument to gCubeItem

import org.gcube.common.homelibary.model.items.type.NodeProperty;
import org.gcube.common.homelibrary.home.workspace.folder.items.GCubeItem;
 
ImageDocument image = (ImageDocument) item;
becomes 
gCubeItem image = (gCubeItem) item; 
 
image.getWidth() -> image.getItemProperties().getPropertyValue(NodeProperty.IMAGE_WIDTH.toString()); 
image.getHeight() -> image.getItemProperties().getPropertyValue(NodeProperty.IMAGE_HEIGHT.toString()); 
image.getThumbnailWidth() -> image.getItemProperties().getPropertyValue(NodeProperty.THUMBNAIL_WIDTH.toString()); 
image.getThumbnailHeight() -> image.getItemProperties().getPropertyValue(NodeProperty.THUMBNAIL_HEIGHT.toString()); 
image.getThumbnailLength() -> image.getItemProperties().getPropertyValue(NodeProperty.IMAGE_WIDTH.toString());  ?
image.getURI() -> image.getItemProperties().getPropertyValue(NodeProperty.OID.toString()); 
image.getCollectionName() -> image.getItemProperties().getPropertyValue(NodeProperty.COLLECTION_NAME.toString()); 
image.getAlternatives() -> image.getItemProperties().getPropertyValue(NodeProperty.ALTERNATIVES.toString()); 
image.getParts() -> image.getItemProperties().getPropertyValue(NodeProperty.PARTS.toString()); 
image.getMetadata() -> image.getItemProperties().getPropertyValue(NodeProperty.METADATA.toString());

Implementation Framework

The Home Library 2.0 API is a set of components that support the development of .... that comply with the model. 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>