Download Grafo Client Starter Pack
The grafo-client tar/zip can be downloaded from following link.
Grafo Client 1.0.0 Starter Pack tar
Grafo Client 1.0.0 Starter Pack zip
Tar/Zip Contents
- Read Me
- Java Examples
- Javascript Examples
Introduction
Welcome to the Grafo Client API! You can use our API to access Grafo endpoints at https://app.gra.fo to search, fetch your documents (or documents shared with you), folders, corresponding EKG documents and work on them programmatically to add/update/delete them or their constituent entites.
Apart from raw REST API support, we also have language bindings in Java, and JavaScript! You can view code examples in the area to the right, and you can switch the programming language of the examples with the tabs in the top right.
Errors
Grafo uses conventional HTTP response codes to indicate the success or failure of an API request. In general: Codes in the 2xx range indicate success. Codes in the 4xx range indicate an error that failed given the information provided (e.g., a required parameter was omitted, a EKG save failed due to validation error, etc.). Codes in the 5xx range indicate an error with Grafo's servers (these are rare).
The Grafo API uses the following error codes:
Error Code | Meaning |
---|---|
400 | Bad Request -- Your request is invalid. |
401 | Unauthorized -- Your API key is wrong. (needs revisit into Grafos login and fix things) |
403 | Forbidden -- The entity requested is hidden for administrators only. |
404 | Not Found -- The specified entity could not be found. |
405 | Method Not Allowed -- You tried to access a entity with an invalid method. |
406 | Not Acceptable -- You requested a format that isn't json. |
410 | Gone -- The entity requested has been removed from our servers. |
418 | The request was not completely processed. |
429 | Too Many Requests -- You're requesting too many Grafo Entities! Slow down! |
500 | Internal Server Error -- We had a problem with our server. Try again later. |
503 | Service Unavailable -- We're temporarily offline for maintenance. Please try again later. |
Error Attributes
Attribute | Description |
---|---|
error | Short description of the error. |
detail | Longer error description if available |
Handling Errors
API Libraries throw the errors as GrafoClientTransportException (java) or a subclass. These are runtime exceptions and hence need not be caught at compile time. However if the parent class (GrafoClientTransportException) is caught, then it provides an oppportunity to deal with exceptions in a app specific manner if the default throw all the way to the top is not gracious.
Pagination
All top-level API resources have support for bulk fetches via "list" API methods. For instance, you can list folders, list documents, and list attributes for a concept.
These list API methods share a common structure, taking these two parameters: limit, and page.
Subsequent requests can submit the page as part of the query parameters.
Pagination Query Parameters
Parameter | Default | Mandatory | Description |
---|---|---|---|
limit | 50 | false | If set, the number of records is equal to or less than limit. |
page | 1 | false | The value has to be set for subsequent pages. |
Entities supporting pagination
- Folder
- Document
- Shared Document
- Comment
Entities that do not support pagination
- Concept
- Relationship
- Attribute (both Concept and Relationship Attributes)
- Field (Concept Field, Relationship Field, Concept Attribute Field, and Relationship Attribute Field)
Logging
Grafo-client provides logging feature.
Java uses slf4j. The logging can be configured in logback.xml.
Javascript uses winston logger. More information on this is available at winston
@slf4j
public class demo {
public void createConcept () {
log.info("Creating Concept");
.......
}
}
'use strict';
var winston = require('winston');
var GrafoClient = require('grafo-client/lib/grafo_client');
var logOptions = {
file: {
level: 'debug',
filename: 'C:/grafo-client.log',
handleExceptions: true,
json: true,
maxsize: 5242880, // 5MB
maxFiles: 5,
colorize: false,
},
console: {
level: 'debug',
handleExceptions: true,
json: false,
colorize: true
}
};
var doGrafo = async function() {
try {
var logger = winston.createLogger({
level: 'debug',
transports: [
new (winston.transports.Console)(logOptions.console),
new winston.transports.File(logOptions.file)
], exceptionHandlers: [ new winston.transports.Console() ]
});
logger.info("Starting Grafo Client Example");
var grafoClient = new GrafoClient();
//Pass the logger variable to grafoclient's init method
//config variable is used for authentication details. Check Authentication section for more information on this.
await grafoClient.init(config, logger);
logger.info("Authenticated");
//.. write actual grafo client code here
await grafoClient.close();
} catch(err) {
logger.info(err);
}
};
doGrafo();
Authentication
To authenticate, use this code:
import com.capsenta.grafo.GrafoClient;
/* Grafo Client constructor looks for grafo-client.properties in
classpath and uses the 4 properties:
grafo.server, grafo.email, grafo.password and grafo.token
defined in that file to automatically login */
try ( GrafoClient gClient = new GrafoClient(); ) {
...
}
# With shell, you first login by posting the authentication details
# Session Cookie is returned by server.
# Save the session cookie to a file
# ( directories in cookie file path should pre exist.
# Curl does not create the directory )
curl
--header "Content-Type: application/json"
--cookie-jar /home/gopher/grafo_cookie.txt
--data '{"emailAddress":"support@capsenta.com", "password":"Grafo123", "token": "cdd31f91e32e771dfc4de05"}'
--request POST
https://app.gra.fo/api/v1/login
OR
curl
-H "Content-Type: application/json"
-c /home/gopher/grafo_cookie.txt
-d '{"emailAddress":"support@capsenta.com", "password":"Grafo123", "token": "cdd31f91e32e771dfc4de05"}'
-X POST
https://app.gra.fo/api/v1/login
# From now onwards, the saved cookie file can be used for every REST API call
# Like this
curl -b /home/gopher/grafo_cookie.txt https://app.gra.fo/api/v1/documents
# Note: -b <<cookie file>> reference will not be shown in
# curl commands henceforth. It needs to be added everytime
// Create a conf.js like this using your config params
module.exports = {
GRAFO: {
SECURE: true,
SERVER: "app.gra.fo",
PORT: 401,
DEFAULT_LOGIN: {
EMAIL: "support@capsenta.com",
PASSSWORD: "Grafo123",
TOKEN: "cdd31f91e32e771dfc4de05"
},
OT: {
UPDATE_INTERVAL_IN_MS: 100
}
}
}
//grafo api access code elsewhere in another js
'use strict';
var config = require('./conf.js');
var GrafoClient = require('grafo-client/lib/grafo_client');
var doGrafo = async function() {
try {
console.log("Starting Grafo Client Example");
var grafoClient = new GrafoClient();
console.log("Authenticating to Grafo with provided config : ");
console.log(config);
await grafoClient.init(config);
console.log("Authenticated");
//.. write actual grafo client code here
await grafoClient.close();
} catch(err) {
console.log(err);
}
};
doGrafo();
Make sure to replace
emailAddress
,password
, andtoken
with appropriate values.
Grafo Client uses a combination of userid, password and a developer token to allow access to the API. You can get a developer token from Grafo.
A session cookie is issued after successful authentication. Grafo expects the session cookie to be included in all API requests to the server in the header:
connect.sid s%3A2qhmWErcbzkJJeF4xlc5wV8d7Rt0tXV9.wrpCoeXWQ37%2FGpjgrF1Npviu%2F3BlqWvFcR7c384RhMs
Folders
Folders are logical containers for grouping documents.
List Folders
This endpoint retrieves all of your folders. The folders are returned sorted by creation date, with the most recent folder appearing first.
try ( GrafoClient gClient = new GrafoClient(); )
{
ResourceSearchCriteria resSearchCrit =
new ResourceSearchCriteria().limit(20).deleted(false);
for (Iterator<Folder> folderIter = gClient.getFolders(resSearchCrit); folderIter.hasNext();)
{
Folder folder = folderIter.next();
folder.getId(); folder.getTitle(); folder.getDescription();
folder.getDateCreated(); folder.getDateDeleted();
Boolean isDeleted = folder.getDeleted();
UUID parentFolderId = folder.getParent();
UUID owner = doc.getOwner();
}
}
//Resource Search Criteria to list documents created on 2018 Oct 17
ResourceSearchCriteria docSearchCrit =
new ResourceSearchCriteria().limit(20).deleted(false).createdOn(LocalDate.of(2018, 10, 17));
//Resource Search Criteria to list documents created before 2018 Oct 17
ResourceSearchCriteria docSearchCrit =
new ResourceSearchCriteria().limit(20).deleted(false).createdBefore(LocalDate.of(2018, 10, 17));
//Resource Search Criteria to list documents created after 2018 Oct 17
ResourceSearchCriteria docSearchCrit =
new ResourceSearchCriteria().limit(20).deleted(false).createdAfter(LocalDate.of(2018, 10, 17));
//Resource Search Criteria to list documents created on or after 2018 Oct 17
ResourceSearchCriteria docSearchCrit =
new ResourceSearchCriteria().limit(20).deleted(false).createdOnOrAfter(LocalDate.of(2018, 10, 17));
//Resource Search Criteria to list documents created between 2018 Oct 05 and 2018 Oct 17
//(Both dates inclusive)
ResourceSearchCriteria docSearchCrit = new ResourceSearchCriteria()
.createdBetween(LocalDate.of(2018, 10, 05), LocalDate.of(2018, 10, 17), InclusionType.IncludeStartAndEndDate)
.limit(20).deleted(false);
# No search criteria. get 1st page and limit to 50
curl https://app.gra.fo/api/v1/folders
#List my deleted folders 2nd page and limit 20
curl https://app.gra.fo/api/v1/folders?page=2&limit=20&deleted=true
#List Folders created on 2019 Jan 23 (page 1 assumed unless specified)
curl https://app.gra.fo/api/v1/folders?created=2019-01-23
#List Folders created on or before 2019 Jan 23
curl https://app.gra.fo/api/v1/folders?created[lte]=2019-01-23
#List Folders created before 2019 Jan 23
curl https://app.gra.fo/api/v1/folders?created[lt]=2019-01-23
#List Folders created after 2017 March 5
curl https://app.gra.fo/api/v1/folders?created[gt]=2017-03-05
#List Folders created on or after 2017 March 5
curl https://app.gra.fo/api/v1/folders?created[gte]=2017-03-05
# List Folders created between 2017 March 5 and 2019 Jan 23
# (excluding both days)
curl https://app.gra.fo/api/v1/folders?created[gt]=2017-03-05&created[lt]=2019-01-23
# List Folders created between 2017 March 5 and 2019 Jan 23
# (both dates inclusive)
curl https://app.gra.fo/api/v1/folders?created[gte]=2017-03-05&created[lte]=2019-01-23
//List folders created on 2018 Oct 24 (limit 5, 1st page, without parent folder and not deleted)
var resSearchCriteria = new ResourceSearchCriteria().setLimit(5).setPage(1).setDeleted(false).createdOn('2018-10-24');
var allFolders = await grafoClient.getFolders(resSearchCriteria);
The above command returns JSON structured like this: (Java and Javascript map JSON to their respective data structures)
{
"page": "1",
"folders": [
{
"id": "536a35f8-cb7b-41c6-a834-c4c03516657a",
"title": "inventory_docs",
"owner": "4aa09898-0348-4a5d-8775-59cadf2d2945",
"dateCreated": 2018-10-24,
"dateDeleted": null,
"parent": "",
"deleted": 0
},
{
"id": "f16bb076-4fc4-43ab-bddc-e7e6433e497b",
"title": "hr_docs`",
"owner": "4aa09898-0348-4a5d-8775-59cadf2d2945",
"dateCreated": 2018-10-24,
"dateDeleted": null,
"parent": "",
"deleted": 0
}
]
}
HTTP Request
GET http://example.com/api/v1/folders
Query Parameters
Common List Paging params of page and limit are supported.
Parameter | Child Arguments | Default | Mandatory | Description |
---|---|---|---|---|
parent | '' | false | If set, the folders within another folder whose id is this will be listed. | |
deleted | 0 | false | If set to true, then the folders returned are only those that are deleted. | |
created | false | Optional filter on the list based on the created field. Exact check. This (and all child argument) values are in yyyy-MM-dd format | ||
gt | false | Optional lower bound filter for the created field in list. Excludes the entities created on lower bound itself | ||
gte | false | Optional lower bound filter for the created field in list. Includes the entities created on lower bound. | ||
lt | false | Optional upper bound filter for the created field in list. Excludes the entities created on upper bound itself | ||
lte | false | Optional upper bound filter for the created field in list. Includes the entities created on upper bound. |
Returns
This returns a JSON object containing array of folders and the page number. The array contains folders limited by the limit requested (or less if this is the last page), for the current page requested. Each entry in the array is a separate folder object.
Get Folder
//Pass the Id of the folder to retrieve
try ( GrafoClient gClient = new GrafoClient(); ) {
Folder folder = gClient.getFolder(UUID.fromString("954423eb-9a36-42d7-b054-7fd1c905d53a"));
UUID owner = folder.getOwner();
}
curl "https://app.gra.fo/api/v1/folders/954423eb-9a36-42d7-b054-7fd1c905d53a"
//Pass the Id of the folder to retrieve
var folder = await grafoClient.getFolder('536df107-2395-4e7f-9ee7-f177a9b759d6');
The above command returns JSON structured like this: (Java and Javascript map JSON to their respective data structures)
{
"id": "f16bb076-4fc4-43ab-bddc-e7e6433e497b",
"title": "hr_docs",
"owner": "4aa09898-0348-4a5d-8775-59cadf2d2945",
"dateCreated": 2018-10-24,
"dateDeleted": null,
"parent": "",
"deleted": 0
}
This endpoint retrieves a specific folder by id.
HTTP Request
GET https://app.gra.fo/api/v1/folders/<ID>
URL Parameters
Parameter | Description |
---|---|
ID | The ID of the folder to retrieve |
Returns
This returns a JSON object for the folder.
Create Folder
//New folder created inside folder with id f16bb076-4fc4-43ab-bddc-e7e6433e497b
try ( GrafoClient gClient = new GrafoClient(); ) {
Folder folder = new Folder();
folder.setTitle("MyFolder_01");
folder.setParent(UUID.fromString("f16bb076-4fc4-43ab-bddc-e7e6433e497b"));
Folder folderCreated = gClient.createFolder(folder);
}
curl -X POST
-d '{"title": "MyFolder_01", "parent": "f16bb076-4fc4-43ab-bddc-e7e6433e497b"}'
https://app.gra.fo/api/v1/folders
//New folder created inside folder with id f16bb076-4fc4-43ab-bddc-e7e6433e497b
Folder folder = new Folder();
folder.setTitle("MyFolder_01");
folder.setParent(UUID.fromString("f16bb076-4fc4-43ab-bddc-e7e6433e497b"));
var newFolder = await grafoClient.createFolder(folder);
The above command returns JSON structured like this: (Java and Javascript map JSON to their respective data structures)
{
"id": "66aad20f-4ae6-49c9-b4f9-6b6281ec701a",
"title": "MyFolder_01",
"parent": "f16bb076-4fc4-43ab-bddc-e7e6433e497b",
"owner": "4aa09898-0348-4a5d-8775-59cadf2d2945",
"dateCreated": 2018-10-24,
"dateDeleted": null,
"deleted": 0
}
This endpoint creates a folder.
HTTP Request
POST https://app.gra.fo/api/v1/folders
URL Parameters
None
JSON Body
Name | Mandatory | Default | Description |
---|---|---|---|
title | false | "New Folder" | Title of the folder |
parent | false | - | UUID of parent folder |
Returns
This returns a JSON object for the created folder.
Update Folder
try ( GrafoClient gClient = new GrafoClient(); ) {
Folder folder =
gClient.getFolder(
UUID.fromString("66aad20f-4ae6-49c9-b4f9-6b6281ec701a")
);
folder.setTitle("NewFolderTitle");
Folder updatedFolder = gClient.updateFolder(folder);
}
curl -X PUT
-d '{"title": "NewFolderTitle"}'
https://app.gra.fo/api/v1/folders/66aad20f-4ae6-49c9-b4f9-6b6281ec701a
var folder = await grafoClient.getFolder('66aad20f-4ae6-49c9-b4f9-6b6281ec701a');
folder.setTitle("NewFolderTitle");
var updatedFolder = await grafoClient.updateFolder(folder);
The above command returns JSON structured like this: (Java and Javascript map JSON to their respective data structures)
{
"id": "66aad20f-4ae6-49c9-b4f9-6b6281ec701a",
"title": "NewFolderTitle",
"parent": "f16bb076-4fc4-43ab-bddc-e7e6433e497b",
"owner": "4aa09898-0348-4a5d-8775-59cadf2d2945",
"dateCreated": 2018-10-24,
"dateDeleted": null,
"deleted": 0
}
This endpoint updates my folder with the specified id.
HTTP Request
PUT https://app.gra.fo/api/v1/folders/<ID>
URL Parameters
Parameter | Description |
---|---|
ID | The ID of the folder to retrieve |
JSON Body
Name | Mandatory | Description |
---|---|---|
title | false | Title of the folder |
parent | false | UUID of parent folder |
Returns
This returns a JSON object for the updated folder.
Delete Folder
//Pass the Id of the folder to delete
try ( GrafoClient gClient = new GrafoClient(); ) {
Folder folder =
gClient.getFolder(
UUID.fromString("66aad20f-4ae6-49c9-b4f9-6b6281ec701a")
);
GenericGrafoResponse response = gClient.deleteFolder(folder.getId());
}
curl -X DELETE
https://app.gra.fo/api/v1/folders/66aad20f-4ae6-49c9-b4f9-6b6281ec701a
//Pass the Id of the folder to delete
var deletedFolder = await grafoClient.deleteFolder('66aad20f-4ae6-49c9-b4f9-6b6281ec701a');
The above command returns JSON structured like this: (Java and Javascript map JSON to their respective data structures)
{
"success": true
}
This endpoint deletes my folder for the specified id.
HTTP Request
DELETE https://app.gra.fo/api/v1/folders/<ID>
URL Parameters
Parameter | Description |
---|---|
ID | The ID of the folder to delete |
Returns
This returns whether the deletion succeeded. If not, then an error will be returned as per error specification at the top of this document.
Documents
Document is a lightweight placeholder for the actual EKG Document
List Documents
This endpoint retrieves all of your documents. The documents are returned sorted by creation date, with the most recent document appearing first.
// No Resource Search Criteria
try ( GrafoClient gClient = new GrafoClient(); )
{
ResourceSearchCriteria resSearchCrit =
new ResourceSearchCriteria().limit(20).deleted(false);
for (Iterator<Document> docIter = gClient.getDocuments(resSearchCrit);
docIter.hasNext();)
{
Document doc = docIter.next();
doc.getId(); doc.getTitle(); doc.getIri(); doc.getIriPrefix();
doc.getDescription(); doc.getDateCreated(); doc.getDateDeleted();
Boolean isDeleted = doc.getDeleted();
UUID parentFolderId = doc.getParent();
UUID owner = doc.getOwner();
}
}
//Resource Search Criteria to list documents created on 2018 Oct 17
ResourceSearchCriteria docSearchCrit =
new ResourceSearchCriteria().limit(20).deleted(false).createdOn(LocalDate.of(2018, 10, 17));
//Resource Search Criteria to list documents created before 2018 Oct 17
ResourceSearchCriteria docSearchCrit =
new ResourceSearchCriteria().limit(20).deleted(false).createdBefore(LocalDate.of(2018, 10, 17));
//Resource Search Criteria to list documents created after 2018 Oct 17
ResourceSearchCriteria docSearchCrit =
new ResourceSearchCriteria().limit(20).deleted(false).createdAfter(LocalDate.of(2018, 10, 17));
//Resource Search Criteria to list documents created on or after 2018 Oct 17
ResourceSearchCriteria docSearchCrit =
new ResourceSearchCriteria().limit(20).deleted(false).createdOnOrAfter(LocalDate.of(2018, 10, 17));
//Resource Search Criteria to list documents created between 2018 Oct 05 and 2018 Oct 17
//(Both dates inclusive)
ResourceSearchCriteria docSearchCrit = new ResourceSearchCriteria()
.createdBetween(LocalDate.of(2018, 10, 05), LocalDate.of(2018, 10, 17), InclusionType.IncludeStartAndEndDate)
.limit(20).deleted(false);
# No search criteria. get 1st page and limit to 50
curl https://app.gra.fo/api/v1/documents
#List my deleted documents 2nd page and limit 20
curl https://app.gra.fo/api/v1/documents?page=2&limit=20&deleted=true
#List Documents created on 2019 Jan 23 (page 1 assumed unless specified)
curl https://app.gra.fo/api/v1/documents?created=2019-01-23
#List Documents created on or before 2019 Jan 23
curl https://app.gra.fo/api/v1/documents?created[lte]=2019-01-23
#List Documents created before 2019 Jan 23
curl https://app.gra.fo/api/v1/documents?created[lt]=2019-01-23
#List Documents created after 2017 March 5
curl https://app.gra.fo/api/v1/documents?created[gt]=2017-03-05
#List Documents created on or after 2017 March 5
curl https://app.gra.fo/api/v1/documents?created[gte]=2017-03-05
# List Documents created between 2017 March 5 and 2019 Jan 23
# (excluding both days)
curl https://app.gra.fo/api/v1/documents?created[gt]=2017-03-05&created[lt]=2019-01-23
# List Documents created between 2017 March 5 and 2019 Jan 23
# (both dates inclusive)
curl https://app.gra.fo/api/v1/documents?created[gte]=2017-03-05&created[lte]=2019-01-23
//List documents created on 2018 Oct 24 (limit 5, 1st page, without parent folder and not deleted)
var resSearchCriteria = new ResourceSearchCriteria().setLimit(5).setPage(1).setDeleted(false).createdOn('2018-10-24');
var allDocs = await grafoClient.getDocuments(resSearchCriteria);
The above command returns JSON structured like this: (Java and Javascript map JSON to their respective data structures)
{
"page": "1",
"documents": [
{
"id": "536a35f8-cb7b-41c6-a834-c4c03516657a",
"title": "inventory_docs",
"iri": "http://www.app.gra.fo/schema/untitled-ekg",
"iriPrefix": "gf",
"description": "",
"owner": "4aa09898-0348-4a5d-8775-59cadf2d2945",
"commentNotificationType": "nothing",
"lastModified": 2018-10-24,
"dateCreated": 2018-10-24,
"dateDeleted": null,
"parent": "",
"deleted": 0,
"needForceDirectedLayout": 0
},
{
"id": "f16bb076-4fc4-43ab-bddc-e7e6433e497b",
"title": "hr_docs`",
"iri": "http://www.app.gra.fo/schema/untitled-ekg",
"iriPrefix": "gf",
"description": "",
"owner": "4aa09898-0348-4a5d-8775-59cadf2d2945",
"commentNotificationType": "nothing",
"lastModified": 2018-10-24,
"dateCreated": 2018-10-24,
"dateDeleted": null,
"parent": "",
"deleted": 0,
"needForceDirectedLayout": 0
}
]
}
HTTP Request
GET http://example.com/api/v1/documents
Query Parameters
Common List Paging params of page and limit are supported.
Parameter | Child Arguments | Default | Mandatory | Description |
---|---|---|---|---|
parent | '' | false | If set, the documents within another folder whose id is this will be listed. | |
deleted | 0 | false | If set to true, then the documents returned are only those that are deleted. | |
created | false | Optional filter on the list based on the created field. Exact check. This (and all child argument) values are in yyyy-MM-dd format | ||
gt | false | Optional lower bound filter for the created field in list. Excludes the entities created on lower bound itself | ||
gte | false | Optional lower bound filter for the created field in list. Includes the entities created on lower bound. | ||
lt | false | Optional upper bound filter for the created field in list. Excludes the entities created on upper bound itself | ||
lte | false | Optional upper bound filter for the created field in list. Includes the entities created on upper bound. |
Returns
This returns a JSON object containing array of documents and the page number. The array contains documents limited by the limit requested (or less if this is the last page), for the current page requested. Each entry in the array is a separate document object.
Get Document
//Pass the Id of the document to retrieve
try ( GrafoClient gClient = new GrafoClient(); ) {
Document document = gClient.getDocument(UUID.fromString("954423eb-9a36-42d7-b054-7fd1c905d53a"));
UUID owner = document.getOwner();
}
curl "https://app.gra.fo/api/v1/documents/954423eb-9a36-42d7-b054-7fd1c905d53a"
//Pass the Id of the document to retrieve
var doc = await grafoClient.getDocument('954423eb-9a36-42d7-b054-7fd1c905d53a');
The above command returns JSON structured like this: (Java and Javascript map JSON to their respective data structures)
{
"id": "954423eb-9a36-42d7-b054-7fd1c905d53a",
"title": "hr_docs`",
"iri": "http://www.app.gra.fo/schema/untitled-ekg",
"iriPrefix": "gf",
"description": "",
"owner": "4aa09898-0348-4a5d-8775-59cadf2d2945",
"commentNotificationType": "nothing",
"lastModified": 2018-10-27,
"dateCreated": 2018-10-27,
"dateDeleted": null,
"parent": "",
"deleted": 0,
"needForceDirectedLayout": 0
}
This endpoint retrieves a specific document by id.
HTTP Request
GET https://app.gra.fo/api/v1/documents/<ID>
URL Parameters
Parameter | Description |
---|---|
ID | The ID of the document to retrieve |
Returns
This returns a JSON object for the document.
Create Document
//New document created inside folder with id f16bb076-4fc4-43ab-bddc-e7e6433e497b
try ( GrafoClient gClient = new GrafoClient(); ) {
Document document = new Document();
document.setTitle("MyDocument_01");
document.setParent(UUID.fromString("f16bb076-4fc4-43ab-bddc-e7e6433e497b"));
Document documentCreated = gClient.createDocument(document);
}
curl -X POST
-d '{"title": "MyDocument_01", "parent": "f16bb076-4fc4-43ab-bddc-e7e6433e497b"}'
https://app.gra.fo/api/v1/documents
//New document created inside folder with id f16bb076-4fc4-43ab-bddc-e7e6433e497b
Document document = new Document();
document.setTitle("MyDocument_01");
document.setParent("f16bb076-4fc4-43ab-bddc-e7e6433e497b"));
var newDocument = await grafoClient.createDocument(document);
The above command returns JSON structured like this: (Java and Javascript map JSON to their respective data structures)
{
"id": "954423eb-9a36-42d7-b054-7fd1c905d53a",
"title": "MyDocument_01",
"iri": "http://www.app.gra.fo/schema/untitled-ekg",
"iriPrefix": "gf",
"description": "",
"owner": "4aa09898-0348-4a5d-8775-59cadf2d2945",
"commentNotificationType": "nothing",
"lastModified": 2018-10-27,
"dateCreated": 2018-10-27,
"dateDeleted": null,
"parent": "f16bb076-4fc4-43ab-bddc-e7e6433e497b",
"deleted": 0,
"needForceDirectedLayout": 0
}
This endpoint creates a document.
HTTP Request
POST https://app.gra.fo/api/v1/documents
URL Parameters
None
JSON Body
Name | Mandatory | Default | Description |
---|---|---|---|
title | false | "New Document" | Title of the document |
parent | false | - | UUID of parent folder |
iri | false | "http://www.app.gra.fo/schema/untitled-ekg" | Iri |
iriPrefix | false | "gf" | Iri Prefix |
description | false | - | Description of the document |
ownerCommentNotification | false | "nothing" | Comment Notification Type |
needForceDirectedLayout | false | false | Flag to check if Force Directed Layout is required |
Returns
This returns a JSON object for the created document.
Update Document
try ( GrafoClient gClient = new GrafoClient(); ) {
Document document =
gClient.getDocument(
UUID.fromString("66aad20f-4ae6-49c9-b4f9-6b6281ec701a")
);
document.setTitle("NewDocumentTitle");
Document updatedDocument = gClient.updateDocument(document);
}
curl -X PUT
-d '{"title": "NewDocumentTitle"}'
https://app.gra.fo/api/v1/documents/66aad20f-4ae6-49c9-b4f9-6b6281ec701a
var docToUpdate = await grafoClient.getDocument("66aad20f-4ae6-49c9-b4f9-6b6281ec701a");
docToUpdate.setTitle("NewDocumentTitle");
var updatedDocument = await grafoClient.updateDocument(docToUpdate);
The above command returns JSON structured like this: (Java and Javascript map JSON to their respective data structures)
{
"id": "66aad20f-4ae6-49c9-b4f9-6b6281ec701a",
"title": "NewDocumentTitle",
"iri": "http://www.app.gra.fo/schema/untitled-ekg",
"iriPrefix": "gf",
"description": "",
"owner": "4aa09898-0348-4a5d-8775-59cadf2d2945",
"commentNotificationType": "nothing",
"lastModified": 2018-10-27,
"dateCreated": 2018-10-27,
"dateDeleted": null,
"parent": "f16bb076-4fc4-43ab-bddc-e7e6433e497b",
"deleted": 0,
"needForceDirectedLayout": 0
}
This endpoint updates my document with the specified id.
HTTP Request
PUT https://app.gra.fo/api/v1/documents/<ID>
URL Parameters
Parameter | Description |
---|---|
ID | The ID of the document to retrieve |
JSON Body
Name | Mandatory | Description |
---|---|---|
title | false | Title of the document |
iri | false | Iri |
iriPrefix | false | Iri Prefix |
description | false | Description of the document |
Returns
This returns a JSON object for the updated document.
Delete Document
//Pass the Id of the document to delete
try ( GrafoClient gClient = new GrafoClient(); ) {
Document document =
gClient.getDocument(
UUID.fromString("66aad20f-4ae6-49c9-b4f9-6b6281ec701a")
);
GenericGrafoResponse response = gClient.deleteDocument(document.getId());
}
curl -X DELETE
https://app.gra.fo/api/v1/documents/66aad20f-4ae6-49c9-b4f9-6b6281ec701a
//Pass the Id of the document to delete
var deletedDoc = await grafoClient.deleteDocument('66aad20f-4ae6-49c9-b4f9-6b6281ec701a');
The above command returns JSON structured like this: (Java and Javascript map JSON to their respective data structures)
{
"success": true
}
This endpoint deletes my document for the specified id.
HTTP Request
DELETE https://app.gra.fo/api/v1/documents/<ID>
URL Parameters
Parameter | Description |
---|---|
ID | The ID of the document to delete |
Returns
This returns whether the deletion succeeded. If not, then an error will be returned as per error specification at the top of this document.
Documents Shared with me
Documents shared with you by others are listed.
List Shared Documents
This endpoint retrieves all documents shared with you. The documents are returned sorted by creation date, with the most recent document appearing first.
// No Resource Search Criteria
try ( GrafoClient gClient = new GrafoClient(); )
{
ResourceSearchCriteria resSearchCrit =
new ResourceSearchCriteria().limit(20).deleted(false);
for (Iterator<Document> docIter = gClient.getSharedDocumentsWithMe(resSearchCrit);
docIter.hasNext();)
{
Document doc = docIter.next();
doc.getId(); doc.getTitle(); doc.getIri(); doc.getIriPrefix();
doc.getDescription(); doc.getDateCreated(); doc.getDateDeleted();
Boolean isDeleted = doc.getDeleted();
UUID parentFolderId = doc.getParent();
UUID owner = doc.getOwner();
}
}
//Resource Search Criteria to list documents created on 2018 Oct 17
ResourceSearchCriteria docSearchCrit =
new ResourceSearchCriteria().limit(20).deleted(false).createdOn(LocalDate.of(2018, 10, 17));
//Resource Search Criteria to list documents created before 2018 Oct 17
ResourceSearchCriteria docSearchCrit =
new ResourceSearchCriteria().limit(20).deleted(false).createdBefore(LocalDate.of(2018, 10, 17));
//Resource Search Criteria to list documents created after 2018 Oct 17
ResourceSearchCriteria docSearchCrit =
new ResourceSearchCriteria().limit(20).deleted(false).createdAfter(LocalDate.of(2018, 10, 17));
//Resource Search Criteria to list documents created on or after 2018 Oct 17
ResourceSearchCriteria docSearchCrit =
new ResourceSearchCriteria().limit(20).deleted(false).createdOnOrAfter(LocalDate.of(2018, 10, 17));
//Resource Search Criteria to list documents created between 2018 Oct 05 and 2018 Oct 17
//(Both dates inclusive)
ResourceSearchCriteria docSearchCrit = new ResourceSearchCriteria()
.createdBetween(LocalDate.of(2018, 10, 05), LocalDate.of(2018, 10, 17), InclusionType.IncludeStartAndEndDate)
.limit(20).deleted(false);
# No search criteria. get 1st page and limit to 50
curl https://app.gra.fo/api/v1/sharedWithMeDocuments
#List my deleted documents 2nd page and limit 20
curl https://app.gra.fo/api/v1/sharedWithMeDocuments?page=2&limit=20&deleted=true
#List Documents created on 2019 Jan 23 (page 1 assumed unless specified)
curl https://app.gra.fo/api/v1/sharedWithMeDocuments?created=2019-01-23
#List Documents created on or before 2019 Jan 23
curl https://app.gra.fo/api/v1/sharedWithMeDocuments?created[lte]=2019-01-23
#List Documents created before 2019 Jan 23
curl https://app.gra.fo/api/v1/sharedWithMeDocuments?created[lt]=2019-01-23
#List Documents created after 2017 March 5
curl https://app.gra.fo/api/v1/sharedWithMeDocuments?created[gt]=2017-03-05
#List Documents created on or after 2017 March 5
curl https://app.gra.fo/api/v1/sharedWithMeDocuments?created[gte]=2017-03-05
# List Documents created between 2017 March 5 and 2019 Jan 23
# (excluding both days)
curl https://app.gra.fo/api/v1/sharedWithMeDocuments?created[gt]=2017-03-05&created[lt]=2019-01-23
# List Documents created between 2017 March 5 and 2019 Jan 23
# (both dates inclusive)
curl https://app.gra.fo/api/v1/sharedWithMeDocuments?created[gte]=2017-03-05&created[lte]=2019-01-23
//List documents created on 2018 Oct 24 (limit 5, 1st page, without parent folder and not deleted)
var resSearchCriteria = new ResourceSearchCriteria().setLimit(5).setPage(1).setDeleted(false).createdOn('2018-10-24');
var allDocs = await grafoClient.getSharedDocumentsWithMe(resSearchCriteria);
The above command returns JSON structured like this: (Java and Javascript map JSON to their respective data structures)
{
"page": "1",
"documents": [
{
"id": "536a35f8-cb7b-41c6-a834-c4c03516657a",
"title": "inventory_docs",
"iri": "http://www.app.gra.fo/schema/untitled-ekg",
"iriPrefix": "gf",
"description": "",
"owner": "4aa09898-0348-4a5d-8775-59cadf2d2945",
"lastModified": 2018-10-24,
"dateCreated": 2018-10-24,
"dateDeleted": null,
"deleted": 0,
"needForceDirectedLayout": 0,
"parent": "",
"sharedDate": 2018-10-24,
"commentNotificationType": "nothing",
},
{
"id": "f16bb076-4fc4-43ab-bddc-e7e6433e497b",
"title": "hr_docs`",
"iri": "http://www.app.gra.fo/schema/untitled-ekg",
"iriPrefix": "gf",
"description": "",
"owner": "4aa09898-0348-4a5d-8775-59cadf2d2945",
"lastModified": 2018-10-24,
"dateCreated": 2018-10-24,
"dateDeleted": null,
"deleted": 0,
"needForceDirectedLayout": 0,
"parent": "",
"sharedDate": 2018-10-24,
"commentNotificationType": "nothing",
}
]
}
HTTP Request
GET http://example.com/api/v1/documents
Query Parameters
Common List Paging params of page and limit are supported.
Parameter | Child Arguments | Default | Mandatory | Description |
---|---|---|---|---|
parent | '' | false | If set, the documents within another document whose id is this will be listed. | |
deleted | 0 | false | If set to true, then the documents returned are only those that are deleted. | |
created | false | Optional filter on the list based on the created field. Exact check. This (and all child argument) values are in yyyy-MM-dd format | ||
gt | false | Optional lower bound filter for the created field in list. Excludes the entities created on lower bound itself | ||
gte | false | Optional lower bound filter for the created field in list. Includes the entities created on lower bound. | ||
lt | false | Optional upper bound filter for the created field in list. Excludes the entities created on upper bound itself | ||
lte | false | Optional upper bound filter for the created field in list. Includes the entities created on upper bound. |
Returns
This returns a JSON object containing array of documents and the page number. The array contains documents limited by the limit requested (or less if this is the last page), for the current page requested. Each entry in the array is a separate document object.
Get Shared Document
//Pass the Id of the document to retrieve
try ( GrafoClient gClient = new GrafoClient(); ) {
Document document = gClient.getSharedDocumentWithMe(UUID.fromString("f16bb076-4fc4-43ab-bddc-e7e6433e497b"));
UUID owner = document.getOwner();
}
curl "https://app.gra.fo/api/v1/documents/f16bb076-4fc4-43ab-bddc-e7e6433e497b"
//Pass the Id of the document to retrieve
var doc = await grafoClient.getSharedDocumentWithMe('f16bb076-4fc4-43ab-bddc-e7e6433e497b');
The above command returns JSON structured like this: (Java and Javascript map JSON to their respective data structures)
{
"id": "f16bb076-4fc4-43ab-bddc-e7e6433e497b",
"title": "hr_docs`",
"iri": "http://www.app.gra.fo/schema/untitled-ekg",
"iriPrefix": "gf",
"description": "",
"owner": "4aa09898-0348-4a5d-8775-59cadf2d2945",
"lastModified": 2018-10-24,
"dateCreated": 2018-10-24,
"dateDeleted": null,
"deleted": 0,
"needForceDirectedLayout": 0,
"parent": "",
"sharedDate": 2018-10-24,
"commentNotificationType": "nothing",
}
This endpoint retrieves a specific document by id.
HTTP Request
GET https://app.gra.fo/api/v1/documents/<ID>
URL Parameters
Parameter | Description |
---|---|
ID | The ID of the document to retrieve |
Returns
This returns a JSON object for the document.
Shared Area Folders
Folders can be created for grouping documents shared with you.
List Shared Area Folders
This endpoint retrieves all of your folders. The folders are returned sorted by creation date, with the most recent folder appearing first.
try ( GrafoClient gClient = new GrafoClient(); )
{
ResourceSearchCriteria resSearchCrit =
new ResourceSearchCriteria().limit(20);
for (Iterator<Folder> folderIter = gClient.getShareFolders(resSearchCrit); folderIter.hasNext();)
{
Folder folder = folderIter.next();
folder.getId(); folder.getTitle(); folder.getDescription();
folder.getDateCreated();
UUID parentFolderId = folder.getParent();
UUID owner = doc.getOwner();
}
}
//Resource Search Criteria to list documents created on 2018 Oct 17
ResourceSearchCriteria docSearchCrit =
new ResourceSearchCriteria().limit(20).createdOn(LocalDate.of(2018, 10, 17));
//Resource Search Criteria to list documents created before 2018 Oct 17
ResourceSearchCriteria docSearchCrit =
new ResourceSearchCriteria().limit(20).createdBefore(LocalDate.of(2018, 10, 17));
//Resource Search Criteria to list documents created after 2018 Oct 17
ResourceSearchCriteria docSearchCrit =
new ResourceSearchCriteria().limit(20).createdAfter(LocalDate.of(2018, 10, 17));
//Resource Search Criteria to list documents created on or after 2018 Oct 17
ResourceSearchCriteria docSearchCrit =
new ResourceSearchCriteria().limit(20).createdOnOrAfter(LocalDate.of(2018, 10, 17));
//Resource Search Criteria to list documents created between 2018 Oct 05 and 2018 Oct 17
//(Both dates inclusive)
ResourceSearchCriteria docSearchCrit = new ResourceSearchCriteria()
.createdBetween(LocalDate.of(2018, 10, 05), LocalDate.of(2018, 10, 17), InclusionType.IncludeStartAndEndDate)
.limit(20);
# No search criteria. get 1st page and limit to 50
curl https://app.gra.fo/api/v1/sharedWithMeFolders
#List my deleted folders 2nd page and limit 20
curl https://app.gra.fo/api/v1/sharedWithMeFolders?page=2&limit=20
#List Folders created on 2019 Jan 23 (page 1 assumed unless specified)
curl https://app.gra.fo/api/v1/sharedWithMeFolders?created=2019-01-23
#List Folders created on or before 2019 Jan 23
curl https://app.gra.fo/api/v1/sharedWithMeFolders?created[lte]=2019-01-23
#List Folders created before 2019 Jan 23
curl https://app.gra.fo/api/v1/sharedWithMeFolders?created[lt]=2019-01-23
#List Folders created after 2017 March 5
curl https://app.gra.fo/api/v1/sharedWithMeFolders?created[gt]=2017-03-05
#List Folders created on or after 2017 March 5
curl https://app.gra.fo/api/v1/sharedWithMeFolders?created[gte]=2017-03-05
# List Folders created between 2017 March 5 and 2019 Jan 23
# (excluding both days)
curl https://app.gra.fo/api/v1/sharedWithMeFolders?created[gt]=2017-03-05&created[lt]=2019-01-23
# List Folders created between 2017 March 5 and 2019 Jan 23
# (both dates inclusive)
curl https://app.gra.fo/api/v1/sharedWithMeFolders?created[gte]=2017-03-05&created[lte]=2019-01-23
//List folders created on 2018 Oct 24 (limit 5, 1st page, without parent folder and not deleted)
var resSearchCriteria = new ResourceSearchCriteria().setLimit(5).setPage(1).setDeleted(false).createdOn('2018-10-24');
var allFolders = await grafoClient.getShareFolders(resSearchCriteria);
The above command returns JSON structured like this: (Java and Javascript map JSON to their respective data structures)
{
"page": "1",
"folders": [
{
"id": "536a35f8-cb7b-41c6-a834-c4c03516657a",
"title": "inventory_docs",
"owner": "4aa09898-0348-4a5d-8775-59cadf2d2945",
"dateCreated": 2018-10-24,
"parent": "",
"deleted": null
},
{
"id": "f16bb076-4fc4-43ab-bddc-e7e6433e497b",
"title": "hr_docs`",
"owner": "4aa09898-0348-4a5d-8775-59cadf2d2945",
"dateCreated": 2018-10-24,
"parent": "",
"deleted": null
}
]
}
HTTP Request
GET http://example.com/api/v1/sharedWithMeFolders
Query Parameters
Common List Paging params of page and limit are supported.
Parameter | Child Arguments | Default | Mandatory | Description |
---|---|---|---|---|
parent | '' | false | If set, the folders within another folder whose id is this will be listed. | |
created | false | Optional filter on the list based on the created field. Exact check. This (and all child argument) values are in yyyy-MM-dd format | ||
gt | false | Optional lower bound filter for the created field in list. Excludes the entities created on lower bound itself | ||
gte | false | Optional lower bound filter for the created field in list. Includes the entities created on lower bound. | ||
lt | false | Optional upper bound filter for the created field in list. Excludes the entities created on upper bound itself | ||
lte | false | Optional upper bound filter for the created field in list. Includes the entities created on upper bound. |
Returns
This returns a JSON object containing array of folders and the page number. The array contains folders limited by the limit requested (or less if this is the last page), for the current page requested. Each entry in the array is a separate folder object.
Get Shared Area Folder
//Pass the Id of the folder to retrieve
try ( GrafoClient gClient = new GrafoClient(); ) {
Folder folder = gClient.getShareFolder(UUID.fromString("954423eb-9a36-42d7-b054-7fd1c905d53a"));
UUID owner = folder.getOwner();
}
curl "https://app.gra.fo/api/v1/shareFolders/954423eb-9a36-42d7-b054-7fd1c905d53a"
//Pass the Id of the folder to retrieve
var folder = await grafoClient.getShareFolder('536df107-2395-4e7f-9ee7-f177a9b759d6');
The above command returns JSON structured like this: (Java and Javascript map JSON to their respective data structures)
{
"id": "f16bb076-4fc4-43ab-bddc-e7e6433e497b",
"title": "hr_docs",
"owner": "4aa09898-0348-4a5d-8775-59cadf2d2945",
"dateCreated": 2018-10-24,
"parent": "",
"deleted": 0
}
This endpoint retrieves a specific folder by id.
HTTP Request
GET https://app.gra.fo/api/v1/shareFolders/<ID>
URL Parameters
Parameter | Description |
---|---|
ID | The ID of the folder to retrieve |
Returns
This returns a JSON object for the folder.
Create Folder in Shared Area
//New folder created inside folder with id f16bb076-4fc4-43ab-bddc-e7e6433e497b
try ( GrafoClient gClient = new GrafoClient(); ) {
Folder folder = new Folder();
folder.setTitle("MyFolder_01");
folder.setParent(UUID.fromString("f16bb076-4fc4-43ab-bddc-e7e6433e497b"));
Folder folderCreated = gClient.createShareFolder(folder);
}
curl -X POST
-d '{"title": "MyFolder_01", "parent": "f16bb076-4fc4-43ab-bddc-e7e6433e497b"}'
https://app.gra.fo/api/v1/shareFolders
//New folder created inside folder with id f16bb076-4fc4-43ab-bddc-e7e6433e497b
Folder folder = new Folder();
folder.setTitle("MyFolder_01");
folder.setParent(UUID.fromString("f16bb076-4fc4-43ab-bddc-e7e6433e497b"));
var newFolder = await grafoClient.createShareFolder(folder);
The above command returns JSON structured like this: (Java and Javascript map JSON to their respective data structures)
{
"id": "66aad20f-4ae6-49c9-b4f9-6b6281ec701a",
"title": "MyFolder_01",
"parent": "f16bb076-4fc4-43ab-bddc-e7e6433e497b",
"owner": "4aa09898-0348-4a5d-8775-59cadf2d2945",
"dateCreated": 2018-10-24,
"deleted": null
}
This endpoint creates a folder.
HTTP Request
POST https://app.gra.fo/api/v1/shareFolders
URL Parameters
None
JSON Body
Name | Mandatory | Default | Description |
---|---|---|---|
title | false | "New Folder" | Title of the folder |
parent | false | - | UUID of parent folder |
Returns
This returns a JSON object for the created folder.
Update Folder in Shared Area
try ( GrafoClient gClient = new GrafoClient(); ) {
Folder folder =
gClient.getShareFolder(
UUID.fromString("66aad20f-4ae6-49c9-b4f9-6b6281ec701a")
);
folder.setTitle("NewFolderTitle");
Folder updatedFolder = gClient.updateShareFolder(folder);
}
curl -X PUT
-d '{"title": "NewFolderTitle"}'
https://app.gra.fo/api/v1/shareFolders/66aad20f-4ae6-49c9-b4f9-6b6281ec701a
var folder = await grafoClient.getShareFolder('66aad20f-4ae6-49c9-b4f9-6b6281ec701a');
folder.setTitle("NewFolderTitle");
var updatedFolder = await grafoClient.updateShareFolder(folder);
The above command returns JSON structured like this: (Java and Javascript map JSON to their respective data structures)
{
"id": "66aad20f-4ae6-49c9-b4f9-6b6281ec701a",
"title": "NewFolderTitle",
"parent": "f16bb076-4fc4-43ab-bddc-e7e6433e497b",
"owner": "4aa09898-0348-4a5d-8775-59cadf2d2945",
"dateCreated": 2018-10-24,
"deleted": null
}
This endpoint updates my folder with the specified id.
HTTP Request
PUT https://app.gra.fo/api/v1/shareFolders/<ID>
URL Parameters
Parameter | Description |
---|---|
ID | The ID of the folder to retrieve |
JSON Body
Name | Mandatory | Description |
---|---|---|
title | false | Title of the folder |
parent | false | UUID of parent folder |
Returns
This returns a JSON object for the updated folder.
My Shared Documents
The document can be shared with others by owner of the document or if you have share permissions.
Document Permissions
Document can be shared with following permissions.
Permission | Description |
---|---|
view | User can only view the shared document |
comment | User can only comment on the shared document |
edit | User can only edit the shared document |
edit_share | User can edit and share the document with others |
List Document Shares
This endpoint retrieves information of the document shares by you. The document share information is returned sorted by creation date.
//List document shares for doc ID 78731c17-ed87-4a9d-881a-300c04a1fb6f
try ( GrafoClient gClient = new GrafoClient(); )
{
List<DocumentShare> docShares = gClient.getDocumentShares("78731c17-ed87-4a9d-881a-300c04a1fb6f");
docShares.forEach(share -> System.out.println(share)) ;
}
curl https://app.gra.fo/api/v1/documents/78731c17-ed87-4a9d-881a-300c04a1fb6f/shares
//List document shares for doc ID 78731c17-ed87-4a9d-881a-300c04a1fb6f
var docShares = await grafoClient.getDocumentShares("78731c17-ed87-4a9d-881a-300c04a1fb6f");
The above command returns JSON structured like this: (Java and Javascript map JSON to their respective data structures)
[
{
id: '536a35f8-cb7b-41c6-a834-c4c03516657a',
documentId: '78731c17-ed87-4a9d-881a-300c04a1fb6f',
owner: 'f1283a2f-fe25-4538-a8c3-c771b5ea442e',
sharedWith: '519ca7e0-c739-4b9c-9bbf-e1d3097539c0',
sharedWithEmail: 'testcapsenta7@gmail.com',
sharedWithFirstName: Jhon,
sharedWithLastName: Smith,
permissions: 'view',
message: "",
sharedDate: '2018-10-27'
},
{
id: '47428bfa-5db0-4926-9d60-ebcc80d20ce7',
documentId: '78731c17-ed87-4a9d-881a-300c04a1fb6f',
owner: 'f1283a2f-fe25-4538-a8c3-c771b5ea442e',
sharedWith: 'f16bb076-4fc4-43ab-bddc-e7e6433e497b',
sharedWithEmail: 'testcapsenta2@gmail.com',
sharedWithFirstName: Anil,
sharedWithLastName: Bose,
permissions: 'comment',
message: "",
sharedDate: '2018-10-28'
}
]
HTTP Request
GET http://example.com/api/v1/documents/<documentId>/shares
URL Parameters
Parameter | Description |
---|---|
documentId | The ID of the document to retrieve share information |
Returns
This returns a JSON object containing array of document share information. Each entry in the array is a separate document share object.
Get Document Share
//Pass the document Id and doc shared Id to retrive doc share information
try ( GrafoClient gClient = new GrafoClient(); ) {
DocumentShare docShare = gClient.getDocumentShare("78731c17-ed87-4a9d-881a-300c04a1fb6f", "536a35f8-cb7b-41c6-a834-c4c03516657a");
}
curl "https://app.gra.fo/api/v1/documents/78731c17-ed87-4a9d-881a-300c04a1fb6f/shares/536a35f8-cb7b-41c6-a834-c4c03516657a"
//Pass the document Id and doc shared Id to retrive doc share information
var docShare = await grafoClient.getDocumentShare("78731c17-ed87-4a9d-881a-300c04a1fb6f", "536a35f8-cb7b-41c6-a834-c4c03516657a");
The above command returns JSON structured like this: (Java and Javascript map JSON to their respective data structures)
{
id: '536a35f8-cb7b-41c6-a834-c4c03516657a',
documentId: '78731c17-ed87-4a9d-881a-300c04a1fb6f',
owner: 'f1283a2f-fe25-4538-a8c3-c771b5ea442e',
sharedWith: '519ca7e0-c739-4b9c-9bbf-e1d3097539c0',
sharedWithEmail: 'testcapsenta7@gmail.com',
sharedWithFirstName: Jhon,
sharedWithLastName: Smith,
permissions: 'view',
message: "",
sharedDate: '2018-10-27'
}
This endpoint retrieves a specific document share information by id.
HTTP Request
GET https://app.gra.fo/api/v1/documents/<documetId>/shares/<ID>
URL Parameters
Parameter | Description |
---|---|
documentId | The ID of the document to retrieve share information |
ID | The ID of the document share to retrieve |
Returns
This returns a JSON object for the document share.
Create Document Share
//Document with Id 78731c17-ed87-4a9d-881a-300c04a1fb6f is shared with user having email testcapsenta2@gmail.com and permissions to only view document
try ( GrafoClient gClient = new GrafoClient(); ) {
DocumentShare newShare = new DocumentShare();
newShare.setSharedWithEmail("testcapsenta2@gmail.com");
newShare.setPermissions(Permission.VIEW);
newShare.setMessage("Sharing a document");
shareList = gClient.createDocumentShare("78731c17-ed87-4a9d-881a-300c04a1fb6f", newShare);
shareList.forEach(share -> System.out.println(share)) ;
}
curl -X POST
-d '{"sharedWithEmail": "testcapsenta2@gmail.com", "permissions": "view", "message": "Document is shared with you"}'
https://app.gra.fo/api/v1/documents/78731c17-ed87-4a9d-881a-300c04a1fb6f/shares
//Document with Id 78731c17-ed87-4a9d-881a-300c04a1fb6f is shared with user having email testcapsenta2@gmail.com and permissions to only view document
var docShare = new DocumentShare();
docShare.setSharedWithEmail('testcapsenta2@gmail.com');
docShare.setPermissions(DocPermissions.getDocumentPermissions().VIEW)
var docShareList = await grafoClient.createDocumentShare("78731c17-ed87-4a9d-881a-300c04a1fb6f", docShare);
The above command returns JSON structured like this: (Java and Javascript map JSON to their respective data structures)
[
{
id: '536a35f8-cb7b-41c6-a834-c4c03516657a',
documentId: '78731c17-ed87-4a9d-881a-300c04a1fb6f',
owner: 'f1283a2f-fe25-4538-a8c3-c771b5ea442e',
sharedWith: '519ca7e0-c739-4b9c-9bbf-e1d3097539c0',
sharedWithEmail: 'testcapsenta7@gmail.com',
sharedWithFirstName: Jhon,
sharedWithLastName: Smith,
permissions: 'view',
message: "",
sharedDate: '2018-10-27'
},
{
id: '47428bfa-5db0-4926-9d60-ebcc80d20ce7',
documentId: '78731c17-ed87-4a9d-881a-300c04a1fb6f',
owner: 'f1283a2f-fe25-4538-a8c3-c771b5ea442e',
sharedWith: 'f16bb076-4fc4-43ab-bddc-e7e6433e497b',
sharedWithEmail: 'testcapsenta2@gmail.com',
sharedWithFirstName: Anil,
sharedWithLastName: Bose,
permissions: 'comment',
message: "Document is shared with you",
sharedDate: '2018-10-28'
}
]
This endpoint shares a document.
HTTP Request
POST https://app.gra.fo/api/v1/documents/<documentId>/shares
URL Parameters
Parameter | Description |
---|---|
documentId | The ID of the document to be shared |
None
JSON Body
Name | Mandatory | Default | Description |
---|---|---|---|
sharedWithEmail | true | - | Email of the user to share the document |
permissions | true | - | User permissions when document is shared |
message | false | - | Any message for the user while sharing document |
Returns
This returns a JSON object for the created document share.
Update Document Share
try ( GrafoClient gClient = new GrafoClient(); ) {
DocumentShare shareForUpdate = gClient.getDocumentShare("78731c17-ed87-4a9d-881a-300c04a1fb6f", "536a35f8-cb7b-41c6-a834-c4c03516657a");
shareForUpdate.setPermissions(Permission.COMMENT);
List<DocumentShare> docShare = gClient.updateDocumentShare(shareForUpdate);
}
curl -X PUT
-d '{"permissions": "comment"}'
https://app.gra.fo/api/v1/documents/78731c17-ed87-4a9d-881a-300c04a1fb6f/shares/536a35f8-cb7b-41c6-a834-c4c03516657a
var docShare = await grafoClient.getDocumentShare("78731c17-ed87-4a9d-881a-300c04a1fb6f", "536a35f8-cb7b-41c6-a834-c4c03516657a");
docShare.setPermissions(DocPermissions.getDocumentPermissions().COMMENT)
var docShareList = await grafoClient.updateDocumentShare(docShare);
The above command returns JSON structured like this: (Java and Javascript map JSON to their respective data structures)
[
{
id: '536a35f8-cb7b-41c6-a834-c4c03516657a',
documentId: '78731c17-ed87-4a9d-881a-300c04a1fb6f',
owner: 'f1283a2f-fe25-4538-a8c3-c771b5ea442e',
sharedWith: '519ca7e0-c739-4b9c-9bbf-e1d3097539c0',
sharedWithEmail: 'testcapsenta7@gmail.com',
sharedWithFirstName: Jhon,
sharedWithLastName: Smith,
permissions: 'comment',
message: "",
sharedDate: '2018-10-27'
},
{
id: '47428bfa-5db0-4926-9d60-ebcc80d20ce7',
documentId: '78731c17-ed87-4a9d-881a-300c04a1fb6f',
owner: 'f1283a2f-fe25-4538-a8c3-c771b5ea442e',
sharedWith: 'f16bb076-4fc4-43ab-bddc-e7e6433e497b',
sharedWithEmail: 'testcapsenta2@gmail.com',
sharedWithFirstName: Anil,
sharedWithLastName: Bose,
permissions: 'comment',
message: "Document is shared with you",
sharedDate: '2018-10-28'
}
]
This endpoint updates document share permissions with the specified id.
HTTP Request
PUT https://app.gra.fo/api/v1/documents/<documetId>/shares/<ID>
URL Parameters
Parameter | Description |
---|---|
documentId | The ID of the document to retrieve share information |
ID | The ID of the document share to update |
Returns
This returns a JSON object for the document share.
JSON Body
Name | Mandatory | Description |
---|---|---|
sharedWithEmail | true | - |
permissions | true | - |
Returns
This returns a JSON object for the updated document share.
Delete Document Share
//Delete doc share with ID 536a35f8-cb7b-41c6-a834-c4c03516657a and document Id 78731c17-ed87-4a9d-881a-300c04a1fb6f
try ( GrafoClient gClient = new GrafoClient(); ) {
GenericGrafoResponse resp = gClient.deleteDocumentShare("78731c17-ed87-4a9d-881a-300c04a1fb6f", "536a35f8-cb7b-41c6-a834-c4c03516657a");
}
curl -X DELETE
https://app.gra.fo/api/v1/documents/78731c17-ed87-4a9d-881a-300c04a1fb6f/shares/536a35f8-cb7b-41c6-a834-c4c03516657a
//Delete doc share with ID 536a35f8-cb7b-41c6-a834-c4c03516657a and document Id 78731c17-ed87-4a9d-881a-300c04a1fb6f
var docShareResp = await grafoClient.deleteDocumentShare("78731c17-ed87-4a9d-881a-300c04a1fb6f", "536a35f8-cb7b-41c6-a834-c4c03516657a");
The above command returns JSON structured like this: (Java and Javascript map JSON to their respective data structures)
{
"success": true
}
This endpoint deletes document share for the specified id.
HTTP Request
DELETE https://app.gra.fo/api/v1/documents/<documetId>/shares/<ID>
URL Parameters
Parameter | Description |
---|---|
documentId | The ID of the document to unshare |
ID | The ID of the document share to delete |
Returns
This returns whether the deletion succeeded. If not, then an error will be returned as per error specification at the top of this document.
Export API
The Grafo document can be exported to Turtle or Owl formats using the API.
Export to TTL/OWL
This endpoint exports the document to Turtle or Owl formats, as provided by the user in the url parameter.
// not supported
curl https://app.gra.fo/api/v1/documents/78731c17-ed87-4a9d-881a-300c04a1fb6f/type/ttl
//Not supported
The above command returns the turtle exported document
@prefix : <http://www.gra.fo/schema/untitled-ekg#> .
@prefix dc: <http://purl.org/dc/elements/1.1/> .
@prefix gf: <http://www.gra.fo/schema/untitled-ekg#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix xml: <http://www.w3.org/XML/1998/namespace> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix foaf: <http://xmlns.com/foaf/spec/> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix skos: <http://www.w3.org/2004/02/skos/core#> .
@base <http://www.gra.fo/schema/untitled-ekg#> .
<http://www.gra.fo/schema/untitled-ekg> rdf:type owl:Ontology .
#################################################################
# Classes
#################################################################
### http://www.gra.fo/schema/untitled-ekg/NewConcept
<http://www.gra.fo/schema/untitled-ekg/NewConcept> rdf:type owl:Class ;
rdfs:isDefinedBy <http://www.gra.fo/schema/untitled-ekg> ;
rdfs:label "New Concept" .
### http://www.gra.fo/schema/untitled-ekg/Order
<http://www.gra.fo/schema/untitled-ekg/Order> rdf:type owl:Class ;
rdfs:isDefinedBy <http://www.gra.fo/schema/untitled-ekg> ;
rdfs:label "Order" .
#################################################################
# Annotations
#################################################################
<http://www.gra.fo/schema/untitled-ekg> rdfs:comment "" ;
rdfs:label "Test" .
### Generated by the OWL API (version 5.1.17) https://github.com/owlcs/owlapi/
HTTP Request
GET https://app.gra.fo/api/v1/documents/<documentId>/type/<outputType>
URL Parameters
Parameter | Description |
---|---|
documentId | The ID of the document which needs to be exported |
outputType | The format in which the document should be exported. It can be ttl or owl |
Returns
This returns the ttl or owl exported document
EKG Document - Basics
The real world entities and their inter-relations, that are organised in a graph make up the EKG Document. The graph structures use nodes, edges and properties to represent and store data. This, in Grafo is represented as Concepts, Relationships and Attributes.
Concept is the equivalent of vertex in graph parlance. They represented as circles in the EKG Document UI Editor. In EKG they represent a business entity, business concept or a noun.
Each concept is identified by an id beginning with node-
Relationship , as the name suggests gives the inter-relationship between two Concepts. In UI Editor, this is a directed line that connects two nodes.
Each relationship is identified by an id beginning with link-
Specialization is a type of relationship, which depicts mainly a parent-child relationship. In UI Editor, this is represented using dashed line that is directed. The start node from where the line begins is the child and, the end node is the parent.
Attribute is a property that provides additional information or metadata for Concept and Relationship. In UI Editor, the number of attributes in a concept or relationship are displayed at the bottom of respective figures.
Concept Attribute is identified by an id beginning with attr-
.
Relationship Attribute is identified by an id beginning with linkattr-
Figure 1: A simple example of EKG Document containing three concepts, one relationship, one self relationship and one specialization. The numbers at the bottom of concepts and relationships represent the number of attributes.
Fine Grained API
Fine grained API allows one to deal with the constituents of a EkgDocument individually at the network level. This is convenient when individual components are dealt using plain vanilla REST. Javascript API inherently provides the finegrained approach that is also scalable. We recommend using the coarse grained API when dealing via Java etc. as multiple modifications can be aggregated and dispatched to the server at one stretch and the cost of such operation is linear along with a fixed offset base cost. REST API or fine grained API in Java has the fixed offset cost overhead for each fine grained call making it less efficient.
Coarse Grained API
Coarse grained approach provides the functionality of aggregating all the operations required to be carried out in an EKG Document. Using this approach, one can create, update or delete the elements of an EKG document in one go. This makes a single call to the server and the cost of such operation is linear in comparison to fine grained approach.
Coarse grained approach is recommended when multiple operations are expected to be carried out on an EKG document. Fine grained approach can be used for minor additions, updations or deletions.
EKG Document - Coarse Grained Operations
Figure 1: UML Class Diagram for EKG Document
Following operations are supported
Get EKG Document
This endpoint retrieves all the contents of an ekg document. The information includes document details, list of concepts and relationships along with their attributes and fields.
try (GrafoClient gClient = new GrafoClient();){
UUID docId = UUID.fromString("c7712dfe-b287-498d-a80d-1b09a9edc49a");
EkgDocument ekgDoc = gClient.getEkgDocument(docId);
System.out.println(ekgDoc);
}
curl "https://app.gra.fo/api/v1/documents/c7712dfe-b287-498d-a80d-1b09a9edc49a/ekg
var demoDocFetch = async function() {
try {
//After initial authentication..
//Refer Section on Authentication
var docDetails = await grafoClient.getDocument("c7712dfe-b287-498d-a80d-1b09a9edc49a");
var ekgDoc = await grafoClient.getEkgDocument(docDetails);
console.log(ekgDoc);
} catch(err) {
console.log(err);
}
};
The above command returns JSON whose high level structure is like this:
{
"id": "c7712dfe-b287-498d-a80d-1b09a9edc49a",
"type": "document",
"title": "Untitled Document",
"iri": "http://www.app.gra.fo/schema/untitled-ekg",
"iriPrefix": "gf",
"description": "",
"owner": "f76351f3-be89-485c-a851-19508a03bbf7",
"dateCreated": 1542785023,
"dateDeleted": null,
"lastModified": 1542785023,
"deleted": false,
"parent": "",
"concepts": {
"node-82e0ae9f-9d00-4eee-854c-ccd8f0e0aa37": {
"id": "node-82e0ae9f-9d00-4eee-854c-ccd8f0e0aa37",
"type": "concept",
"label": "B",
.....
"fields": [],
"attrGroup": {}
},
"node-8bc45fd1-2a6a-4ca7-9dec-e11bde2ce1e9": {},
"node-5b3d147e-64d5-45d1-bf0e-e6cccbd03b44": {}
},
"relationships": {
"link-422e39f0-b58d-4d79-9490-4b59207fcf2d": {
"id": "link-422e39f0-b58d-4d79-9490-4b59207fcf2d",
"type": "link",
.....
"fields": [],
"attrGroup": {}
},
"link-84309463-f4f6-401c-b6b4-b8891f1196bd": {},
"link-51b11a09-67d0-4e9a-9898-82d5c1e28fe1": {}
}
}
Each Concept in the above json is like this:
{
"id": "node-82e0ae9f-9d00-4eee-854c-ccd8f0e0aa37",
"type": "concept",
"label": "B",
"description": "",
"iri": "http://www.app.gra.fo/schema/untitled-ekg/B",
"positionX": 144,
"positionY": 137,
"lastUpdatedBy": "f76351f3-be89-485c-a851-19508a03bbf7",
"fields": [
{
"id": "4293c8fb-7f66-4ae8-be32-88b253fa1716",
"title": "FieldB1",
"text": "Value1"
}
],
"attrGroup": {
"id": "attrGrp-eef1c554-0395-4c0c-95d2-d05f193e1fb0",
"attributes": [
{
"id": "attr-0de2fd7a-6c6e-4d29-8a80-3652ece36a05",
"type": "attribute",
"label": "attribute1",
"description": "",
"iri": "http://www.app.gra.fo/schema/untitled-ekg/attribute1_attr-0de2fd7a-6c6e-4d29-8a80-3652ece36a05",
"xsdDataType": null,
"fields": [
{
"id": "f1346aac-3615-4735-a39f-1d0be4b0b375",
"title": "Field1",
"text": "Value1"
}
]
}
],
}
"lastUpdatedBy": "f76351f3-be89-485c-a851-19508a03bbf7"
}
Each Relationship in the above json is like this:
{
"id": "link-422e39f0-b58d-4d79-9490-4b59207fcf2d",
"type": "link",
"fromConceptId": "node-8bc45fd1-2a6a-4ca7-9dec-e11bde2ce1e9",
"toConceptId": "node-8bc45fd1-2a6a-4ca7-9dec-e11bde2ce1e9",
"label": "selfLink1",
"description": "",
"iri": "http://www.app.gra.fo/schema/untitled-ekg/selflink1",
"cardinalityType": null,
"cardinality": null,
"specialization": false,
"positionX": 9,
"positionY": -186,
"deleted": false,
"fields": [],
"attrGroup": {
"id": "attrGrp-f657c603-0170-400c-9e87-388d67e7aa90",
"attributes": [
{
"id": "linkattr-835e049c-3d65-4e47-be50-857198318c25",
"type": "attribute",
"label": "relattribute1",
"description": "",
"iri": "http://www.app.gra.fo/schema/untitled-ekg/relattribute1_linkattr-835e049c-3d65-4e47-be50-857198318c25",
"xsdDataType": null,
"fields": [
{
"id": "f1346aac-3615-4735-a39f-1d0be4b0b375",
"title": "Field1",
"text": "Value1"
}
]
}
],
"lastUpdatedBy": "f76351f3-be89-485c-a851-19508a03bbf7"
}
HTTP Request
GET https://app.gra.fo/api/v1/documents/<docId>/ekg
URL Parameters
Parameter | Description |
---|---|
docId | The ID of the ekg doc to be retrieved |
Returns
This returns a JSON object for the ekg document.
EKG Document Properties | Description |
---|---|
id | Document Identifier |
type | This is always document |
title | Document Name. Default Value is "Untitled Document" |
description | Optional description |
iri | Document Identifier in URI format. Default value is "http://www.app.gra.fo/schema/untitled-ekg" |
owner | The user identifier who created the document |
dateCreated | It is the date when document was created. It is in UNIX timestamp format |
dateDeleted | It is the date when document was deleted. In UNIX timestamp format |
lastModified | The user identifier who modified the document |
deleted | A boolean value to know if a document is deleted or not |
parent | This depicts the folder in which the document resides |
concepts | A map of all the concepts available in the ekg document. Its properties are given below |
relationships | A map of all the relationships available in the ekg document. Its properties are given below |
Concept Properties | Description |
---|---|
id | Concept Identifier (beginning with a node-) |
type | This is always concept |
label | Concept Name is a required property. |
description | Optional Description |
iri | Concept Identifier in URI format |
fields | array of Field objects |
attrGroup | object containing an array of Attribute objects. The properties of an attribute are listed below |
Relationship Properties | Description |
---|---|
id | Relationship Identifier (beginning with a link-) |
type | This is always link. |
label | Relationship Name is a required property |
description | Optional Description |
iri | Relationship Identifier in URI format |
fields | array of Field objects |
fromConceptId | The identifier of the concept from where the relationship originates |
toConceptId | The identifier of the concept where the relationship points |
cardinality Type | It can be null, max, min or exact |
cardinality | It is the cardinality value |
specialization | Boolean value |
attrGroup | object containing an array of Attribute objects. The properties of an attribute are listed below |
Attribute Properties | Description |
---|---|
id | Attribute Identifier (beginning with a attr- for concept and linkattr- for relationship) |
type | This is always attribute |
label | Attribute Name is a required property |
description | Optional Description |
iri | Attribute Identifier in URI format |
fields | array of Field objects |
xsdDataType | xsd data type |
cardinalityType | cardinality Type |
cardinality | cardinality value |
Field Properties | Description |
---|---|
id | Field identifier |
title | The name of the field |
text | The value of the field |
Create EKG Document
try
(
GrafoClient gClient = new GrafoClient();
)
{
EkgDocument ekgDoc = new EkgDocument();
ekgDoc.setTitle("My Test Doc " + System.currentTimeMillis());
Concept c1 = new Concept("A");
c1.setPositionX(200);
c1.setPositionY(300);
c1.addField(new Field("FieldA1"));
ekgDoc.addNewConcept(c1);
Concept c2 = new Concept("B");
Field field1 = new Field("FieldB1");
field1.setText("ValueB1");
c2.addField(field1);
Attribute attr1 = new Attribute("AttributeTest1");
Attribute attr2 = new Attribute("AttributeTest2");
c2.addAttribute(attr1);
c2.addAttribute(attr2);
Field attrField1 = new Field("FieldBAttr1");
Field attrField2 = new Field("FieldBAttr2");
attrField2.setText("ValueB2");
attr2.addField(attrField1);
attr2.addField(attrField2);
ekgDoc.addNewConcept(c2);
Relationship r1 = new Relationship(c1, c2, "peerlink", RelationshipType.PEER);
r1.setCardinality(Integer.toString(100));
r1.setCardinalityType(CardinalityType.EXACT);
ekgDoc.addNewRelationship(r1);
Relationship r2 = new Relationship(c1, "selflink");
ekgDoc.addNewRelationship(r2);
EkgDocument ekgDocAdded = gClient.addEkgDocument(ekgDoc);
System.out.println(ekgDocAdded);
curl -X POST
-d <data>
https://app.gra.fo/api/v1/documents/ekg
#The output displayed below can be sent as data to the above command
#Read the documentation for more info
var demoDocCreate = async function() {
try {
//After initial authentication..
//Refer Section on Authentication
var docDetails = await grafoClient.createDocument('', docName);
var ekgDoc = await grafoClient.createEkgDocument(docDetails);
//After creating empty ekg document from above command
//fine-grained operations have to be invoked to add elements
} catch(err) {
console.log(err);
}
};
The above command returns JSON structured like this: (Java and Javascript map JSON to their respective data structures)
{
"id": "446f86c7-2f0f-4fe7-9bea-c778e469b914",
"type": "document",
"title": "Test Document",
"iri": "http://www.app.gra.fo/schema/untitled-ekg",
"iriPrefix": "gf",
"description": "",
"owner": "f76351f3-be89-485c-a851-19508a03bbf7",
"parent": null,
"concepts": {
"node-926593ff-a5bf-4809-8a47-8b50affba939": {
"id": "node-926593ff-a5bf-4809-8a47-8b50affba939",
"type": "concept",
"label": "A",
"description": "",
"iri": "http://www.app.gra.fo/schema/untitled-ekg#node-926593ff-a5bf-4809-8a47-8b50affba939_A",
"positionX": 200,
"positionY": 300,
"lastUpdatedBy": "f76351f3-be89-485c-a851-19508a03bbf7",
"fields": [
{
"id": "99a20fc6-19d6-4882-8ae9-300016664e7d",
"title": "FieldA1"
}]
},
"node-03d74c0b-8a01-4456-a100-9eeadbc2f4b4": {
"id": "node-03d74c0b-8a01-4456-a100-9eeadbc2f4b4",
"type": "concept",
"label": "B",
"description": "",
"iri": "http://www.app.gra.fo/schema/untitled-ekg#node-03d74c0b-8a01-4456-a100-9eeadbc2f4b4_B",
"lastUpdatedBy": "f76351f3-be89-485c-a851-19508a03bbf7",
"fields": [
{
"id": "a49c5a14-e299-4fa3-a606-a60748831153",
"title": "FieldB1",
"text": "ValueB1"
}]
}
},
"relationships": {
"link-b4bbb7e8-4187-4049-b632-e87624ecf4aa": {
"id": "link-b4bbb7e8-4187-4049-b632-e87624ecf4aa",
"type": "link",
"fromConceptId": "node-926593ff-a5bf-4809-8a47-8b50affba939",
"toConceptId": "node-03d74c0b-8a01-4456-a100-9eeadbc2f4b4",
"label": "peerlink",
"description": "",
"iri": "http://www.app.gra.fo/schema/untitled-ekg#link-b4bbb7e8-4187-4049-b632-e87624ecf4aa_peerlink",
"cardinalityType": {
"id": 2,
"title": "exact"
},
"cardinality": "100",
"specialization": false,
"positionX": null,
"positionY": null,
"deleted": false,
"fields": []
},
"link-f1a82217-1471-4a9e-80dc-659979219590": {
"id": "link-f1a82217-1471-4a9e-80dc-659979219590",
"type": "link",
"fromConceptId": "node-926593ff-a5bf-4809-8a47-8b50affba939",
"toConceptId": "node-926593ff-a5bf-4809-8a47-8b50affba939",
"label": "selflink",
"description": "",
"iri": "http://www.app.gra.fo/schema/untitled-ekg#link-f1a82217-1471-4a9e-80dc-659979219590_selflink",
"cardinalityType": null,
"specialization": false,
"positionX": 100,
"positionY": 173,
"deleted": false,
"fields": []
}
}
}
When this endpoint is invoked, it creates all the concepts, relationships, their attributes and fields provided in the input.
HTTP Request
POST https://app.gra.fo/api/v1/documents/ekg
Returns
This returns a JSON object for the created ekg document. The returned ekg document contains document id, timestamp of document created, the user identifier who created the document, the user identifier of the one who modified the document.
Update EKG Document
try
(
GrafoClient gClient = new GrafoClient();
)
{
UUID docId = UUID.fromString("446f86c7-2f0f-4fe7-9bea-c778e469b914");
EkgDocument ekgDoc = gClient.getEkgDocument(docId);
ekgDoc.setTitle("Updated Document");
Concept conceptForUpdate = ekgDoc.getConcept("node-926593ff-a5bf-4809-8a47-8b50affba939");
Field field1 = new Field("Test2");
field1.setText("Value2");
conceptForUpdate.addField(field1);
conceptForUpdate.setIri("www.abc.com/schema/ModifiedIritest1");
conceptForUpdate.setColor(Color.LIGHT_GREY);
EkgDocument ekgDocAdded = gClient.updateEkgDocument(ekgDoc);
System.out.println(ekgDocAdded);
}
curl -X PUT
-d '{
"title": "Updated Document",
"concepts": {
"node-926593ff-a5bf-4809-8a47-8b50affba939" : {
"id" : "node-926593ff-a5bf-4809-8a47-8b50affba939",
"entityState":2,
"fields":[{
"title":"Test2",
"text":"Value2",
"entityState":1
}],
"iri":"www.abc.com/schema/ModifiedIritest1",
"color":"#d4d4d4"
}}}'
https://app.gra.fo/api/v1/documents/446f86c7-2f0f-4fe7-9bea-c778e469b914/ekg
//Not supported
The above command returns JSON structured like this: (Java and Javascript map JSON to their respective data structures)
{
"id": "446f86c7-2f0f-4fe7-9bea-c778e469b914",
"type": "document",
"title": "Updated Document",
"iri": "http://www.app.gra.fo/schema/untitled-ekg",
"iriPrefix": "gf",
"description": "",
"owner": "f76351f3-be89-485c-a851-19508a03bbf7",
"parent": null,
"concepts": {
"node-926593ff-a5bf-4809-8a47-8b50affba939": {
"id": "node-926593ff-a5bf-4809-8a47-8b50affba939",
"type": "concept",
"label": "A",
"description": "",
"color":"#d4d4d4"
"iri":"www.abc.com/schema/ModifiedIritest1",
"positionX": 200,
"positionY": 300,
"lastUpdatedBy": "f76351f3-be89-485c-a851-19508a03bbf7",
"fields": [
{
"id": "99a20fc6-19d6-4882-8ae9-300016664e7d",
"title": "FieldA1"
},
{
"title":"Test2",
"text":"Value2",
}]
},
"node-03d74c0b-8a01-4456-a100-9eeadbc2f4b4": {
"id": "node-03d74c0b-8a01-4456-a100-9eeadbc2f4b4",
"type": "concept",
"label": "B",
"description": "",
"iri": "http://www.app.gra.fo/schema/untitled-ekg#node-03d74c0b-8a01-4456-a100-9eeadbc2f4b4_B",
"lastUpdatedBy": "f76351f3-be89-485c-a851-19508a03bbf7",
"fields": [
{
"id": "a49c5a14-e299-4fa3-a606-a60748831153",
"title": "FieldB1",
"text": "ValueB1"
}]
}
},
"relationships": {
"link-b4bbb7e8-4187-4049-b632-e87624ecf4aa": {
"id": "link-b4bbb7e8-4187-4049-b632-e87624ecf4aa",
"type": "link",
"fromConceptId": "node-926593ff-a5bf-4809-8a47-8b50affba939",
"toConceptId": "node-03d74c0b-8a01-4456-a100-9eeadbc2f4b4",
"label": "peerlink",
"description": "",
"iri": "http://www.app.gra.fo/schema/untitled-ekg#link-b4bbb7e8-4187-4049-b632-e87624ecf4aa_peerlink",
"cardinalityType": {
"id": 2,
"title": "exact"
},
"cardinality": "100",
"specialization": false,
"positionX": null,
"positionY": null,
"deleted": false,
"fields": []
},
"link-f1a82217-1471-4a9e-80dc-659979219590": {
"id": "link-f1a82217-1471-4a9e-80dc-659979219590",
"type": "link",
"fromConceptId": "node-926593ff-a5bf-4809-8a47-8b50affba939",
"toConceptId": "node-926593ff-a5bf-4809-8a47-8b50affba939",
"label": "selflink",
"description": "",
"iri": "http://www.app.gra.fo/schema/untitled-ekg#link-f1a82217-1471-4a9e-80dc-659979219590_selflink",
"cardinalityType": null,
"specialization": false,
"positionX": 100,
"positionY": 173,
"deleted": false,
"fields": []
}
}
}
This endpoint encompasses multiple functionalities of create, update and delete elements in the EKG document. The decision to create, update or delete is made based on the Entity State passed with the element in json.
In Java, the entity state is intelligently calculated and only the deltas are passed to the server. In Shell, one has to provide the Entity State value along with the json as shown in the example. This functionality is not supported in Javascript.
When this endpoint is invoked it updates the document according to the data provided by the user and then it goes on to create, update or delete, concepts, relationships, attributes and fields based on the Entity State of that element.
Entity State | Value |
---|---|
Unchanged | 0 |
New | 1 |
Updated | 2 |
Deleted | 3 |
The Entity States New and Updated are optional. The operation will be deduced from the provided input data. If the element already exists it will be updated, otherwise it will be created. However for Delete, one has to provide the Entity State.
HTTP Request
PUT https://app.gra.fo/api/v1/documents/<docId>/ekg
Returns
This returns a JSON object for the updated ekg document. The returned ekg document contains document id, timestamp of document created, the user identifier who created the document, the user identifier of the one who modified the document.
Delete EKG Document
try
(GrafoClient gClient = new GrafoClient();)
{
UUID docId = UUID.fromString("446f86c7-2f0f-4fe7-9bea-c778e469b914");
GenericGrafoResponse response = gClient.deleteEkgDocument(docId);
}
curl -X DELETE
https://app.gra.fo/api/v1/documents/446f86c7-2f0f-4fe7-9bea-c778e469b914
var demoDocDelete = async function() {
try {
//After initial authentication..
//Refer Section on Authentication
await grafoClient.deleteEkgDocument("446f86c7-2f0f-4fe7-9bea-c778e469b914");
} catch(err) {
console.log(err);
}
};
The above command returns JSON structured like this: (Java and Javascript map JSON to their respective data structures)
{
"success" : "true"
}
When this endpoint is invoked it marks the document as deleted in database.
HTTP Request
PUT https://app.gra.fo/api/v1/documents/<docId>
Returns
This returns whether the deletion succeeded. If not, then an error will be returned as per error specification at the top of this document.
Concepts
Concept is the equivalent of vertex in graph parlance. They represented as circles in the EKG Document UI Editor. In EKG they represent a business entity, business concept or a noun.
Each concept is identified with an id beginning with node-
All concept endpoints are fine grained network operations. You can achieve all of these operations at one go using the coarse grained operations on the EkgDocument.
List Concepts
This endpoint retrieves all of your concepts within a ekg document. As the concepts are part of a graph, only the natural order of concepts is followed. This generally happens to be the order of addition. No other sort criteria can be applied. No filtering or pagination is supported.
try ( GrafoClient gClient = new GrafoClient(); ) {
UUID docId = ...;
List<Concept> conceptList = gClient.getAllConcepts(docId));
conceptList.forEach( concept -> System.out.println(concept));
}
# Get all concepts for the doc with id 536a35f8-cb7b-41c6-a834-c4c03516657a
curl https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/concepts
var demoListAllConcept = async function() {
try {
//After initial authentication..
//Refer Section on Authentication
//Fetch EKG Document. Refer Documentation on EKG Document
var conceptList = await ekgDoc.getConcepts();
console.log(conceptList);
} catch(err) {
console.log(err);
}
};
The above command returns JSON structured like this: (Java and Javascript map JSON to their respective data structures)
[
{
"id": "node-abf58752-2e44-45e7-8653-ed648481f03a",
"type": "concept",
"label": "Concept1",
"description": "",
"iri": "http://www.app.gra.fo/schema/untitled-ekg#node-abf58752-2e44-45e7-8653-ed648481f03a_Concept1"
},
{
"id": "node-8a21c773-380f-4db9-92a6-f4984efd37ad",
"type": "concept",
"label": "Concept2",
"description": "",
"iri": "http://www.app.gra.fo/schema/untitled-ekg#node-8a21c773-380f-4db9-92a6-f4984efd37ad_Concept2",
"fields": [
{
"id": "c144fb7b-787c-4422-8f63-d8feff2b1e25",
"title": "SampleConceptField"
}
],
"attrGroup": {
"id": "attrGrp-0a9681a1-cac1-4547-8b50-e06421b1778e",
"attributes": [
{
"id": "attr-db27bce1-967c-4966-8ff7-b21ab970d1e6",
"type": "attribute",
"label": "SampleConceptAttrib",
"description": "",
"iri": "http://www.app.gra.fo/schema/untitled-ekg#attr-db27bce1-967c-4966-8ff7-b21ab970d1e6_SampleConceptAttrib"
}
]
}
}
]
HTTP Request
GET https://app.gra.fo/api/v1/documents/<docId>/concepts
URL Parameters
Parameter | Description |
---|---|
docId | The ID of the ekg doc of which the concepts are retrieved |
Returns
This returns an array of all concepts for the specified doc id. Each entry in the array is a separate concept object.
Concept Properties | Description |
---|---|
id | Concept Identifier (beginning with a node-) |
type | This is always concept |
label | Concept Name (always present). Default Value New Concept |
description | Optional Description |
iri | Concept Identifier in URI format |
fields | array of Field objects |
attrGroup | object containing an array of Attributes objects |
Get Concept
try ( GrafoClient gClient = new GrafoClient(); ) {
UUID docId = UUID.fromString("536a35f8-cb7b-41c6-a834-c4c03516657a");
Concept concept = gClient.getConcept(docId,
"node-8a21c773-380f-4db9-92a6-f4984efd37ad");
String iri = concept.Iri();
String label = concept.getLabel();
}
curl "https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/concepts/node-8a21c773-380f-4db9-92a6-f4984efd37ad"
var demoGetConcept = async function() {
try {
//After initial authentication..
//Refer Section on Authentication
//Fetch EKG Document. Refer Documentation on EKG Document
/*********************
Parameters: ConceptId
**********************/
var fetchedConcept = ekgDoc.getConcept("node-8a21c773-380f-4db9-92a6-f4984efd37ad");
console.log(fetchedConcept.toObject());
} catch(err) {
console.log(err);
}
};
The above command returns JSON structured like this: (Java and Javascript map JSON to their respective data structures)
{
"id": "node-8a21c773-380f-4db9-92a6-f4984efd37ad",
"type": "concept",
"label": "Concept2",
"description": "",
"iri": "http://www.app.gra.fo/schema/untitled-ekg#node-8a21c773-380f-4db9-92a6-f4984efd37ad_Concept2",
"fields": [
{
"id": "c144fb7b-787c-4422-8f63-d8feff2b1e25",
"title": "SampleConceptField"
}
],
"attrGroup": {
"id": "attrGrp-0a9681a1-cac1-4547-8b50-e06421b1778e",
"attributes": [
{
"id": "attr-db27bce1-967c-4966-8ff7-b21ab970d1e6",
"type": "attribute",
"label": "SampleConceptAttrib",
"description": "",
"iri": "http://www.app.gra.fo/schema/untitled-ekg#attr-db27bce1-967c-4966-8ff7-b21ab970d1e6_SampleConceptAttrib"
}
]
}
}
This endpoint retrieves a specific concept by id within a ekg document with specified docid.
HTTP Request
GET https://app.gra.fo/api/v1/documents/<docId>/concepts/<ID>
URL Parameters
Parameter | Description |
---|---|
docId | The ID of the ekg doc of which the concepts are retrieved |
ID | The ID of the concept to retrieve |
Returns
This returns a JSON object for the concept.
Create Concept
try ( GrafoClient gClient = new GrafoClient(); ) {
Concept concept = new Concept();
concept.setLabel("Concept3");
concept.setDescription("Sample description");
UUID docId = UUID.fromString("536a35f8-cb7b-41c6-a834-c4c03516657a");
Concept conceptCreated = gClient.createConcept(docId, concept);
}
curl -X POST
-d '{"label": "Concept3", "description": "Sample Description"}'
https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/concepts
var demoCreateConcept = async function() {
try {
//After initial authentication..
//Refer Section on Authentication
//Create or Fetch EKG Document. Refer Documentation on EKG Document
/*********************
Parameters in Order:
Label, PositionX, PositionY, Description, Color, Fields, Iri
**********************/
var conceptCreated = await ekgDoc.addConcept("Concept3", null, null, "Sample Description");
console.log(conceptCreated);
} catch(err) {
console.log(err);
}
};
The above command returns JSON structured like this: (Java and Javascript map JSON to their respective data structures)
{
"id": "node-7bec685e-6330-4add-ab32-a31edab215f3",
"type": "concept"
"label": "Concept3",
"description": "Sample Description",
"iri": "http://www.app.gra.fo/schema/untitled-ekg#node-7bec685e-6330-4add-ab32-a31edab215f3_Concept3"
}
This endpoint creates a concept within the specified ekg document.
HTTP Request
POST https://app.gra.fo/api/v1/documents/<docId>/concepts
URL Parameters
Parameter | Description |
---|---|
docId | The ID of the ekg doc of which the concepts are retrieved |
JSON Body
Name | Mandatory | Default | Description |
---|---|---|---|
label | true | "New Concept" | Concept Label |
description | false | "" | Concept description |
iri | false | Concept IRI. A value is auto assigned by Grafo Server if not specified in create request | |
positionX | false | X coordinate in UI | |
positionY | false | Y coordinate in UI | |
color | false | #AACCFF | Hex code of the RGB values. List of colors that can be used is provided below. |
Color List
Name | Hex Code |
---|---|
AMBER_YELLOW | #fdc344 |
LEMON_YELLOW | #e2fd24 |
GREEN | #5ff263 |
CYAN | #6FF2CD |
PASTEL_BLUE | #AACCFF |
SKY_BLUE | #50A4FD |
STEEL_BLUE | #717CFD |
VIOLET | #C88DEF |
CORAL_RED | #ED5C5C |
ORANGE | #ea874d |
BROWN | #ccb487 |
LIGHT_GREY | #d4d4d4 |
Returns
This returns a JSON object for the created concept. The returned concept contains id and iri assigned.
Update Concept
try ( GrafoClient gClient = new GrafoClient(); ) {
UUID docId = UUID.fromString("536a35f8-cb7b-41c6-a834-c4c03516657a");
Concept concept = gClient.getConcept(docId,
"node-8a21c773-380f-4db9-92a6-f4984efd37ad");
concept.setLabel("UpdateConceptLbl");
concept.setPositionY(90);
Concept updatedConcept = gClient.updateConcept(docId, concept);
}
curl -X POST
-d '{"label": "UpdateConceptLbl", "positionY": 90}'
https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/concepts/node-8a21c773-380f-4db9-92a6-f4984efd37ad
var demoUpdateConcept = async function() {
try {
//After initial authentication..
//Refer Section on Authentication
//Fetch EKG Document. Refer Documentation on EKG Document
/*********************
Parameters in Order:
Label, PositionX, PositionY, Description, Color, Fields, reserved placeholder which is null, Iri, ConceptId
**********************/
var updatedConcept = await ekgDoc.updateConcept("UpdateConceptLbl", null, "90", null, null, null, null, null,"node-8a21c773-380f-4db9-92a6-f4984efd37ad");
console.log(updatedConcept);
} catch(err) {
console.log(err);
}
};
The above command returns JSON structured like this: (Java and Javascript map JSON to their respective data structures)
{
"id": "node-8a21c773-380f-4db9-92a6-f4984efd37ad",
"type": "concept"
"label": "UpdateConceptLbl",
"description": "Sample Description",
"positionX": 90,
"iri": "http://www.app.gra.fo/schema/untitled-ekg#node-7bec685e-6330-4add-ab32-a31edab215f3_Concept3"
}
This endpoint updates my concept with the specified id.
HTTP Request
PUT https://app.gra.fo/api/v1/documents/<docId>/concepts/<ID>
URL Parameters
Parameter | Description |
---|---|
docId | The ID of the ekg doc of which the concepts are retrieved |
ID | The ID of the concept to update |
JSON Body
Name | Description |
---|---|
label | Concept Label |
description | Concept description |
iri | Concept IRI |
positionX | X coordinate in UI |
positionY | Y coordinate in UI |
color | Hex code of the RGB values. List of colors that can be used is provided below. |
Color List
Name | Hex Code |
---|---|
AMBER_YELLOW | #fdc344 |
LEMON_YELLOW | #e2fd24 |
GREEN | #5ff263 |
CYAN | #6FF2CD |
PASTEL_BLUE | #AACCFF |
SKY_BLUE | #50A4FD |
STEEL_BLUE | #717CFD |
VIOLET | #C88DEF |
CORAL_RED | #ED5C5C |
ORANGE | #ea874d |
BROWN | #ccb487 |
LIGHT_GREY | #d4d4d4 |
Returns
This returns a JSON object for the updated concept.
Delete Concept
try ( GrafoClient gClient = new GrafoClient(); ) {
UUID docId = UUID.fromString("536a35f8-cb7b-41c6-a834-c4c03516657a");
String conceptId = "node-8a21c773-380f-4db9-92a6-f4984efd37ad";
GenericGrafoResponse response = gClient.deleteConcept(docId, conceptId));
}
curl -X DELETE
https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/concepts/node-8a21c773-380f-4db9-92a6-f4984efd37ad
var demoDeleteConcept = async function() {
try {
//After initial authentication..
//Refer Section on Authentication
//Fetch EKG Document. Refer Documentation on EKG Document
/*********************
Parameters: ConceptId
**********************/
await ekgDoc.deleteConcept("node-8a21c773-380f-4db9-92a6-f4984efd37ad");
} catch(err) {
console.log(err);
}
};
The above command returns JSON structured like this: (Java and Javascript map JSON to their respective data structures)
{
"success": true
}
This endpoint deletes my concept for the specified id.
HTTP Request
DELETE https://app.gra.fo/api/v1/documents/<docId>/concepts/<ID>
URL Parameters
Parameter | Description |
---|---|
docId | The ID of the ekg doc of which the concepts are retrieved |
ID | The ID of the concept to delete |
Returns
This returns whether the deletion succeeded. If not, then an error will be returned as per error specification at the top of this document.
Concept Attributes
The term attribute refers to a feature that is part of a concept or relationship. It is a property that has a name, data type and cardinality.
Concept attribute is identified with an id beginning with attr-
All concept attribute endpoints are fine grained network operations. You can achieve all of these operations at one go using the coarse grained operations on the EkgDocument.
List Concept Attributes
This endpoint retrieves all the attributes for a concept within a ekg document. Natural order of attributes is followed. This generally happens to be the order of addition. No other sort criteria can be applied. No filtering or pagination is supported.
try ( GrafoClient gClient = new GrafoClient(); ) {
UUID docId = ...; Sring conceptId = "...";
List<Attribute> attribList = gClient.getAllConceptAttributes(
docId, conceptId);
attribList.forEach( attrib -> System.out.println(attrib));
}
# Get all attributes for doc and concept
curl https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/concepts/node-5baeadf9-24e0-4776-b2e9-75ef535ef88c/attributes
var demoListAllConceptAttributes = async function() {
try {
//After initial authentication..
//Refer Section on Authentication
//Fetch EKG Document. Refer Documentation on EKG Document
/*********************
Parameters: ConceptId
**********************/
var attributeList = await ekgDoc.getConceptAttributes("node-5baeadf9-24e0-4776-b2e9-75ef535ef88c");
console.log(attributeList);
} catch(err) {
console.log(err);
}
};
The above command returns JSON structured like this: (Java and Javascript map JSON to their respective data structures)
[
{
"id": "attr-6b945e31-759c-4b5e-b251-3b5a586d4d59",
"type": "attribute",
"label": "Attrib2",
"description": "",
"iri": "http://www.app.gra.fo/schema/untitled-ekg#attr-6b945e31-759c-4b5e-b251-3b5a586d4d59_Attrib2"
"fields": [
{
"id": "c144fb7b-787c-4422-8f63-d8feff2b1e25",
"title": "SampleConceptAttribField"
}
],
"xsdDataType": { "id": 1, "title": "string"},
"cardinalityType": { "id": 1, "title": "max"},
"cardinality": "10"
},
...
]
HTTP Request
GET https://app.gra.fo/api/v1/documents/<docId>/concepts/<conceptId>/attributes
URL Parameters
Parameter | Description |
---|---|
docId | The ID of the ekg doc to which the concept belongs |
conceptId | The Id of concept of which the attributes are retrieved |
Returns
This returns an array of all attributes for the specified doc id and concept id. Each entry in the array is a separate attribute object. Attribute Properties are defined in the section titled EKG Document Coarse Grained Operations
Get Concept Attribute
try ( GrafoClient gClient = new GrafoClient(); ) {
UUID docId = UUID.fromString("536a35f8-cb7b-41c6-a834-c4c03516657a");
String conceptId = "..."; String attrId = "...";
Attribute attr = gClient.getConceptAttribute(docId, conceptId, attrId);
String iri = attr.Iri();
String label = attr.getLabel();
}
curl "https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/concepts/node-8a21c773-380f-4db9-92a6-f4984efd37ad/attributes/attr-6b945e31-759c-4b5e-b251-3b5a586d4d59"
var demoGetConceptAtttribute = async function() {
try {
//After initial authentication..
//Refer Section on Authentication
//Fetch EKG Document. Refer Documentation on EKG Document
/*********************
Parameters in order: ConceptId, AttributeId
**********************/
var fetchedAttrib = ekgDoc.getConceptAttribute("node-8a21c773-380f-4db9-92a6-f4984efd37ad", "attr-6b945e31-759c-4b5e-b251-3b5a586d4d59");
console.log(fetchedAttrib.toObject());
} catch(err) {
console.log(err);
}
};
The above command returns JSON structured like this: (Java and Javascript map JSON to their respective data structures)
{
"id": "attr-6b945e31-759c-4b5e-b251-3b5a586d4d59",
"type": "attribute",
"label": "Attrib2",
"description": "",
"iri": "http://www.app.gra.fo/schema/untitled-ekg#attr-6b945e31-759c-4b5e-b251-3b5a586d4d59_Attrib2"
"fields": [
{
"id": "c144fb7b-787c-4422-8f63-d8feff2b1e25",
"title": "SampleConceptAttribField"
}
]
}
This endpoint retrieves a specific concept attribute by id within a ekg document with specified docid and for a specific conceptid.
HTTP Request
GET https://app.gra.fo/api/v1/documents/<docId>/concepts/<conceptId>/attributes/<attribId>
URL Parameters
Parameter | Description |
---|---|
docId | The ID of the ekg doc of which the concepts are retrieved |
conceptId | ID of the concept |
attribId | The ID of the attribute to retrieve |
Returns
This returns a JSON object for the attribute.
Create Concept Attribute
try ( GrafoClient gClient = new GrafoClient(); ) {
Attribute attrib = new Attribute();
attrib.setLabel("MyAttrib_03");
attrib.setDescription("Sample description");
attrib.setXsdDataType(XsdDataType.DATETIME);
attrib.setCardinalityType(CardinalityType.MIN);
attrib.setCardinlaity("3");
UUID docId = UUID.fromString("536a35f8-cb7b-41c6-a834-c4c03516657a");
String conceptId = "..."
Attribute attrCreated = gClient.createConceptAttribute(docId, conceptId, attrib);
}
curl -X POST
-d '{"label": "MyAttrib_03", "description": "Sample Description", "cardinalityType": { "id": 1, "title": "max"}, "cardinality":"3"}'
https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/concepts/node-8a21c773-380f-4db9-92a6-f4984efd37ad/attributes
var demoCreateConceptAtttribute = async function() {
try {
//After initial authentication..
//Refer Section on Authentication
//Fetch EKG Document. Refer Documentation on EKG Document
/*********************
Parameters in Order: Label, Description, Fields, XsdDataType, CardinalityType, Cardinality, Iri, Id, ConceptId
**********************/
await ekgDoc.addAttributeToConcept("MyAttrib_03", "Sample Description", null, null, "max", "3", null, null, conceptId);
} catch(err) {
console.log(err);
}
};
The above command returns JSON structured like this: (Java and Javascript map JSON to their respective data structures)
{
"id": "attr-9aaf949e-d4d4-4749-b561-9a762757a1d1",
"type": "attribute"
"label": "MyAttrib_03",
"description": "Sample Description",
"iri": "http://www.app.gra.fo/schema/untitled-ekg#attr-9aaf949e-d4d4-4749-b561-9a762757a1d1_MyAttrib_03",
"cardinalityType": {"id": 0, "title": "min"},
"cardinality": "3"
}
This endpoint creates a attribute within the specified ekg document and concept.
HTTP Request
POST https://app.gra.fo/api/v1/documents/<docId>/concepts/<conceptId>/attributes
URL Parameters
Parameter | Description |
---|---|
docId | The ID of the ekg doc of which the concepts are retrieved |
conceptId | The concept id for which the attribute is created |
JSON Body
Name | Mandatory | Default | Description |
---|---|---|---|
label | true | -- | Concept Attribute Label |
description | false | "" | Concept Attribute description |
iri | false | Concept Attribute IRI. A value is auto assigned by Grafo Server if not specified in create request | |
fields | false | empty | array of Field objects |
xsdDataType | false | xsd data type | |
cardinalityType | false | cardinality Type | |
cardinality | false | cardinality value |
Returns
This returns a JSON object for the created concept attribute. The returned concept attribute contains id and iri assigned.
Update Concept Attribute
try ( GrafoClient gClient = new GrafoClient(); ) {
UUID docId = UUID.fromString("536a35f8-cb7b-41c6-a834-c4c03516657a");
Concept concept = gClient.getConcept(docId,
"node-8a21c773-380f-4db9-92a6-f4984efd37ad");
List<Attribute> attribList = concept.getAttributes();
Attribute attrib = attribList.get(1); //assuming there are atleast 2
attrib.setLabel("UpdateAttribLbl");
attrib.setXsdDataType(XsdDataType.DECIMAL);
attrib.setCardinalityType(CardinalityType.EXACT);
attrib.setCardinlaity("20");
Attribute updatedAttr =
gClient.updateConceptAttribute(docId, conceptId, attrib);
}
curl -X POST
-d '{"label": "UpdateAttribLbl", "cardinality": "20", "cardinalityType": { "id": 1, "title": "min"} }'
https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/concepts/node-8a21c773-380f-4db9-92a6-f4984efd37ad/attributes/attr-33c6ed7b-8437-41ce-9552-9caed3f242b9
var demoUpdateConceptAtttribute = async function() {
try {
//After initial authentication..
//Refer Section on Authentication
//Fetch EKG Document. Refer Documentation on EKG Document
/*********************
Parameters in Order: Label, Description, Fields, reserved placeholder which is null, XsdDataType, CardinalityType, Cardinality, Iri, Id, ConceptId
**********************/
await ekgDoc.updateAttributeToConcept("UpdateAttribLbl", "", null, null, null, "min", "20", null, "attr-33c6ed7b-8437-41ce-9552-9caed3f242b9", "node-8a21c773-380f-4db9-92a6-f4984efd37ad");
} catch(err) {
console.log(err);
}
};
The above command returns JSON structured like this: (Java and Javascript map JSON to their respective data structures)
{
"id": "attr-33c6ed7b-8437-41ce-9552-9caed3f242b9",
"type": "attribute"
"label": "UpdateAttribLbl",
"cardinality": "20",
"cardinalityType": { "id": 1, "title": "min"},
"iri": "http://www.app.gra.fo/schema/untitled-ekg#attr-33c6ed7b-8437-41ce-9552-9caed3f242b9_UpdateAttribLbl"
}
This endpoint updates attribute with the specified attribute id within the specified concept and ekg doc.
HTTP Request
PUT https://app.gra.fo/api/v1/documents/<docId>/concepts/<conceptId>/attributes/<attribId>
URL Parameters
Parameter | Description |
---|---|
docId | The ID of the ekg doc of which the concept and attributes are retrieved |
conceptId | The ID of the concept |
attribId | Id of attribute to update |
JSON Body
Name | Mandatory | Default | Description |
---|---|---|---|
label | false | -- | Concept Attribute Label |
description | false | "" | Concept description |
iri | false | Concept Attribute IRI. A value is auto assigned by Grafo Server if not specified in create request | |
fields | false | empty | array of Field objects |
xsdDataType | false | xsd data type | |
cardinalityType | false | cardinality Type | |
cardinality | false | cardinality value |
Returns
This returns a JSON object for the updated attribute.
Delete Concept Attribute
try ( GrafoClient gClient = new GrafoClient(); ) {
UUID docId = UUID.fromString("536a35f8-cb7b-41c6-a834-c4c03516657a");
String conceptId = "node-8a21c773-380f-4db9-92a6-f4984efd37ad";
String attribId = "";
GenericGrafoResponse response = gClient.deleteConceptAttribute(docId, conceptId, attribId);
}
curl -X DELETE
https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/concepts/node-8a21c773-380f-4db9-92a6-f4984efd37ad/attributes/attr-33c6ed7b-8437-41ce-9552-9caed3f242b9
var demoDeleteConceptAtttribute = async function() {
try {
//After initial authentication..
//Refer Section on Authentication
//Fetch EKG Document. Refer Documentation on EKG Document
/*********************
Parameters in Order: ConceptId, AttributeId
**********************/
await ekgDoc.deleteConceptAttribute("node-8a21c773-380f-4db9-92a6-f4984efd37ad", "attr-33c6ed7b-8437-41ce-9552-9caed3f242b9");
} catch(err) {
console.log(err);
}
};
The above command returns JSON structured like this: (Java and Javascript map JSON to their respective data structures)
{
"success": true
}
This endpoint deletes the concept attribute for the specified id present within the selected concept in the ekg doc.
HTTP Request
DELETE https://app.gra.fo/api/v1/documents/<docId>/concepts/<conceptId>/attributes/<attribId>
URL Parameters
Parameter | Description |
---|---|
docId | The ID of the ekg doc of which the concepts are retrieved |
conceptId | The ID of the concept of which attribute to delete |
attribId | The ID of the attribute to delete |
Returns
This returns whether the deletion succeeded. If not, then an error will be returned as per error specification at the top of this document.
Relationships
Relationship is the equivalent of an edge in graph. It is a directed line that connects two nodes. It represents inter-relationship between two Concepts. There are possibilities that a relationship starts and ends at the same node. This is also supported.
Each relationship is identified by an id beginning with link-
All relationship endpoints are fine grained network operations. You can achieve all of these operations at one go using the coarse grained operations on the EkgDocument.
List Relationships
This endpoint retrieves all the relationships within an EKG document. As the relationships are part of a graph, only the natural order of relationships is followed. This generally happens to be the order of addition. No other sort criteria can be applied. No filtering or pagination is supported.
try (GrafoClient gClient = new GrafoClient();) {
List<Relationship> relList = gClient.getAllRelationships(UUID.fromString("536a35f8-cb7b-41c6-a834-c4c03516657a"));
relList.forEach( rel -> System.out.println(rel));
}
# Get all relationships for the doc with id 536a35f8-cb7b-41c6-a834-c4c03516657a
curl https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/relationships
var demoListAllRelationships = async function() {
try {
//After initial authentication..
//Refer Section on Authentication
//Fetch EKG Document. Refer Documentation on EKG Document
var relList = await ekgDoc.getRelationships();
console.log(relList);
} catch(err) {
console.log(err);
}
};
The above command returns JSON structured like this: (Java and Javascript map JSON to their respective data structures)
[
{
"id": "link-2e2069ba-3523-4731-8c41-35189796f7dd",
"type": "link",
"fromConceptId": "node-19d8dee3-e5ae-4337-86af-cc4bb415ea91",
"toConceptId": "node-74232afd-fd3b-4006-99d0-5487c23d83d5",
"label": "linkAtoB1",
"iri": "http://www.app.gra.fo/schema/untitled-ekg/linkatob1",
"cardinalityType": {
"id": 2,
"title": "exact"
},
"cardinality": "10",
"fields": [
{
"id": "8d308e21-fc40-403f-b667-2de545219d4a",
"title": "Sample Field",
"text": "Test Value"
}
],
"attrGroup": {
"id": "attrGrp-6b610b09-701a-4b5b-9138-8eeae407ac50",
"attributes": [
{
"id": "linkattr-f132601f-34ee-4c8a-8486-b83c867174f7",
"type": "attribute",
"label": "relattribute1",
"description": "",
"iri": "http://www.app.gra.fo/schema/untitled-ekg/relattribute1_linkattr-f132601f-34ee-4c8a-8486-b83c867174f7",
"fields": []
}],
"lastUpdatedBy": "f76351f3-be89-485c-a851-19508a03bbf7"
}
},
{
"id": "link-113ae2a0-d7de-466b-b552-8da441ecb2e9",
"type": "link",
"fromConceptId": "node-19d8dee3-e5ae-4337-86af-cc4bb415ea91",
"toConceptId": "node-74232afd-fd3b-4006-99d0-5487c23d83d5",
"label": "linkAtoB2",
"description": "",
"iri": "http://www.app.gra.fo/schema/untitled-ekg/linkatob2",
}
]
HTTP Request
GET https://app.gra.fo/api/v1/documents/<docId>/relationships
URL Parameters
Parameter | Description |
---|---|
docId | The ID of the ekg doc of which the relationships are retrieved |
Returns
This returns an array of all relationships for the specified doc id. Each entry in the array is a separate relationship object.
Relationship Properties are defined in the section titled EKG Document - Coarse Grained Operations
Get Relationship
try ( GrafoClient gClient = new GrafoClient(); ) {
UUID docId = UUID.fromString("536a35f8-cb7b-41c6-a834-c4c03516657a");
Relationship rel = gClient.getRelationship(docId, "link-2e2069ba-3523-4731-8c41-35189796f7dd");
System.out.println(rel)
}
curl "https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/relationships/link-2e2069ba-3523-4731-8c41-35189796f7dd"
var demoGetRelationship = async function() {
try {
//After initial authentication..
//Refer Section on Authentication
//Fetch EKG Document. Refer Documentation on EKG Document
/*********************
Parameters: RelationshipId
**********************/
var fetchedRel = ekgDoc.getRelationship("link-2e2069ba-3523-4731-8c41-35189796f7dd");
console.log(fetchedRel.toObject());
} catch(err) {
console.log(err);
}
};
The above command returns JSON structured like this: (Java and Javascript map JSON to their respective data structures)
{
"id": "link-2e2069ba-3523-4731-8c41-35189796f7dd",
"type": "link",
"fromConceptId": "node-19d8dee3-e5ae-4337-86af-cc4bb415ea91",
"toConceptId": "node-74232afd-fd3b-4006-99d0-5487c23d83d5",
"label": "linkAtoB1",
"iri": "http://www.app.gra.fo/schema/untitled-ekg/linkatob1",
"cardinalityType": {
"id": 2,
"title": "exact"
},
"cardinality": "10",
"fields": [
{
"id": "8d308e21-fc40-403f-b667-2de545219d4a",
"title": "Sample Field",
"text": "Test Value"
}],
"attrGroup": {
"id": "attrGrp-6b610b09-701a-4b5b-9138-8eeae407ac50",
"attributes": [
{
"id": "linkattr-f132601f-34ee-4c8a-8486-b83c867174f7",
"type": "attribute",
"label": "relattribute1",
"description": "",
"iri": "http://www.app.gra.fo/schema/untitled-ekg/relattribute1_linkattr-f132601f-34ee-4c8a-8486-b83c867174f7",
"fields": []
}],
"lastUpdatedBy": "f76351f3-be89-485c-a851-19508a03bbf7"
}
}
This endpoint retrieves a specific relationship by id within a ekg document with specified docid.
HTTP Request
GET https://app.gra.fo/api/v1/documents/<docId>/relationships/<id>
URL Parameters
Parameter | Description |
---|---|
docId | The ID of the ekg doc of which the relationships are retrieved |
id | The ID of the relationship to retrieve |
Returns
This returns a JSON object for the relationship.
Create Relationship
try (GrafoClient gClient = new GrafoClient();) {
//concept1 and concept2 are start and end nodes of a relationship
Relationship relationship = new Relationship(concept1, concept2, "link1to2", RelationshipType.PEER);
relationship.setDescription("Demo Add Relationship");
Relationship newRelationship = gClient.createRelationship(UUID.fromString("536a35f8-cb7b-41c6-a834-c4c03516657a"), relationship);
System.out.println(newRelationship);
}
curl -X POST
-d '{"label": "link1to2", "description": "Demo Add Relationship",
"fromConceptId":"node-19d8dee3-e5ae-4337-86af-cc4bb415ea91",
"toConceptId":"node-74232afd-fd3b-4006-99d0-5487c23d83d5"}'
https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/relationships
var demoCreateRelationship = async function() {
try {
//After initial authentication..
//Refer Section on Authentication
//Create or Fetch EKG Document. Refer Documentation on EKG Document
/*********************
Parameters in Order:
Label, FromConceptId, ToConceptId, Specialization, Description, Color, Fields, CardinalityType, Cardinality, PositionX, PositionY, Iri
**********************/
var relCreated = await ekgDoc.addRelationship("link1to2", "node-19d8dee3-e5ae-4337-86af-cc4bb415ea91", "node-74232afd-fd3b-4006-99d0-5487c23d83d5", null, "Demo Add Relationship");
console.log(relCreated);
} catch(err) {
console.log(err);
}
};
The above command returns JSON structured like this: (Java and Javascript map JSON to their respective data structures)
{
"id": "link-245ae2a0-d7de-466b-b552-8da441ecb2e9",
"type": "link",
"fromConceptId": "node-19d8dee3-e5ae-4337-86af-cc4bb415ea91",
"toConceptId": "node-74232afd-fd3b-4006-99d0-5487c23d83d5",
"label": "link1to2",
"description": "Demo Add Relationship",
"iri": "http://www.app.gra.fo/schema/untitled-ekg/linkatob2",
"cardinalityType": null,
"cardinality": null,
"positionX": null,
"positionY": null
}
This endpoint creates a relationship within the specified ekg document.
HTTP Request
POST https://app.gra.fo/api/v1/documents/<docId>/relationships
URL Parameters
Parameter | Description |
---|---|
docId | The ID of the ekg doc of which the relationships are retrieved |
JSON Body
Name | Mandatory | Default | Description |
---|---|---|---|
label | true | Relationship Label | |
fromConceptId | true | Id of the start node | |
toConceptId | true | Id of the end node | |
description | false | "" | Relationship description |
iri | false | Relationship IRI. A value is auto assigned by Grafo Server if not specified in create request | |
positionX | false | X coordinate in UI | |
positionY | false | Y coordinate in UI | |
cardinalityType | false | null | Exact, Max, Min values can be provided |
cardinality | false | null | cardinality value |
specialisation | false | false | A flag to identify if a relationship is specialisation or not. |
color | false | #000000 | Hex code of the RGB values. List of colors that can be used is provided below. |
Color List
Name | Hex Code |
---|---|
AMBER_YELLOW | #fdc344 |
LEMON_YELLOW | #e2fd24 |
GREEN | #5ff263 |
CYAN | #6FF2CD |
PASTEL_BLUE | #AACCFF |
SKY_BLUE | #50A4FD |
STEEL_BLUE | #717CFD |
VIOLET | #C88DEF |
CORAL_RED | #ED5C5C |
ORANGE | #ea874d |
BROWN | #ccb487 |
LIGHT_GREY | #d4d4d4 |
BLACK | #000000 |
Returns
This returns a JSON object for the created relationship. The returned relationship contains id and iri assigned.
Update Relationship
try ( GrafoClient gClient = new GrafoClient(); ) {
UUID docId = UUID.fromString("536a35f8-cb7b-41c6-a834-c4c03516657a");
Relationship relationshipForUpdate = gClient.getRelationship(docId,
"link-245ae2a0-d7de-466b-b552-8da441ecb2e9");
relationshipForUpdate.setLabel("UpdatedRel");
relationship.setIri("www.abc.com/schema/rel1");
Relationship updatedRelationship = gClient.updateRelationship(docId, relationshipForUpdate);
System.out.println(updatedRelationship);
}
curl -X POST
-d '{"label": "UpdatedRel", "iri": "www.abc.com/schema/rel1"}'
https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/relationships/link-245ae2a0-d7de-466b-b552-8da441ecb2e9
var demoUpdateRelationship = async function() {
try {
//After initial authentication..
//Refer Section on Authentication
//Fetch EKG Document. Refer Documentation on EKG Document
/*********************
Parameters in Order:
Label, Specialization, Description, Color, Fields, reserved placeholder which is null, CardinalityType, Cardinality, PositionX, PositionY, Iri, Id
**********************/
var updatedRel = await ekgDoc.updateRelationship("UpdatedRel", null, null, null, null, null, null, null, null, null, "www.abc.com/schema/rel1", "link-245ae2a0-d7de-466b-b552-8da441ecb2e9");
console.log(updatedRel);
} catch(err) {
console.log(err);
}
};
The above command returns JSON structured like this: (Java and Javascript map JSON to their respective data structures)
{
"id": "link-245ae2a0-d7de-466b-b552-8da441ecb2e9",
"type": "link",
"fromConceptId": "node-19d8dee3-e5ae-4337-86af-cc4bb415ea91",
"toConceptId": "node-74232afd-fd3b-4006-99d0-5487c23d83d5",
"label": "UpdatedRel",
"description": "Demo Add Relationship",
"iri": "www.abc.com/schema/rel1",
"cardinalityType": null,
"cardinality": null,
"positionX": null,
"positionY": null
}
This endpoint updates relationship with the specified id.
HTTP Request
PUT https://app.gra.fo/api/v1/documents/<docId>relationships/<id>
URL Parameters
Parameter | Description |
---|---|
docId | The ID of the ekg doc of which the relationships are retrieved |
id | The ID of the relationship to update |
JSON Body
Name | Description |
---|---|
label | Relationship Label |
description | Relationship description |
iri | Relationship IRI |
positionX | X coordinate in UI |
positionY | Y coordinate in UI |
cardinalityType | Exact, Max, Min values can be provided |
cardinality | cardinality value |
color | Hex code of the RGB values. List of colors that can be used is provided below. |
Color List
Name | Hex Code |
---|---|
AMBER_YELLOW | #fdc344 |
LEMON_YELLOW | #e2fd24 |
GREEN | #5ff263 |
CYAN | #6FF2CD |
PASTEL_BLUE | #AACCFF |
SKY_BLUE | #50A4FD |
STEEL_BLUE | #717CFD |
VIOLET | #C88DEF |
CORAL_RED | #ED5C5C |
ORANGE | #ea874d |
BROWN | #ccb487 |
LIGHT_GREY | #d4d4d4 |
BLACK | #000000 |
Returns
This returns a JSON object for the updated relationship.
Delete Relationship
try ( GrafoClient gClient = new GrafoClient(); ) {
UUID docId = UUID.fromString("536a35f8-cb7b-41c6-a834-c4c03516657a");
String relationshipId = "link-245ae2a0-d7de-466b-b552-8da441ecb2e9";
GenericGrafoResponse response = gClient.deleteRelationship(docId, relationshipId));
}
curl -X DELETE
https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/relationships/link-245ae2a0-d7de-466b-b552-8da441ecb2e9
var demoDeleteRelationship = async function() {
try {
//After initial authentication..
//Refer Section on Authentication
//Fetch EKG Document. Refer Documentation on EKG Document
/*********************
Parameters: RelationshipId
**********************/
await ekgDoc.deleteRelationship("link-245ae2a0-d7de-466b-b552-8da441ecb2e9");
} catch(err) {
console.log(err);
}
};
The above command returns JSON structured like this: (Java and Javascript map JSON to their respective data structures)
{
"success": true
}
This endpoint deletes relationship for the specified id.
HTTP Request
DELETE https://app.gra.fo/api/v1/documents/<docId>/relationships/<id>
URL Parameters
Parameter | Description |
---|---|
docId | The ID of the ekg doc of which the relationships are retrieved |
id | The ID of the relationship to delete |
Returns
This returns whether the deletion succeeded. If not, then an error will be returned as per error specification at the top of this document.
Relationship Attributes
The term attribute refers to a feature that is part of a concept or relationship. It is a property that has a name, data type and cardinality.
Relationship attribute is identified with an id beginning with linkattr-
All relationship attribute endpoints are fine grained network operations. You can achieve all of these operations at one go using the coarse grained operations on the EkgDocument.
List Relationship Attributes
This endpoint retrieves all the attributes for a relationship within an ekg document. Natural order of attributes is followed. This generally happens to be the order of addition. No other sort criteria can be applied. No filtering or pagination is supported.
try ( GrafoClient gClient = new GrafoClient(); ) {
UUID docId = UUID.fromString("536a35f8-cb7b-41c6-a834-c4c03516657a");
String relationshipId = "link-2e2069ba-3523-4731-8c41-35189796f7dd";
List<Attribute> attribList = gClient.getAllRelationshipAttributes(
docId, relationshipId);
attribList.forEach( attrib -> System.out.println(attrib));
}
# Get all attributes for doc and relationship
curl https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/relationships/link-2e2069ba-3523-4731-8c41-35189796f7dd/attributes
var demoListAllRelationshipAttributes = async function() {
try {
//After initial authentication..
//Refer Section on Authentication
//Fetch EKG Document. Refer Documentation on EKG Document
var attributeList = await ekgDoc.getRelationshipAttributes("link-2e2069ba-3523-4731-8c41-35189796f7dd");
console.log(attributeList);
} catch(err) {
console.log(err);
}
};
The above command returns JSON structured like this: (Java and Javascript map JSON to their respective data structures)
[
{
"id": "linkattr-b315d309-8583-45a6-b68d-86c929df54db",
"type": "attribute",
"label": "relattribute1",
"description": "",
"iri": "http://www.app.gra.fo/schema/untitled-ekg/relattribute2_linkattr-b315d309-8583-45a6-b68d-86c929df54db",
"xsdDataType": {"id": 0, "title": "boolean" },
"cardinalityType": {"id": 0, "title": "min"},
"cardinality": "1",
"fields": [
{
"id": "ca397b5b-7303-40ae-817f-b0834c7e2432",
"title": "Field1",
"text": "Value1"
}
]
},
......
]
HTTP Request
GET https://app.gra.fo/api/v1/documents/<docId>/relationships/<relId>/attributes
URL Parameters
Parameter | Description |
---|---|
docId | The ID of the ekg doc to which the relationship belongs |
relId | The ID of relationship of which the attributes are retrieved |
Returns
This returns an array of all attributes for the specified doc id and relationship id. Each entry in the array is a separate attribute object. Attribute Properties are defined in the section titled EKG Document Coarse Grained Operations
Get Relationship Attribute
try ( GrafoClient gClient = new GrafoClient(); ) {
UUID docId = UUID.fromString("536a35f8-cb7b-41c6-a834-c4c03516657a");
String relationshipId = "link-2e2069ba-3523-4731-8c41-35189796f7dd";
String attrId = "linkattr-b315d309-8583-45a6-b68d-86c929df54db";
Attribute attr = gClient.getRelationshipAttribute(docId, relationshipId, attrId);
System.out.println(attr);
}
curl "https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/relationships/link-2e2069ba-3523-4731-8c41-35189796f7dd/attributes/linkattr-b315d309-8583-45a6-b68d-86c929df54db"
var demoGetRelationshipAtttribute = async function() {
try {
//After initial authentication..
//Refer Section on Authentication
//Fetch EKG Document. Refer Documentation on EKG Document
/*********************
Parameters in order: RelationshipId, AttributeId
**********************/
var fetchedAttrib = ekgDoc.getRelationshipAttribute("link-2e2069ba-3523-4731-8c41-35189796f7dd", "linkattr-b315d309-8583-45a6-b68d-86c929df54db");
console.log(fetchedAttrib.toObject());
} catch(err) {
console.log(err);
}
};
The above command returns JSON structured like this: (Java and Javascript map JSON to their respective data structures)
{
"id": "linkattr-b315d309-8583-45a6-b68d-86c929df54db",
"type": "attribute",
"label": "relattribute1",
"description": "",
"iri": "http://www.app.gra.fo/schema/untitled-ekg/relattribute2_linkattr-b315d309-8583-45a6-b68d-86c929df54db",
"xsdDataType": {"id": 0, "title": "boolean" },
"cardinalityType": {"id": 0, "title": "min"},
"cardinality": "1",
"fields": [
{
"id": "ca397b5b-7303-40ae-817f-b0834c7e2432",
"title": "Field1",
"text": "Value1"
}
]
}
This endpoint retrieves a specific relationship attribute by id within a ekg document with specified docid and for a specific relationshipid.
HTTP Request
GET https://app.gra.fo/api/v1/documents/<docId>/relationships/<relId>/attributes/<attribId>
URL Parameters
Parameter | Description |
---|---|
docId | The ID of the ekg doc of which the relationships are retrieved |
relId | ID of the relationship |
attribId | The ID of the attribute to retrieve |
Returns
This returns a JSON object for the attribute.
Create Relationship Attribute
try ( GrafoClient gClient = new GrafoClient(); ) {
Attribute attrib = new Attribute();
attrib.setLabel("MyAttrib_01");
attrib.setDescription("Sample description");
attrib.setXsdDataType(XsdDataType.DATETIME);
attrib.setCardinalityType(CardinalityType.MIN);
attrib.setCardinlaity("3");
UUID docId = UUID.fromString("536a35f8-cb7b-41c6-a834-c4c03516657a");
String relationshipId = "link-2e2069ba-3523-4731-8c41-35189796f7dd"
Attribute attrCreated = gClient.addRelationshipAttribute(docId, relationshipId, attrib);
}
curl -X POST
-d '{"label": "MyAttrib_01", "description": "Sample Description", "cardinalityType": "min", "cardinality":"3", "xsdDataType":"datetime"}'
https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/relationships/link-2e2069ba-3523-4731-8c41-35189796f7dd/attributes
var demoCreateRelationshipAtttribute = async function() {
try {
//After initial authentication..
//Refer Section on Authentication
//Fetch EKG Document. Refer Documentation on EKG Document
/*********************
Parameters in Order: Label, Description, Fields, XsdDataType, CardinalityType, Cardinality, Iri, Id, RelationshipId
**********************/
await ekgDoc.addRelationshipAttribute("MyAttrib_01", "Sample Description", null, null, "min", "3", null, null, "link-2e2069ba-3523-4731-8c41-35189796f7dd");
} catch(err) {
console.log(err);
}
};
The above command returns JSON structured like this: (Java and Javascript map JSON to their respective data structures)
{
"id": "attr-9aaf949e-d4d4-4749-b561-9a762757a1d1",
"type": "attribute"
"label": "MyAttrib_01",
"description": "Sample Description",
"iri": "http://www.app.gra.fo/schema/untitled-ekg#attr-9aaf949e-d4d4-4749-b561-9a762757a1d1_MyAttrib_01",
"xsdDataType": {"id": 0, "title": "datetime" },
"cardinalityType": {"id": 0, "title": "min"},
"cardinality": "3"
}
This endpoint creates an attribute within the specified ekg document and relationship.
HTTP Request
POST https://app.gra.fo/api/v1/documents/<docId>/relationships/<relId>/attributes
URL Parameters
Parameter | Description |
---|---|
docId | The ID of the ekg doc of which the relationships are retrieved |
relId | The relationship id for which the attribute is created |
JSON Body
Name | Mandatory | Default | Description |
---|---|---|---|
label | true | -- | Relationship Attribute Label |
description | false | "" | Relationship Attribute description |
iri | false | Relationship Attribute IRI. A value is auto assigned by Grafo Server if not specified in create request | |
fields | false | empty | array of Field objects |
xsdDataType | false | null | May be null, boolean, string, float, double, decimal, long, short, integer, int, dateTime, anyURI |
cardinalityType | false | null | May be exact, min, max |
cardinality | false | null | cardinality value |
Returns
This returns a JSON object for the created relationship attribute. The returned relationship attribute contains id and iri assigned.
Update Relationship Attribute
try ( GrafoClient gClient = new GrafoClient(); ) {
UUID docId = UUID.fromString("536a35f8-cb7b-41c6-a834-c4c03516657a");
Relationship relationship = gClient.getRelationship(docId,
"link-2e2069ba-3523-4731-8c41-35189796f7dd");
List<Attribute> attribList = relationship.getAttributes();
Attribute attrib = attribList.get(1); //assuming there are atleast 2
attrib.setLabel("UpdateAttribLbl");
attrib.setXsdDataType(XsdDataType.DECIMAL);
attrib.setCardinalityType(CardinalityType.MIN);
attrib.setCardinality("20");
Attribute updatedAttr =
gClient.updateRelationshipAttribute(docId, relationshipId, attrib);
}
curl -X POST
-d '{"label": "UpdateAttribLbl", "cardinality": "20", "cardinalityType": "min", "xsdDataType":"decimal" }'
https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/relationships/link-2e2069ba-3523-4731-8c41-35189796f7dd/attributes/attr-9aaf949e-d4d4-4749-b561-9a762757a1d1
var demoUpdateRelationshipAtttribute = async function() {
try {
//After initial authentication..
//Refer Section on Authentication
//Fetch EKG Document. Refer Documentation on EKG Document
/*********************
Parameters in Order: Label, Description, Fields, XsdDataType, CardinalityType, Cardinality, Iri, Id, RelationshipId
**********************/
await ekgDoc.updateRelationshipAttribute("UpdateAttribLbl", "", null, "decimal", "min", "20", null, "attr-9aaf949e-d4d4-4749-b561-9a762757a1d1", "link-2e2069ba-3523-4731-8c41-35189796f7dd");
} catch(err) {
console.log(err);
}
};
The above command returns JSON structured like this: (Java and Javascript map JSON to their respective data structures)
{
"id": "attr-9aaf949e-d4d4-4749-b561-9a762757a1d1",
"type": "attribute"
"label": "UpdateAttribLbl",
"description": "Sample Description",
"iri": "http://www.app.gra.fo/schema/untitled-ekg#attr-9aaf949e-d4d4-4749-b561-9a762757a1d1_MyAttrib_01",
"xsdDataType": {"id": 0, "title": "decimal" },
"cardinalityType": {"id": 0, "title": "min"},
"cardinality": "20"
}
This endpoint updates attribute with the specified attribute id within the specified relationship and ekg doc.
HTTP Request
PUT https://app.gra.fo/api/v1/documents/<docId>/relationships/<relId>/attributes/<attribId>
URL Parameters
Parameter | Description |
---|---|
docId | The Id of the ekg doc of which the relationship and attributes are retrieved |
relId | The Id of the relationship |
attribId | Id of attribute to update |
JSON Body
Name | Description |
---|---|
label | Relationship Attribute Label |
description | Relationship description |
iri | Relationship Attribute IRI. A value is auto assigned by Grafo Server if not specified in create request |
fields | array of Field objects |
xsdDataType | May be null, boolean, string, float, double, decimal, long, short, integer, int, dateTime, anyURI |
cardinalityType | May be null, exact, min, max |
cardinality | cardinality value |
Returns
This returns a JSON object for the updated attribute.
Delete Relationship Attribute
try ( GrafoClient gClient = new GrafoClient(); ) {
UUID docId = UUID.fromString("536a35f8-cb7b-41c6-a834-c4c03516657a");
String relationshipId = "link-2e2069ba-3523-4731-8c41-35189796f7dd";
String attribId = "attr-9aaf949e-d4d4-4749-b561-9a762757a1d1";
GenericGrafoResponse response = gClient.deleteRelationshipAttribute(docId, relationshipId, attribId);
}
curl -X DELETE
https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/relationships/link-2e2069ba-3523-4731-8c41-35189796f7dd/attributes/attr-9aaf949e-d4d4-4749-b561-9a762757a1d1
var demoDeleteRelationshipAtttribute = async function() {
try {
//After initial authentication..
//Refer Section on Authentication
//Fetch EKG Document. Refer Documentation on EKG Document
/*********************
Parameters in Order: RealtionshipId, AttributeId
**********************/
await ekgDoc.deleteRelationshipAttribute("link-2e2069ba-3523-4731-8c41-35189796f7dd", "attr-9aaf949e-d4d4-4749-b561-9a762757a1d1");
} catch(err) {
console.log(err);
}
};
The above command returns JSON structured like this: (Java and Javascript map JSON to their respective data structures)
{
"success": true
}
This endpoint deletes the relationship attribute for the specified id present within the selected relationship in the ekg doc.
HTTP Request
DELETE https://app.gra.fo/api/v1/documents/<docId>/relationships/<relId>/attributes/<attribId>
URL Parameters
Parameter | Description |
---|---|
docId | The ID of the ekg doc of which the relationships are retrieved |
relId | The ID of the relationship of which attribute to delete |
attribId | The ID of the attribute to delete |
Returns
This returns whether the deletion succeeded. If not, then an error will be returned as per error specification at the top of this document.
Specializations
Specialization is a type of relationship that mainly depicts parent-child relationship between two concepts.
Each specialization is identified by an id beginning with link-
All specialization endpoints are fine grained network operations. You can achieve all of these operations at one go using the coarse grained operations on the EkgDocument.
List Specializations
This endpoint retrieves all the specializations within an EKG document. As the specializations are part of a graph, only the natural order of specializations is followed. This generally happens to be the order of addition. No other sort criteria can be applied. No filtering or pagination is supported.
try (GrafoClient gClient = new GrafoClient();) {
List<Relationship> relList = gClient.getAllSpecializations(UUID.fromString("536a35f8-cb7b-41c6-a834-c4c03516657a"));
relList.forEach( rel -> System.out.println(rel));
}
# Get all specializations for the doc with id 536a35f8-cb7b-41c6-a834-c4c03516657a
curl https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/specializations
var demoListAllSpecializations = async function() {
try {
//After initial authentication..
//Refer Section on Authentication
//Fetch EKG Document. Refer Documentation on EKG Document
var specializationList = await ekgDoc.getSpecializations();
console.log(specializationList);
} catch(err) {
console.log(err);
}
};
The above command returns JSON structured like this: (Java and Javascript map JSON to their respective data structures)
[
{
"id": "link-924c5fe3-1e01-4d0a-bcb0-36148887c845",
"type": "link",
"fromConceptId": "node-19d8dee3-e5ae-4337-86af-cc4bb415ea91",
"toConceptId": "node-bf7092ca-ca03-4635-ae92-d154d3f11879",
"label": "",
"description": "",
"iri": "http://www.app.gra.fo/schema/untitled-ekg/label_link-924c5fe3-1e01-4d0a-bcb0-36148887c845",
"specialization": true
},
......
]
HTTP Request
GET https://app.gra.fo/api/v1/documents/<docId>/specializations
URL Parameters
Parameter | Description |
---|---|
docId | The ID of the ekg doc of which the specializations are retrieved |
Returns
This returns an array of all specializations for the specified doc id. Each entry in the array is a separate specialization object.
Get Specialization
try ( GrafoClient gClient = new GrafoClient(); ) {
UUID docId = UUID.fromString("536a35f8-cb7b-41c6-a834-c4c03516657a");
Relationship rel = gClient.getSpecialization(docId, "link-924c5fe3-1e01-4d0a-bcb0-36148887c845");
System.out.println(rel)
}
curl "https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/specializations/link-924c5fe3-1e01-4d0a-bcb0-36148887c845"
var demoGetSpecialization = async function() {
try {
//After initial authentication..
//Refer Section on Authentication
//Fetch EKG Document. Refer Documentation on EKG Document
/*********************
Parameters: RelationshipId
**********************/
var fetchedSpcl = ekgDoc.getSpecialization("link-924c5fe3-1e01-4d0a-bcb0-36148887c845");
console.log(fetchedSpcl.toObject());
} catch(err) {
console.log(err);
}
};
The above command returns JSON structured like this: (Java and Javascript map JSON to their respective data structures)
{
"id": "link-924c5fe3-1e01-4d0a-bcb0-36148887c845",
"type": "link",
"fromConceptId": "node-19d8dee3-e5ae-4337-86af-cc4bb415ea91",
"toConceptId": "node-bf7092ca-ca03-4635-ae92-d154d3f11879",
"label": "",
"description": "",
"iri": "http://www.app.gra.fo/schema/untitled-ekg/label_link-924c5fe3-1e01-4d0a-bcb0-36148887c845",
"specialization": true
}
This endpoint retrieves a specific specialization by id within an ekg document with specified docId.
HTTP Request
GET https://app.gra.fo/api/v1/documents/<docId>/specializations/<id>
URL Parameters
Parameter | Description |
---|---|
docId | The ID of the ekg doc of which the specializations are retrieved |
id | The ID of the specialization to retrieve |
Returns
This returns a JSON object for the specialization.
Create Specialization
try (GrafoClient gClient = new GrafoClient();) {
//concept1 and concept2 are start and end nodes of a specialization
Relationship specialization = new Relationship(concept1, concept2, "", RelationshipType.SPECIALIZATION);
Relationship newspecialization = gClient.createSpecialization(docId, specialization);
System.out.println(specialization);
}
curl -X POST
-d '{"fromConceptId":"node-19d8dee3-e5ae-4337-86af-cc4bb415ea91",
"toConceptId":"node-74232afd-fd3b-4006-99d0-5487c23d83d5", "specialization" : "true"}'
https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/specializations
var demoCreateRelationship = async function() {
try {
//After initial authentication..
//Refer Section on Authentication
//Create or Fetch EKG Document. Refer Documentation on EKG Document
/*********************
Parameters in Order:
Label(null), FromConceptId, ToConceptId, Specialization(true), Description, Color, Fields, CardinalityType, Cardinality, PositionX, PositionY, Iri
**********************/
var relCreated = await ekgDoc.addRelationship("", "node-19d8dee3-e5ae-4337-86af-cc4bb415ea91", "node-74232afd-fd3b-4006-99d0-5487c23d83d5", true);
console.log(relCreated);
} catch(err) {
console.log(err);
}
};
The above command returns JSON structured like this: (Java and Javascript map JSON to their respective data structures)
{
"id": "link-190ae2a0-d7de-466b-b552-8da441ecb2e9",
"type": "link",
"fromConceptId": "node-19d8dee3-e5ae-4337-86af-cc4bb415ea91",
"toConceptId": "node-74232afd-fd3b-4006-99d0-5487c23d83d5",
"label": "",
"description": "",
"iri": "http://www.app.gra.fo/schema/untitled-ekg/link-190ae2a0-d7de-466b-b552-8da441ecb2e9_label",
"positionX": null,
"positionY": null,
"specialization":true
}
This endpoint creates a specialization within the specified ekg document.
HTTP Request
POST https://app.gra.fo/api/v1/documents/<docId>/specializations
URL Parameters
Parameter | Description |
---|---|
docId | The ID of the ekg doc of which the specializations are retrieved |
JSON Body
Name | Mandatory | Default | Description |
---|---|---|---|
fromConceptId | true | Id of the start node | |
toConceptId | true | Id of the end node | |
iri | false | Specialization IRI. A value is auto assigned by Grafo Server if not specified in create request | |
positionX | false | X coordinate in UI | |
positionY | false | Y coordinate in UI | |
specialization | true | false | For specialization, this value should be true |
Returns
This returns a JSON object for the created specialization. The returned specialization contains id and iri assigned.
Delete Specialization
try ( GrafoClient gClient = new GrafoClient(); ) {
UUID docId = UUID.fromString("536a35f8-cb7b-41c6-a834-c4c03516657a");
String splznId = "link-245ae2a0-d7de-466b-b552-8da441ecb2e9";
GenericGrafoResponse response = gClient.deleteRelationship(docId, splznId));
}
curl -X DELETE
https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/specializations/link-245ae2a0-d7de-466b-b552-8da441ecb2e9
var demoDeleteSpecialization = async function() {
try {
//After initial authentication..
//Refer Section on Authentication
//Fetch EKG Document. Refer Documentation on EKG Document
/*********************
Parameters: SpecializationId
**********************/
await ekgDoc.deleteRelationship("link-245ae2a0-d7de-466b-b552-8da441ecb2e9");
} catch(err) {
console.log(err);
}
};
The above command returns JSON structured like this: (Java and Javascript map JSON to their respective data structures)
{
"success": true
}
This endpoint deletes specialization for the specified id.
HTTP Request
DELETE https://app.gra.fo/api/v1/documents/<docId>/specializations/<id>
URL Parameters
Parameter | Description |
---|---|
docId | The ID of the ekg doc of which the specializations are retrieved |
id | The ID of the specialization to delete |
Returns
This returns whether the deletion succeeded. If not, then an error will be returned as per error specification at the top of this document.
Concept Fields
Field is a name-value property for Concept.
Each field has a unique ID.
List Concept Fields
This endpoint retrieves all the fields for a concept within an EKG document. As the fields are part of a graph, only the natural order of fields is followed. This generally happens to be the order of addition. No other sort criteria can be applied. No filtering or pagination is supported.
try ( GrafoClient gClient = new GrafoClient(); ) {
UUID docId = UUID.fromString("536a35f8-cb7b-41c6-a834-c4c03516657a");
String conceptId = "node-9d7bf45e-ed14-48b9-9820-65c24608839e";
List<Field> fieldList = gClient.getConceptFields(docId, conceptId)
fieldList.forEach( field -> System.out.println(field));
}
# Get all fields for concept with id node-9d7bf45e-ed14-48b9-9820-65c24608839e for the doc with id 536a35f8-cb7b-41c6-a834-c4c03516657a
curl https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/concepts/node-9d7bf45e-ed14-48b9-9820-65c24608839e/fields
var demoListAllConceptFields = async function() {
try {
//After initial authentication..
//Refer Section on Authentication
//Fetch EKG Document. Refer Documentation on EKG Document
/*********************
Parameters: ConceptId
**********************/
var fieldList = ekgDoc.getConceptFields("node-9d7bf45e-ed14-48b9-9820-65c24608839e");
console.log(fieldList);
} catch(err) {
console.log(err);
}
};
The above command returns JSON structured like this: (Java and Javascript map JSON to their respective data structures)
[
{
"id": "40b8601d-6f41-4a2f-ad0a-bce7a714a6ff",
"title": "Test1",
"text": "Value1"
},
{
"id": "29a44a6b-e870-486b-b1af-8dd4ab81bd1e",
"title": "Test2",
"text": "Value2"
},
.....
]
HTTP Request
GET https://app.gra.fo/api/v1/documents/<docId>/concepts/<conceptId>/fields
URL Parameters
Parameter | Description |
---|---|
docId | The ID of the ekg doc of which the concept is retrieved |
conceptId | The ID of the concept of which the fields are retrieved |
Returns
This returns an array of all fields in the concept for specified id within an EKG document. Each entry in the array is a separate field object.
Field Properties | Description |
---|---|
id | Field Identifier (UUID) |
title | Field Title |
text | Field Value |
Get Concept Field
try ( GrafoClient gClient = new GrafoClient(); ) {
UUID docId = UUID.fromString("536a35f8-cb7b-41c6-a834-c4c03516657a");
String conceptId = "node-9d7bf45e-ed14-48b9-9820-65c24608839e";
String fieldId = "40b8601d-6f41-4a2f-ad0a-bce7a714a6ff";
Field fieldFetched = gClient.getConceptField(docId, conceptId, fieldId);
System.out.println(fieldFetched)
}
curl "https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/concepts/node-9d7bf45e-ed14-48b9-9820-65c24608839e/fields/40b8601d-6f41-4a2f-ad0a-bce7a714a6ff"
var demoGetConceptField = async function() {
try {
//After initial authentication..
//Refer Section on Authentication
//Fetch EKG Document. Refer Documentation on EKG Document
/*********************
Parameters: ConceptId, FieldId
**********************/
var fetchedField = ekgDoc.getConceptFieldById("node-9d7bf45e-ed14-48b9-9820-65c24608839e", "40b8601d-6f41-4a2f-ad0a-bce7a714a6ff");
console.log(fetchedField);
} catch(err) {
console.log(err);
}
};
The above command returns JSON structured like this: (Java and Javascript map JSON to their respective data structures)
{
"id": "40b8601d-6f41-4a2f-ad0a-bce7a714a6ff",
"title": "Test1",
"text": "Value1"
}
This endpoint retrieves a specific concept field by id within an EKG document with specified docId and for a specific conceptId.
HTTP Request
GET https://app.gra.fo/api/v1/documents/<docId>/concepts/<conceptId>/fields/<fieldId>
URL Parameters
Parameter | Description |
---|---|
docId | The ID of the ekg doc of which the concept fields are retrieved |
conceptId | ID of the concept |
fieldId | The ID of the field to retrieve |
Returns
This returns a JSON object for the field.
Create Concept Field
try (GrafoClient gClient = new GrafoClient();)
{
UUID docId = UUID.fromString("536a35f8-cb7b-41c6-a834-c4c03516657a");
String conceptId = "node-9d7bf45e-ed14-48b9-9820-65c24608839e";
Field field = new Field("field1");
field.setText("text1");
Concept concept = gClient.addConceptField(docId, conceptId, field);
System.out.println(concept);
}
curl -X POST
-d '{"title": "field1", "text": "text1"}'
https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/concepts/node-9d7bf45e-ed14-48b9-9820-65c24608839e/fields
var demoCreateConceptField = async function() {
try {
//After initial authentication..
//Refer Section on Authentication
//Fetch EKG Document. Refer Documentation on EKG Document
/*********************
Parameters in Order: Title, Text, ConceptId
**********************/
await ekgDoc.addConceptField("field1", "text1", conceptId);
} catch(err) {
console.log(err);
}
};
The above command returns JSON structured like this: (Java and Javascript map JSON to their respective data structures)
{
"id": "19c0101d-6f41-4a2f-ad0a-bce7a714a6ff",
"title": "field1",
"text": "text1"
}
This endpoint creates a field within the specified ekg document and concept.
HTTP Request
POST https://app.gra.fo/api/v1/documents/<docId>/concepts/<conceptId>/fields
URL Parameters
Parameter | Description |
---|---|
docId | The ID of the ekg doc of which the concepts are retrieved |
conceptId | The concept id for which the field is created |
JSON Body
Name | Mandatory | Default | Description |
---|---|---|---|
title | true | -- | Concept Field Title |
text | false | -- | Concept Field Value |
Returns
This returns a JSON object for the created concept field. The returned concept field contains id assigned.
Update Concept Field
try (GrafoClient gClient = new GrafoClient();)
{
UUID docId = UUID.fromString("536a35f8-cb7b-41c6-a834-c4c03516657a");
String conceptId = "node-9d7bf45e-ed14-48b9-9820-65c24608839e";
String fieldId = "40b8601d-6f41-4a2f-ad0a-bce7a714a6ff";
Field fieldToUpdate = gClient.getConceptField(docId, conceptId, fieldId);
fieldToUpdate.setTitle("updatedField2");
Concept updatedConcept = gClient.updateConceptField(docId, conceptId, fieldToUpdate);
System.out.println(updatedConcept);
}
curl -X POST
-d '{"id": "40b8601d-6f41-4a2f-ad0a-bce7a714a6ff", "text": "updatedField2"}'
https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/concepts/node-8a21c773-380f-4db9-92a6-f4984efd37ad/fields/40b8601d-6f41-4a2f-ad0a-bce7a714a6ff
var demoUpdateConceptField = async function() {
try {
//After initial authentication..
//Refer Section on Authentication
//Fetch EKG Document. Refer Documentation on EKG Document
/*********************
Parameters in Order: Title, Text, Id, ConceptId
**********************/
await ekgDoc.updateConceptField(null, "updatedField2", "40b8601d-6f41-4a2f-ad0a-bce7a714a6ff", "node-8a21c773-380f-4db9-92a6-f4984efd37ad");
} catch(err) {
console.log(err);
}
};
The above command returns JSON structured like this: (Java and Javascript map JSON to their respective data structures)
{
"id": "40b8601d-6f41-4a2f-ad0a-bce7a714a6ff",
"title": "Test1",
"text": "updatedField2"
}
This endpoint updates field with the specified field id within the specified concept and ekg doc.
HTTP Request
PUT https://app.gra.fo/api/v1/documents/<docId>/concepts/<conceptId>/fields/<fieldId>
URL Parameters
Parameter | Description |
---|---|
docId | The ID of the ekg doc of which the concept and fields are retrieved |
conceptId | The ID of the concept |
fieldId | Id of field to update |
JSON Body
Name | Mandatory | Default | Description |
---|---|---|---|
title | false | -- | Concept Field Title |
text | false | -- | Concept Field Value |
Returns
This returns a JSON object for the updated field.
Delete Concept Field
try ( GrafoClient gClient = new GrafoClient(); ) {
UUID docId = UUID.fromString("536a35f8-cb7b-41c6-a834-c4c03516657a");
String conceptId = "node-8a21c773-380f-4db9-92a6-f4984efd37ad";
String fieldId = "29a44a6b-e870-486b-b1af-8dd4ab81bd1e";
GenerGenericGrafoResponse response = gClient.deleteConceptField(docId, conceptId, fieldId);
}
curl -X DELETE
https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/concepts/node-8a21c773-380f-4db9-92a6-f4984efd37ad/fields/29a44a6b-e870-486b-b1af-8dd4ab81bd1e
var demoDeleteConceptField = async function() {
try {
//After initial authentication..
//Refer Section on Authentication
//Fetch EKG Document. Refer Documentation on EKG Document
/*********************
Parameters in Order: ConceptId, FieldId
**********************/
await ekgDoc.deleteConceptField("node-8a21c773-380f-4db9-92a6-f4984efd37ad", "29a44a6b-e870-486b-b1af-8dd4ab81bd1e");
} catch(err) {
console.log(err);
}
};
The above command returns JSON structured like this: (Java and Javascript map JSON to their respective data structures)
{
"success": true
}
This endpoint deletes the concept field for the specified id present within the selected concept in the ekg doc.
HTTP Request
DELETE https://app.gra.fo/api/v1/documents/<docId>/concepts/<conceptId>/fields/<fieldId>
URL Parameters
Parameter | Description |
---|---|
docId | The ID of the ekg doc of which the concepts are retrieved |
conceptId | The ID of the concept of which field to delete |
fieldId | The ID of the field to delete |
Returns
This returns whether the deletion succeeded. If not, then an error will be returned as per error specification at the top of this document.
Concept Attribute Fields
Field is a name-value property for Concept Attribute.
Each field has a unique ID.
List Concept Attribute Fields
This endpoint retrieves all the fields for a concept attribute within an EKG document. As the fields are part of a graph, only the natural order of fields is followed. This generally happens to be the order of addition. No other sort criteria can be applied. No filtering or pagination is supported.
try ( GrafoClient gClient = new GrafoClient(); ) {
UUID docId = UUID.fromString("536a35f8-cb7b-41c6-a834-c4c03516657a");
String conceptId = "node-9d7bf45e-ed14-48b9-9820-65c24608839e";
String attrId = "attr-fc2193b4-01fe-4cfa-875e-3208027a3da4";
List<Field> fieldList = gClient.getConceptAttributeFields(docId, conceptId, attrId)
fieldList.forEach( field -> System.out.println(field));
}
# Get all fields for concept with id node-9d7bf45e-ed14-48b9-9820-65c24608839e for the doc with id 536a35f8-cb7b-41c6-a834-c4c03516657a
curl https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/concepts/node-9d7bf45e-ed14-48b9-9820-65c24608839e/attributes/attr-fc2193b4-01fe-4cfa-875e-3208027a3da4/fields
var demoListAllConceptAttributeFields = async function() {
try {
//After initial authentication..
//Refer Section on Authentication
//Fetch EKG Document. Refer Documentation on EKG Document
/*********************
Parameters: ConceptId, AttributeId
**********************/
var fieldList = ekgDoc.getConceptAttributeFields("node-9d7bf45e-ed14-48b9-9820-65c24608839e", "attr-fc2193b4-01fe-4cfa-875e-3208027a3da4");
console.log(fieldList);
} catch(err) {
console.log(err);
}
};
The above command returns JSON structured like this: (Java and Javascript map JSON to their respective data structures)
[
{
"id": "40b8601d-6f41-4a2f-ad0a-bce7a714a6ff",
"title": "Test1",
"text": "Value1"
},
{
"id": "29a44a6b-e870-486b-b1af-8dd4ab81bd1e",
"title": "Test2",
"text": "Value2"
},
.....
]
HTTP Request
GET https://app.gra.fo/api/v1/documents/<docId>/concepts/<conceptId>/attributes/<attrId>/fields
URL Parameters
Parameter | Description |
---|---|
docId | The ID of the ekg doc of which the concept is retrieved |
conceptId | The ID of the concept of which the attributes are retrieved |
attrId | The ID of the attribute |
Returns
This returns an array of all fields in the concept attribute for specified id within an EKG document. Each entry in the array is a separate field object.
Field Properties | Description |
---|---|
id | Field Identifier (UUID) |
title | Field Title |
text | Field Value |
Get Concept Attribute Field
try ( GrafoClient gClient = new GrafoClient(); ) {
UUID docId = UUID.fromString("536a35f8-cb7b-41c6-a834-c4c03516657a");
String conceptId = "node-9d7bf45e-ed14-48b9-9820-65c24608839e";
String attrId = "attr-fc2193b4-01fe-4cfa-875e-3208027a3da4";
String fieldId = "40b8601d-6f41-4a2f-ad0a-bce7a714a6ff";
Field fieldFetched = gClient.getConceptAttributeField(docId, conceptId, attrId, fieldId);
System.out.println(fieldFetched)
}
curl "https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/concepts/node-9d7bf45e-ed14-48b9-9820-65c24608839e/attributes/attr-fc2193b4-01fe-4cfa-875e-3208027a3da4/fields/40b8601d-6f41-4a2f-ad0a-bce7a714a6ff"
var demoGetConceptAttributeField = async function() {
try {
//After initial authentication..
//Refer Section on Authentication
//Fetch EKG Document. Refer Documentation on EKG Document
/*********************
Parameters: ConceptId, AttrId, FieldId
**********************/
var fetchedField = ekgDoc.getConceptAttributeField("node-9d7bf45e-ed14-48b9-9820-65c24608839e", "attr-fc2193b4-01fe-4cfa-875e-3208027a3da4","40b8601d-6f41-4a2f-ad0a-bce7a714a6ff");
console.log(fetchedField);
} catch(err) {
console.log(err);
}
};
The above command returns JSON structured like this: (Java and Javascript map JSON to their respective data structures)
{
"id": "40b8601d-6f41-4a2f-ad0a-bce7a714a6ff",
"title": "Test1",
"text": "Value1"
}
This endpoint retrieves a specific concept attribute field by id within an EKG document with specified docId, conceptId and attribute Id.
HTTP Request
GET https://app.gra.fo/api/v1/documents/<docId>/concepts/<conceptId>/attributes/<attrId>/fields/<fieldId>
URL Parameters
Parameter | Description |
---|---|
docId | The ID of the ekg doc of which the concept is retrieved |
conceptId | ID of the concept |
attrId | ID of the attribute |
fieldId | The ID of the field to retrieve |
Returns
This returns a JSON object for the field.
Create Concept Attribute Field
try (GrafoClient gClient = new GrafoClient();)
{
UUID docId = UUID.fromString("536a35f8-cb7b-41c6-a834-c4c03516657a");
String conceptId = "node-9d7bf45e-ed14-48b9-9820-65c24608839e";
String attrId = "attr-fc2193b4-01fe-4cfa-875e-3208027a3da4";
Field field = new Field("field1");
field.setText("text1");
gClient.addConceptAttributeField(docId, conceptId, attrId, field);
}
curl -X POST
-d '{"title": "field1", "text": "text1"}'
https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/concepts/node-9d7bf45e-ed14-48b9-9820-65c24608839e/attributes/attr-fc2193b4-01fe-4cfa-875e-3208027a3da4/fields
var demoCreateConceptAttributeField = async function() {
try {
//After initial authentication..
//Refer Section on Authentication
//Fetch EKG Document. Refer Documentation on EKG Document
/*********************
Parameters in Order: Title, Text, AttrId, ConceptId
**********************/
await ekgDoc.addConceptAttributeField("field1", "text1", "attr-fc2193b4-01fe-4cfa-875e-3208027a3da4", "node-9d7bf45e-ed14-48b9-9820-65c24608839e");
} catch(err) {
console.log(err);
}
};
The above command returns JSON structured like this: (Java and Javascript map JSON to their respective data structures)
{
"id": "19c0101d-6f41-4a2f-ad0a-bce7a714a6ff",
"title": "field1",
"text": "text1"
}
This endpoint creates a field within the specified ekg document and concept.
HTTP Request
POST https://app.gra.fo/api/v1/documents/<docId>/concepts/<conceptId>/attributes/<attrId>/fields
URL Parameters
Parameter | Description |
---|---|
docId | The ID of the ekg doc of which the concepts is retrieved |
conceptId | The concept id of which the attribute is retrieved |
attrId | The attribute id for which the field is created |
JSON Body
Name | Mandatory | Default | Description |
---|---|---|---|
title | true | -- | Concept Attribute Field Title |
text | false | -- | Concept Attribute Field Value |
Returns
This returns a JSON object for the created concept attribute field. The returned concept attribute field contains id assigned.
Update Concept Attribute Field
try (GrafoClient gClient = new GrafoClient();)
{
UUID docId = UUID.fromString("536a35f8-cb7b-41c6-a834-c4c03516657a");
String conceptId = "node-9d7bf45e-ed14-48b9-9820-65c24608839e";
String attrId = "attr-fc2193b4-01fe-4cfa-875e-3208027a3da4";
String fieldId = "40b8601d-6f41-4a2f-ad0a-bce7a714a6ff";
Field fieldToUpdate = gClient.getConceptAttributeField(docId, conceptId, attrId, fieldId);
fieldToUpdate.setTitle("updatedField2");
Concept updatedConcept = gClient.updateConceptAttributeField(docId, conceptId, attrId, fieldToUpdate);
System.out.println(updatedConcept);
}
curl -X POST
-d '{"id": "40b8601d-6f41-4a2f-ad0a-bce7a714a6ff", "text": "updatedField2"}'
https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/concepts/node-8a21c773-380f-4db9-92a6-f4984efd37ad/attributes/attr-fc2193b4-01fe-4cfa-875e-3208027a3da4/fields/40b8601d-6f41-4a2f-ad0a-bce7a714a6ff
var demoUpdateConceptField = async function() {
try {
//After initial authentication..
//Refer Section on Authentication
//Fetch EKG Document. Refer Documentation on EKG Document
/*********************
Parameters in Order: Title, Text, Id, AttrId, ConceptId
**********************/
await ekgDoc.updateConceptAttributeField(null, "updatedField2", "40b8601d-6f41-4a2f-ad0a-bce7a714a6ff", "attr-fc2193b4-01fe-4cfa-875e-3208027a3da4","node-8a21c773-380f-4db9-92a6-f4984efd37ad");
} catch(err) {
console.log(err);
}
};
The above command returns JSON structured like this: (Java and Javascript map JSON to their respective data structures)
{
"id": "40b8601d-6f41-4a2f-ad0a-bce7a714a6ff",
"title": "Test1",
"text": "updatedField2"
}
This endpoint updates field with the specified field id within the specified concept and ekg doc.
HTTP Request
PUT https://app.gra.fo/api/v1/documents/<docId>/concepts/<conceptId>/attributes/<attrId>/fields/<fieldId>
URL Parameters
Parameter | Description |
---|---|
docId | The ID of the ekg doc of which the concept is retrieved |
conceptId | The ID of the concept of which the attribute is retrieved |
attrId | The ID of the attribute of which the field is retrieved |
fieldId | Id of field to update |
JSON Body
Name | Mandatory | Default | Description |
---|---|---|---|
title | false | -- | Concept Attribute Field Title |
text | false | -- | Concept Attribute Field Value |
Returns
This returns a JSON object for the updated field.
Delete Concept Attribute Field
try ( GrafoClient gClient = new GrafoClient(); ) {
UUID docId = UUID.fromString("536a35f8-cb7b-41c6-a834-c4c03516657a");
String conceptId = "node-8a21c773-380f-4db9-92a6-f4984efd37ad";
String attrId = "attr-fc2193b4-01fe-4cfa-875e-3208027a3da4";
String fieldId = "29a44a6b-e870-486b-b1af-8dd4ab81bd1e";
GenerGenericGrafoResponse response = gClient.deleteConceptAttributeField(docId, conceptId, attrId, fieldId);
}
curl -X DELETE
https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/concepts/node-8a21c773-380f-4db9-92a6-f4984efd37ad/attributes/attr-fc2193b4-01fe-4cfa-875e-3208027a3da4/fields/29a44a6b-e870-486b-b1af-8dd4ab81bd1e
var demoDeleteConceptAttributeField = async function() {
try {
//After initial authentication..
//Refer Section on Authentication
//Fetch EKG Document. Refer Documentation on EKG Document
/*********************
Parameters in Order: ConceptId, AttrId, FieldId
**********************/
await ekgDoc.deleteConceptAttributeField("node-8a21c773-380f-4db9-92a6-f4984efd37ad", "attr-fc2193b4-01fe-4cfa-875e-3208027a3da4","29a44a6b-e870-486b-b1af-8dd4ab81bd1e");
} catch(err) {
console.log(err);
}
};
The above command returns JSON structured like this: (Java and Javascript map JSON to their respective data structures)
{
"success": true
}
This endpoint deletes the concept attribute field for the specified id present within the selected concept in the ekg doc.
HTTP Request
DELETE https://app.gra.fo/api/v1/documents/<docId>/concepts/<conceptId>/attributes/<attrId>/fields/<fieldId>
URL Parameters
Parameter | Description |
---|---|
docId | The ID of the ekg doc of which the concepts are retrieved |
conceptId | The ID of the concept of which attribute is retrieved |
attrId | The ID of the attribute of which field is to be deleted |
fieldId | The ID of the field to delete |
Returns
This returns whether the deletion succeeded. If not, then an error will be returned as per error specification at the top of this document.
Relationship Fields
Field is a name-value property for Relationship.
Each field has a unique ID.
List Relationship Fields
This endpoint retrieves all the fields for a relationship within an EKG document. As the fields are part of a graph, only the natural order of fields is followed. This generally happens to be the order of addition. No other sort criteria can be applied. No filtering or pagination is supported.
try ( GrafoClient gClient = new GrafoClient(); ) {
UUID docId = UUID.fromString("536a35f8-cb7b-41c6-a834-c4c03516657a");
String relationshipId = "link-2e2069ba-3523-4731-8c41-35189796f7dd";
List<Field> fieldList = gClient.getRelationshipFields(docId, relationshipId)
fieldList.forEach( field -> System.out.println(field));
}
# Get all fields for relationship with id link-2e2069ba-3523-4731-8c41-35189796f7dd for the doc with id 536a35f8-cb7b-41c6-a834-c4c03516657a
curl https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/relationships/link-2e2069ba-3523-4731-8c41-35189796f7dd/fields
var demoListAllRelationshipFields = async function() {
try {
//After initial authentication..
//Refer Section on Authentication
//Fetch EKG Document. Refer Documentation on EKG Document
/*********************
Parameters: RelationshipId
**********************/
var fieldList = ekgDoc.getRelationshipFields("link-2e2069ba-3523-4731-8c41-35189796f7dd");
console.log(fieldList);
} catch(err) {
console.log(err);
}
};
The above command returns JSON structured like this: (Java and Javascript map JSON to their respective data structures)
[
{
"id": "40b8601d-6f41-4a2f-ad0a-bce7a714a6ff",
"title": "Test1",
"text": "Value1"
},
{
"id": "29a44a6b-e870-486b-b1af-8dd4ab81bd1e",
"title": "Test2",
"text": "Value2"
},
.....
]
HTTP Request
GET https://app.gra.fo/api/v1/documents/<docId>/relationships/<relationshipId>/fields
URL Parameters
Parameter | Description |
---|---|
docId | The ID of the ekg doc of which the relationship is retrieved |
relationshipId | The ID of the relationship of which the fields are retrieved |
Returns
This returns an array of all fields in the relationship for specified id within an EKG document. Each entry in the array is a separate field object.
Field Properties | Description |
---|---|
id | Field Identifier (UUID) |
title | Field Title |
text | Field Value |
Get Relationship Field
try ( GrafoClient gClient = new GrafoClient(); ) {
UUID docId = UUID.fromString("536a35f8-cb7b-41c6-a834-c4c03516657a");
String relationshipId = "link-2e2069ba-3523-4731-8c41-35189796f7dd";
String fieldId = "40b8601d-6f41-4a2f-ad0a-bce7a714a6ff";
Field fieldFetched = gClient.getRelationshipField(docId, relationshipId, fieldId);
System.out.println(fieldFetched)
}
curl "https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/relationships/node-9d7bf45e-ed14-48b9-9820-65c24608839e/fields/40b8601d-6f41-4a2f-ad0a-bce7a714a6ff"
var demoGetRelationshipField = async function() {
try {
//After initial authentication..
//Refer Section on Authentication
//Fetch EKG Document. Refer Documentation on EKG Document
/*********************
Parameters: RelationshipId, FieldId
**********************/
var fetchedField = ekgDoc.getRelationshipFieldById("link-2e2069ba-3523-4731-8c41-35189796f7dd", "40b8601d-6f41-4a2f-ad0a-bce7a714a6ff");
console.log(fetchedField);
} catch(err) {
console.log(err);
}
};
The above command returns JSON structured like this: (Java and Javascript map JSON to their respective data structures)
{
"id": "40b8601d-6f41-4a2f-ad0a-bce7a714a6ff",
"title": "Test1",
"text": "Value1"
}
This endpoint retrieves a specific relationship field by id within an EKG document with specified docId and for a specific relationshipId.
HTTP Request
GET https://app.gra.fo/api/v1/documents/<docId>/relationships/<relationshipId>/fields/<fieldId>
URL Parameters
Parameter | Description |
---|---|
docId | The ID of the ekg doc of which the relationship fields are retrieved |
relationshipId | ID of the relationship |
fieldId | The ID of the field to retrieve |
Returns
This returns a JSON object for the field.
Create Relationship Field
try (GrafoClient gClient = new GrafoClient();)
{
UUID docId = UUID.fromString("536a35f8-cb7b-41c6-a834-c4c03516657a");
String relationshipId = "link-2e2069ba-3523-4731-8c41-35189796f7dd";
Field field = new Field("field1");
field.setText("text1");
Relationship relationship = gClient.addRelationshipField(docId, relationshipId, field);
System.out.println(relationship);
}
curl -X POST
-d '{"title": "field1", "text": "text1"}'
https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/relationships/link-2e2069ba-3523-4731-8c41-35189796f7dd/fields
var demoCreateRelationshipField = async function() {
try {
//After initial authentication..
//Refer Section on Authentication
//Fetch EKG Document. Refer Documentation on EKG Document
/*********************
Parameters in Order: Title, Text, RelationshipId
**********************/
await ekgDoc.addRelationshipField("field1", "text1", relationshipId);
} catch(err) {
console.log(err);
}
};
The above command returns JSON structured like this: (Java and Javascript map JSON to their respective data structures)
{
"id": "19c0101d-6f41-4a2f-ad0a-bce7a714a6ff",
"title": "field1",
"text": "text1"
}
This endpoint creates a field within the specified ekg document and relationship.
HTTP Request
POST https://app.gra.fo/api/v1/documents/<docId>/relationships/<relationshipId>/fields
URL Parameters
Parameter | Description |
---|---|
docId | The ID of the ekg doc of which the relationships are retrieved |
relationshipId | The relationship id for which the field is created |
JSON Body
Name | Mandatory | Default | Description |
---|---|---|---|
title | true | -- | Relationship Field Title |
text | false | -- | Relationship Field Value |
Returns
This returns a JSON object for the created relationship field. The returned relationship field contains id assigned.
Update Relationship Field
try (GrafoClient gClient = new GrafoClient();)
{
UUID docId = UUID.fromString("536a35f8-cb7b-41c6-a834-c4c03516657a");
String relationshipId = "link-2e2069ba-3523-4731-8c41-35189796f7dd";
String fieldId = "40b8601d-6f41-4a2f-ad0a-bce7a714a6ff";
Field fieldToUpdate = gClient.getRelationshipField(docId, relationshipId, fieldId);
fieldToUpdate.setTitle("updatedField2");
Relationship updatedRelationship = gClient.updateRelationshipField(docId, relationshipId, fieldToUpdate);
System.out.println(updatedRelationship);
}
curl -X POST
-d '{"id": "40b8601d-6f41-4a2f-ad0a-bce7a714a6ff", "text": "updatedField2"}'
https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/relationships/link-2e2069ba-3523-4731-8c41-35189796f7dd/fields/40b8601d-6f41-4a2f-ad0a-bce7a714a6ff
var demoUpdateRelationshipField = async function() {
try {
//After initial authentication..
//Refer Section on Authentication
//Fetch EKG Document. Refer Documentation on EKG Document
/*********************
Parameters in Order: Title, Text, Id, RelationshipId
**********************/
await ekgDoc.updateRelationshipField(null, "updatedField2", "40b8601d-6f41-4a2f-ad0a-bce7a714a6ff", "link-2e2069ba-3523-4731-8c41-35189796f7dd");
} catch(err) {
console.log(err);
}
};
The above command returns JSON structured like this: (Java and Javascript map JSON to their respective data structures)
{
"id": "40b8601d-6f41-4a2f-ad0a-bce7a714a6ff",
"title": "Test1",
"text": "updatedField2"
}
This endpoint updates field with the specified field id within the specified relationship and ekg doc.
HTTP Request
PUT https://app.gra.fo/api/v1/documents/<docId>/relationships/<relationshipId>/fields/<fieldId>
URL Parameters
Parameter | Description |
---|---|
docId | The ID of the ekg doc of which the relationship and fields are retrieved |
relationshipId | The ID of the relationship |
fieldId | Id of field to update |
JSON Body
Name | Mandatory | Default | Description |
---|---|---|---|
title | false | -- | Relationship Field Title |
text | false | -- | Relationship Field Value |
Returns
This returns a JSON object for the updated field.
Delete Relationship Field
try ( GrafoClient gClient = new GrafoClient(); ) {
UUID docId = UUID.fromString("536a35f8-cb7b-41c6-a834-c4c03516657a");
String relationshipId = "link-2e2069ba-3523-4731-8c41-35189796f7dd";
String fieldId = "29a44a6b-e870-486b-b1af-8dd4ab81bd1e";
GenerGenericGrafoResponse response = gClient.deleteRelationshipField(docId, relationshipId, fieldId);
}
curl -X DELETE
https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/relationships/link-2e2069ba-3523-4731-8c41-35189796f7dd/fields/29a44a6b-e870-486b-b1af-8dd4ab81bd1e
var demoDeleteRelationshipField = async function() {
try {
//After initial authentication..
//Refer Section on Authentication
//Fetch EKG Document. Refer Documentation on EKG Document
/*********************
Parameters in Order: RelationshipId, FieldId
**********************/
await ekgDoc.deleteRelationshipField("link-2e2069ba-3523-4731-8c41-35189796f7dd", "29a44a6b-e870-486b-b1af-8dd4ab81bd1e");
} catch(err) {
console.log(err);
}
};
The above command returns JSON structured like this: (Java and Javascript map JSON to their respective data structures)
{
"success": true
}
This endpoint deletes the relationship field for the specified id present within the selected relationship in the ekg doc.
HTTP Request
DELETE https://app.gra.fo/api/v1/documents/<docId>/relationships/<relationshipId>/fields/<fieldId>
URL Parameters
Parameter | Description |
---|---|
docId | The ID of the ekg doc of which the relationships are retrieved |
relationshipId | The ID of the relationship of which field to delete |
fieldId | The ID of the field to delete |
Returns
This returns whether the deletion succeeded. If not, then an error will be returned as per error specification at the top of this document.
Relationship Attribute Fields
Field is a name-value property for Relationship Attribute.
Each field has a unique ID.
List Relationship Attribute Fields
This endpoint retrieves all the fields for a relationship attribute within an EKG document. As the fields are part of a graph, only the natural order of fields is followed. This generally happens to be the order of addition. No other sort criteria can be applied. No filtering or pagination is supported.
try ( GrafoClient gClient = new GrafoClient(); ) {
UUID docId = UUID.fromString("536a35f8-cb7b-41c6-a834-c4c03516657a");
String relationshipId = "node-9d7bf45e-ed14-48b9-9820-65c24608839e";
String attrId = "linkattr-fc2193b4-01fe-4cfa-875e-3208027a3da4";
List<Field> fieldList = gClient.getRelationshipAttributeFields(docId, relationshipId, attrId)
fieldList.forEach( field -> System.out.println(field));
}
# Get all fields for relationship with id node-9d7bf45e-ed14-48b9-9820-65c24608839e for the doc with id 536a35f8-cb7b-41c6-a834-c4c03516657a
curl https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/relationships/node-9d7bf45e-ed14-48b9-9820-65c24608839e/attributes/linkattr-fc2193b4-01fe-4cfa-875e-3208027a3da4/fields
var demoListAllRelationshipAttributeFields = async function() {
try {
//After initial authentication..
//Refer Section on Authentication
//Fetch EKG Document. Refer Documentation on EKG Document
/*********************
Parameters: RelationshipId, AttributeId
**********************/
var fieldList = ekgDoc.getRelationshipAttributeFields("node-9d7bf45e-ed14-48b9-9820-65c24608839e", "linkattr-fc2193b4-01fe-4cfa-875e-3208027a3da4");
console.log(fieldList);
} catch(err) {
console.log(err);
}
};
The above command returns JSON structured like this: (Java and Javascript map JSON to their respective data structures)
[
{
"id": "40b8601d-6f41-4a2f-ad0a-bce7a714a6ff",
"title": "Test1",
"text": "Value1"
},
{
"id": "29a44a6b-e870-486b-b1af-8dd4ab81bd1e",
"title": "Test2",
"text": "Value2"
},
.....
]
HTTP Request
GET https://app.gra.fo/api/v1/documents/<docId>/relationships/<relationshipId>/attributes/<attrId>/fields
URL Parameters
Parameter | Description |
---|---|
docId | The ID of the ekg doc of which the relationship is retrieved |
relationshipId | The ID of the relationship of which the attributes are retrieved |
attrId | The ID of the attribute |
Returns
This returns an array of all fields in the relationship attribute for specified id within an EKG document. Each entry in the array is a separate field object.
Field Properties | Description |
---|---|
id | Field Identifier (UUID) |
title | Field Title |
text | Field Value |
Get Relationship Attribute Field
try ( GrafoClient gClient = new GrafoClient(); ) {
UUID docId = UUID.fromString("536a35f8-cb7b-41c6-a834-c4c03516657a");
String relationshipId = "node-9d7bf45e-ed14-48b9-9820-65c24608839e";
String attrId = "linkattr-fc2193b4-01fe-4cfa-875e-3208027a3da4";
String fieldId = "40b8601d-6f41-4a2f-ad0a-bce7a714a6ff";
Field fieldFetched = gClient.getRelationshipAttributeField(docId, relationshipId, attrId, fieldId);
System.out.println(fieldFetched)
}
curl "https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/relationships/node-9d7bf45e-ed14-48b9-9820-65c24608839e/attributes/linkattr-fc2193b4-01fe-4cfa-875e-3208027a3da4/fields/40b8601d-6f41-4a2f-ad0a-bce7a714a6ff"
var demoGetRelationshipAttributeField = async function() {
try {
//After initial authentication..
//Refer Section on Authentication
//Fetch EKG Document. Refer Documentation on EKG Document
/*********************
Parameters: RelationshipId, AttrId, FieldId
**********************/
var fetchedField = ekgDoc.getRelationshipAttributeField("node-9d7bf45e-ed14-48b9-9820-65c24608839e", "linkattr-fc2193b4-01fe-4cfa-875e-3208027a3da4","40b8601d-6f41-4a2f-ad0a-bce7a714a6ff");
console.log(fetchedField);
} catch(err) {
console.log(err);
}
};
The above command returns JSON structured like this: (Java and Javascript map JSON to their respective data structures)
{
"id": "40b8601d-6f41-4a2f-ad0a-bce7a714a6ff",
"title": "Test1",
"text": "Value1"
}
This endpoint retrieves a specific relationship attribute field by id within an EKG document with specified docId, relationshipId and attribute Id.
HTTP Request
GET https://app.gra.fo/api/v1/documents/<docId>/relationships/<relationshipId>/attributes/<attrId>/fields/<fieldId>
URL Parameters
Parameter | Description |
---|---|
docId | The ID of the ekg doc of which the relationship is retrieved |
relationshipId | ID of the relationship |
attrId | ID of the attribute |
fieldId | The ID of the field to retrieve |
Returns
This returns a JSON object for the field.
Create Relationship Attribute Field
try (GrafoClient gClient = new GrafoClient();)
{
UUID docId = UUID.fromString("536a35f8-cb7b-41c6-a834-c4c03516657a");
String relationshipId = "node-9d7bf45e-ed14-48b9-9820-65c24608839e";
String attrId = "linkattr-fc2193b4-01fe-4cfa-875e-3208027a3da4";
Field field = new Field("field1");
field.setText("text1");
gClient.addRelationshipAttributeField(docId, relationshipId, attrId, field);
}
curl -X POST
-d '{"title": "field1", "text": "text1"}'
https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/relationships/node-9d7bf45e-ed14-48b9-9820-65c24608839e/attributes/linkattr-fc2193b4-01fe-4cfa-875e-3208027a3da4/fields
var demoCreateRelationshipAttributeField = async function() {
try {
//After initial authentication..
//Refer Section on Authentication
//Fetch EKG Document. Refer Documentation on EKG Document
/*********************
Parameters in Order: Title, Text, AttrId, RelationshipId
**********************/
await ekgDoc.addRelationshipAttributeField("field1", "text1", "linkattr-fc2193b4-01fe-4cfa-875e-3208027a3da4", "node-9d7bf45e-ed14-48b9-9820-65c24608839e");
} catch(err) {
console.log(err);
}
};
The above command returns JSON structured like this: (Java and Javascript map JSON to their respective data structures)
{
"id": "19c0101d-6f41-4a2f-ad0a-bce7a714a6ff",
"title": "field1",
"text": "text1"
}
This endpoint creates a field within the specified ekg document and relationship.
HTTP Request
POST https://app.gra.fo/api/v1/documents/<docId>/relationships/<relationshipId>/attributes/<attrId>/fields
URL Parameters
Parameter | Description |
---|---|
docId | The ID of the ekg doc of which the relationships is retrieved |
relationshipId | The relationship id of which the attribute is retrieved |
attrId | The attribute id for which the field is created |
JSON Body
Name | Mandatory | Default | Description |
---|---|---|---|
title | true | -- | Relationship Attribute Field Title |
text | false | -- | Relationship Attribute Field Value |
Returns
This returns a JSON object for the created relationship attribute field. The returned relationship attribute field contains id assigned.
Update Relationship Attribute Field
try (GrafoClient gClient = new GrafoClient();)
{
UUID docId = UUID.fromString("536a35f8-cb7b-41c6-a834-c4c03516657a");
String relationshipId = "node-9d7bf45e-ed14-48b9-9820-65c24608839e";
String attrId = "linkattr-fc2193b4-01fe-4cfa-875e-3208027a3da4";
String fieldId = "40b8601d-6f41-4a2f-ad0a-bce7a714a6ff";
Field fieldToUpdate = gClient.getRelationshipAttributeField(docId, relationshipId, attrId, fieldId);
fieldToUpdate.setTitle("updatedField2");
Relationship updatedRelationship = gClient.updateRelationshipAttributeField(docId, relationshipId, attrId, fieldToUpdate);
System.out.println(updatedRelationship);
}
curl -X POST
-d '{"id": "40b8601d-6f41-4a2f-ad0a-bce7a714a6ff", "text": "updatedField2"}'
https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/relationships/node-8a21c773-380f-4db9-92a6-f4984efd37ad/attributes/linkattr-fc2193b4-01fe-4cfa-875e-3208027a3da4/fields/40b8601d-6f41-4a2f-ad0a-bce7a714a6ff
var demoUpdateRelationshipField = async function() {
try {
//After initial authentication..
//Refer Section on Authentication
//Fetch EKG Document. Refer Documentation on EKG Document
/*********************
Parameters in Order: Title, Text, Id, AttrId, RelationshipId
**********************/
await ekgDoc.updateRelationshipAttributeField(null, "updatedField2", "40b8601d-6f41-4a2f-ad0a-bce7a714a6ff", "linkattr-fc2193b4-01fe-4cfa-875e-3208027a3da4","node-8a21c773-380f-4db9-92a6-f4984efd37ad");
} catch(err) {
console.log(err);
}
};
The above command returns JSON structured like this: (Java and Javascript map JSON to their respective data structures)
{
"id": "40b8601d-6f41-4a2f-ad0a-bce7a714a6ff",
"title": "Test1",
"text": "updatedField2"
}
This endpoint updates field with the specified field id within the specified relationship and ekg doc.
HTTP Request
PUT https://app.gra.fo/api/v1/documents/<docId>/relationships/<relationshipId>/attributes/<attrId>/fields/<fieldId>
URL Parameters
Parameter | Description |
---|---|
docId | The ID of the ekg doc of which the relationship is retrieved |
relationshipId | The ID of the relationship of which the attribute is retrieved |
attrId | The ID of the attribute of which the field is retrieved |
fieldId | Id of field to update |
JSON Body
Name | Mandatory | Default | Description |
---|---|---|---|
title | false | -- | Relationship Attribute Field Title |
text | false | -- | Relationship Attribute Field Value |
Returns
This returns a JSON object for the updated field.
Delete Relationship Attribute Field
try ( GrafoClient gClient = new GrafoClient(); ) {
UUID docId = UUID.fromString("536a35f8-cb7b-41c6-a834-c4c03516657a");
String relationshipId = "node-8a21c773-380f-4db9-92a6-f4984efd37ad";
String attrId = "linkattr-fc2193b4-01fe-4cfa-875e-3208027a3da4";
String fieldId = "29a44a6b-e870-486b-b1af-8dd4ab81bd1e";
GenerGenericGrafoResponse response = gClient.deleteRelationshipAttributeField(docId, relationshipId, attrId, fieldId);
}
curl -X DELETE
https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/relationships/node-8a21c773-380f-4db9-92a6-f4984efd37ad/attributes/linkattr-fc2193b4-01fe-4cfa-875e-3208027a3da4/fields/29a44a6b-e870-486b-b1af-8dd4ab81bd1e
var demoDeleteRelationshipAttributeField = async function() {
try {
//After initial authentication..
//Refer Section on Authentication
//Fetch EKG Document. Refer Documentation on EKG Document
/*********************
Parameters in Order: RelationshipId, AttrId, FieldId
**********************/
await ekgDoc.deleteRelationshipAttributeField("node-8a21c773-380f-4db9-92a6-f4984efd37ad", "linkattr-fc2193b4-01fe-4cfa-875e-3208027a3da4","29a44a6b-e870-486b-b1af-8dd4ab81bd1e");
} catch(err) {
console.log(err);
}
};
The above command returns JSON structured like this: (Java and Javascript map JSON to their respective data structures)
{
"success": true
}
This endpoint deletes the relationship attribute field for the specified id present within the selected relationship in the ekg doc.
HTTP Request
DELETE https://app.gra.fo/api/v1/documents/<docId>/relationships/<relationshipId>/attributes/<attrId>/fields/<fieldId>
URL Parameters
Parameter | Description |
---|---|
docId | The ID of the ekg doc of which the relationship is retrieved |
relationshipId | The ID of the relationship of which attribute is retrieved |
attrId | The ID of the attribute of which field is to be deleted |
fieldId | The ID of the field to delete |
Returns
This returns whether the deletion succeeded. If not, then an error will be returned as per error specification at the top of this document.
Comments and Replies
Grafo UI Editor provides users with option for commenting on a concept, relationship, concept attribute and relationship attribute.
Users can also respond to these comments.
Grafo Client REST API can list these comments and replies for a given identifier for concept, relationship, concept attribute and relationship attribute.
Specifics
Query Parameters
Common List Paging params of page and limit are supported. Please see Pagination section for those details. Created Date is the only other query params common to all comment and reply listing.
Parameter | Child Arguments | Default | Mandatory | Description |
---|---|---|---|---|
created | false | Optional filter on the list based on the created field. Exact check. This (and all child argument) values are in yyyy-MM-dd format | ||
gt | false | Optional lower bound filter for the created field in list. Excludes the entities created on lower bound itself | ||
gte | false | Optional lower bound filter for the created field in list. Includes the entities created on lower bound. | ||
lt | false | Optional upper bound filter for the created field in list. Excludes the entities created on upper bound itself | ||
lte | false | Optional upper bound filter for the created field in list. Includes the entities created on upper bound. |
Returns
This returns a JSON object containing array of comments/replies and the page number. The array contains comments/replies limited by the limit requested (or less if this is the last page), for the current page requested. Each entry in the array is a separate comment/reply object.
Concept Comments & Replies
Comments and Replies on a specified Concept in an EKG Document
List Concept Comments
This endpoint retrieves all comments for a given concept within a ekg document.
try ( GrafoClient gClient = new GrafoClient(); ) {
UUID docId = ...; String conceptId = "...";
CommentSearchCriteria filter =
new CommentSearchCriteria().limit(20).createdBefore(LocalDateTime.now())
.docId(docId).conceptId(conceptId);
for (Iterator<Comment> comIter = gClient.getConceptComments(filter);
comIter.hasNext();)
{
Comment com = comIter.next();
System.out.println(com.getText());
if (com.isResolved())
System.out.println(com.getDateResolved());
}
}
}
# No search criteria. Get 1st page comments for doc & concept. Limit 50
curl https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/concepts/node-8a21c773-380f-4db9-92a6-f4984efd37ad/comments
#List comments 2nd page and limit 20
curl https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/concepts/node-8a21c773-380f-4db9-92a6-f4984efd37ad/comments?page=2&limit=20
#List Comments created on 2019 Jan 23 (page 1 assumed unless specified)
curl https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/concepts/node-8a21c773-380f-4db9-92a6-f4984efd37ad/comments?created=2019-01-23
#List comments created on or before 2019 Jan 23
curl https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/concepts/node-8a21c773-380f-4db9-92a6-f4984efd37ad/comments?created[lte]=2019-01-23
#List comments created before 2019 Jan 23
curl https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/concepts/node-8a21c773-380f-4db9-92a6-f4984efd37ad/comments?created[lt]=2019-01-23
#List comments created after 2017 March 5
curl https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/concepts/node-8a21c773-380f-4db9-92a6-f4984efd37ad/comments?created[gt]=2017-03-05
#List comments created on or after 2017 March 5
curl https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/concepts/node-8a21c773-380f-4db9-92a6-f4984efd37ad/comments?created[gte]=2017-03-05
# List comments created between 2017 March 5 and 2019 Jan 23
# (excluding both days)
curl https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/concepts/node-8a21c773-380f-4db9-92a6-f4984efd37ad/comments?created[gt]=2017-03-05&created[lt]=2019-01-23
# List comments created between 2017 March 5 and 2019 Jan 23
# (both dates inclusive)
curl https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/concepts/node-8a21c773-380f-4db9-92a6-f4984efd37ad/comments?created[gte]=2017-03-05&created[lte]=2019-01-23
var demoGetConceptComments = async function() {
try {
//After initial authentication..
//Refer Section on Authentication
var commSearchCriteria = new CommentSearchCriteria().setDocId("536a35f8-cb7b-41c6-a834-c4c03516657a").setConceptId("node-8a21c773-380f-4db9-92a6-f4984efd37ad").createdOn("2018-11-27");
var allComments = await grafoClient.getComments(commSearchCriteria);
console.log(allComments);
} catch(err) {
console.log(err);
}
};
The above command returns JSON structured like this: (Java and Javascript map JSON to their respective data structures)
{
"page": 1
"comments":
[
{
"id": '02ecb9c9-9bc7-4508-b9f8-110a4c5521a1',
"text": 'Test Comment',
"createdBy": '892dd51b-c394-4d0b-a7cf-e7a0df34d7aa',
"dateCreated": 1542192084,
"resolved": 1,
"dateResolved": 1542192087
},
..
]
}
HTTP Request
GET http://example.com/api/v1/documents/<docId>/concepts/<conceptId>/comments
URL Parameters
Parameter | Description |
---|---|
docId | The ID of the ekg doc to which the concept belongs |
conceptId | Id of the concept for which comments are fetched |
Returns
This returns an array of all comments for the specified doc and concept id. Each entry in the array is a separate comment object.
Comment Properties | Description |
---|---|
id | Comment Identifier |
text | Comment Text |
createdBy | User id of the person that created this comment |
dateCreated | Comment creation Date |
resolved | Whether issue raised by comment resolved or not. 0 or 1 |
dateResolved | If issue is resolved then a valid date of resolution, else null |
List Concept Comment Replies
This endpoint retrieves all comment replies for a given comment associated with a concept within a ekg document.
try ( GrafoClient gClient = new GrafoClient(); ) {
UUID docId = ...; String conceptId = "..."; UUID commentId = ...;
ReplySearchCriteria filter =
new ReplySearchCriteria().limit(20).createdBefore(LocalDateTime.now()).docId(docId).conceptId(conceptId).commentId(commentId);
for (Iterator<Reply> repIter = gClient.getConceptCommentReplies(filter);
repIter.hasNext();)
{
Reply rep = repIter.next();
System.out.println(rep.getText());
}
}
# No search criteria. Get 1st page replies for doc, concept & comment. Limit 50
curl https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/concepts/node-8a21c773-380f-4db9-92a6-f4984efd37ad/comments/02ecb9c9-9bc7-4508-b9f8-110a4c5521a1/replies
#List replies for selected comment 2nd page and limit 20
curl https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/concepts/node-8a21c773-380f-4db9-92a6-f4984efd37ad/comments/02ecb9c9-9bc7-4508-b9f8-110a4c5521a1/replies?page=2&limit=20
#List replies for selected comment created on 2019 Jan 23
#(page 1 assumed unless specified)
curl https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/concepts/node-8a21c773-380f-4db9-92a6-f4984efd37ad/comments/02ecb9c9-9bc7-4508-b9f8-110a4c5521a1/replies?created=2019-01-23
#List replies for selected comment created on or before 2019 Jan 23
curl https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/concepts/node-8a21c773-380f-4db9-92a6-f4984efd37ad/comments/02ecb9c9-9bc7-4508-b9f8-110a4c5521a1/replies?created[lte]=2019-01-23
#List replies for selected comment created before 2019 Jan 23
curl https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/concepts/node-8a21c773-380f-4db9-92a6-f4984efd37ad/comments/02ecb9c9-9bc7-4508-b9f8-110a4c5521a1/replies?created[lt]=2019-01-23
#List replies for selected comment created after 2017 March 5
curl https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/concepts/node-8a21c773-380f-4db9-92a6-f4984efd37ad/comments/02ecb9c9-9bc7-4508-b9f8-110a4c5521a1/replies?created[gt]=2017-03-05
#List replies for selected comment created on or after 2017 March 5
curl https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/concepts/node-8a21c773-380f-4db9-92a6-f4984efd37ad/comments/02ecb9c9-9bc7-4508-b9f8-110a4c5521a1/replies?created[gte]=2017-03-05
# List replies for selected comment created between 2017 March 5 and 2019 Jan 23
# (excluding both days)
curl https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/concepts/node-8a21c773-380f-4db9-92a6-f4984efd37ad/comments/02ecb9c9-9bc7-4508-b9f8-110a4c5521a1/replies?created[gt]=2017-03-05&created[lt]=2019-01-23
# List replies for selected comment created between 2017 March 5 and 2019 Jan 23
# (both dates inclusive)
curl https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/concepts/node-8a21c773-380f-4db9-92a6-f4984efd37ad/comments/02ecb9c9-9bc7-4508-b9f8-110a4c5521a1/replies?created[gte]=2017-03-05&created[lte]=2019-01-23
var demoGetConceptCommentReplies = async function() {
try {
//After initial authentication..
//Refer Section on Authentication
var replySearchCriteria = new ReplySearchCriteria().setDocId("536a35f8-cb7b-41c6-a834-c4c03516657a").setConceptId("node-8a21c773-380f-4db9-92a6-f4984efd37ad").setCommentId("02ecb9c9-9bc7-4508-b9f8-110a4c5521a1").createdOn("2019-01-23");
var allReplies = await grafoClient.getReplies(replySearchCriteria);
console.log(allReplies);
} catch(err) {
console.log(err);
}
};
The above command returns JSON structured like this: (Java and Javascript map JSON to their respective data structures)
{
"page": 1
"replies":
[
{
"id": '8b65e8be-ba90-4b9c-a5f9-12e1fdd13674',
"text": 'Test Comment Reply',
"replyFor": "02ecb9c9-9bc7-4508-b9f8-110a4c5521a1"
"createdBy": '892dd51b-c394-4d0b-a7cf-e7a0df34d7aa',
"dateCreated": 1542192098
},
..
]
}
HTTP Request
GET http://example.com/api/v1/documents/<docId>/concepts/<conceptId>/comments/<commentId>/replies
URL Parameters
Parameter | Description |
---|---|
docId | The ID of the ekg doc to which the concept belongs |
conceptId | Id of the concept for which comment replies are fetched |
commentId | Id of the comment for which replies are fetched |
Returns
This returns an array of all comment replies for the specified docid, conceptid and comment id. Each entry in the array is a separate comment reply object.
Comment Reply Properties | Description |
---|---|
id | Comment Reply Identifier |
text | Comment Reply Text |
replyFor | Comment for which this reply exists |
createdBy | User id of the person that created this comment reply |
dateCreated | Comment Reply creation Date |
Relationship Comments & Replies
Comments and Replies on a specified Relationship in an EKG Document
List Relationship Comments
This endpoint retrieves all comments for a given relationship within a ekg document.
try ( GrafoClient gClient = new GrafoClient(); ) {
UUID docId = ...; String relationshipId = "...";
CommentSearchCriteria filter =
new CommentSearchCriteria().limit(20).createdBefore(LocalDateTime.now())
.docId(docId).relationshipId(relationshipId);
for (Iterator<Comment> comIter = gClient.getRelationshipComments(filter);
comIter.hasNext();)
{
Comment com = comIter.next();
System.out.println(com.getText());
if (com.isResolved())
System.out.println(com.getDateResolved());
}
}
}
# No search criteria. Get 1st page comments for doc & relationship. Limit 50
curl https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/relationships/link-8a21c773-380f-4db9-92a6-f4984efd37ad/comments
#List comments 2nd page and limit 20
curl https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/relationships/link-8a21c773-380f-4db9-92a6-f4984efd37ad/comments?page=2&limit=20
#List Comments created on 2019 Jan 23 (page 1 assumed unless specified)
curl https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/relationships/link-8a21c773-380f-4db9-92a6-f4984efd37ad/comments?created=2019-01-23
#List comments created on or before 2019 Jan 23
curl https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/relationships/link-8a21c773-380f-4db9-92a6-f4984efd37ad/comments?created[lte]=2019-01-23
#List comments created before 2019 Jan 23
curl https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/relationships/link-8a21c773-380f-4db9-92a6-f4984efd37ad/comments?created[lt]=2019-01-23
#List comments created after 2017 March 5
curl https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/relationships/link-8a21c773-380f-4db9-92a6-f4984efd37ad/comments?created[gt]=2017-03-05
#List comments created on or after 2017 March 5
curl https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/relationships/link-8a21c773-380f-4db9-92a6-f4984efd37ad/comments?created[gte]=2017-03-05
# List comments created between 2017 March 5 and 2019 Jan 23
# (excluding both days)
curl https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/relationships/link-8a21c773-380f-4db9-92a6-f4984efd37ad/comments?created[gt]=2017-03-05&created[lt]=2019-01-23
# List comments created between 2017 March 5 and 2019 Jan 23
# (both dates inclusive)
curl https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/relationships/link-8a21c773-380f-4db9-92a6-f4984efd37ad/comments?created[gte]=2017-03-05&created[lte]=2019-01-23
var demoGetRelationshipComments = async function() {
try {
//After initial authentication..
//Refer Section on Authentication
var commSearchCriteria = new CommentSearchCriteria().setDocId("536a35f8-cb7b-41c6-a834-c4c03516657a").setRelationshipId("link-8a21c773-380f-4db9-92a6-f4984efd37ad").createdOn("2018-11-27");
var allComments = await grafoClient.getComments(commSearchCriteria);
console.log(allComments);
} catch(err) {
console.log(err);
}
};
The above command returns JSON structured like this: (Java and Javascript map JSON to their respective data structures)
{
"page": 1
"comments":
[
{
"id": '02ecb9c9-9bc7-4508-b9f8-110a4c5521a1',
"text": 'Test Comment',
"createdBy": '892dd51b-c394-4d0b-a7cf-e7a0df34d7aa',
"dateCreated": 1542192084,
"resolved": 1,
"dateResolved": 1542192087
},
..
]
}
HTTP Request
GET http://example.com/api/v1/documents/<docId>/relationships/<relationshipId>/comments
URL Parameters
Parameter | Description |
---|---|
docId | The ID of the ekg doc to which the relationship belongs |
relationshipId | Id of the relationship for which comments are fetched |
Returns
This returns an array of all comments for the specified doc and relationship id. Each entry in the array is a separate comment object.
Comment Properties | Description |
---|---|
id | Comment Identifier |
text | Comment Text |
createdBy | User id of the person that created this comment |
dateCreated | Comment creation Date |
resolved | Whether issue raised by comment resolved or not. 0 or 1 |
dateResolved | If issue is resolved then a valid date of resolution, else null |
List Relationship Comment Replies
This endpoint retrieves all comment replies for a given comment associated with a relationship within a ekg document.
try ( GrafoClient gClient = new GrafoClient(); ) {
UUID docId = ...; String relationshipId = "..."; UUID commentId = ...;
ReplySearchCriteria filter =
new ReplySearchCriteria().limit(20).createdBefore(LocalDateTime.now()).docId(docId).relationshipId(relationshipId).commentId(commentId);
for (Iterator<Reply> repIter = gClient.getRelationshipCommentReplies(filter);
repIter.hasNext();)
{
Reply rep = repIter.next();
System.out.println(rep.getText());
}
}
# No search criteria. Get 1st page replies for doc, relationship & comment. Limit 50
curl https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/relationships/link-8a21c773-380f-4db9-92a6-f4984efd37ad/comments/02ecb9c9-9bc7-4508-b9f8-110a4c5521a1/replies
#List replies for selected comment 2nd page and limit 20
curl https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/relationships/link-8a21c773-380f-4db9-92a6-f4984efd37ad/comments/02ecb9c9-9bc7-4508-b9f8-110a4c5521a1/replies?page=2&limit=20
#List replies for selected comment created on 2019 Jan 23
#(page 1 assumed unless specified)
curl https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/relationships/link-8a21c773-380f-4db9-92a6-f4984efd37ad/comments/02ecb9c9-9bc7-4508-b9f8-110a4c5521a1/replies?created=2019-01-23
#List replies for selected comment created on or before 2019 Jan 23
curl https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/relationships/link-8a21c773-380f-4db9-92a6-f4984efd37ad/comments/02ecb9c9-9bc7-4508-b9f8-110a4c5521a1/replies?created[lte]=2019-01-23
#List replies for selected comment created before 2019 Jan 23
curl https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/relationships/link-8a21c773-380f-4db9-92a6-f4984efd37ad/comments/02ecb9c9-9bc7-4508-b9f8-110a4c5521a1/replies?created[lt]=2019-01-23
#List replies for selected comment created after 2017 March 5
curl https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/relationships/link-8a21c773-380f-4db9-92a6-f4984efd37ad/comments/02ecb9c9-9bc7-4508-b9f8-110a4c5521a1/replies?created[gt]=2017-03-05
#List replies for selected comment created on or after 2017 March 5
curl https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/relationships/link-8a21c773-380f-4db9-92a6-f4984efd37ad/comments/02ecb9c9-9bc7-4508-b9f8-110a4c5521a1/replies?created[gte]=2017-03-05
# List replies for selected comment created between 2017 March 5 and 2019 Jan 23
# (excluding both days)
curl https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/relationships/link-8a21c773-380f-4db9-92a6-f4984efd37ad/comments/02ecb9c9-9bc7-4508-b9f8-110a4c5521a1/replies?created[gt]=2017-03-05&created[lt]=2019-01-23
# List replies for selected comment created between 2017 March 5 and 2019 Jan 23
# (both dates inclusive)
curl https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/relationships/link-8a21c773-380f-4db9-92a6-f4984efd37ad/comments/02ecb9c9-9bc7-4508-b9f8-110a4c5521a1/replies?created[gte]=2017-03-05&created[lte]=2019-01-23
var demoGetRelationshipCommentReplies = async function() {
try {
//After initial authentication..
//Refer Section on Authentication
var replySearchCriteria = new ReplySearchCriteria().setDocId("536a35f8-cb7b-41c6-a834-c4c03516657a").setRelationshipId("link-8a21c773-380f-4db9-92a6-f4984efd37ad").setCommentId("02ecb9c9-9bc7-4508-b9f8-110a4c5521a1").createdOn("2019-01-23");
var allReplies = await grafoClient.getReplies(replySearchCriteria);
console.log(allReplies);
} catch(err) {
console.log(err);
}
};
The above command returns JSON structured like this: (Java and Javascript map JSON to their respective data structures)
{
"page": 1
"replies":
[
{
"id": '8b65e8be-ba90-4b9c-a5f9-12e1fdd13674',
"text": 'Test Comment Reply',
"replyFor": "02ecb9c9-9bc7-4508-b9f8-110a4c5521a1"
"createdBy": '892dd51b-c394-4d0b-a7cf-e7a0df34d7aa',
"dateCreated": 1542192098
},
..
]
}
HTTP Request
GET http://example.com/api/v1/documents/<docId>/relationships/<relationshipId>/comments/<commentId>/replies
URL Parameters
Parameter | Description |
---|---|
docId | The ID of the ekg doc to which the relationship belongs |
relationshipId | Id of the relationship for which comment replies are fetched |
commentId | Id of the comment for which replies are fetched |
Returns
This returns an array of all comment replies for the specified docid, relationshipid and comment id. Each entry in the array is a separate comment reply object.
Comment Reply Properties | Description |
---|---|
id | Comment Reply Identifier |
text | Comment Reply Text |
replyFor | Comment for which this reply exists |
createdBy | User id of the person that created this comment reply |
dateCreated | Comment Reply creation Date |
Concept Attribute Comments & Replies
Comments and Replies on a specified Concept Attribute in an EKG Document
List Concept Attribute Comments
This endpoint retrieves all comments for a given attribute with a specified concept and within a ekg document.
try ( GrafoClient gClient = new GrafoClient(); ) {
UUID docId = ...; String conceptId = "..."; String attribId = "..";
CommentSearchCriteria filter =
new CommentSearchCriteria().limit(20).createdBefore(LocalDateTime.now())
.docId(docId).conceptId(conceptId).attributeId(attribId);
for (Iterator<Comment> comIter = gClient.getConceptAttributeComments(filter);
comIter.hasNext();)
{
Comment com = comIter.next();
System.out.println(com.getText());
if (com.isResolved())
System.out.println(com.getDateResolved());
}
}
}
# No search criteria. Get 1st page comments for doc, concept, attribute.
# Limit 50
curl https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/concepts/node-8a21c773-380f-4db9-92a6-f4984efd37ad/attributes/c784a254-77da-4398-914a-20cb9bd5985a/comments
#List comments 2nd page and limit 20
curl https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/concepts/node-8a21c773-380f-4db9-92a6-f4984efd37ad/attributes/c784a254-77da-4398-914a-20cb9bd5985a/comments?page=2&limit=20
#List Comments created on 2019 Jan 23 (page 1 assumed unless specified)
curl https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/concepts/node-8a21c773-380f-4db9-92a6-f4984efd37ad/attributes/c784a254-77da-4398-914a-20cb9bd5985a/comments?created=2019-01-23
#List comments created on or before 2019 Jan 23
curl https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/concepts/node-8a21c773-380f-4db9-92a6-f4984efd37ad/attributes/c784a254-77da-4398-914a-20cb9bd5985a/comments?created[lte]=2019-01-23
#List comments created before 2019 Jan 23
curl https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/concepts/node-8a21c773-380f-4db9-92a6-f4984efd37ad/attributes/c784a254-77da-4398-914a-20cb9bd5985a/comments?created[lt]=2019-01-23
#List comments created after 2017 March 5
curl https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/concepts/node-8a21c773-380f-4db9-92a6-f4984efd37ad/attributes/c784a254-77da-4398-914a-20cb9bd5985a/comments?created[gt]=2017-03-05
#List comments created on or after 2017 March 5
curl https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/concepts/node-8a21c773-380f-4db9-92a6-f4984efd37ad/attributes/c784a254-77da-4398-914a-20cb9bd5985a/comments?created[gte]=2017-03-05
# List comments created between 2017 March 5 and 2019 Jan 23
# (excluding both days)
curl https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/concepts/node-8a21c773-380f-4db9-92a6-f4984efd37ad/attributes/c784a254-77da-4398-914a-20cb9bd5985a/comments?created[gt]=2017-03-05&created[lt]=2019-01-23
# List comments created between 2017 March 5 and 2019 Jan 23
# (both dates inclusive)
curl https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/concepts/node-8a21c773-380f-4db9-92a6-f4984efd37ad/attributes/c784a254-77da-4398-914a-20cb9bd5985a/comments?created[gte]=2017-03-05&created[lte]=2019-01-23
var demoGetConceptAttributeComments = async function() {
try {
//After initial authentication..
//Refer Section on Authentication
var commSearchCriteria = new CommentSearchCriteria().setDocId("536a35f8-cb7b-41c6-a834-c4c03516657a").setConceptId("node-8a21c773-380f-4db9-92a6-f4984efd37ad").setAttributeId("c784a254-77da-4398-914a-20cb9bd5985a").createdOn("2018-11-27");
var allComments = await grafoClient.getComments(commSearchCriteria);
console.log(allComments);
} catch(err) {
console.log(err);
}
};
The above command returns JSON structured like this: (Java and Javascript map JSON to their respective data structures)
{
"page": 1
"comments":
[
{
"id": '02ecb9c9-9bc7-4508-b9f8-110a4c5521a1',
"text": 'Test Comment',
"createdBy": '892dd51b-c394-4d0b-a7cf-e7a0df34d7aa',
"dateCreated": 1542192084,
"resolved": 1,
"dateResolved": 1542192087
},
..
]
}
HTTP Request
GET http://example.com/api/v1/documents/<docId>/concepts/<conceptId>/attributes/<attribId>/comments
URL Parameters
Parameter | Description |
---|---|
docId | The ID of the ekg doc to which the concept belongs |
conceptId | Id of the concept for which comments are fetched |
attribbId | Id of the concept attribute |
Returns
This returns an array of all comments for the specified doc id, concept id and attribute id. Each entry in the array is a separate comment object.
Comment Properties | Description |
---|---|
id | Comment Identifier |
text | Comment Text |
createdBy | User id of the person that created this comment |
dateCreated | Comment creation Date |
resolved | Whether issue raised by comment resolved or not. 0 or 1 |
dateResolved | If issue is resolved then a valid date of resolution, else null |
List Concept Attribute Comment Replies
This endpoint retrieves all comment replies for a given comment associated with a attribute in a concept within a ekg document.
try ( GrafoClient gClient = new GrafoClient(); ) {
UUID docId = ...; String conceptId = "...";
String attribId = "..."; UUID commentId = ...;
ReplySearchCriteria filter =
new ReplySearchCriteria().limit(20).createdBefore(LocalDateTime.now())
.docId(docId).conceptId(conceptId).attributeId(attribId)
.commentId(commentId);
for (Iterator<Reply> repIter = gClient.getConceptAttributeCommentReplies(filter);
repIter.hasNext();)
{
Reply rep = repIter.next();
System.out.println(rep.getText());
}
}
# No search criteria. Get 1st page replies for doc, concept & comment. Limit 50
curl https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/concepts/node-8a21c773-380f-4db9-92a6-f4984efd37ad/attributes/c784a254-77da-4398-914a-20cb9bd5985a/comments/02ecb9c9-9bc7-4508-b9f8-110a4c5521a1/replies
#List replies for selected comment 2nd page and limit 20
curl https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/concepts/node-8a21c773-380f-4db9-92a6-f4984efd37ad/attributes/c784a254-77da-4398-914a-20cb9bd5985a/comments/02ecb9c9-9bc7-4508-b9f8-110a4c5521a1/replies?page=2&limit=20
#List replies for selected comment created on 2019 Jan 23
#(page 1 assumed unless specified)
curl https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/concepts/node-8a21c773-380f-4db9-92a6-f4984efd37ad/attributes/c784a254-77da-4398-914a-20cb9bd5985a/comments/02ecb9c9-9bc7-4508-b9f8-110a4c5521a1/replies?created=2019-01-23
#List replies for selected comment created on or before 2019 Jan 23
curl https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/concepts/node-8a21c773-380f-4db9-92a6-f4984efd37ad/attributes/c784a254-77da-4398-914a-20cb9bd5985a/comments/02ecb9c9-9bc7-4508-b9f8-110a4c5521a1/replies?created[lte]=2019-01-23
#List replies for selected comment created before 2019 Jan 23
curl https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/concepts/node-8a21c773-380f-4db9-92a6-f4984efd37ad/attributes/c784a254-77da-4398-914a-20cb9bd5985a/comments/02ecb9c9-9bc7-4508-b9f8-110a4c5521a1/replies?created[lt]=2019-01-23
#List replies for selected comment created after 2017 March 5
curl https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/concepts/node-8a21c773-380f-4db9-92a6-f4984efd37ad/attributes/c784a254-77da-4398-914a-20cb9bd5985a/comments/02ecb9c9-9bc7-4508-b9f8-110a4c5521a1/replies?created[gt]=2017-03-05
#List replies for selected comment created on or after 2017 March 5
curl https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/concepts/node-8a21c773-380f-4db9-92a6-f4984efd37ad/attributes/c784a254-77da-4398-914a-20cb9bd5985a/comments/02ecb9c9-9bc7-4508-b9f8-110a4c5521a1/replies?created[gte]=2017-03-05
# List replies for selected comment created between 2017 March 5 and 2019 Jan 23
# (excluding both days)
curl https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/concepts/node-8a21c773-380f-4db9-92a6-f4984efd37ad/attributes/c784a254-77da-4398-914a-20cb9bd5985a/comments/02ecb9c9-9bc7-4508-b9f8-110a4c5521a1/replies?created[gt]=2017-03-05&created[lt]=2019-01-23
# List replies for selected comment created between 2017 March 5 and 2019 Jan 23
# (both dates inclusive)
curl https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/concepts/node-8a21c773-380f-4db9-92a6-f4984efd37ad/attributes/c784a254-77da-4398-914a-20cb9bd5985a/comments/02ecb9c9-9bc7-4508-b9f8-110a4c5521a1/replies?created[gte]=2017-03-05&created[lte]=2019-01-23
var demoGetConceptAttributeCommentReplies = async function() {
try {
//After initial authentication..
//Refer Section on Authentication
var replySearchCriteria = new ReplySearchCriteria().setDocId("536a35f8-cb7b-41c6-a834-c4c03516657a").setConceptId("node-8a21c773-380f-4db9-92a6-f4984efd37ad").setAttributeId("c784a254-77da-4398-914a-20cb9bd5985a").setCommentId("02ecb9c9-9bc7-4508-b9f8-110a4c5521a1").createdOn("2019-01-23");
var allReplies = await grafoClient.getReplies(replySearchCriteria);
console.log(allReplies);
} catch(err) {
console.log(err);
}
};
The above command returns JSON structured like this: (Java and Javascript map JSON to their respective data structures)
{
"page": 1
"replies":
[
{
"id": '8b65e8be-ba90-4b9c-a5f9-12e1fdd13674',
"text": 'Test Comment Reply',
"replyFor": "02ecb9c9-9bc7-4508-b9f8-110a4c5521a1"
"createdBy": '892dd51b-c394-4d0b-a7cf-e7a0df34d7aa',
"dateCreated": 1542192098
},
..
]
}
HTTP Request
GET http://example.com/api/v1/documents/<docId>/concepts/<conceptId>/attributes/<attributeId>/comments/<commentId>/replies
URL Parameters
Parameter | Description |
---|---|
docId | The ID of the ekg doc to which the concept belongs |
conceptId | Id of the concept for which comment replies are fetched |
attributeId | Id of the concept attribute |
commentId | Id of the comment for which replies are fetched |
Returns
This returns an array of all comment replies for the specified docid, conceptid, attribute id and comment id. Each entry in the array is a separate comment reply object.
Comment Reply Properties | Description |
---|---|
id | Comment Reply Identifier |
text | Comment Reply Text |
replyFor | Comment for which this reply exists |
createdBy | User id of the person that created this comment reply |
dateCreated | Comment Reply creation Date |
Relationship Attribute Comments & Replies
Comments and Replies on a specified Relationship in an EKG Document
List Relationship Attribute Comments
This endpoint retrieves all comments for a given attribute in a relationship within a ekg document.
try ( GrafoClient gClient = new GrafoClient(); ) {
UUID docId = ...; String relationshipId = "...";
String attribId = "...";
CommentSearchCriteria filter =
new CommentSearchCriteria().limit(20).createdBefore(LocalDateTime.now())
.docId(docId).relationshipId(relationshipId).attributeId(attribId);
for (Iterator<Comment> comIter =
gClient.getRelationshipAttributeComments(filter);
comIter.hasNext();
)
{
Comment com = comIter.next();
System.out.println(com.getText());
if (com.isResolved())
System.out.println(com.getDateResolved());
}
}
}
# No search criteria. Get 1st page comments for doc, relationship & attribute.
# Limit 50
curl https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/relationships/link-8a21c773-380f-4db9-92a6-f4984efd37ad/attributes/bf406b39-2dff-4374-8fd2-d25ab1601d7a/comments
#List comments 2nd page and limit 20
curl https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/relationships/link-8a21c773-380f-4db9-92a6-f4984efd37ad/attributes/bf406b39-2dff-4374-8fd2-d25ab1601d7a/comments?page=2&limit=20
#List Comments created on 2019 Jan 23 (page 1 assumed unless specified)
curl https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/relationships/link-8a21c773-380f-4db9-92a6-f4984efd37ad/attributes/bf406b39-2dff-4374-8fd2-d25ab1601d7a/comments?created=2019-01-23
#List comments created on or before 2019 Jan 23
curl https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/relationships/link-8a21c773-380f-4db9-92a6-f4984efd37ad/attributes/bf406b39-2dff-4374-8fd2-d25ab1601d7a/comments?created[lte]=2019-01-23
#List comments created before 2019 Jan 23
curl https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/relationships/link-8a21c773-380f-4db9-92a6-f4984efd37ad/attributes/bf406b39-2dff-4374-8fd2-d25ab1601d7a/comments?created[lt]=2019-01-23
#List comments created after 2017 March 5
curl https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/relationships/link-8a21c773-380f-4db9-92a6-f4984efd37ad/attributes/bf406b39-2dff-4374-8fd2-d25ab1601d7a/comments?created[gt]=2017-03-05
#List comments created on or after 2017 March 5
curl https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/relationships/link-8a21c773-380f-4db9-92a6-f4984efd37ad/attributes/bf406b39-2dff-4374-8fd2-d25ab1601d7a/comments?created[gte]=2017-03-05
# List comments created between 2017 March 5 and 2019 Jan 23
# (excluding both days)
curl https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/relationships/link-8a21c773-380f-4db9-92a6-f4984efd37ad/attributes/bf406b39-2dff-4374-8fd2-d25ab1601d7a/comments?created[gt]=2017-03-05&created[lt]=2019-01-23
# List comments created between 2017 March 5 and 2019 Jan 23
# (both dates inclusive)
curl https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/relationships/link-8a21c773-380f-4db9-92a6-f4984efd37ad/attributes/bf406b39-2dff-4374-8fd2-d25ab1601d7a/comments?created[gte]=2017-03-05&created[lte]=2019-01-23
var demoGetRelAttributeComments = async function() {
try {
//After initial authentication..
//Refer Section on Authentication
var commSearchCriteria = new CommentSearchCriteria().setDocId("536a35f8-cb7b-41c6-a834-c4c03516657a").setRelationshipId("link-8a21c773-380f-4db9-92a6-f4984efd37ad").setAttributeId("c784a254-77da-4398-914a-20cb9bd5985a").createdOn("2018-11-27");
var allComments = await grafoClient.getComments(commSearchCriteria);
console.log(allComments);
} catch(err) {
console.log(err);
}
};
The above command returns JSON structured like this: (Java and Javascript map JSON to their respective data structures)
{
"page": 1
"comments":
[
{
"id": '02ecb9c9-9bc7-4508-b9f8-110a4c5521a1',
"text": 'Test Comment',
"createdBy": '892dd51b-c394-4d0b-a7cf-e7a0df34d7aa',
"dateCreated": 1542192084,
"resolved": 1,
"dateResolved": 1542192087
},
..
]
}
HTTP Request
GET http://example.com/api/v1/documents/<docId>/relationships/<relationshipId>/attributes/<attribId>comments
URL Parameters
Parameter | Description |
---|---|
docId | The ID of the ekg doc to which the relationship belongs |
relationshipId | Id of the relationship for which comments are fetched |
attribId | Id of the relationship attribute |
Returns
This returns an array of all comments for the specified doc, relationship and attribute id. Each entry in the array is a separate comment object.
Comment Properties | Description |
---|---|
id | Comment Identifier |
text | Comment Text |
createdBy | User id of the person that created this comment |
dateCreated | Comment creation Date |
resolved | Whether issue raised by comment resolved or not. 0 or 1 |
dateResolved | If issue is resolved then a valid date of resolution, else null |
List Relationship Attribute Comment Replies
This endpoint retrieves all comment replies for a given comment associated with an attribute of a relationship within a ekg document.
try ( GrafoClient gClient = new GrafoClient(); ) {
UUID docId = ...; String relationshipId = "...";
String attribId = "..."; UUID commentId = ...;
ReplySearchCriteria filter =
new ReplySearchCriteria().limit(20).createdBefore(LocalDateTime.now()).docId(docId).relationshipId(relationshipId)
attributeId(attribId).commentId(commentId);
for (Iterator<Reply> repIter =
gClient.getRelationshipAttributeCommentReplies(filter);
repIter.hasNext();
)
{
Reply rep = repIter.next();
System.out.println(rep.getText());
}
}
# No search criteria. Get 1st page replies for doc, relationship & comment. Limit 50
curl https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/relationships/link-8a21c773-380f-4db9-92a6-f4984efd37ad/attributes/bf406b39-2dff-4374-8fd2-d25ab1601d7a/comments/02ecb9c9-9bc7-4508-b9f8-110a4c5521a1/replies
#List replies for selected comment 2nd page and limit 20
curl https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/relationships/link-8a21c773-380f-4db9-92a6-f4984efd37ad/attributes/bf406b39-2dff-4374-8fd2-d25ab1601d7a/comments/02ecb9c9-9bc7-4508-b9f8-110a4c5521a1/replies?page=2&limit=20
#List replies for selected comment created on 2019 Jan 23
#(page 1 assumed unless specified)
curl https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/relationships/link-8a21c773-380f-4db9-92a6-f4984efd37ad/attributes/bf406b39-2dff-4374-8fd2-d25ab1601d7a/comments/02ecb9c9-9bc7-4508-b9f8-110a4c5521a1/replies?created=2019-01-23
#List replies for selected comment created on or before 2019 Jan 23
curl https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/relationships/link-8a21c773-380f-4db9-92a6-f4984efd37ad/attributes/bf406b39-2dff-4374-8fd2-d25ab1601d7a/comments/02ecb9c9-9bc7-4508-b9f8-110a4c5521a1/replies?created[lte]=2019-01-23
#List replies for selected comment created before 2019 Jan 23
curl https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/relationships/link-8a21c773-380f-4db9-92a6-f4984efd37ad/attributes/bf406b39-2dff-4374-8fd2-d25ab1601d7a/comments/02ecb9c9-9bc7-4508-b9f8-110a4c5521a1/replies?created[lt]=2019-01-23
#List replies for selected comment created after 2017 March 5
curl https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/relationships/link-8a21c773-380f-4db9-92a6-f4984efd37ad/attributes/bf406b39-2dff-4374-8fd2-d25ab1601d7a/comments/02ecb9c9-9bc7-4508-b9f8-110a4c5521a1/replies?created[gt]=2017-03-05
#List replies for selected comment created on or after 2017 March 5
curl https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/relationships/link-8a21c773-380f-4db9-92a6-f4984efd37ad/attributes/bf406b39-2dff-4374-8fd2-d25ab1601d7a/comments/02ecb9c9-9bc7-4508-b9f8-110a4c5521a1/replies?created[gte]=2017-03-05
# List replies for selected comment created between 2017 March 5 and 2019 Jan 23
# (excluding both days)
curl https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/relationships/link-8a21c773-380f-4db9-92a6-f4984efd37ad/attributes/bf406b39-2dff-4374-8fd2-d25ab1601d7a/comments/02ecb9c9-9bc7-4508-b9f8-110a4c5521a1/replies?created[gt]=2017-03-05&created[lt]=2019-01-23
# List replies for selected comment created between 2017 March 5 and 2019 Jan 23
# (both dates inclusive)
curl https://app.gra.fo/api/v1/documents/536a35f8-cb7b-41c6-a834-c4c03516657a/relationships/link-8a21c773-380f-4db9-92a6-f4984efd37ad/attributes/bf406b39-2dff-4374-8fd2-d25ab1601d7a/comments/02ecb9c9-9bc7-4508-b9f8-110a4c5521a1/replies?created[gte]=2017-03-05&created[lte]=2019-01-23
var demoGetRelAttributeCommentReplies = async function() {
try {
//After initial authentication..
//Refer Section on Authentication
var replySearchCriteria = new ReplySearchCriteria().setDocId("536a35f8-cb7b-41c6-a834-c4c03516657a").setRelationshipId("link-8a21c773-380f-4db9-92a6-f4984efd37ad").setAttributeId("c784a254-77da-4398-914a-20cb9bd5985a").setCommentId("02ecb9c9-9bc7-4508-b9f8-110a4c5521a1").createdOn("2019-01-23");
var allReplies = await grafoClient.getReplies(replySearchCriteria);
console.log(allReplies);
} catch(err) {
console.log(err);
}
};
The above command returns JSON structured like this: (Java and Javascript map JSON to their respective data structures)
{
"page": 1
"replies":
[
{
"id": '8b65e8be-ba90-4b9c-a5f9-12e1fdd13674',
"text": 'Test Comment Reply',
"replyFor": "02ecb9c9-9bc7-4508-b9f8-110a4c5521a1"
"createdBy": '892dd51b-c394-4d0b-a7cf-e7a0df34d7aa',
"dateCreated": 1542192098
},
..
]
}
HTTP Request
GET http://example.com/api/v1/documents/<docId>/relationships/<relationshipId>/attributes/<attribId>/comments/<commentId>/replies
URL Parameters
Parameter | Description |
---|---|
docId | The ID of the ekg doc to which the relationship belongs |
relationshipId | Id of the relationship for which comment replies are fetched |
attribId | Id of the relationship attribute |
commentId | Id of the comment for which replies are fetched |
Returns
This returns an array of all comment replies for the specified docid, relationship id, attribute id and comment id. Each entry in the array is a separate comment reply object.
Comment Reply Properties | Description |
---|---|
id | Comment Reply Identifier |
text | Comment Reply Text |
replyFor | Comment for which this reply exists |
createdBy | User id of the person that created this comment reply |
dateCreated | Comment Reply creation Date |