Java
-1. A template has been provided to get started with; see the `nypd-connector-2`
+1. A template has been provided to get started with; see the `stage2/nypd-connector`
directory. This includes:
* an example configuration `config.json` with a service defined
* some changes to `ConnectorController`;
@@ -125,13 +125,13 @@ endpoint for it in the connector.
Node.js
-1. A template has been provided to get started with; see the `nypd-connector-2`
+1. A template has been provided to get started with; see the `stage2/nypd-connector`
directory. This includes:
* an example configuration `config.json` with a service defined;
* a new acquire route in `app.js`;
* a new acquire route with a `/test` endpoint in the `routes` folder;
* a new file `/helpers/data-service.js` containing functions for acquiring data;
-2. Open the code from the `nypd-connector-2` in VSCode, or any IDE of your choice,
+2. Open the code from the `stage2/nypd-connector` in VSCode, or any IDE of your choice,
and start the connector.
@@ -140,7 +140,7 @@ endpoint for it in the connector.
Python
-1. A template has been provided to get started with; see the `nypd-connector-2`
+1. A template has been provided to get started with; see the `stage2/nypd-connector`
directory. This includes:
* an example configuration `config.json` with a service defined
* some additions to `controller.py`;
diff --git a/docs/connect-to-eds.md b/docs/connect-to-eds.md
index a36f9fd..f31d6f6 100644
--- a/docs/connect-to-eds.md
+++ b/docs/connect-to-eds.md
@@ -21,7 +21,7 @@ If you leave the site for any reason, you can always retrieve your app token aga
Java
-Look at the version of code in the `nypd-connector-3` directory. There are changes to `ConnectorController` and the `application.properties` file. Apply these to your code manually or copy over these two files. If you're copying them, you may need to change the paths of the endpoints defined in `ConnectorController`.
+Look at the version of code in the `stage3/nypd-connector` directory. There are changes to `ConnectorController` and the `application.properties` file. Apply these to your code manually or copy over these two files. If you're copying them, you may need to change the paths of the endpoints defined in `ConnectorController`.
In `application.properties` shown below, specify the NYPD Complaint Dataset API resource for the `socrata.url` key as the URL in the comment and your Socrata API Token for the `socrata.api.token` key.
@@ -55,7 +55,7 @@ System.out.println(socrataClient.get(url, String.class, params));
Node.js
-* Look at the version of code in the `nypd-connector-3` directory. This includes:
+* Look at the version of code in the `stage3/nypd-connector` directory. This includes:
* Changes to `acquire.js` route;
* A new `socrata-config.js` file;
* A new `socrata-data-service.js` file;
@@ -72,7 +72,7 @@ System.out.println(socrataClient.get(url, String.class, params));
```js
const URL = `${socrata.url}?$$app_token=${socrata.token}&$limit=${limitValue}`;
```
-* Open the code from the `nypd-connector-3` in VSCode, or any IDE of your choice, and start the connector.
+* Open the code from the `stage3/nypd-connector` in VSCode, or any IDE of your choice, and start the connector.
* You need to map the data received into entities and links and return them to i2 Analyze.
@@ -81,7 +81,7 @@ System.out.println(socrataClient.get(url, String.class, params));
Python
-Look at the version of code in the `nypd-connector-3` directory. Changes have been made to `controller.py` and there is now an additional resource file: `application.yml`. Apply these to your code manually or copy over these two files. If you're copying them, you may need to change the paths of the endpoints defined in `controller.py`.
+Look at the version of code in the `stage3/nypd-connector` directory. Changes have been made to `controller.py` and there is now an additional resource file: `application.yml`. Apply these to your code manually or copy over these two files. If you're copying them, you may need to change the paths of the endpoints defined in `controller.py`.
In `application.yml` shown below, specify the NYPD Complaint Dataset API resource for the `socrata.url` key as the URL in the comment and your Socrata API Token for the `socrata.token` key.
@@ -121,6 +121,8 @@ To make it easier to create entities and links using the data retrieved, you can
Note that in Java, there exists a library which makes this process much easier: `jackson-annotations`.
+You might want to add source references to the entities and links that are returned by your connector. This allows users trace the source of the data represented by those entities and links. For information on adding source references, see [here](./source-references.md).
+
#### (Optional) Verify your marshalling function
Test that you are successfully marshalling the data. You should be able to assert against the properties of your object to verify the expected and actual results are equal.
diff --git a/docs/deploy-connector.md b/docs/deploy-connector.md
index 27b6838..cc4b371 100644
--- a/docs/deploy-connector.md
+++ b/docs/deploy-connector.md
@@ -82,8 +82,8 @@ purposes of this guide, an example Spring Boot application is provided.
Java
-* Open the example starting code from the `nypd-connector-1` folder. Copy the
- `nypd-connector` subdirectory to wherever you would like to work, and open it
+* Open the example starting code from the `stage1/nypd-connector` folder. Copy the
+ `nypd-connector` directory to wherever you would like to work, and open it
in VSCode or the IDE of your choice.
* Have a look at the contents:
* Resources: `config.json` and `application.properties`
@@ -100,9 +100,9 @@ purposes of this guide, an example Spring Boot application is provided.
Node.js
-* Open the example starting code from the `nypd-connector-1` folder in VSCode,
+* Open the example starting code from the `stage1/nypd-connector` folder in VSCode,
or the IDE of your choice.
-* Have a look the contents:
+* Have a look at the contents:
* Resources: `public/json/config.json`
* Code: a simple Express application
The `config.json` file tells Analyst's Notebook what services are available
@@ -118,8 +118,8 @@ purposes of this guide, an example Spring Boot application is provided.
Python
-* Open the example starting code from the `nypd-connector-1` folder. Copy the
- `nypd-connector` subdirectory to wherever you would like to work, and open it
+* Open the example starting code from the `stage1/nypd-connector` folder. Copy the
+ `nypd-connector` directory to wherever you would like to work, and open it
in VSCode or the IDE of your choice.
* Have a look at the contents:
* Resources: `config.json`
@@ -161,6 +161,19 @@ your connector from Analyst's Notebook Premium.
corresponds to the output you saw when using the `connectors` endpoint from
Postman.
+### Unsecured protocol warning message
+
+You might see the following warning message:
+
+*"Configuration error for the connector with identifier '\': The
+application is communicating with the connector through a protocol that is not secure."*
+
+You can ignore this in a development environment. This is shown because i2 Analyze and your connector
+communicate via HTTP.
+
+**In a production environment, you should secure this
+connection using HTTPS.** For information about configuring the connection to use HTTPS, see [Client authenticated Secure Sockets Layer with the i2 Connect gateway](https://www.ibm.com/support/knowledgecenter/en/SSXVXZ_latest/com.ibm.i2.eia.go.live.doc/t_connect_security.html).
+
### Fix the timezone error
1. Look at the error message about the default timezone. You need to update the
`config.json` file to include a timezone.
diff --git a/docs/images/ExampleJavaConnector - Shortcut.lnk b/docs/images/ExampleJavaConnector - Shortcut.lnk
deleted file mode 100644
index 2456a78..0000000
Binary files a/docs/images/ExampleJavaConnector - Shortcut.lnk and /dev/null differ
diff --git a/docs/images/no-ssl-warning.png b/docs/images/no-ssl-warning.png
new file mode 100644
index 0000000..748424d
Binary files /dev/null and b/docs/images/no-ssl-warning.png differ
diff --git a/docs/images/parameterised-search.jpg b/docs/images/parameterised-search.jpg
new file mode 100644
index 0000000..87afe5a
Binary files /dev/null and b/docs/images/parameterised-search.jpg differ
diff --git a/docs/images/postman.png b/docs/images/postman.png
new file mode 100644
index 0000000..6e51129
Binary files /dev/null and b/docs/images/postman.png differ
diff --git a/docs/images/seed-example.png b/docs/images/seed-example.png
new file mode 100644
index 0000000..af515b6
Binary files /dev/null and b/docs/images/seed-example.png differ
diff --git a/docs/index.md b/docs/index.md
index 2256242..9b15d9c 100644
--- a/docs/index.md
+++ b/docs/index.md
@@ -11,14 +11,15 @@ The documentation for understanding, deploying, and configuring the example conn
7. [Implementing seeded searches](./seeded-search.md)
8. [Implementing seeded, parameterized searches](./seeded-parameterised-search.md)
9. [Validating requests](./validation.md)
+10. [Implementing Principal Propagation](./principal-propagation.md)
## Environment setup
The workshop requires the following tools and technologies:
-- **IBM i2 Analyze 4.3.1**: The server that hosts the i2 Connect gateway.
+- **IBM i2 Analyze 4.3.2**: The server that hosts the i2 Connect gateway.
-- **IBM i2 Analyst's Notebook Premium 9.2.1**: The client that provides the user
+- **IBM i2 Analyst's Notebook Premium 9.2.2**: The client that provides the user
interface for interacting with your connector. The client displays the
resulting entity and link records with their properties.
diff --git a/docs/parameterised-search.md b/docs/parameterised-search.md
index 3e8851e..6049b33 100644
--- a/docs/parameterised-search.md
+++ b/docs/parameterised-search.md
@@ -19,7 +19,7 @@ For this service, you need to set the `clientConfigType`. In this example, you w
{
"id": "nypd-search-service",
"name": "NYPD Connector: Search",
- "description": "A service with for conditional searches",
+ "description": "A service for conditional searches",
"clientConfigType": "FORM",
"clientConfigId": "searchForm",
"acquireUrl": "/search",
@@ -85,7 +85,7 @@ It's time to implement these conditions.
### Add an acquire endpoint for your service
i2 Analyze knows the acquire URL decided on for this service. Now you need to add the corresponding endpoint in the connector.
-* You have a template to get started with; see the `nypd-connector-4`
+* You have a template to get started with; see the `stage4/nypd-connector`
directory provided. This includes:
* An example `config.json` with a parameterised search service and search fields defined. This is just a template in case you have not already defined a new service
* Changes to the `ConnectorController` class
@@ -104,12 +104,12 @@ i2 Analyze knows the acquire URL decided on for this service. Now you need to ad
### Add an acquire endpoint for your service
i2 Analyze knows the acquire URL decided on for this service. Now you need to add the corresponding endpoint in the connector.
-* You have a template to get started with; see the `nypd-connector-4`
+* You have a template to get started with; see the `stage4/nypd-connector`
directory provided. This includes:
* An example `config.json` with a parameterised search service and search fields defined. This is just a template in case you have not already defined a new service;
* A new `validate` route;
* A new `/search` endpoint in the `acquire` route;
-* Open the code from the `nypd-connector-4` in VSCode, or any IDE of your choice, and start the connector.
+* Open the code from the `stage4/nypd-connector` in VSCode, or any IDE of your choice, and start the connector.
* You will need to implement `findComplaint` function in `socrata-data-service.js` file and fix all TODO's.
@@ -120,7 +120,7 @@ i2 Analyze knows the acquire URL decided on for this service. Now you need to ad
### Add an acquire endpoint for your service
i2 Analyze knows the acquire URL decided on for this service. Now you need to add the corresponding endpoint in the connector.
-* You have a template to get started with; see the `nypd-connector-4`
+* You have a template to get started with; see the `stage4/nypd-connector`
directory provided. This includes:
* An example `config.json` with a parameterised search service and search fields defined. This is just a template in case you have not already defined a new service
* Changes to the `controller.py` file
diff --git a/docs/postman.md b/docs/postman.md
index 166b91e..b2d8c85 100644
--- a/docs/postman.md
+++ b/docs/postman.md
@@ -8,6 +8,17 @@ You can use Postman collections to test the endpoint of i2 Analyze and your conn
- Import the Postman environments from [here](../postman/environments);
- Import the Postman collections from [here](../postman/collections);
+To import the environments and collections:
+
+1. Click **Import**, or click **File -> Import**
+2. In the **Import Folder** tab, click **Choose Folders**
+3. Select the `postman` directory that you downloaded from this repository.
+
+The Postman collections are displayed in the left pane and a populated dropdown
+list of environments near the top right of the window.
+
+
+
## Testing i2 Analyze
To make sure that i2 Analyze has been configured correctly, use the `i2 Analyze` environment.
diff --git a/docs/principal-propagation.md b/docs/principal-propagation.md
new file mode 100644
index 0000000..b2192cf
--- /dev/null
+++ b/docs/principal-propagation.md
@@ -0,0 +1,75 @@
+# Principal propagation
+
+i2 Analyze contains an extension point that enables you to return additional headers to any connectors from the i2 Connect gateway. The extension point requires you to write an implementation of `IConnectorRequestModifier.java`. The implementation must be packaged into a JAR file and deployed to i2 Analyze. The following example demonstrates how to use Maven to do this and how to configure i2Analyze to use your implementation.
+
+## Overview
+
+For i2 Analyze to use your implementation, complete the following tasks:
+
+1. Create and package your implementation of `IConnectorRequestModifier.java`
+2. Configure i2 Analyze to use your packaged implementation
+4. Redeploy and restart Liberty to update your deployment
+
+## Prerequisites
+
+- Java installed
+
+## The principal propagation project
+
+Update the value of the `` element in [pom.xml](../code/principal-propagation/pom.xml) file to reference the installation location of i2Analyze. For example, `C:\IBM\i2Analyze`.
+This location is used by Maven to locate the JAR files to pull into the local Maven repository and where to place the packaged JAR file that contains your implementation.
+
+To set up the Maven environment, open a terminal in the `principal-propagation` directory.
+
+1. Initialize the Maven dependencies:
+ > `mvnw initialize`
+
+ This pulls in JAR files from the i2 Analyze deployment toolkit into your local Maven repository.
+2. Compile and install the project:
+ > `mvnw clean install`
+
+At this point, you could start editing the implementation in [PrincipalPropagation.java](..\code\principal-propagation\src\main\java\com\i2group\example\PrincipalPropagation.java). For the example implementation, do not make any changes.
+
+## Deploy the principal propagation implementation
+
+When the implementation is complete, package the class into a JAR file.
+
+Open a terminal in the `principal-propagation` folder and run the following command:
+
+> `mvnw package`
+
+The Maven `package` command creates a JAR file from the the `PrincipalPropagation.java` class and puts it in the `toolkit/configuration/fragments/opal-services/WEB-INF/lib/` directory of the i2 Analyze toolkit specified in the `` element.
+
+## Configuring i2Analyze
+
+For i2Analyze to use the `PrincipalPropagation.jar`, it must be specified in the `DiscoServerSettingsCommon.properties` file.
+
+Add the following line to the end of the `toolkit/configuration/fragments/opal-services/WEB-INF/lib/classes/DiscoServerSettingsCommon.properties` file:
+
+> ConnectorRequestModifier=com.i2group.example.PrincipalPropagation
+
+## Redeploy and Restart Liberty
+
+1. Stop Liberty:
+ >`setup -t stopLiberty`
+2. Redeploy Liberty:
+ >`setup -t deployLiberty`
+3. Start Liberty:
+ >`setup -t startLiberty`
+
+Any connectors receive an extra header named `i2ExtensionHeader` in responses from the i2 Connect gateway.
+
+For example:
+
+```
+{
+ 'content-type': 'application/json',
+ 'accept-language': 'en-GB-u-ca-gregory',
+ i2ExtensionHeader: 'Jenny',
+ 'content-length': '92',
+ host: 'localhost:3700',
+ connection: 'Keep-Alive',
+ 'user-agent': 'Apache-HttpClient/4.5.6 (Java/1.8.0_232)',
+ 'accept-encoding': 'gzip,deflate'
+}
+```
diff --git a/docs/seeded-search.md b/docs/seeded-search.md
index e0a8317..90f8822 100644
--- a/docs/seeded-search.md
+++ b/docs/seeded-search.md
@@ -90,7 +90,7 @@ It's time to implement these conditions.
i2 Analyze knows the acquire URL decided on for this service. Now you need to
add the corresponding endpoint in the connector.
-* You have a template to get started with; see the `nypd-connector-5` folder
+* You have a template to get started with; see the `stage5/nypd-connector` folder
provided. This includes:
* An example `config.json` with a seeded search service defined. This is just a template in case you have not already defined a new service.
* Changes to `ConnectorController`.
@@ -106,12 +106,12 @@ add the corresponding endpoint in the connector.
i2 Analyze knows the acquire URL decided on for this service. Now you need to
add the corresponding endpoint in the connector.
-* You have a template to get started with; see the `nypd-connector-5` folder
+* You have a template to get started with; see the `stage5/nypd-connector` folder
provided. This includes:
* An example `config.json` with a seeded search service defined. This is just a template in case you have not already defined a new service;
* Changes to `acquire` route to reflect changes in `config.json`;
* Chagnes to `socrata-data-service.js` file to have all the functions needed for `acquire` route;
-* Open the code from the `nypd-connector-5` in VSCode, or any IDE of your choice, and start the connector.
+* Open the code from the `stage5/nypd-connector` in VSCode, or any IDE of your choice, and start the connector.
* You will need to implement functions defined in `socrata-data-service.js` file and fix all TODO's.
@@ -122,7 +122,7 @@ add the corresponding endpoint in the connector.
i2 Analyze knows the acquire URL decided on for this service. Now you need to
add the corresponding endpoint in the connector.
-* You have a template to get started with; see the `nypd-connector-5` folder
+* You have a template to get started with; see the `stage5/nypd-connector` folder
provided. This includes:
* An example `config.json` with a seeded search service defined. This is just a template in case you have not already defined a new service.
* Changes to `controller.py`.
diff --git a/docs/source-references.md b/docs/source-references.md
new file mode 100644
index 0000000..fa78d8e
--- /dev/null
+++ b/docs/source-references.md
@@ -0,0 +1,47 @@
+# Source References
+
+You might want to include source references in entity and link data to preserve the route back to the external source. Entity and link objects support the inclusion of source reference objects.
+
+The structure of a source reference object is as follows:
+
+```js
+{
+ "id": String,
+ "source": {
+ "name": String,
+ "type": String,
+ "description": String,
+ "location": String,
+ "image": String
+ },
+ "userModifiable": Boolean
+}
+```
+
+Note that the `source` field and its corresponding `name` field are the only mandatory fields.
+
+#### Example
+
+The following JSON object shows how a source references fits into the structure of an entity object:
+
+```json
+{
+ "id": "123",
+ "typeId": "ET1",
+ "version": 1,
+ "properties": {
+ "PT16": "MANHATTAN"
+ },
+ "sourceReference": {
+ "id": "SR01",
+ "source": {
+ "name": "Source Dataset",
+ "type": "Open source data",
+ "description": "A source reference to the corresponding record from the dataset.",
+ "location": "https://data.cityofnewyork.us/resource/7x9x-zpz6.json?$where=cmplnt_num=123456789",
+ "image": "https://github.ibm.com/ibmi2/Connect-Examples/tree/master/docs/images/nypd-dataset-webpage.png?raw=true"
+ },
+ "userModifiable": false
+ }
+}
+```
diff --git a/docs/spi-examples.md b/docs/spi-examples.md
index 3be6129..45ddb44 100644
--- a/docs/spi-examples.md
+++ b/docs/spi-examples.md
@@ -1,5 +1,5 @@
# i2 Connect SPI examples
-You can use the following example `DaodRequest`s and `ConnectorResponse`s to help
+You can use the following example requests and responses to help
understand how parameterised and seeded search services work.
## Example data
@@ -7,24 +7,32 @@ Throughout, assume you are querying the following set of entities and links.

-In the example schema, there are the following Type IDs for each of the
-entity, link, and property types used:
+The following are the type IDs corresponding to each of the entity, link and
+property types used in the example schema:
- Item | ID
----------------------|---------
- Complaint | ET1
- \- Complaint Number | PT1
- Location | ET2
- \- Borough Name | PT16
- Person | ET3
- \- Age Group | PT26
- \- Race | PT27
- \- Gender | PT28
- Located At | LT1
- Suspect Of | LT2
- Victim Of | LT3
+--------------------------------
+ Entity | ID
+----------------------|---------
+ Complaint | ET1
+ Location | ET2
+ Person | ET3
+--------------------------------
+ Link | ID
+----------------------|---------
+ Located At | LT1
+ Suspect Of | LT2
+ Victim Of | LT3
+---------------------------------------------
+ Properties | For Entity | ID
+----------------------|------------|---------
+ Complaint Number | Complaint | PT1
+ Borough Name | Location | PT16
+ Age Group | Person | PT26
+ Race | Person | PT27
+ Gender | Person | PT28
+---------------------------------------------
-This can be represented as a set of entities and links in JSON as follows.
+This can be represented as a set of entities and links in JSON as follows:
```json
{
"entities": [
@@ -207,12 +215,13 @@ This can be represented as a set of entities and links in JSON as follows.
```
## Parameterised search
-### Search for people by age
+
To implement a service to search for people by age group, you can define a
-clientConfig in `config.json` like the following:
+`clientConfig` in `config.json` like the following:
```json
{
"id": "age-search-form",
+ "type": "FORM",
"config": {
"sections": [
{
@@ -220,8 +229,8 @@ clientConfig in `config.json` like the following:
{
"id": "age-group-search-term",
"label": "Age Group",
- "mandatory": true,
- "logicalType": "SINGLE_LINE_STRING"
+ "logicalType": "SINGLE_LINE_STRING",
+ "mandatory": true
}
]
}
@@ -229,6 +238,18 @@ clientConfig in `config.json` like the following:
}
}
```
+The `id` should be a unique identifier for this `clientConfig`. Then the services you define can use this form by supplying this `id` in the service's `clientConfigId` field.
+
+The `config` contains `sections` and each section contains a JSON object defining a condition field depicted below:
+
+
+
+- The condition `id` is used as a reference for the value in the request.
+- The `label` is the field title as shown in `[1]` above.
+- The `logicalType` defines the accepted data type of the request value entry `[2]`.
+- The `mandatory` field specifies whether a value is required for the field. Empty mandatory fields are highlighted red and shown a warning message `[3]`.
+
+
A `DaodRequest` issued by i2 Analyze when a user runs this search might look
like this:
```json
@@ -245,11 +266,14 @@ like this:
}
}
```
-You can see that they are searching for person entities with age group property
-equal to "18-24". Using the data the connector has, you can then filter through
-the entities to find ones that are person entities, i.e. have `typeId` equal to
- `"ET3"`, and have the age group property `PT26` equal to `"18-24"`. The response,
- using the example data above, would look like this:
+
+The request searches for Person entities where the Age Group property is equal
+to "18-24". In the implementation of the parameterised search service, you would
+filter through the data and find entities which satisfy the request
+requirements, i.e. have `typeId` equal to `"ET3"` and have the Age Group
+property `PT26` equal to `"18-24"`. The response, from the example request
+above, would look like this:
+
```json
{
"entities": [
@@ -280,17 +304,20 @@ the entities to find ones that are person entities, i.e. have `typeId` equal to
## Seeded search
Seeded searches take as input a set of entities and links that a user already
-has on their chart. The search then uses this information when finding results.
-The examples to go over are:
-* Find Like This, where a user is able to select a single entity and search for
+has on their chart and uses this information when finding results.
+
+
+
+The example operations to go over are:
+* Find-Like-This, where a user is able to select a single entity and search for
other entities of the same type with similar properties; and
* Expand, where a user can select an entity on their chart and search for all
other entities that are connected to it by a link, and all those entities and
links will be returned.
-### Find Like This
-A DaodRequest receieved by the connector for a Find Like This search on the
-example data could look something like the following.
+### Find-Like-This
+A `DaodRequest` received by the connector for a Find-Like-This search on the
+example data could look something like the following:
```json
{
@@ -325,20 +352,20 @@ example data could look something like the following.
}
```
-You can deduce which of the entities the `daodSeedEntity` in this request
-corresponds to by looking at the key in the sourceIds field. The third element
+You can deduce which of the entities the `DaodSeedEntity` in this request
+corresponds to by looking at the key in the `sourceIds` field. The third element
of this list gives us the ID we have assigned the entity in our connector,
-`"jkl"`. You also have its type ID `"ET3"`, so it is a person entity. Have a look
+`"jkl"`. You also have its type ID `"ET3"`, so it is a Person entity. Have a look
at the data above and find this entity.
-To perform a Find Like This search using this seed entity, you need only use its
+To perform a Find-Like-This search using this seed entity, you need only use its
properties. We can filter through our list of entities for those which have
-`typeId` equal to `"ET3"` (are person entities), and have the properties:
-* `PT26` equal to `"F"`, i.e. it's a female;
+`typeId` equal to `"ET3"` (are Person entities) and have the properties:
+* `PT26` equal to `"F"`, i.e. they are female;
* `PT27` equal to `"White"`, i.e. they are a white female; and
-* `PT28` equal to `"<18"`, i.e. they are a a white female under 18 years of age.
+* `PT28` equal to `"<18"`, i.e. they are a white female under 18 years of age.
-After excluding the seed entity itself, yopu would return the following.
+After excluding the seed entity itself, you would return the following:
```json
{
@@ -358,10 +385,8 @@ After excluding the seed entity itself, yopu would return the following.
}
```
-
-
### Expand
-A daodRequest received by the connector for an Expand service might look like
+A `DaodRequest` received by the connector for an Expand service might look like
this:
```json
@@ -394,7 +419,7 @@ this:
}
}
```
-Again you can deduce which of our entities the `daodSeedEntity` corresponds to by
+Again, you can deduce which of our entities the `DaodSeedEntity` corresponds to by
looking at the `sourceIds`. The `id` of the entity in question is `"123"` and it
has `typeID` equal to `"ET1"`, so it is a complaint. Look at the example data above
and find which entity you are expanding. What would you expect an Expand operation to
@@ -405,7 +430,7 @@ To perform an Expand operation with this entity as the seed, you need to:
through all the links and finding those with a `fromEndId` or a `toEndId`
equal to the `id` of the entity, `"jkl"`.
2. Find all entities at the other end of these links. This can be done by using
- the `fromEndId`s and `toEndIds` of the links found in step 1 - just use the
+ the `fromEndId`s and `toEndId`s of the links found in step 1 - just use the
end ID that does not correspond to the seed entity.
If returning these entities and links as-is, along with the entity corresponding
@@ -479,18 +504,18 @@ to the seed, you would respond with:
]
}
```
-When copying these results to a chart, the seed entity would be duplicated,
+When copying these results to a chart, the seed entity would be duplicated
along with all its links and connected entities that may already be on the
-chart, which would all be connected to the duplicate.
+chart which would all be connected to the duplicate.
Depending on how you want the service to function, you might prefer to have the
-returned items connected to the entity that you select on the chart, rather than
-to a duplicate. In this case, you need to change all `id`, `fromEndId`, and the
+returned items connected to the entity that you selected on the chart rather than
+to a duplicate. In this case, you need to change all `id`, `fromEndId` and
`toEndId` fields that refer to the ID of the seed entity (in this case "123") to
-`seedId` of the `daodSeedEntity` in the request, i.e.
+`seedId` of the `DaodSeedEntity` in the request, i.e.
`"1e756171-fb3c-40a4-b7c5-5c537fbf0adc"`.
-In this case, you would return the following response:"
+In this case, you would return the following response:
```json
{
diff --git a/docs/troubleshoot.md b/docs/troubleshoot.md
index f9a44e2..757e313 100644
--- a/docs/troubleshoot.md
+++ b/docs/troubleshoot.md
@@ -36,8 +36,8 @@ Problems might include:
definition
- invalid default timezone: make sure you set a `timeZoneId` in the
`defaultValues` section of your connector configuration
-- The application is comunicating with the connector through a protocol that is
- insecure. You will see this because i2Analyze and your connector communicate
+- The application is communicating with the connector through a protocol that is
+ insecure. You will see this because i2 Analyze and your connector communicate
via HTTP. In a production environment, you should secure this connection by
using HTTPS. This is beyond the scope of this guide, but is covered in the
Knowledge Centre
@@ -64,7 +64,7 @@ number of potential causes. To understand what went wrong:
Below this line will be more specific information about why the query failed.
Examples and their solutions are given below.
-#### "The schema does not contain an entity/a link/a property or with identifier '\'"
+#### "The schema does not contain an entity/a link/a property with identifier '\'"
This means you have supplied an entity or link with a `typeId` that does not
exist in your schema. Check that the `typeId` you supplied is not a typo.