From 997a52943c6065abf45320791aa99491f50b12be Mon Sep 17 00:00:00 2001 From: praneesha Date: Wed, 8 Nov 2023 07:16:18 +0530 Subject: [PATCH 1/6] Add the Windows versions of commands --- .../write-a-restful-api-with-ballerina.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/swan-lake/resources/featured-scenarios/write-a-restful-api-with-ballerina.md b/swan-lake/resources/featured-scenarios/write-a-restful-api-with-ballerina.md index 8cdbda2a99d..935a1a16405 100644 --- a/swan-lake/resources/featured-scenarios/write-a-restful-api-with-ballerina.md +++ b/swan-lake/resources/featured-scenarios/write-a-restful-api-with-ballerina.md @@ -327,9 +327,9 @@ In another terminal, execute the cURL commands below one by one to try out the s Execute the cURL command below. -``` -$ curl http://localhost:9000/covid/status/countries -``` +| Linux/macOS | Windows | +|-----------------------------------------------------|-----------------------------------------------------| +| $ curl http://localhost:9000/covid/status/countries | $ curl http://localhost:9000/covid/status/countries | You view the output below. From 8f6efe2d869243d97811be64ca6582c1564f0a27 Mon Sep 17 00:00:00 2001 From: praneesha Date: Wed, 8 Nov 2023 07:23:21 +0530 Subject: [PATCH 2/6] Add the commands of the other guides --- .../build-a-data-service-in-ballerina.md | 8 ++++---- .../manage-data-persistence-with-bal-persist.md | 8 ++++---- .../write-a-graphql-api-with-ballerina.md | 6 +++--- .../write-a-restful-api-with-ballerina.md | 14 +++++++------- 4 files changed, 18 insertions(+), 18 deletions(-) diff --git a/swan-lake/resources/featured-scenarios/build-a-data-service-in-ballerina.md b/swan-lake/resources/featured-scenarios/build-a-data-service-in-ballerina.md index 446f7c9940f..31ae41a063c 100644 --- a/swan-lake/resources/featured-scenarios/build-a-data-service-in-ballerina.md +++ b/swan-lake/resources/featured-scenarios/build-a-data-service-in-ballerina.md @@ -466,8 +466,9 @@ be accessed via a browser by visiting `http://locahost:8080/employees`. Invoke the defined resource method by sending the `POST` request below to `http://localhost:8080/employees` with the required data as a JSON payload. -``` -$ curl -X POST http://localhost:8080/employees/ +| Linux/macOS | Windows | +|-----------------------------------------------------|-----------------------------------------------------| +| $ curl -X POST http://localhost:8080/employees/ -H 'Content-Type: application/json' -d '{ "employee_id": 6, @@ -482,8 +483,7 @@ $ curl -X POST http://localhost:8080/employees/ }, "manager_id": 1, "job_title": "Sales Manager" - }' -``` + }' | $curl -X POST http://localhost:8080/employees/ -H "Content-Type: application/json" -d "{ \"employee_id\": 6, \"first_name\": \"test\", \"last_name\": \"test\", \"email\": \"test@test.com\", \"phone\": \"882 771 110\", \"hire_date\": { \"year\": 2021, \"month\": 12, \"day\": 16 }, \"manager_id\": 1, \"job_title\": \"Sales Manager\" }" | ## Learn more diff --git a/swan-lake/resources/featured-scenarios/manage-data-persistence-with-bal-persist.md b/swan-lake/resources/featured-scenarios/manage-data-persistence-with-bal-persist.md index 068587008cb..9dfce25ab01 100644 --- a/swan-lake/resources/featured-scenarios/manage-data-persistence-with-bal-persist.md +++ b/swan-lake/resources/featured-scenarios/manage-data-persistence-with-bal-persist.md @@ -472,8 +472,9 @@ Running executable Invoke the defined resource method by sending the POST request below to http://localhost:8080/employees with the required data as a JSON payload. -``` -$ curl -X POST http://localhost:8080/employees/ +| Linux/macOS | Windows | +|-----------------------------------------------------|-----------------------------------------------------| +| $ curl -X POST http://localhost:8080/employees/ -H 'Content-Type: application/json' -d '{ "id": "6", @@ -488,5 +489,4 @@ $ curl -X POST http://localhost:8080/employees/ }, "managerId": "1", "jobTitle": "Sales Manager" - }' -``` + }' | $ curl -X POST http://localhost:8080/employees/ -H "Content-Type: application/json" -d "{ \"id\": \"6\", \"firstName\": \"test\", \"lastName\": \"test\", \"email\": \"test@test.com\", \"phone\": \"882 771 110\", \"hireDate\": { \"year\": 2021, \"month\": 12, \"day\": 16 }, \"managerId\": \"1\", \"jobTitle\": \"Sales Manager\" }" | diff --git a/swan-lake/resources/featured-scenarios/write-a-graphql-api-with-ballerina.md b/swan-lake/resources/featured-scenarios/write-a-graphql-api-with-ballerina.md index 0f4f729da1f..f7ca2d868f8 100644 --- a/swan-lake/resources/featured-scenarios/write-a-graphql-api-with-ballerina.md +++ b/swan-lake/resources/featured-scenarios/write-a-graphql-api-with-ballerina.md @@ -420,9 +420,9 @@ type Mutation { Execute the cURL command below to retrieve all the data from the endpoint. -``` -$ curl -X POST -H "Content-type: application/json" -H "scope: unknown" -d '{ "query": "query { all { country cases active} }" }' 'http://localhost:9000/covid19' -``` +| Linux/macOS | Windows | +|-----------------------------------------------------|-----------------------------------------------------| +| $ curl -X POST -H "Content-type: application/json" -H "scope: unknown" -d '{ "query": "query { all { country cases active} }" }' 'http://localhost:9000/covid19' | $ curl -X POST -H "Content-type: application/json" -H "scope: unknown" -d "{ \"query\": \"query { all { country cases active} }\" }" http://localhost:9000/covid19 | In this request: - An HTTP POST request is sent to the GraphQL endpoint. diff --git a/swan-lake/resources/featured-scenarios/write-a-restful-api-with-ballerina.md b/swan-lake/resources/featured-scenarios/write-a-restful-api-with-ballerina.md index 935a1a16405..41c795bc6c3 100644 --- a/swan-lake/resources/featured-scenarios/write-a-restful-api-with-ballerina.md +++ b/swan-lake/resources/featured-scenarios/write-a-restful-api-with-ballerina.md @@ -329,7 +329,7 @@ Execute the cURL command below. | Linux/macOS | Windows | |-----------------------------------------------------|-----------------------------------------------------| -| $ curl http://localhost:9000/covid/status/countries | $ curl http://localhost:9000/covid/status/countries | +| $ curl http://localhost:9000/covid/status/countries | $ curl http://localhost:9000/covid/status/countries | You view the output below. @@ -341,9 +341,9 @@ You view the output below. Execute the cURL command below. -``` -$ curl http://localhost:9000/covid/status/countries -d "[{\"iso_code\":\"DEU\", \"country\":\"Germany\", \"cases\":159333, \"deaths\":7390, \"recovered\":126084, \"active\":6833}]" -H "Content-Type: application/json" -``` +| Linux/macOS | Windows | +|-----------------------------------------------------|-----------------------------------------------------| +| $ curl http://localhost:9000/covid/status/countries -d "[{\"iso_code\":\"DEU\", \"country\":\"Germany\", \"cases\":159333, \"deaths\":7390, \"recovered\":126084, \"active\":6833}]" -H "Content-Type: application/json" | $ curl http://localhost:9000/covid/status/countries -d "[{\"iso_code\":\"DEU\", \"country\":\"Germany\", \"cases\":159333, \"deaths\":7390, \"recovered\":126084, \"active\":6833}]" -H "Content-Type: application/json" | You view the output below. @@ -355,9 +355,9 @@ You view the output below. Execute the cURL command below. -``` -$ curl http://localhost:9000/covid/status/countries/AFG -``` +| Linux/macOS | Windows | +|-----------------------------------------------------|-----------------------------------------------------| +| $ curl http://localhost:9000/covid/status/countries/AFG | $ curl http://localhost:9000/covid/status/countries/AFG | You view the output below. From c4124b28b512cac3b29976baba7fe8831460efd2 Mon Sep 17 00:00:00 2001 From: praneesha Date: Wed, 8 Nov 2023 07:29:15 +0530 Subject: [PATCH 3/6] Fix the table formatting --- .../build-a-data-service-in-ballerina.md | 21 +++---------------- ...anage-data-persistence-with-bal-persist.md | 21 +++---------------- 2 files changed, 6 insertions(+), 36 deletions(-) diff --git a/swan-lake/resources/featured-scenarios/build-a-data-service-in-ballerina.md b/swan-lake/resources/featured-scenarios/build-a-data-service-in-ballerina.md index 31ae41a063c..0384e10eb39 100644 --- a/swan-lake/resources/featured-scenarios/build-a-data-service-in-ballerina.md +++ b/swan-lake/resources/featured-scenarios/build-a-data-service-in-ballerina.md @@ -466,24 +466,9 @@ be accessed via a browser by visiting `http://locahost:8080/employees`. Invoke the defined resource method by sending the `POST` request below to `http://localhost:8080/employees` with the required data as a JSON payload. -| Linux/macOS | Windows | -|-----------------------------------------------------|-----------------------------------------------------| -| $ curl -X POST http://localhost:8080/employees/ - -H 'Content-Type: application/json' - -d '{ - "employee_id": 6, - "first_name": "test", - "last_name": "test", - "email": "test@test.com", - "phone": "882 771 110", - "hire_date": { - "year": 2021, - "month": 12, - "day": 16 - }, - "manager_id": 1, - "job_title": "Sales Manager" - }' | $curl -X POST http://localhost:8080/employees/ -H "Content-Type: application/json" -d "{ \"employee_id\": 6, \"first_name\": \"test\", \"last_name\": \"test\", \"email\": \"test@test.com\", \"phone\": \"882 771 110\", \"hire_date\": { \"year\": 2021, \"month\": 12, \"day\": 16 }, \"manager_id\": 1, \"job_title\": \"Sales Manager\" }" | +| Linux/macOS | Windows | +|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| $ curl -X \ POST http://localhost:8080/employees/ -H 'Content-Type: application/json' \ -d '{ "employee_id": 6, "first_name": "test", "last_name": "test", "email": "test@test.com", "phone": "882 771 110", "hire_date": { "year": 2021, "month": 12, "day": 16 }, "manager_id": 1, "job_title": "Sales Manager" }' | $curl -X \ POST http://localhost:8080/employees/ -H \ "Content-Type: application/json" -d "{ \"employee_id\": 6, \"first_name\": \"test\", \"last_name\": \"test\", \"email\": \"test@test.com\", \"phone\": \"882 771 110\", \"hire_date\": { \"year\": 2021, \"month\": 12, \"day\": 16 }, \"manager_id\": 1, \"job_title\": \"Sales Manager\" }" | ## Learn more diff --git a/swan-lake/resources/featured-scenarios/manage-data-persistence-with-bal-persist.md b/swan-lake/resources/featured-scenarios/manage-data-persistence-with-bal-persist.md index 9dfce25ab01..94636f4d935 100644 --- a/swan-lake/resources/featured-scenarios/manage-data-persistence-with-bal-persist.md +++ b/swan-lake/resources/featured-scenarios/manage-data-persistence-with-bal-persist.md @@ -472,21 +472,6 @@ Running executable Invoke the defined resource method by sending the POST request below to http://localhost:8080/employees with the required data as a JSON payload. -| Linux/macOS | Windows | -|-----------------------------------------------------|-----------------------------------------------------| -| $ curl -X POST http://localhost:8080/employees/ - -H 'Content-Type: application/json' - -d '{ - "id": "6", - "firstName": "test", - "lastName": "test", - "email": "test@test.com", - "phone": "882 771 110", - "hireDate": { - "year": 2021, - "month": 12, - "day": 16 - }, - "managerId": "1", - "jobTitle": "Sales Manager" - }' | $ curl -X POST http://localhost:8080/employees/ -H "Content-Type: application/json" -d "{ \"id\": \"6\", \"firstName\": \"test\", \"lastName\": \"test\", \"email\": \"test@test.com\", \"phone\": \"882 771 110\", \"hireDate\": { \"year\": 2021, \"month\": 12, \"day\": 16 }, \"managerId\": \"1\", \"jobTitle\": \"Sales Manager\" }" | +| Linux/macOS | Windows | +|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| $ curl -X \ POST http://localhost:8080/employees/ -H 'Content-Type: application/json' \ -d '{ "id": "6", "firstName": "test", "lastName": "test", "email": "test@test.com", "phone": "882 771 110", "hireDate": { "year": 2021, "month": 12, "day": 16 }, "managerId": "1", "jobTitle": "Sales Manager" }' | $ curl -X \ POST http://localhost:8080/employees/ -H \ "Content-Type: application/json" -d "{ \"id\": \"6\", \"firstName\": \"test\", \"lastName\": \"test\", \"email\": \"test@test.com\", \"phone\": \"882 771 110\", \"hireDate\": { \"year\": 2021, \"month\": 12, \"day\": 16 }, \"managerId\": \"1\", \"jobTitle\": \"Sales Manager\" }" | From 82b9279e6ad049e362eab41be763e465a75c0d6e Mon Sep 17 00:00:00 2001 From: praneesha Date: Mon, 13 Nov 2023 23:23:28 +0530 Subject: [PATCH 4/6] Fix the issues of the EDI Tool learn page --- swan-lake/integration-tools/edi-tool.md | 214 +++++++++++------------- 1 file changed, 96 insertions(+), 118 deletions(-) diff --git a/swan-lake/integration-tools/edi-tool.md b/swan-lake/integration-tools/edi-tool.md index 3b39d1ae858..6bf37693bea 100644 --- a/swan-lake/integration-tools/edi-tool.md +++ b/swan-lake/integration-tools/edi-tool.md @@ -138,7 +138,7 @@ Follow the steps below to try out an example of generating Ballerina code from a ```ballerina import ballerina/io; - + public function main() returns error? { string ediText = check io:fileReadString("resources/edi-sample.edi"); SimpleOrder newOrder = check hmartOrder:fromEdiString(ediText); @@ -148,22 +148,23 @@ Follow the steps below to try out an example of generating Ballerina code from a 4. Use the generated `toEdiString` function to serialize the `SimpleOrder` records into EDI text, as shown below. -```ballerina -import test_edi.hmartOrder; -import ballerina/io; + ```ballerina + import test_edi.hmartOrder; -public function main() returns error? { - hmartOrder:SimpleOrder salesOrder = {header: {orderId: "ORDER_200", organization: "HMart", date: "17-05-2023"}}; - salesOrder.items.push({item: "A680", quantity: 15}); - salesOrder.items.push({item: "A530", quantity: 2}); - salesOrder.items.push({item: "A500", quantity: 4}); + import ballerina/io; -string orderEDI = check hmartOrder:toEdiString(salesOrder); -io:println (orderEDI); -} -``` + public function main() returns error? { + hmartOrder:SimpleOrder salesOrder = {header: {orderId: "ORDER_200", organization: "HMart", date: "17-05-2023"}}; + salesOrder.items.push({item: "A680", quantity: 15}); + salesOrder.items.push({item: "A530", quantity: 2}); + salesOrder.items.push({item: "A500", quantity: 4}); + + string orderEDI = check hmartOrder:toEdiString(salesOrder); + io:println(orderEDI); + } + ``` -Below is the EDI document generated as the output of the above Ballerina code that can be parsed using the above schema. + Below is the EDI document that gets generated as the output of the above Ballerina code that can be parsed using the above schema. ``` HDRORDER_200HMart17-05-2023~ @@ -174,123 +175,100 @@ Below is the EDI document generated as the output of the above Ballerina code th ### Package generation example -Follow the steps below to try out an example package generation use case of the EDI tool. - -#### Clone the sample project +Below is an example of creating an EDI package and using it. -Clone the [artifacts of the example](https://github.com/ballerina-guides/integration-samples/edi_package_generation/) and extract them to a preferred location. +#### Create the package ->**Info:** The cloned directory includes the artifacts that will be required to try out this example. The `schemas` folder includes the schemas of the `EDIFACT` specifications required for an organization (`CityMart`) to work with the `INVOICE`, `ORDERS`, and `ORDRSP` EDI operations for handling purchase orders. Also, the `main.bal` file, which gets generated by the EDI tool includes the business logic/usage of the package. +If an organization (`CityMart`) needs to work with `X12 850`, `810`, `820`, and `855` for handling purchase orders, then, its integration developers can put schemas of those `X12` specifications into a folder as follows. -#### Generate the package - -Follow the steps below to run the EDI tool and create the Ballerina package. - -1. Navigate to the `edi_package_generation` directory. - -2. Run the tool with the [required arguments](#command-options) to generate the package. - - >**Note:** This example uses the EDI schema files of the [`edi_package_generation` example](https://github.com/ballerina-guides/integration-samples/edi_package_generation/) to generate the package. - - - ``` - $ bal edi libgen -O citymart -n porder -s CityMart/schemas -o CityMart/lib - ``` - - The generated Ballerina package will be, as shown below. +``` +|-- CityMart + |--lib + |--schemas + |--850.json + |--810.json + |--820.json + |--855.json +``` - >**Info:** The code for each EDI schema is generated into a separate module to prevent possible conflicts. +Execute the `libgen` command to generate a Ballerina package, as shown below. - ``` - |-- CityMart - |--lib - |--porder - | |--modules - | | |--m850 - | | | |--G_850.bal - | | | |--transformer.bal - | | |--m810 - | | | |--G_810.bal - | | | |--transformer.bal - | | |--m820 - | | | |--G_820.bal - | | | |--transformer.bal - | | |--m855 - | | |--G_855.bal - | | |--transformer.bal - | |--Ballerina.toml - | |--Module.md - | |--Package.md - | |--porder.bal - | |--rest_connector.bal - | - |--schemas - |--850.json - |--810.json - |--820.json - |--855.json - ``` - -3. Build the generated package. +``` +$ bal edi libgen -O citymart -n porder -s CityMart/schemas -o CityMart/lib +``` - ``` - $ cd edi_package_generation - $ bal pack - ``` +The generated Ballerina package will be, as shown below. -4. Push it to a repository. +``` +|-- CityMart + |--lib + |--porder + | |--modules + | | |--m850 + | | | |--G_850.bal + | | | |--transformer.bal + | | |--m810 + | | | |--G_810.bal + | | | |--transformer.bal + | | |--m820 + | | | |--G_820.bal + | | | |--transformer.bal + | | |--m855 + | | |--G_855.bal + | | |--transformer.bal + | |--Ballerina.toml + | |--Module.md + | |--Package.md + | |--porder.bal + | |--rest_connector.bal + | + |--schemas + |--850.json + |--810.json + |--820.json + |--855.json +``` - >**Tip:** You can push either to the local repository or the remote repository in Ballerina Central. +As seen in the above project structure, the code for each EDI schema is generated into a separate module to prevent possible conflicts. Now, it is possible to build the above project using the `bal pack` command and publish it into [Ballerina Central](https://central.ballerina.io/) using the `bal push` command. - ``````` - $ bal push --repository local - ```` +Then, any Ballerina project can import this package and use it to work with the EDI files related to purchase orders. An example of using this package for reading an `850` file and writing an `855` file is shown below. -#### Use the generated package +```ballerina +import ballerina/io; +import citymart/porder.m850; +import citymart/porder.m855; +public function main() returns error? { + string orderText = check io:fileReadString("orders/d15_05_2023/order10.edi"); + m850:Purchase_Order purchaseOrder = check m850:fromEdiString(orderText); + ... + m855:Purchase_Order_Acknowledgement orderAck = {...}; + string orderAckText = check m855:toEdiString(orderAck); + check io:fileWriteString("acks/d15_05_2023/ack10.edi", orderAckText); +} +``` It is quite common for different trading partners to use variations of the standard EDI formats. In such cases, it is possible to create partner-specific schemas and generate a partner-specific Ballerina package for processing interactions with a particular partner. -Follow the steps below to use the generated package by running the cloned Ballerina project. - ->**Info:** Now, any Ballerina project can import this package and use it to work with the EDI files related to purchase orders. An example of using this package for reading an `ORDERS` file and writing an `INVOIC` file is shown below. - -1. Navigate to the `edi_package-generation` directory. - - >**Info:** You can change the dependency (name and version) of the generated package in the `Ballerina.toml` file of this cloned Ballerina project directory as preferred. +You can convert `X12 850` EDI text to JSON using a cURL command, as shown below. - -2. Run the cloned Ballerina project and validate the output. - - ``` - $ bal run - Compiling source - healthcare_samples/carinbb_ballerina:1.0.0 - - Running executable - ``` - -3. Invoke the API to try it out. - - >**Info:** You can convert `X12 850` EDI text to JSON using a cURL command, as shown below. - - ``` - $curl --request POST \ - --url http://localhost:9090/porderParser/edis/850 \ - --header 'Content-Type: text/plain' \ - --data 'ST*834*12345*005010X220A1~ - BGN*00*12456*20020601*1200****~ - REF*38*ABCD012354~ - AMT*cc payment*467.34*~ - N1*P5**FI*999888777~ - N1*IN**FI*654456654~ - INS*Y*18*025**A***FT~ - REF*0F*202443307~ - REF*1L*123456001~ - NM1*IL*1*SMITH*WILLIAM****ZZ*202443307~ - HD*025**DEN~ - DTP*348*D8*20020701~ - SE*12*12345~' - ``` +``` +$curl --request POST \ + --url http://localhost:9090/porderParser/edis/850 \ + --header 'Content-Type: text/plain' \ + --data 'ST*834*12345*005010X220A1~ +BGN*00*12456*20020601*1200****~ +REF*38*ABCD012354~ +AMT*cc payment*467.34*~ +N1*P5**FI*999888777~ +N1*IN**FI*654456654~ +INS*Y*18*025**A***FT~ +REF*0F*202443307~ +REF*1L*123456001~ +NM1*IL*1*SMITH*WILLIAM****ZZ*202443307~ +HD*025**DEN~ +DTP*348*D8*20020701~ +SE*12*12345~' +``` The above REST call will return a JSON response, as shown below. @@ -418,4 +396,4 @@ The above REST call will return a JSON response, as shown below. The EDI package generated above can also be compiled into a JAR file (using the `bal build` command) and executed as a standalone Ballerina service that processes EDI files via a REST interface. This is useful for microservices environments where the EDI processing functionality can be deployed as a separate microservice. -For example, the `citymart` package generated above can be built and executed as a JAR file. Once executed, it will expose a REST service to work with the `INVOICE`, `ORDERS`, and `ORDRSP` files. +For example, the `citymart` package generated above can be built and executed as a JAR file. Once executed, it will expose a REST service to work with `X12 850`, `810`, `820`, and `855` files. \ No newline at end of file From 5e135e223c5a1434fe536660adcd4a543a48206e Mon Sep 17 00:00:00 2001 From: Manuranga Perera Date: Tue, 14 Nov 2023 10:42:19 +0530 Subject: [PATCH 5/6] Add fourth batch of EIP pages --- components/learn/pattern/CodeView.js | 3 +- components/learn/pattern/CodeView.module.css | 5 ++ components/learn/pattern/readPattern.js | 46 +++++++++++++------ .../[pattern].js | 31 ++++++++----- .../claim-check/claim-check.yml | 3 +- .../publish-subscribe-channel.yml | 6 +++ .../routing-slip/routing-slip.yml | 1 + .../enterprise-integration-patterns/index.js | 6 +-- public/images/patterns/claim-check.svg | 2 + .../patterns/publish-subscribe-channel.svg | 2 + 10 files changed, 75 insertions(+), 30 deletions(-) create mode 100644 public/images/patterns/claim-check.svg create mode 100644 public/images/patterns/publish-subscribe-channel.svg diff --git a/components/learn/pattern/CodeView.js b/components/learn/pattern/CodeView.js index 0dfd3c1cde0..adc1d485ba6 100644 --- a/components/learn/pattern/CodeView.js +++ b/components/learn/pattern/CodeView.js @@ -4,7 +4,7 @@ import { FaRegCopy, FaCheck } from 'react-icons/fa'; import styles from './CodeView.module.css'; import { useState } from 'react' -export default function Counter(props) { +export default function CodeView(props) { const [visible, setVisible] = useState(false); const [copied, setCopied] = useState(false); @@ -21,6 +21,7 @@ export default function Counter(props) { return (
+ {props.name &&
{props.name}
} codeCopy()}> { copied ? : diff --git a/components/learn/pattern/CodeView.module.css b/components/learn/pattern/CodeView.module.css index cf6b97315f9..5081ce29e10 100644 --- a/components/learn/pattern/CodeView.module.css +++ b/components/learn/pattern/CodeView.module.css @@ -22,3 +22,8 @@ .copied { color: #20b6b0; } + +.title { + font-size: 1rem; + color: gray; +} diff --git a/components/learn/pattern/readPattern.js b/components/learn/pattern/readPattern.js index af371de2a5b..ec00d784964 100644 --- a/components/learn/pattern/readPattern.js +++ b/components/learn/pattern/readPattern.js @@ -3,32 +3,50 @@ import fs from 'fs'; import { getHighlighter } from "shiki"; import { load } from "js-yaml"; + export async function readPattern(pattern) { const baseDirectory = path.resolve("pages/learn/enterprise-integration-patterns/enterprise-integration-patterns"); - const highlighter = await getHighlighter({ theme: 'github-light' }); const ymlPath = path.join(baseDirectory, pattern, pattern + ".yml"); - const source = fs.readFileSync(path.join(baseDirectory, pattern, pattern + ".bal"), "utf-8"); - const [header, main] = split(source); - const headerCode = header.length > 0 ? highlighter.codeToHtml(header, { lang: 'ballerina' }) : ""; - const mainCode = highlighter.codeToHtml(main, { lang: 'ballerina' }); - const name = pattern.replace(/-.|^./g, x => " " + x.slice(-1).toUpperCase()); if (!fs.existsSync(ymlPath)) { - return { props: { mainCode, headerCode, name } }; + return readPatternContent({}, pattern, [pattern + ".bal"]); } const yml = fs.readFileSync(ymlPath, "utf-8"); - var patternProps = load(yml) || {}; - patternProps.headerCode = headerCode; - patternProps.mainCode = mainCode; - patternProps.name = patternProps.name ?? name; - patternProps.raw = source; - return { props: patternProps }; + var loadedProps = load(yml) || {}; + return readPatternContent(loadedProps, pattern, loadedProps.files || [pattern + ".bal"]); +} + + async function readPatternContent(loadedProps, pattern, files) { + const name = pattern.replace(/-.|^./g, x => " " + x.slice(-1).toUpperCase()); + const baseDirectory = path.resolve("pages/learn/enterprise-integration-patterns/enterprise-integration-patterns"); + loadedProps.content = []; + for (let i = 0; i < files.length; i++) { + const file = files[i]; + const filePath = path.join(baseDirectory, pattern, file); + const content = fs.readFileSync(filePath, "utf-8"); + const [header, main] = split(content); + const headerCode = await highlight(header); + const mainCode = await highlight(main); + loadedProps.content.push({ headerCode, mainCode, raw: content, name: file }); + } + loadedProps.name = loadedProps.name ?? name; + return { props: loadedProps }; } +const regex = /\n(service|function|public function)/g; + function split(content){ - const regex = /\n(service|function|public function)/g; const i = content.search(regex); if(i < 80) { return ["", content]; } return [content.slice(0, i), content.slice(i)]; } + +const highlighterPromise = getHighlighter({ theme: 'github-light' }); + +async function highlight(src){ + if (!src) { + return ""; + } + return (await highlighterPromise).codeToHtml(src, { lang: 'ballerina' }); +} diff --git a/pages/learn/enterprise-integration-patterns/[pattern].js b/pages/learn/enterprise-integration-patterns/[pattern].js index 54f696d2ea2..3a32da6f549 100644 --- a/pages/learn/enterprise-integration-patterns/[pattern].js +++ b/pages/learn/enterprise-integration-patterns/[pattern].js @@ -34,7 +34,7 @@ import CodeView from '../../../components/learn/pattern/CodeView'; import { readPattern } from '../../../components/learn/pattern/readPattern'; export async function getStaticProps({ params }) { - return readPattern(params.pattern); + return await readPattern(params.pattern); } const baseDirectory = path.resolve("pages/learn/enterprise-integration-patterns/enterprise-integration-patterns"); @@ -46,8 +46,9 @@ export async function getStaticPaths() { const file = files[i]; const filePath = path.join(baseDirectory, file); const stats = fs.statSync(filePath); - const bal = path.join(filePath, file + ".bal"); - if (stats.isDirectory() && fs.existsSync(bal)) { + const balPath = path.join(filePath, file + ".bal"); + const ymlPath = path.join(baseDirectory, file, file + ".yml"); + if (stats.isDirectory() && (fs.existsSync(balPath) || fs.existsSync(ymlPath))) { paths.push({ params: { pattern: file } }); } } @@ -55,7 +56,21 @@ export async function getStaticPaths() { } export default function Pattern(props) { - const router = useRouter(); + const rows = []; + const content = props.content; + const namedCodeViews = content.length > 1; + for (let i = 0; i < content.length; i++) { + const row = content[i]; + rows.push( + + + + + + + + ); + } return ( <> @@ -198,13 +213,7 @@ export default function Pattern(props) { - - - - - - - + {rows} diff --git a/pages/learn/enterprise-integration-patterns/enterprise-integration-patterns/claim-check/claim-check.yml b/pages/learn/enterprise-integration-patterns/enterprise-integration-patterns/claim-check/claim-check.yml index ba8d71995ab..43b22e9826e 100644 --- a/pages/learn/enterprise-integration-patterns/enterprise-integration-patterns/claim-check/claim-check.yml +++ b/pages/learn/enterprise-integration-patterns/enterprise-integration-patterns/claim-check/claim-check.yml @@ -2,6 +2,7 @@ tagline: Reduce message volume and send across the system without losing message desc: Claim Check will store messages in a persistent storage and send a claim to another application to access the origin stored message. category: Message Transformation index: 39 -helps: +helps: Ballerina supports the persistent storage of messages. Popular storage technologies such as SQL, AWS S3 and Redis are available as Ballerina packages. tags: ["Claim Check", "Content Enricher", "Content Filter"] link: https://www.enterpriseintegrationpatterns.com/patterns/messaging/StoreInLibrary.html +files: ["claim-check-consumer.bal", "claim-check-producer.bal"] diff --git a/pages/learn/enterprise-integration-patterns/enterprise-integration-patterns/publish-subscribe-channel/publish-subscribe-channel.yml b/pages/learn/enterprise-integration-patterns/enterprise-integration-patterns/publish-subscribe-channel/publish-subscribe-channel.yml index 4b18fcffdb4..3ec17e3d627 100644 --- a/pages/learn/enterprise-integration-patterns/enterprise-integration-patterns/publish-subscribe-channel/publish-subscribe-channel.yml +++ b/pages/learn/enterprise-integration-patterns/enterprise-integration-patterns/publish-subscribe-channel/publish-subscribe-channel.yml @@ -1,3 +1,9 @@ +name: Publish-Subscribe Channel category: Messaging Channels +tagline: Delivers a copy of a particular event to each receiver index: 7 +desc: Publish-Subscribe Channel delivers a copy of a particular event to each receiver. +helps: Ballerina has a rich set of libraries to interact with various messaging protocols. These include protocols that support publish-subscribe semantics such as Kafka, MQTT, and WebSocket. +tags: ["Publish-Subscribe Channel", "Message Channel", "Message Endpoint", "Message Router"] link: https://www.enterpriseintegrationpatterns.com/patterns/messaging/PublishSubscribeChannel.html +files: ["publisher.bal", "subscriber.bal"] diff --git a/pages/learn/enterprise-integration-patterns/enterprise-integration-patterns/routing-slip/routing-slip.yml b/pages/learn/enterprise-integration-patterns/enterprise-integration-patterns/routing-slip/routing-slip.yml index 5c8ffef0a80..96563ffc7ec 100644 --- a/pages/learn/enterprise-integration-patterns/enterprise-integration-patterns/routing-slip/routing-slip.yml +++ b/pages/learn/enterprise-integration-patterns/enterprise-integration-patterns/routing-slip/routing-slip.yml @@ -5,3 +5,4 @@ index: 33 helps: Ballerina excels in enabling the seamless integration of diverse services with inherent concurrent support, as well as in data binding, type enforcement, and native error-handling capabilities. tags: ["Routing Slip", "Message Channel", "Message Endpoint", "Message Router"] link: https://www.enterpriseintegrationpatterns.com/patterns/messaging/RoutingTable.html +files: ["routing-slip-main.bal", "loyalty-point-service.bal"] diff --git a/pages/learn/enterprise-integration-patterns/index.js b/pages/learn/enterprise-integration-patterns/index.js index ee992a200d9..a7f9117ca40 100644 --- a/pages/learn/enterprise-integration-patterns/index.js +++ b/pages/learn/enterprise-integration-patterns/index.js @@ -36,11 +36,11 @@ export async function getStaticProps() { const file = files[i]; const filePath = path.join(baseDirectory, file); const stats = fs.statSync(filePath); - const bal = path.join(filePath, file + ".bal"); - if (!stats.isDirectory() || !fs.existsSync(bal)) { + const balPath = path.join(filePath, file + ".bal"); + const ymlPath = path.join(baseDirectory, file, file + ".yml"); + if (!stats.isDirectory() || !(fs.existsSync(balPath) || fs.existsSync(ymlPath))) { continue; } - const ymlPath = path.join(baseDirectory, file, file + ".yml"); const name = file.replace(/-.|^./g, x => " " + x.slice(-1).toUpperCase()).trim(); var pattern = loadYml(ymlPath) || {}; pattern.name = pattern.name ?? name; diff --git a/public/images/patterns/claim-check.svg b/public/images/patterns/claim-check.svg new file mode 100644 index 00000000000..41d0b78f6ab --- /dev/null +++ b/public/images/patterns/claim-check.svg @@ -0,0 +1,2 @@ + + diff --git a/public/images/patterns/publish-subscribe-channel.svg b/public/images/patterns/publish-subscribe-channel.svg new file mode 100644 index 00000000000..d9735220f88 --- /dev/null +++ b/public/images/patterns/publish-subscribe-channel.svg @@ -0,0 +1,2 @@ + + From 1ff8dcdf364284663652e5b694bfa27e99879fb0 Mon Sep 17 00:00:00 2001 From: praneesha Date: Tue, 14 Nov 2023 11:30:29 +0530 Subject: [PATCH 6/6] Update the Windows commands --- public/images/data-service-guide-output.png | Bin 0 -> 81852 bytes .../build-a-data-service-in-ballerina.md | 17 ++++++++++++++--- ...anage-data-persistence-with-bal-persist.md | 8 +++++--- .../write-a-graphql-api-with-ballerina.md | 6 +++--- .../write-a-restful-api-with-ballerina.md | 18 +++++++++--------- 5 files changed, 31 insertions(+), 18 deletions(-) create mode 100644 public/images/data-service-guide-output.png diff --git a/public/images/data-service-guide-output.png b/public/images/data-service-guide-output.png new file mode 100644 index 0000000000000000000000000000000000000000..cbea541052a8f154abb45d29680c221bb719d828 GIT binary patch literal 81852 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

1#^C}(@Zq8jy9i;ALGxw6 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 literal 0 HcmV?d00001 diff --git a/swan-lake/resources/featured-scenarios/build-a-data-service-in-ballerina.md b/swan-lake/resources/featured-scenarios/build-a-data-service-in-ballerina.md index 0384e10eb39..6adfd4691a3 100644 --- a/swan-lake/resources/featured-scenarios/build-a-data-service-in-ballerina.md +++ b/swan-lake/resources/featured-scenarios/build-a-data-service-in-ballerina.md @@ -459,6 +459,13 @@ $ bal run You view the output below. +``` +Compiling source + foo/data_service:0.1.0 + +Running executable +``` + >**Info:** This creates an `/employees` endpoint on port `8080`, which can be accessed via a browser by visiting `http://locahost:8080/employees`. @@ -466,9 +473,13 @@ be accessed via a browser by visiting `http://locahost:8080/employees`. Invoke the defined resource method by sending the `POST` request below to `http://localhost:8080/employees` with the required data as a JSON payload. -| Linux/macOS | Windows | -|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| $ curl -X \ POST http://localhost:8080/employees/ -H 'Content-Type: application/json' \ -d '{ "employee_id": 6, "first_name": "test", "last_name": "test", "email": "test@test.com", "phone": "882 771 110", "hire_date": { "year": 2021, "month": 12, "day": 16 }, "manager_id": 1, "job_title": "Sales Manager" }' | $curl -X \ POST http://localhost:8080/employees/ -H \ "Content-Type: application/json" -d "{ \"employee_id\": 6, \"first_name\": \"test\", \"last_name\": \"test\", \"email\": \"test@test.com\", \"phone\": \"882 771 110\", \"hire_date\": { \"year\": 2021, \"month\": 12, \"day\": 16 }, \"manager_id\": 1, \"job_title\": \"Sales Manager\" }" | +``` +curl -X POST http://localhost:8080/employees/ -H "Content-Type: application/json" -d "{ \"employee_id\": 6, \"first_name\": \"test\", \"last_name\": \"test\", \"email\": \"test@test.com\", \"phone\": \"882 771 110\", \"hire_date\": { \"year\": 2021, \"month\": 12, \"day\": 16 }, \"manager_id\": 1, \"job_title\": \"Sales Manager\" }" +``` + +You view a row added to the **Employees** table as shown below. + +![data service output](/images/data-service-guide-output.png) ## Learn more diff --git a/swan-lake/resources/featured-scenarios/manage-data-persistence-with-bal-persist.md b/swan-lake/resources/featured-scenarios/manage-data-persistence-with-bal-persist.md index 94636f4d935..7ddae779008 100644 --- a/swan-lake/resources/featured-scenarios/manage-data-persistence-with-bal-persist.md +++ b/swan-lake/resources/featured-scenarios/manage-data-persistence-with-bal-persist.md @@ -472,6 +472,8 @@ Running executable Invoke the defined resource method by sending the POST request below to http://localhost:8080/employees with the required data as a JSON payload. -| Linux/macOS | Windows | -|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| $ curl -X \ POST http://localhost:8080/employees/ -H 'Content-Type: application/json' \ -d '{ "id": "6", "firstName": "test", "lastName": "test", "email": "test@test.com", "phone": "882 771 110", "hireDate": { "year": 2021, "month": 12, "day": 16 }, "managerId": "1", "jobTitle": "Sales Manager" }' | $ curl -X \ POST http://localhost:8080/employees/ -H \ "Content-Type: application/json" -d "{ \"id\": \"6\", \"firstName\": \"test\", \"lastName\": \"test\", \"email\": \"test@test.com\", \"phone\": \"882 771 110\", \"hireDate\": { \"year\": 2021, \"month\": 12, \"day\": 16 }, \"managerId\": \"1\", \"jobTitle\": \"Sales Manager\" }" | +``` +curl -X POST http://localhost:8080/employees/ -H "Content-Type: application/json" -d "{ \"id\": \"6\", \"firstName\": \"test\", \"lastName\": \"test\", \"email\": \"test@test.com\", \"phone\": \"882 771 110\", \"hireDate\": { \"year\": 2021, \"month\": 12, \"day\": 16 }, \"managerId\": \"1\", \"jobTitle\": \"Sales Manager\" }" +``` + +The entered employee ID `6` will be returned as the response. diff --git a/swan-lake/resources/featured-scenarios/write-a-graphql-api-with-ballerina.md b/swan-lake/resources/featured-scenarios/write-a-graphql-api-with-ballerina.md index f7ca2d868f8..de6f2923b28 100644 --- a/swan-lake/resources/featured-scenarios/write-a-graphql-api-with-ballerina.md +++ b/swan-lake/resources/featured-scenarios/write-a-graphql-api-with-ballerina.md @@ -420,9 +420,9 @@ type Mutation { Execute the cURL command below to retrieve all the data from the endpoint. -| Linux/macOS | Windows | -|-----------------------------------------------------|-----------------------------------------------------| -| $ curl -X POST -H "Content-type: application/json" -H "scope: unknown" -d '{ "query": "query { all { country cases active} }" }' 'http://localhost:9000/covid19' | $ curl -X POST -H "Content-type: application/json" -H "scope: unknown" -d "{ \"query\": \"query { all { country cases active} }\" }" http://localhost:9000/covid19 | +``` +curl -X POST -H "Content-type: application/json" -H "scope: unknown" -d "{ \"query\": \"query { all { country cases active} }\" }" http://localhost:9000/covid19 +``` In this request: - An HTTP POST request is sent to the GraphQL endpoint. diff --git a/swan-lake/resources/featured-scenarios/write-a-restful-api-with-ballerina.md b/swan-lake/resources/featured-scenarios/write-a-restful-api-with-ballerina.md index 41c795bc6c3..11fc5375715 100644 --- a/swan-lake/resources/featured-scenarios/write-a-restful-api-with-ballerina.md +++ b/swan-lake/resources/featured-scenarios/write-a-restful-api-with-ballerina.md @@ -327,9 +327,9 @@ In another terminal, execute the cURL commands below one by one to try out the s Execute the cURL command below. -| Linux/macOS | Windows | -|-----------------------------------------------------|-----------------------------------------------------| -| $ curl http://localhost:9000/covid/status/countries | $ curl http://localhost:9000/covid/status/countries | +``` +curl http://localhost:9000/covid/status/countries +``` You view the output below. @@ -341,9 +341,9 @@ You view the output below. Execute the cURL command below. -| Linux/macOS | Windows | -|-----------------------------------------------------|-----------------------------------------------------| -| $ curl http://localhost:9000/covid/status/countries -d "[{\"iso_code\":\"DEU\", \"country\":\"Germany\", \"cases\":159333, \"deaths\":7390, \"recovered\":126084, \"active\":6833}]" -H "Content-Type: application/json" | $ curl http://localhost:9000/covid/status/countries -d "[{\"iso_code\":\"DEU\", \"country\":\"Germany\", \"cases\":159333, \"deaths\":7390, \"recovered\":126084, \"active\":6833}]" -H "Content-Type: application/json" | +``` +curl http://localhost:9000/covid/status/countries -d "[{\"iso_code\":\"DEU\", \"country\":\"Germany\", \"cases\":159333, \"deaths\":7390, \"recovered\":126084, \"active\":6833}]" -H "Content-Type: application/json" +``` You view the output below. @@ -355,9 +355,9 @@ You view the output below. Execute the cURL command below. -| Linux/macOS | Windows | -|-----------------------------------------------------|-----------------------------------------------------| -| $ curl http://localhost:9000/covid/status/countries/AFG | $ curl http://localhost:9000/covid/status/countries/AFG | +``` +curl http://localhost:9000/covid/status/countries/AFG +``` You view the output below.