├── .github
├── dependabot.yml
└── workflows
│ ├── .node-build.yml.swo
│ ├── codeql-analysis.yml
│ ├── node-build.yml
│ └── stale.yml
├── .gitignore
├── Dockerfile
├── LICENSE
├── README.md
├── cra-client
├── README.md
├── build
│ └── egeria_logo.png
├── package.json
├── public
│ ├── egeria_logo.png
│ ├── favicon.ico
│ └── index.html
└── src
│ ├── App.js
│ ├── Frame.js
│ ├── StoryContent.js
│ ├── app.scss
│ ├── auth
│ ├── Login.css
│ ├── NoServerName.js
│ ├── index.js
│ ├── loggedOut.js
│ └── login.js
│ ├── components
│ ├── Dino
│ │ ├── Dino.js
│ │ ├── DinoInterface.png
│ │ ├── HELP.md
│ │ ├── HelpHandler.js
│ │ ├── TopologyDiagram.png
│ │ ├── components
│ │ │ ├── details-panel
│ │ │ │ ├── AccessServiceDisplay.js
│ │ │ │ ├── AuditLogHandler.js
│ │ │ │ ├── ConfigLogHandler.js
│ │ │ │ ├── DetailsPanel.js
│ │ │ │ ├── EngineDisplay.js
│ │ │ │ ├── EngineServiceDisplay.js
│ │ │ │ ├── IntegrationServiceDisplay.js
│ │ │ │ ├── PlatformDisplay.js
│ │ │ │ ├── PlatformServicesDisplay.js
│ │ │ │ ├── ServerCohortsDisplay.js
│ │ │ │ ├── ServerConfigEventBusDisplay.js
│ │ │ │ ├── ServerConfigRepositoryServicesDisplay.js
│ │ │ │ ├── ServerConfigServicesDisplay.js
│ │ │ │ ├── ServerDisplay.js
│ │ │ │ ├── ServerRunHistoryHandler.js
│ │ │ │ ├── ServerServicesDisplay.js
│ │ │ │ ├── ServerStatusDisplay.js
│ │ │ │ ├── ServiceDisplay.js
│ │ │ │ ├── ViewServiceDisplay.js
│ │ │ │ ├── auditlog.scss
│ │ │ │ └── details-panel.scss
│ │ │ ├── diagram
│ │ │ │ ├── DiagramManager.js
│ │ │ │ ├── DiagramUtils.js
│ │ │ │ ├── TopologyDiagram.js
│ │ │ │ ├── cohort-32.png
│ │ │ │ ├── diagram.scss
│ │ │ │ ├── platform-32.png
│ │ │ │ ├── server-32.png
│ │ │ │ └── service-32.png
│ │ │ ├── graph-controls
│ │ │ │ └── GraphControls.js
│ │ │ ├── portal
│ │ │ │ ├── Portal.js
│ │ │ │ └── portal.scss
│ │ │ └── resource-selection
│ │ │ │ ├── PlatformSelector.js
│ │ │ │ ├── ServerSelector.js
│ │ │ │ └── resource-selector.scss
│ │ ├── contexts
│ │ │ ├── InteractionContext.js
│ │ │ ├── RequestContext.js
│ │ │ └── ResourcesContext.js
│ │ └── dino.scss
│ ├── GlossaryAuthor
│ │ ├── GlossaryAuthor.js
│ │ ├── _glossaryAuthor.scss
│ │ └── components
│ │ │ ├── GlossaryAuthorBreadCrumb.js
│ │ │ ├── GlossaryChildren.js
│ │ │ ├── GlossaryQuickTerms.js
│ │ │ ├── NodeCard
│ │ │ ├── NodeCard.js
│ │ │ └── _nodeCard.scss
│ │ │ ├── NodeChildren.js
│ │ │ ├── RequiredMessage.js
│ │ │ ├── authoringforms
│ │ │ ├── NodeInput.jsx
│ │ │ ├── NodeReadOnly.js
│ │ │ ├── RelationshipInput.js
│ │ │ └── RelationshipReadOnly.js
│ │ │ ├── create
│ │ │ ├── CreateCategorizedTerm.js
│ │ │ ├── CreateCategoryWizard.js
│ │ │ ├── CreateGlossaryWizard.js
│ │ │ ├── CreateNode.js
│ │ │ ├── CreateNodeWizard.js
│ │ │ ├── CreateRelationshipWizard.js
│ │ │ └── CreateTermWizard.js
│ │ │ ├── delete
│ │ │ ├── DeleteNodeWizard.js
│ │ │ ├── DeleteRelationshipWizard.js
│ │ │ └── DeleteWizard.js
│ │ │ ├── navigations
│ │ │ ├── GlossaryAuthorCategoriesNavigation.js
│ │ │ ├── GlossaryAuthorChildCategoriesNavigation.js
│ │ │ ├── GlossaryAuthorGraphNavigation.js
│ │ │ ├── GlossaryAuthorNavigation.js
│ │ │ ├── GlossaryAuthorNavigationError.js
│ │ │ ├── GlossaryAuthorRoutes.js
│ │ │ ├── GlossaryAuthorTermsNavigation.js
│ │ │ ├── SearchNodeWizard.js
│ │ │ ├── SearchWizard.js
│ │ │ ├── StartingCategoryNavigation.js
│ │ │ ├── StartingGlossaryNavigation.js
│ │ │ ├── StartingNodeNavigation.js
│ │ │ └── StartingTermNavigation.js
│ │ │ ├── properties
│ │ │ ├── GovernanceClassifications.js
│ │ │ ├── NodeTypes.js
│ │ │ ├── PathAnalyser.js
│ │ │ ├── RelationshipTypes.js
│ │ │ └── SystemAttributes.js
│ │ │ ├── update
│ │ │ ├── DisplayRelationship.js
│ │ │ ├── NodeDisplayDetails.js
│ │ │ ├── RelationshipDisplayDetails.js
│ │ │ ├── UpdateCategory.js
│ │ │ ├── UpdateGlossary.js
│ │ │ ├── UpdateNode.js
│ │ │ ├── UpdateNodePropertiesWizard.js
│ │ │ ├── UpdateRelationshipInline.js
│ │ │ ├── UpdateRelationshipPropertiesWizard.js
│ │ │ ├── UpdateTerm.js
│ │ │ └── UpdateWizard.js
│ │ │ ├── useDebounce.js
│ │ │ ├── views
│ │ │ ├── GlossaryAuthorChildrenRoutes.js
│ │ │ ├── NodeTableView.js
│ │ │ ├── NodeUpdateView.js
│ │ │ └── RelationshipsView.js
│ │ │ └── visualisation
│ │ │ ├── GlossaryAuthorVisualisation.js
│ │ │ ├── HELP.md
│ │ │ ├── HelpHandler.js
│ │ │ ├── README.md
│ │ │ ├── components
│ │ │ ├── details-panel
│ │ │ │ ├── DetailsPanel.js
│ │ │ │ ├── InstanceDisplay.js
│ │ │ │ ├── InstancePropertiesDisplay.js
│ │ │ │ ├── InstanceStatusDisplay.js
│ │ │ │ ├── NodeDisplay.js
│ │ │ │ ├── RelationshipDisplay.js
│ │ │ │ └── details-panel.scss
│ │ │ ├── diagram
│ │ │ │ ├── Diagram.js
│ │ │ │ ├── DiagramManager.js
│ │ │ │ └── DiagramUtils.js
│ │ │ ├── graph-controls
│ │ │ │ ├── CreateNodeButtonWidget.js
│ │ │ │ ├── CreateRelationshipButtonWidget.js
│ │ │ │ ├── DeleteButtonWidget.js
│ │ │ │ ├── GraphControls.js
│ │ │ │ ├── HistoryResultHandler.js
│ │ │ │ ├── SearchNodeButtonWidget.js
│ │ │ │ ├── TraversalResultHandler.js
│ │ │ │ ├── UpdateButtonWidget.js
│ │ │ │ ├── history.scss
│ │ │ │ └── traversal.scss
│ │ │ ├── instance-retrieval
│ │ │ │ ├── FilterManager.js
│ │ │ │ ├── InstanceRetrieval.js
│ │ │ │ ├── filter.scss
│ │ │ │ └── instance-retriever.scss
│ │ │ └── portal
│ │ │ │ ├── Portal.js
│ │ │ │ └── portal.scss
│ │ │ ├── contexts
│ │ │ ├── InstancesContext.js
│ │ │ └── InteractionContext.js
│ │ │ ├── glove.scss
│ │ │ └── question-mark-32.png
│ ├── Home.js
│ ├── Info
│ │ ├── Info.js
│ │ └── _info.scss
│ ├── RepositoryExplorer
│ │ ├── HELP.md
│ │ ├── HelpHandler.js
│ │ ├── README.md
│ │ ├── RepositoryExplorer.js
│ │ ├── RexInterface.png
│ │ ├── SearchResults.png
│ │ ├── components
│ │ │ ├── details-panel
│ │ │ │ ├── DetailsPanel.js
│ │ │ │ ├── EntityDisplay.js
│ │ │ │ ├── EntityProxyDisplay.js
│ │ │ │ ├── InstanceClassificationsDisplay.js
│ │ │ │ ├── InstanceDisplay.js
│ │ │ │ ├── InstancePropertiesDisplay.js
│ │ │ │ ├── InstanceStatusDisplay.js
│ │ │ │ ├── RelationshipDisplay.js
│ │ │ │ └── details-panel.scss
│ │ │ ├── diagram
│ │ │ │ ├── Diagram.js
│ │ │ │ ├── DiagramManager.js
│ │ │ │ └── DiagramUtils.js
│ │ │ ├── graph-controls
│ │ │ │ ├── GraphControls.js
│ │ │ │ ├── HistoryResultHandler.js
│ │ │ │ ├── TraversalResultHandler.js
│ │ │ │ ├── history.scss
│ │ │ │ └── traversal.scss
│ │ │ ├── instance-retrieval
│ │ │ │ ├── DateTimePicker.jsx
│ │ │ │ ├── FilterManager.js
│ │ │ │ ├── HistoricalDateTime.jsx
│ │ │ │ ├── InstanceRetrieval.js
│ │ │ │ ├── InstanceSearch.js
│ │ │ │ ├── SearchResultHandler.js
│ │ │ │ ├── filter.scss
│ │ │ │ ├── instance-retriever.scss
│ │ │ │ └── search-results.scss
│ │ │ ├── portal
│ │ │ │ ├── Portal.js
│ │ │ │ └── portal.scss
│ │ │ └── resource-selection
│ │ │ │ ├── EnterpriseControl.js
│ │ │ │ ├── ServerSelector.js
│ │ │ │ └── resource-selector.scss
│ │ ├── contexts
│ │ │ ├── InstancesContext.js
│ │ │ ├── InteractionContext.js
│ │ │ ├── RepositoryServerContext.js
│ │ │ └── TypesContext.js
│ │ └── rex.scss
│ ├── ServerAuthor
│ │ ├── ServerAuthor.js
│ │ ├── components
│ │ │ ├── AllServers.jsx
│ │ │ ├── BasicConfig.jsx
│ │ │ ├── ConfigurationSteps.jsx
│ │ │ ├── ConfigureAuditLog.jsx
│ │ │ ├── ConfigureAuditLogDestinations.jsx
│ │ │ ├── ConfigureIntegrationServices.jsx
│ │ │ ├── ConfigureLocalRepository.jsx
│ │ │ ├── ConfigureOMArchives.jsx
│ │ │ ├── ConfigureRepositoryProxyConnectors.jsx
│ │ │ ├── ConfigureViewServices.jsx
│ │ │ ├── NavigationButtons.jsx
│ │ │ ├── RegisterCohorts.jsx
│ │ │ ├── ServerAuthorWizard.jsx
│ │ │ ├── accessServices
│ │ │ │ ├── ConfigureAccessServices.jsx
│ │ │ │ └── options
│ │ │ │ │ ├── AllOptions.jsx
│ │ │ │ │ ├── AllZonesOptions.jsx
│ │ │ │ │ ├── AssetLineageOptions.jsx
│ │ │ │ │ ├── CommunityProfileOptions.jsx
│ │ │ │ │ └── SupportedZoneOption.jsx
│ │ │ ├── defaults
│ │ │ │ ├── auditLogDestinations.js
│ │ │ │ ├── integrationServices.js
│ │ │ │ ├── serverConfigElements.js
│ │ │ │ ├── serverTypes.js
│ │ │ │ └── viewServices.js
│ │ │ └── serverConfig.scss
│ │ └── contexts
│ │ │ └── ServerAuthorContext.js
│ ├── TypeExplorer
│ │ ├── HELP.md
│ │ ├── HelpHandler.js
│ │ ├── InheritanceDiagram.png
│ │ ├── NeighborhoodDiagram.png
│ │ ├── TexInterface.png
│ │ ├── TypeExplorer.js
│ │ ├── components
│ │ │ ├── details-panel
│ │ │ │ ├── ClassificationEntitiesDisplay.js
│ │ │ │ ├── ClassificationPropertiesDisplay.js
│ │ │ │ ├── ClassificationTypeDisplay.js
│ │ │ │ ├── DetailsPanel.js
│ │ │ │ ├── EntityClassificationsDisplay.js
│ │ │ │ ├── EntityPropertiesDisplay.js
│ │ │ │ ├── EntityRelationshipsDisplay.js
│ │ │ │ ├── EntityTypeDisplay.js
│ │ │ │ ├── EnumTypeDisplay.js
│ │ │ │ ├── RelationshipEntitiesDisplay.js
│ │ │ │ ├── RelationshipPropertiesDisplay.js
│ │ │ │ ├── RelationshipTypeDisplay.js
│ │ │ │ ├── TypeDisplay.js
│ │ │ │ └── details-panel.scss
│ │ │ ├── diagram
│ │ │ │ ├── DiagramManager.js
│ │ │ │ ├── EntityInheritanceDiagram.js
│ │ │ │ ├── EntityNeighborhoodDiagram.js
│ │ │ │ └── diagram.scss
│ │ │ ├── focus-controls
│ │ │ │ ├── FocusControls.js
│ │ │ │ └── focus-controls.scss
│ │ │ ├── portal
│ │ │ │ ├── Portal.js
│ │ │ │ └── portal.scss
│ │ │ └── resource-selection
│ │ │ │ ├── DeprecatedAttributeControl.js
│ │ │ │ ├── DeprecatedTypeControl.js
│ │ │ │ ├── EnterpriseControl.js
│ │ │ │ ├── ServerSelector.js
│ │ │ │ └── resource-selector.scss
│ │ ├── contexts
│ │ │ ├── FocusContext.js
│ │ │ ├── InteractionContext.js
│ │ │ ├── RequestContext.js
│ │ │ └── TypesContext.js
│ │ └── tex.scss
│ └── common
│ │ ├── AuthorStringList.jsx
│ │ ├── DateTimePicker.js
│ │ ├── RestCaller.js
│ │ └── Validators.js
│ ├── contexts
│ └── IdentificationContext.js
│ ├── images
│ ├── carbon
│ │ ├── Egeria_add_16.js
│ │ ├── Egeria_add_32.js
│ │ ├── Egeria_close_16.js
│ │ ├── Egeria_datavis_16.js
│ │ ├── Egeria_datavis_32.js
│ │ ├── Egeria_delete_16.js
│ │ ├── Egeria_delete_32.js
│ │ ├── Egeria_edit_16.js
│ │ ├── Egeria_edit_32.js
│ │ ├── Egeria_parent_child_32.js
│ │ ├── Egeria_search_16.js
│ │ ├── Fade16.js
│ │ ├── Launch_32.js
│ │ └── Launch_inline_32.js
│ ├── github
│ │ └── GitHub_logo_32.js
│ ├── lf
│ │ └── Linux_Foundation_logo.js
│ └── odpi
│ │ ├── Egeria_category_16.js
│ │ ├── Egeria_category_32.js
│ │ ├── Egeria_glossary_16.js
│ │ ├── Egeria_glossary_32.js
│ │ ├── Egeria_glossary_author_16.js
│ │ ├── Egeria_glossary_author_32.js
│ │ ├── Egeria_logo_black_80.js
│ │ ├── Egeria_logo_color.js
│ │ ├── Egeria_logo_color_32.js
│ │ ├── Egeria_logo_color_400.js
│ │ ├── Egeria_logo_color_64.js
│ │ ├── Egeria_logo_white.js
│ │ ├── Egeria_logo_white_110.js
│ │ ├── Egeria_project_16.js
│ │ ├── Egeria_project_32.js
│ │ ├── Egeria_relationships_16.js
│ │ ├── Egeria_term_16.js
│ │ └── Egeria_term_32.js
│ ├── imagesHolder
│ ├── carbon
│ │ ├── add.svg
│ │ ├── chart--relationship.svg
│ │ ├── close.svg
│ │ ├── concept.svg
│ │ ├── copy.svg
│ │ ├── data-vis--1.svg
│ │ ├── edit.svg
│ │ ├── favorite--filled.svg
│ │ ├── favorite.svg
│ │ ├── launch.svg
│ │ ├── parent-child.svg
│ │ ├── paste.svg
│ │ ├── search.svg
│ │ ├── table.svg
│ │ ├── term.svg
│ │ ├── trash-can.svg
│ │ └── tree-view--alt.svg
│ ├── github
│ │ └── logo--github.svg
│ ├── lf
│ │ └── Linux_Foundation_logo_2013.svg
│ └── odpi
│ │ ├── Egeria_glossary.svg
│ │ ├── Egeria_glossary_author.svg
│ │ ├── Egeria_project.svg
│ │ ├── ODPiEgeria_Icon_canonicalglossary.svg
│ │ ├── ODPiEgeria_Icon_glossary.svg
│ │ ├── ODPiEgeria_Icon_glossarycategory.svg
│ │ ├── ODPiEgeria_Icon_glossaryterm.svg
│ │ ├── ODPiEgeria_Icon_taxonomy.svg
│ │ ├── ODPiEgeria_Icon_taxonomycanonicalglossary.svg
│ │ ├── egeria-black.svg
│ │ ├── egeria-color.svg
│ │ ├── egeria-white.svg
│ │ └── egeria_logo.png
│ ├── index.js
│ ├── index.scss
│ └── react.png
├── cra-server
├── .env_sample
├── db
│ ├── index.js
│ └── users.js
├── functions
│ ├── getAxiosInstance.js
│ ├── getCertificateFromFileSystem.js
│ ├── loggedIn.js
│ ├── passportConfiguration.js
│ ├── serverNameMiddleware.js
│ └── setConfigurationFromEnv.js
├── index.js
├── o.jar
├── package.json
├── router
│ └── routes.js
└── validations
│ ├── validateAdminURL.js
│ └── validateURL.js
├── docs
├── contributors
│ └── contributorguide.md
├── design
│ └── glossary-author
│ │ ├── README.md
│ │ ├── Story board - Subject Area UI.drawio
│ │ ├── SubjectAreaMockups.drawio
│ │ └── TEX-design.drawio
└── security-fixes.md
└── ssl
├── EgeriaReactUIServer.p12
├── EgeriaRootCA.p12
└── keys
├── EgeriaReactUIServer.cert.pem
└── EgeriaReactUIServer.key.pem
/.github/dependabot.yml:
--------------------------------------------------------------------------------
1 | # SPDX-License-Identifier: Apache-2.0
2 | # Copyright Contributors to the ODPi Egeria project.
3 | version: 2
4 | updates:
5 | - package-ecosystem: npm
6 | directory: "/cra-client"
7 | schedule:
8 | interval: weekly
9 | open-pull-requests-limit: 25
10 | reviewers:
11 | - davidradl
12 | - package-ecosystem: npm
13 | directory: "/cra-server"
14 | schedule:
15 | interval: weekly
16 | open-pull-requests-limit: 25
17 | reviewers:
18 | - davidradl
19 | - package-ecosystem: "github-actions"
20 | directory: "/"
21 | schedule:
22 | interval: weekly
23 | open-pull-requests-limit: 25
24 | - package-ecosystem: docker
25 | directory: "/"
26 | schedule:
27 | interval: weekly
28 | open-pull-requests-limit: 5
29 |
--------------------------------------------------------------------------------
/.github/workflows/.node-build.yml.swo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/odpi/egeria-react-ui/fcc6c58643b639da61799ba52b138eea044c2f4a/.github/workflows/.node-build.yml.swo
--------------------------------------------------------------------------------
/.github/workflows/stale.yml:
--------------------------------------------------------------------------------
1 | # SPDX-License-Identifier: Apache-2.0
2 | # Copyright Contributors to the ODPi Egeria project.
3 | ---
4 | name: Mark stale issues and pull requests
5 |
6 | on:
7 | schedule:
8 | - cron: "0 0 * * *"
9 |
10 | jobs:
11 | stale:
12 | runs-on: ubuntu-latest
13 | steps:
14 | - name: check stale issues and prs
15 | if: startsWith(github.repository,'odpi/')
16 | uses: actions/stale@v9
17 | with:
18 | repo-token: ${{ secrets.GITHUB_TOKEN }}
19 | stale-issue-message: >
20 | This issue has been automatically marked as stale because it has
21 | not had recent activity. It will be closed in 20 days if no
22 | further activity occurs. Thank you for your contributions.
23 | stale-pr-message: >
24 | This PR has been automatically marked as stale because it has not
25 | had recent activity. It will be closed in 20 days if no further
26 | activity occurs. Thank you for your contributions.
27 | stale-issue-label: 'no-issue-activity'
28 | stale-pr-label: 'no-pr-activity'
29 | days-before-stale: 60
30 | days-before-close: 20
31 | exempt-issue-labels: 'pinned'
32 | exempt-pr-labels: 'pinned'
33 | operations-per-run: 30
34 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # SPDX-License-Identifier: Apache-2.0
2 | # Copyright Contributors to the ODPi Egeria project.
3 |
4 | # build dir
5 | **/build/**
6 | # IntelliJ
7 | *.iml
8 | **.iml
9 | *.ipr
10 | *.iws
11 | .idea
12 | venv
13 |
14 | # Eclipse
15 | .cache
16 | .classpath
17 | .project
18 | .checkstyle
19 |
20 | .settings
21 | .externalToolBuilders
22 | maven-eclipse.xml
23 |
24 | # Mac OS
25 | __MACOSX
26 |
27 | # other files
28 | .DS_Store
29 | *.swp
30 |
31 | package-lock.json
32 | **/node_modules/**
33 |
34 | # vscode editor
35 | **/.vscode*/**
36 | **/.factorypath
37 | **/**.code-workspace
38 |
39 | # .env
40 | cra-server/.env
41 | cra-client/.env
42 |
--------------------------------------------------------------------------------
/Dockerfile:
--------------------------------------------------------------------------------
1 | # SPDX-License-Identifier: Apache-2.0
2 | # Copyright Contributors to the Egeria project
3 |
4 | # This Dockerfile should be run from the parent directory of the egeria-reac-ui directory
5 | # ie
6 | # docker -f ./Dockerfile
7 |
8 | # The npm build for the UI must have fully completed prior to this
9 |
10 | FROM docker.io/library/node:14-alpine
11 |
12 | # Thes are optional tags used to add additional metadata into the docker image
13 | # These may be supplied by the pipeline in future - until then they will default
14 |
15 | # Note this version matches the server version string not the UI package.json version string.
16 | ARG version=3.1-SNAPSHOT
17 | ARG VCS_REF=unknown
18 | ARG VCS_ORIGIN=unknown
19 | ARG BUILD_TIME=unknown
20 | ARG VCS_DATE=unknown
21 |
22 | ENV version ${version}
23 |
24 | # Labels from https://github.com/opencontainers/image-spec/blob/master/annotations.md#pre-defined-annotation-keys (with additions prefixed ext)
25 | LABEL org.opencontainers.image.vendor = "ODPi" \
26 | org.opencontainers.image.title = "Egeria" \
27 | org.opencontainers.image.description = "Egeria Presentation Server" \
28 | org.opencontainers.image.url = "https://egeria.odpi.org/" \
29 | org.opencontainers.image.source = "$VCS_ORIGIN" \
30 | org.opencontainers.image.authors = "ODPi Egeria" \
31 | org.opencontainers.image.revision = "$VCS_REF" \
32 | org.opencontainers.image.licenses = "Apache-2.0" \
33 | org.opencontainers.image.created = "$BUILD_TIME" \
34 | org.opencontainers.image.version = "$version" \
35 | org.opencontainers.image.documentation = "https://github.com/odpi/egeria-react-ui" \
36 | org.opencontainers.image.ext.vcs-date = "$VCS_DATE" \
37 | org.opencontainers.image.ext.docker.cmd = "docker run -d -p 8091:8091 odpi/egeria-presentation-server" \
38 | org.opencontainers.image.ext.docker.debug = "docker exec -it $CONTAINER /bin/sh" \
39 |
40 |
41 | RUN mkdir -p /home/node/egeria-react-ui
42 | WORKDIR /home/node/egeria-react-ui
43 |
44 | # Note we copy the entire tree -- once the dev team have clarified what is needed, this can be optimized
45 | # We also do not yet do a multi stage build, as this requires clarity over what needs to be present in the runtime
46 | # vs the development environment. In addition we may wish to use nginx or similar for a production case.
47 |
48 | COPY --chown=node:node . .
49 |
50 |
51 | USER 1000
52 | EXPOSE 8091
53 |
54 | WORKDIR cra-server
55 |
56 | CMD [ "npm", "run", "prod" ]
57 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | # Egeria Ecosystem UI (React UI)
5 |
6 | The Egeria Ecosystem UI is a multitenanted user interface with eco-system and solution capabilities for use by the governance team. It's documentation is [https://egeria-project.org/user-interfaces/ecosystem/](https://egeria-project.org/user-interfaces/ecosystem/)
7 |
8 | Contributors see the [Contributor Guide](docs/contributors/contributorguide.md).
9 |
10 | Security history is [here](docs/security-fixes.md)
11 |
12 | ----
13 | License: [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/),
14 | Copyright Contributors to the ODPi Egeria project.
--------------------------------------------------------------------------------
/cra-client/build/egeria_logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/odpi/egeria-react-ui/fcc6c58643b639da61799ba52b138eea044c2f4a/cra-client/build/egeria_logo.png
--------------------------------------------------------------------------------
/cra-client/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "egeria-react-ui-client",
3 | "version": "3.11.0-rc.0",
4 | "description": "Egeria React User Interface client component.",
5 | "private": true,
6 | "dependencies": {
7 | "@babel/core": "^7.16.5",
8 | "@carbon/elements": "^10.49.0",
9 | "@carbon/grid": "^11.21.0",
10 | "@carbon/icons-react": "^10.44.0",
11 | "@carbon/layout": "^11.20.0",
12 | "@carbon/themes": "^11.29.1",
13 | "@rollup/plugin-babel": "^5.3.0",
14 | "axios": "^1.6.7",
15 | "carbon-components": "^10.50.0",
16 | "carbon-components-react": "^7.50.0",
17 | "carbon-icons": "^7.0.7",
18 | "core-js": "^3.20.0",
19 | "d3": "^7.8.3",
20 | "date-fns": "^3.3.1",
21 | "fibers": "^5.0.0",
22 | "joi": "^17.5.0",
23 | "node-forge": "^1.3.1",
24 | "prop-types": "^15.7.2",
25 | "react": "^17.0.2",
26 | "react-bootstrap": "^2.10.0",
27 | "react-cookie": "^7.0.2",
28 | "react-dom": "^17.0.2",
29 | "react-json-pretty": "^2.2.0",
30 | "react-markdown": "^6.0.3",
31 | "react-router-dom": "^5.3.0",
32 | "sass": "^1.45.1",
33 | "typescript": "^5.3.3"
34 | },
35 | "devDependencies": {
36 | "postcss": "^8.4.5",
37 | "react-scripts": "^4.0.3"
38 | },
39 | "scripts": {
40 | "start": "react-scripts start",
41 | "build": "react-scripts build",
42 | "test": "react-scripts test --env=jsdom",
43 | "eject": "react-scripts eject",
44 | "preinstall": "npx force-resolutions"
45 | },
46 | "contributors": [
47 | {
48 | "name": "SPDX-License-Identifier: Apache-2.0 Copyright Contributors to the ODPi Egeria project."
49 | }
50 | ],
51 | "license": "Apache-2.0",
52 | "proxy": "https://localhost:8091",
53 | "browserslist": {
54 | "production": [
55 | ">0.2%",
56 | "not dead",
57 | "not op_mini all"
58 | ],
59 | "development": [
60 | "last 1 chrome version",
61 | "last 1 firefox version",
62 | "last 1 safari version"
63 | ]
64 | }
65 | }
66 |
--------------------------------------------------------------------------------
/cra-client/public/egeria_logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/odpi/egeria-react-ui/fcc6c58643b639da61799ba52b138eea044c2f4a/cra-client/public/egeria_logo.png
--------------------------------------------------------------------------------
/cra-client/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/odpi/egeria-react-ui/fcc6c58643b639da61799ba52b138eea044c2f4a/cra-client/public/favicon.ico
--------------------------------------------------------------------------------
/cra-client/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
18 | Egeria UI
19 |
20 |
21 |
22 |
32 |
33 |
34 |
--------------------------------------------------------------------------------
/cra-client/src/App.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 | import React from "react";
4 | import "./app.scss";
5 | import { BrowserRouter as Router, Switch, Route } from "react-router-dom";
6 | import Login from "./auth/login";
7 | import NoServerName from "./auth/NoServerName";
8 | import Frame from "./Frame";
9 | import IdentificationContext from "./contexts/IdentificationContext";
10 |
11 | export default function App() {
12 | return (
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 | );
31 | }
32 |
--------------------------------------------------------------------------------
/cra-client/src/StoryContent.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 | import React, { Component } from "react";
4 | import Home from "./components/Home";
5 | import GlossaryAuthor from "./components/GlossaryAuthor";
6 | import RepositoryExplorer from "./components/RepositoryExplorer/RepositoryExplorer";
7 | import TypeExplorer from "./components/TypeExplorer";
8 | import { Link, Route, Switch } from "react-router-dom";
9 | import PropTypes from "prop-types";
10 | import { Content } from "carbon-components-react/lib/components/UIShell";
11 |
12 | export default class StoryContent extends Component {
13 | function GetId() {
14 |
15 | const { id } = useParams();
16 | console.log(id);
17 |
18 | return (
19 |
20 |
21 |
22 | );
23 | }
24 | render() {
25 | const propTypes = {
26 | match: PropTypes.object.isRequired,
27 | location: PropTypes.object.isRequired,
28 | history: PropTypes.object.isRequired
29 | };
30 |
31 | return (
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 | );
47 | }
48 | }
49 |
--------------------------------------------------------------------------------
/cra-client/src/app.scss:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 |
4 | body {
5 | text-align: center;
6 | margin: auto;
7 | }
8 |
9 | .card-border {
10 | border: 1px solid grey;
11 | background-color: #edf5ff;
12 |
13 | }
14 |
15 | /* The flip box container - set the width and height to whatever you want. We have added the border property to demonstrate that the flip itself goes out of the box on hover (remove perspective if you don't want the 3D effect */
16 | .flip-box {
17 | background-color: transparent;
18 | width: 400px;
19 | height: 400px;
20 | perspective: 1000px; /* Remove this if you don't want the 3D effect */
21 | }
22 |
23 | /* This container is needed to position the front and back side */
24 | .flip-box-inner {
25 | position: relative;
26 | width: 100%;
27 | height: 100%;
28 | text-align: center;
29 | transition: transform 0.8s;
30 | transform-style: preserve-3d;
31 | }
32 |
33 | /* Do an horizontal flip when you move the mouse over the flip box container */
34 | .flip-box:hover .flip-box-inner {
35 | transform: rotateY(180deg);
36 | }
37 |
38 | /* Position the front and back side */
39 | .flip-box-front, .flip-box-back {
40 | position: absolute;
41 | width: 100%;
42 | height: 100%;
43 | -webkit-backface-visibility: hidden; /* Safari */
44 | backface-visibility: hidden;
45 | }
46 |
47 | /* Style the front side (fallback if image is missing) */
48 | .flip-box-front {
49 | background-color: white;
50 | color: black;
51 | }
52 |
53 | /* Style the back side */
54 | .flip-box-back {
55 | transform: rotateY(180deg);
56 | }
57 |
58 | .center-400-container {
59 | width: 400px;
60 | height: 400px;
61 | display: flex;
62 | justify-content: center;
63 | align-items: center;
64 | }
65 |
66 | .center-400-content {
67 | flex: 0 0 120px;
68 | }
69 | .flexcontainer-row {
70 | display: flex;
71 | flex-direction: row;
72 | }
73 | .flexcontainer-column {
74 | display: flex;
75 | flex-direction: column;
76 | }
77 | .datetimestr {
78 | font-size: 0.75rem;
79 | margin: 10px;
80 | }
81 |
82 | .center {
83 | margin: auto;
84 | width: 50%;
85 | padding: 10px;
86 | }
87 | .time-picker__width {
88 | width: 10rem;
89 | }
--------------------------------------------------------------------------------
/cra-client/src/auth/Login.css:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 | @media all and (min-width: 480px) {
4 | .Login {
5 | padding: 60px 0;
6 | }
7 |
8 | .Login form {
9 | margin: 0 auto;
10 | max-width: 320px;
11 | }
12 | }
--------------------------------------------------------------------------------
/cra-client/src/auth/NoServerName.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 | import React, {useState} from "react";
4 | import "./Login.css";
5 | import Egeriacolor from "../images/odpi/Egeria_logo_color";
6 |
7 | import {
8 | Grid,
9 | Row,
10 | Column,
11 | Form,
12 | FormGroup,
13 | TextInput
14 | } from "carbon-components-react";
15 |
16 | const NoServerName = () => {
17 | const [serverName, setServerName] = useState("");
18 |
19 | const handleOnChange = (event) => {
20 | const value = event.target.value;
21 | setServerName(value);
22 | console.log("handleOnChange :" + value);
23 | };
24 |
25 | const validateForm = () => {
26 | return serverName && serverName.length > 0;
27 | };
28 |
29 | return (
30 |
31 |
32 |
Please supply a VALID server name:
33 |
34 |
35 |
40 |
57 |
58 |
59 |
60 |
61 | );
62 | };
63 |
64 | export default NoServerName;
65 |
--------------------------------------------------------------------------------
/cra-client/src/auth/index.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 | import Login from './login';
4 |
5 | export default Login;
6 |
--------------------------------------------------------------------------------
/cra-client/src/auth/loggedOut.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 | import React from 'react';
4 |
5 | function relogin() {
6 | console.log("Relogin called");
7 | const serverName = window.location.pathname.split('/')[1];
8 | fetch('/' + serverName + '/login');
9 | }
10 | function LoggedOut() {
11 | return (
12 |
13 |
User not logged in
14 | Login
15 |
16 | );
17 | }
18 |
19 | export default LoggedOut;
20 |
--------------------------------------------------------------------------------
/cra-client/src/components/Dino/DinoInterface.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/odpi/egeria-react-ui/fcc6c58643b639da61799ba52b138eea044c2f4a/cra-client/src/components/Dino/DinoInterface.png
--------------------------------------------------------------------------------
/cra-client/src/components/Dino/TopologyDiagram.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/odpi/egeria-react-ui/fcc6c58643b639da61799ba52b138eea044c2f4a/cra-client/src/components/Dino/TopologyDiagram.png
--------------------------------------------------------------------------------
/cra-client/src/components/Dino/components/details-panel/DetailsPanel.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 |
4 | import React, { useContext } from "react";
5 |
6 | import { ResourcesContext } from "../../contexts/ResourcesContext";
7 |
8 | import PlatformDisplay from "./PlatformDisplay"
9 |
10 | import ServerDisplay from "./ServerDisplay"
11 |
12 | import ServiceDisplay from "./ServiceDisplay"
13 |
14 | import EngineDisplay from "./EngineDisplay"
15 |
16 | import "./details-panel.scss";
17 |
18 |
19 | export default function DetailsPanel() {
20 |
21 | const resourcesContext = useContext(ResourcesContext);
22 |
23 | const displayLoadingMessage = (resourceName) => {
24 | return (
25 | Loading details for {resourceName}
26 | );
27 | }
28 |
29 | return (
30 |
31 | {
32 | resourcesContext.operationState.state === "loading" && displayLoadingMessage(resourcesContext.operationState.name)
33 | }
34 | {
35 | resourcesContext.operationState.state === "inactive" && resourcesContext.focus.category === "server-instance" &&
36 | (
)
37 | }
38 | {
39 | resourcesContext.operationState.state === "inactive" && resourcesContext.focus.category === "platform" &&
40 | (
)
41 | }
42 | {
43 | resourcesContext.operationState.state === "inactive" && resourcesContext.focus.category === "service-instance" &&
44 | (
)
45 | }
46 | {
47 | resourcesContext.operationState.state === "inactive" && resourcesContext.focus.category === "engine-instance" &&
48 | (
)
49 | }
50 |
51 | );
52 | }
53 |
54 |
--------------------------------------------------------------------------------
/cra-client/src/components/Dino/components/details-panel/ServiceDisplay.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 |
4 | import React, { useContext } from "react";
5 |
6 | import { ResourcesContext } from "../../contexts/ResourcesContext";
7 |
8 | import IntegrationServiceDisplay from "./IntegrationServiceDisplay";
9 |
10 | import EngineServiceDisplay from "./EngineServiceDisplay";
11 |
12 | import AccessServiceDisplay from "./AccessServiceDisplay";
13 |
14 | import ViewServiceDisplay from "./ViewServiceDisplay";
15 |
16 | import "./details-panel.scss";
17 |
18 |
19 | export default function ServiceDisplay() {
20 |
21 | const resourcesContext = useContext(ResourcesContext);
22 |
23 |
24 | let focus = resourcesContext.focus;
25 | let serviceDetails;
26 | let serviceCat;
27 | if (focus.category === "service-instance") {
28 | serviceDetails = resourcesContext.getFocusService();
29 | serviceCat = serviceDetails.serviceCat;
30 | if (!serviceDetails) {
31 | return null;
32 | }
33 | }
34 | else {
35 | /*
36 | * The focus is not a service-instance, so do nothing...
37 | */
38 | return null;
39 | }
40 |
41 |
42 | return (
43 |
44 |
45 |
46 |
47 | { (serviceCat === "IntegrationService") && }
48 |
49 |
50 | { (serviceCat === "EngineService") && }
51 |
52 |
53 | { (serviceCat === "AccessService") &&
}
54 |
55 |
56 | { (serviceCat === "ViewService") && }
57 |
58 |
59 |
60 | );
61 |
62 | }
63 |
64 |
65 | ServiceDisplay.propTypes = {
66 |
67 | };
68 |
69 |
--------------------------------------------------------------------------------
/cra-client/src/components/Dino/components/details-panel/ViewServiceDisplay.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 |
4 | import React, { useContext } from "react";
5 |
6 | import { ResourcesContext } from "../../contexts/ResourcesContext";
7 |
8 |
9 | import "./details-panel.scss";
10 |
11 |
12 | export default function ViewServiceDisplay() {
13 |
14 |
15 | const resourcesContext = useContext(ResourcesContext);
16 |
17 |
18 |
19 | let focus = resourcesContext.focus;
20 | let serviceDetails;
21 | let serviceConfig;
22 | if (focus.category === "service-instance") {
23 | serviceDetails = resourcesContext.getFocusService();
24 | serviceConfig = serviceDetails.serviceConfig;
25 | if (!serviceDetails) {
26 | return null;
27 | }
28 | }
29 | else {
30 | /*
31 | * The focus is not a service-instance, so do nothing...
32 | */
33 | return null;
34 | }
35 |
36 |
37 |
38 | return (
39 |
40 |
41 |
ServiceName : {serviceDetails.serviceName}
42 |
43 |
ServiceURLMarker :
44 |
{serviceConfig.viewServiceURLMarker}
45 |
46 |
ServiceFullName :
47 |
{serviceConfig.viewServiceFullName}
48 |
49 |
ServiceDescription :
50 |
{serviceConfig.viewServiceDescription}
51 |
52 |
ServiceStatus :
53 |
{serviceConfig.viewServiceOperationalStatus}
54 |
55 |
ServiceWiki :
56 |
{serviceConfig.viewServiceWiki}
57 |
58 | );
59 |
60 | }
61 |
62 |
63 | ViewServiceDisplay.propTypes = {
64 |
65 | };
66 |
67 |
--------------------------------------------------------------------------------
/cra-client/src/components/Dino/components/details-panel/auditlog.scss:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 |
4 |
5 | .dialog-text {
6 | text-align : left;
7 | font-size : 12px;
8 | padding : 5px;
9 | }
10 |
11 | .status-update {
12 | margin-top : 30px;
13 | margin-bottom : 30px;
14 | }
15 |
16 | .audit-results-area {
17 | height : 350px;
18 | width : 850px;
19 | overflow : auto;
20 | }
21 |
22 | .table {
23 | height : 350px;
24 | width : 850px;
25 | overflow : auto;
26 | }
27 |
28 | .row {
29 | margin-top : 5px;
30 | }
31 |
32 | /* Clear floats after the columns */
33 | .row:after {
34 | content : "";
35 | display : table;
36 | clear : both;
37 | width : 850px;
38 | }
39 |
40 | .gencolumn {
41 | float : left;
42 | width : 5%;
43 | text-align : left;
44 | }
45 |
46 | .qrycolumn {
47 | float : left;
48 | width : 35%;
49 | text-align : left;
50 | }
51 |
52 | .inscolumn {
53 | float : left;
54 | width : 60%;
55 | text-align : left;
56 | }
57 |
58 | .query-text {
59 | width : 90%;
60 | }
61 |
62 | .dismiss-button-container {
63 | height : 50px;
64 | width : 210px;
65 | position : absolute;
66 | right : 0px;
67 | bottom : 0px;
68 | }
69 |
70 | .dismiss-1-button-container {
71 | height : 50px;
72 | width : 105px;
73 | position : absolute;
74 | right : 0px;
75 | bottom : 0px;
76 | }
--------------------------------------------------------------------------------
/cra-client/src/components/Dino/components/diagram/cohort-32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/odpi/egeria-react-ui/fcc6c58643b639da61799ba52b138eea044c2f4a/cra-client/src/components/Dino/components/diagram/cohort-32.png
--------------------------------------------------------------------------------
/cra-client/src/components/Dino/components/diagram/diagram.scss:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 |
4 | .diagram-manager {
5 | font-size : 12px;
6 | }
7 |
8 | .drawing-container {
9 | overflow : auto;
10 | }
11 |
12 |
13 |
14 | .contextMenu {
15 | stroke : #000000;
16 | fill : #ffffff;
17 | }
18 |
19 | .menuEntry {
20 | cursor : pointer;
21 | }
22 |
23 | .menuEntry text {
24 | font-size : 10px;
25 | stroke : #000000;
26 | font-weight : normal;
27 | }
28 |
--------------------------------------------------------------------------------
/cra-client/src/components/Dino/components/diagram/platform-32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/odpi/egeria-react-ui/fcc6c58643b639da61799ba52b138eea044c2f4a/cra-client/src/components/Dino/components/diagram/platform-32.png
--------------------------------------------------------------------------------
/cra-client/src/components/Dino/components/diagram/server-32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/odpi/egeria-react-ui/fcc6c58643b639da61799ba52b138eea044c2f4a/cra-client/src/components/Dino/components/diagram/server-32.png
--------------------------------------------------------------------------------
/cra-client/src/components/Dino/components/diagram/service-32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/odpi/egeria-react-ui/fcc6c58643b639da61799ba52b138eea044c2f4a/cra-client/src/components/Dino/components/diagram/service-32.png
--------------------------------------------------------------------------------
/cra-client/src/components/Dino/components/graph-controls/GraphControls.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 |
4 | import React, { useContext } from "react";
5 |
6 | import PropTypes from "prop-types";
7 |
8 | import { ResourcesContext } from "../../contexts/ResourcesContext";
9 |
10 | import "../../dino.scss";
11 |
12 |
13 |
14 | export default function GraphControls(props) {
15 |
16 | const resourcesContext = useContext(ResourcesContext);
17 |
18 |
19 | return (
20 |
21 |
22 |
23 | Traversal count : {resourcesContext.getNumGens()}
24 |
25 |
resourcesContext.removeGen() } >
27 | Undo
28 |
29 |
resourcesContext.clear() } >
31 | Clear
32 |
33 |
34 |
35 | );
36 |
37 | }
38 |
39 | GraphControls.propTypes = {
40 | className : PropTypes.string
41 | }
42 |
43 |
--------------------------------------------------------------------------------
/cra-client/src/components/Dino/components/portal/Portal.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 |
4 |
5 | import React, { useEffect, useState } from "react";
6 |
7 | import ReactDOM from "react-dom";
8 |
9 | import PropTypes from "prop-types";
10 |
11 |
12 | import "./portal.scss";
13 |
14 |
15 |
16 | export default function Portal(props) {
17 |
18 | const [newElement, setNewElement] = useState(null);
19 |
20 | /*
21 | * Emulate componentDidMount - to append the wrapper
22 | */
23 | const componentDidMount = () => {
24 | const portalRoot = props.anchorCB().current;
25 | let locElement = document.createElement("div");
26 | portalRoot.appendChild(locElement);
27 | setNewElement(locElement);
28 |
29 | return () => {
30 | /*
31 | * Emulate componentWillUnmount... to remove the wrapper
32 | */
33 | portalRoot.removeChild(locElement);
34 | setNewElement(null);
35 | }
36 | };
37 | useEffect (componentDidMount ,[]);
38 |
39 | let content = (
40 |
41 |
42 | {props.children}
43 |
44 |
45 | );
46 |
47 | /*
48 | * Render the Portal's children in the wrapper element...
49 | */
50 | if (props.show) {
51 | if (newElement) {
52 | return (
53 | ReactDOM.createPortal(content, newElement)
54 | );
55 | }
56 | }
57 | return null;
58 | }
59 |
60 | Portal.propTypes = {
61 | children: PropTypes.node,
62 | show : PropTypes.bool,
63 | anchorCB: PropTypes.func.isRequired
64 | };
65 |
--------------------------------------------------------------------------------
/cra-client/src/components/Dino/components/portal/portal.scss:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 |
4 | .portal-div {
5 | position : fixed;
6 | z-index : 1001;
7 | top : 300px;
8 | left : 478px;
9 | border-style : solid;
10 | border-width : 3px;
11 | border-color : black;
12 | height : 500px;
13 | width : 900px;
14 | opacity : 1.0;
15 | padding : 10px;
16 | font-size : 10px;
17 | background : white;
18 | color : black;
19 | }
20 |
21 |
22 | .portal-backdrop {
23 | position : fixed;
24 | z-index : 1000;
25 | top : 0px;
26 | left : 260px;
27 | border-style : solid;
28 | border-width : 3px;
29 | border-color : rgb(72, 205, 209) ;
30 | height : 1450px;
31 | width : 1600px;
32 | opacity : 0.9;
33 | padding : 10px;
34 | font-size : 10px;
35 | background : rgb(200,200,200);
36 | }
37 |
--------------------------------------------------------------------------------
/cra-client/src/components/Dino/components/resource-selection/resource-selector.scss:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 |
4 | .resource-controls {
5 | text-align : right;
6 | }
7 |
8 | .platform-selector {
9 | width : 200px;
10 | }
11 |
12 | .server-selector {
13 | width : 200px;
14 | }
--------------------------------------------------------------------------------
/cra-client/src/components/Dino/dino.scss:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 |
4 |
5 |
6 | .dino-container {
7 | top : 0px;
8 | left : 260px;
9 | height : 100%;
10 | display : flex;
11 | flex-flow : column;
12 | }
13 |
14 | .dino-top {
15 | display : flex;
16 | flex-flow : row;
17 | width : 100%;
18 | overflow : none;
19 | padding : 10px;
20 | font-size : 10px;
21 | background-color : rgb(240,240,240);
22 | color : 'black';
23 | }
24 |
25 | .dino-top-left {
26 | flex : 0 0 auto;
27 | width : 300px;
28 | height : 110px;
29 | }
30 |
31 | .dino-top-middle {
32 | flex : 0 0 auto;
33 | width : 300px;
34 | height : 110px;
35 | }
36 |
37 |
38 | .dino-content {
39 | flex : 2;
40 | display : flex;
41 | flex-flow : row;
42 | width : 100%;
43 | padding : 10px;
44 | font-size : 10px;
45 | background-color : rgb(240,240,240);
46 | color : 'black';
47 | }
48 |
49 | .dino-lhs {
50 | flex : 0 0 auto;
51 | width : 450px;
52 | overflow : auto;
53 | padding : 0px 10px 10px 10px;
54 | font-size : 10px;
55 | background-color : rgb(240,240,240);
56 | color : 'black';
57 | }
58 |
59 | .dino-rhs {
60 | flex : 1 1 auto;
61 | padding : 10px;
62 | font-size : 10px;
63 | background-color : white;
64 | background : 'white';
65 | color : 'black';
66 | }
67 |
68 | .descriptive-text {
69 | font-size : 12px;
70 | }
71 |
72 | .top-control-button {
73 | position : absolute;
74 | right : 0px;
75 | bottom : 40px;
76 | height : 40px;
77 | width : 100px;
78 | background-color : rgb(180,180,180);
79 | }
80 |
81 | .graph-control-button {
82 | height : 40px;
83 | width : 100px;
84 | background-color : rgb(180,180,180);
85 | }
86 |
87 | .title {
88 | padding : 20px;
89 | font-size : 20px;
90 | }
--------------------------------------------------------------------------------
/cra-client/src/components/GlossaryAuthor/components/GlossaryChildren.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 | import React from "react";
4 | import NodeChildren from "./NodeChildren";
5 | import { withRouter } from "react-router-dom";
6 |
7 | function GlossaryChildren(props) {
8 | const getParentGuid = () => {
9 | return props.match.params.glossaryguid;
10 | };
11 | return ;
12 | }
13 | export default withRouter(GlossaryChildren);
--------------------------------------------------------------------------------
/cra-client/src/components/GlossaryAuthor/components/NodeCard/_nodeCard.scss:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 |
4 | .node-card-section__heading {
5 | display: flex;
6 | flex-direction: row;
7 | justify-content: space-between;
8 | }
9 |
10 | .node-card {
11 | margin: 20px;
12 | margin-top: $spacing-09;
13 | display: flex;
14 | flex-direction: column;
15 | margin-top: $spacing-09;
16 | border: 1px solid #a8ada9;
17 | max-width: 15rem;
18 |
19 | svg {
20 | margin-top: $spacing-09;
21 | }
22 | }
23 | .node-card-header {
24 | overflow:auto;
25 | }
26 |
27 |
28 | .node-card__body {
29 | margin-top: $spacing-06;
30 | flex-grow: 1;
31 | @include type-style("body-long-01");
32 | @include carbon--breakpoint-between(321px, md) {
33 | max-width: 75%;
34 | }
35 | }
36 | .node-card__footer {
37 | display: flex;
38 | justify-content: space-between;
39 | }
40 | .overWrap {
41 | overflow-wrap: break-word;
42 | word-wrap: break-word;
43 | hyphens: auto;
44 | }
45 |
46 | .node-card__controls {
47 | margin-left: 20px;
48 | }
49 | .node-card__exact_control {
50 | border: 1px solid #a8ada9;
51 | }
52 |
--------------------------------------------------------------------------------
/cra-client/src/components/GlossaryAuthor/components/RequiredMessage.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 | import React, { useState, useEffect } from "react";
4 |
5 | export default function RequiredMessage(props) {
6 | const [displayRequiredMessage, setDisplayRequiredMessage] = useState(false);
7 |
8 | useEffect(() => {
9 | console.log("RequiredMessage useEffect");
10 | let display = false;
11 | if (props.required && (props.value === undefined || props.value === "")) {
12 | display = true;
13 | }
14 | setDisplayRequiredMessage(display);
15 | }, [props]);
16 |
17 |
18 | return (
19 |
20 | {displayRequiredMessage === true && (
21 |
22 | Required
23 |
24 | )}
25 | {displayRequiredMessage === false && (
26 |
27 | )}
28 |
29 | );
30 | }
31 |
--------------------------------------------------------------------------------
/cra-client/src/components/GlossaryAuthor/components/create/CreateCategorizedTerm.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 | import React from "react";
4 |
5 | export default function CreateCategorizedTerm(props) {
6 | console.log("CreateCategorizedTerm");
7 | return (
8 | Create Categorized term
9 | );
10 | }
--------------------------------------------------------------------------------
/cra-client/src/components/GlossaryAuthor/components/delete/DeleteWizard.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 | import React, { useState, useEffect, useContext } from "react";
4 |
5 | import { InstancesContext } from "../visualisation/contexts/InstancesContext";
6 | import DeleteNodeWizard from "./DeleteNodeWizard";
7 | import DeleteRelationshipWizard from "./DeleteRelationshipWizard";
8 |
9 | /**
10 | * This is the deleteWizard, depending on whether the current focus is a node or a relationship,
11 | * this component dispalys the appropriate wizard.
12 | * @param {*} props
13 | * @returns
14 | */
15 | export default function DeleteWizard(props) {
16 | const instancesContext = useContext(InstancesContext);
17 |
18 | console.log("DeleteWizard");
19 |
20 | return (
21 |
22 | {instancesContext.getFocusNode() && (
23 |
28 | )}
29 | {instancesContext.getFocusRelationship() && (
30 |
35 | )}
36 |
37 | );
38 | }
39 |
--------------------------------------------------------------------------------
/cra-client/src/components/GlossaryAuthor/components/navigations/GlossaryAuthorGraphNavigation.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 | import React, { useState, useContext, useEffect } from "react";
4 | import getPathTypesAndGuids from "../properties/PathAnalyser";
5 | import { IdentificationContext } from "../../../../contexts/IdentificationContext";
6 | import getNodeType from "../properties/NodeTypes.js";
7 | import GlossaryAuthorVisualisation from "../visualisation/GlossaryAuthorVisualisation";
8 |
9 | export default function GlossaryAuthorGraphNavigation(props) {
10 | const identificationContext = useContext(IdentificationContext);
11 | const [nodeType, setNodeType] = useState();
12 | const [guid, setGuid] = useState();
13 |
14 | useEffect(() => {
15 | const pathAnalysis = getPathTypesAndGuids(props.match.params.anypath);
16 | // we need to set up the nodeType and guid
17 |
18 | const lastElement = pathAnalysis[pathAnalysis.length - 1];
19 | setGuid(lastElement.guid);
20 | const gotNodeType = getNodeType(
21 | identificationContext.getRestURL("glossary-author"),
22 | lastElement.type
23 | );
24 | setNodeType(gotNodeType, identificationContext);
25 | }, [props, identificationContext]);
26 | return (
27 |
28 | {nodeType !== undefined && (
29 |
30 | )}
31 |
32 | );
33 | }
34 |
--------------------------------------------------------------------------------
/cra-client/src/components/GlossaryAuthor/components/navigations/GlossaryAuthorNavigationError.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 | import React from "react";
4 |
5 | export default function GlossaryAuthorNavigationError() {
6 |
7 | return
8 | The Glossary Author URL has not been recognised. If you edit the URL please ensure that it is valid.
9 | A valid URL is one that occurred on the browser during normal operations using the Glossary Author.
10 |
;
11 | }
12 |
--------------------------------------------------------------------------------
/cra-client/src/components/GlossaryAuthor/components/navigations/StartingCategoryNavigation.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 | import React from "react";
4 | import StartingNodeNavigation from "./StartingNodeNavigation";
5 |
6 | export default function StartingCategoryNavigation({ match }) {
7 | return (
8 |
9 | );
10 | }
11 |
--------------------------------------------------------------------------------
/cra-client/src/components/GlossaryAuthor/components/navigations/StartingGlossaryNavigation.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 | import React from "react";
4 | import StartingNodeNavigation from "./StartingNodeNavigation";
5 |
6 | export default function StartingGlossaryNavigation({ match }) {
7 | return (
8 |
9 | );
10 | }
11 |
--------------------------------------------------------------------------------
/cra-client/src/components/GlossaryAuthor/components/navigations/StartingTermNavigation.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 | import React from "react";
4 | import StartingNodeNavigation from "./StartingNodeNavigation";
5 |
6 | export default function StartingTermNavigation({ match }) {
7 | return (
8 |
9 | );
10 | }
11 |
--------------------------------------------------------------------------------
/cra-client/src/components/GlossaryAuthor/components/properties/PathAnalyser.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 |
4 | export default function getPathTypesAndGuids(path) {
5 | // const [pathAnalysis, setPathAnalysis] = useState();
6 | // console.log("usePathAnalyser path " + path)
7 |
8 | // useEffect(() => {
9 | // console.log("useeffect path run");
10 | // }, [path]);
11 | // useEffect(() => {
12 | // console.log("useeffect run AAAAAAAAAAAAAAAAAAH");
13 | // analyse the path.
14 |
15 | // the path will be of the following form after the glossary-author segment
16 |
17 | // /
18 | // or
19 | // / /
20 | // or
21 | // / / /
22 | // or
23 | // / repeated ending with or
24 |
25 | // split by backslash
26 | // and store in an array of elements that are contain the type and the guid.
27 | // callers can then interrogate this array to get the type and guids they need
28 | // alert("path "+ path );
29 | let segments = path.split("/");
30 | // get rid of the uninteresting first part
31 | // while (segments.length > 0 && segments[0] !== "glossary-author") {
32 | // segments.shift();
33 | // }
34 | let typesGuidArray = [];
35 | while (segments.length > 0 ) {
36 | const types = segments[0];
37 | segments.shift();
38 | let guid;
39 | if (segments.length > 0) {
40 | guid = segments[0];
41 | segments.shift();
42 | }
43 | let typesGuid = {};
44 | typesGuid.types = types;
45 | typesGuid.guid = guid;
46 | if (types === "glossaries") {
47 | typesGuid.type = "glossary";
48 | } else if (types === "categories") {
49 | typesGuid.type = "category";
50 | } else if (types === "terms") {
51 | typesGuid.type = "term";
52 | }
53 | typesGuidArray.push(typesGuid);
54 | }
55 |
56 | console.log("Analysis " + JSON.stringify(typesGuidArray));
57 | // setPathAnalysis(typesGuidArray);
58 | // });
59 |
60 | // return pathAnalysis;
61 | return typesGuidArray;
62 | }
63 |
--------------------------------------------------------------------------------
/cra-client/src/components/GlossaryAuthor/components/properties/SystemAttributes.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 | import React from "react";
4 |
5 | const getSystemAttributes = () => {
6 | return {
7 | attributes: [
8 | {
9 | "label": "Global unique identifier (guid)",
10 | "key": "guid",
11 | "type": "text",
12 | "url":"aaa",
13 | "readonly": true,
14 | "object": "systemAttributes"
15 | },
16 | {
17 | "label": "Status",
18 | "key": "status",
19 | "type": "text",
20 | "url":"aaa",
21 | "readonly": true,
22 | "object": "systemAttributes"
23 | },
24 | {
25 | "label": "Created by",
26 | "key":"createdBy",
27 | "type": "text",
28 | "url":"aaa",
29 | "readonly": true,
30 | "object": "systemAttributes"
31 | },
32 | {
33 | "label": "Updated by",
34 | "key": "updatedBy",
35 | "type": "text",
36 | "url":"aaa",
37 | "readonly": true,
38 | "object": "systemAttributes"
39 | },
40 | {
41 | "label": "Create time",
42 | "key": "createTime",
43 | "type": "date",
44 | "url":"aaa",
45 | "readonly": true,
46 | "object": "systemAttributes"
47 | },
48 | {
49 | "label": "Update time",
50 | "key": "updateTime",
51 | "type": "date",
52 | "url":"aaa",
53 | "readonly": true,
54 | "object": "systemAttributes"
55 | },
56 | {
57 | "label": "Version",
58 | "key": "version",
59 | "type": "text",
60 | "url": "bbb",
61 | "readonly": true,
62 | "object": "systemAttributes"
63 | }
64 | ]
65 | };
66 | };
67 |
68 | export default getSystemAttributes;
69 |
--------------------------------------------------------------------------------
/cra-client/src/components/GlossaryAuthor/components/update/DisplayRelationship.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 | import React from "react";
4 | import RelationshipReadOnly from "../authoringforms/RelationshipReadOnly";
5 |
6 | export default function DisplayRelationship(props) {
7 |
8 | /**
9 | * Display a relationship
10 | * @param {*} relationship
11 | */
12 |
13 | console.log("DisplayRelationship");
14 |
15 | return (
16 |
17 | {props.relationship !== undefined && (
18 |
19 |
20 |
21 |
{props.relationship.relationshipType} selected
22 |
23 | The version of the {props.relationship.relationshipType} on the server is{" "}
24 | {props.relationship.systemAttributes.version}.{" "}
25 |
26 |
27 | The generation on the canvas of the {props.relationship.relationshipType} is{" "}
28 | {props.relationship.gen}{" "}
29 |
30 |
31 |
32 |
35 |
39 |
40 | )}
41 |
42 |
43 | );
44 | }
45 |
--------------------------------------------------------------------------------
/cra-client/src/components/GlossaryAuthor/components/update/NodeDisplayDetails.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 | import React from "react";
4 | import NodeReadOnly from "../authoringforms/NodeReadOnly";
5 |
6 | export default function NodeDisplayDetails(props) {
7 |
8 | /**
9 | * Display a node
10 | * @param {*} node
11 | */
12 |
13 | console.log("NodeDisplayDetails");
14 |
15 | return (
16 |
17 | {props.node !== undefined && (
18 |
19 |
20 |
21 |
{props.node.nodeType} selected
22 |
23 | The version of the {props.node.nodeType} on the server is{" "}
24 | {props.node.systemAttributes.version}.{" "}
25 |
26 |
27 | The generation on the canvas of the {props.node.nodeType} is{" "}
28 | {props.node.gen}{" "}
29 |
30 |
31 |
32 |
35 |
39 |
40 | )}
41 |
42 |
43 | );
44 | }
45 |
--------------------------------------------------------------------------------
/cra-client/src/components/GlossaryAuthor/components/update/RelationshipDisplayDetails.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 | import React from "react";
4 | import RelationshipReadOnly from "../authoringforms/RelationshipReadOnly";
5 |
6 | export default function RelationshipDisplayDetails(props) {
7 |
8 | /**
9 | * Display a relationship
10 | * @param {*} relationship
11 | */
12 |
13 | console.log("RelationshipDisplayDetails");
14 |
15 | return (
16 |
17 | {props.relationship !== undefined && (
18 |
19 |
20 |
21 |
{props.relationship.relationshipType} selected
22 |
23 | The version of the {props.relationship.relationshipType} on the server is{" "}
24 | {props.relationship.systemAttributes.version}.{" "}
25 |
26 |
27 | The generation on the canvas of the {props.relationship.relationshipType} is{" "}
28 | {props.relationship.gen}{" "}
29 |
30 |
31 |
32 |
35 |
39 |
40 | )}
41 |
42 |
43 | );
44 | }
45 |
--------------------------------------------------------------------------------
/cra-client/src/components/GlossaryAuthor/components/update/UpdateCategory.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 | import React, { useContext } from "react";
4 |
5 | import { IdentificationContext } from "../../../../contexts/IdentificationContext";
6 | import getNodeType from "../properties/NodeTypes.js";
7 | import UpdateNode from "./UpdateNode";
8 |
9 | export default function UpdateCategory(props) {
10 | const identificationContext = useContext(IdentificationContext);
11 | console.log("UpdateCategory");
12 | return (
13 |
14 | );
15 | }
16 |
--------------------------------------------------------------------------------
/cra-client/src/components/GlossaryAuthor/components/update/UpdateGlossary.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 | import React, { useContext } from "react";
4 |
5 | import { IdentificationContext } from "../../../../contexts/IdentificationContext";
6 | import getNodeType from "../properties/NodeTypes.js";
7 | import UpdateNode from "./UpdateNode";
8 |
9 | export default function UpdateGlossary(props) {
10 | const identificationContext = useContext(IdentificationContext);
11 | console.log("UpdateGlossary");
12 | return (
13 |
14 | );
15 | }
16 |
--------------------------------------------------------------------------------
/cra-client/src/components/GlossaryAuthor/components/update/UpdateTerm.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 | import React, { useContext } from "react";
4 |
5 | import { IdentificationContext } from "../../../../contexts/IdentificationContext";
6 | import getNodeType from "../properties/NodeTypes.js";
7 | import UpdateNode from "./UpdateNode";
8 |
9 | export default function UpdateTerm(props) {
10 | const identificationContext = useContext(IdentificationContext);
11 | console.log("UpdateTerm");
12 | return (
13 |
14 | );
15 | }
16 |
--------------------------------------------------------------------------------
/cra-client/src/components/GlossaryAuthor/components/update/UpdateWizard.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 | import React, { useState, useEffect, useContext } from "react";
4 |
5 | import { InstancesContext } from "../visualisation/contexts/InstancesContext";
6 | import UpdateNodePropertiesWizard from "./UpdateNodePropertiesWizard";
7 | import UpdateRelationshipPropertiesWizard from "./UpdateRelationshipPropertiesWizard";
8 |
9 | /**
10 | * This is the updateWizard, depending on whether the current focus is a node or a relationship,
11 | * this component displays the appropriate wizard.
12 | * @param {*} props
13 | * @returns
14 | */
15 | export default function UpdateWizard(props) {
16 | const instancesContext = useContext(InstancesContext);
17 |
18 | console.log("UpdateWizard");
19 |
20 | return (
21 |
22 | {instancesContext.getFocusNode() && (
23 |
28 | )}
29 | {instancesContext.getFocusRelationship() && (
30 |
35 | )}
36 |
37 | );
38 | }
39 |
--------------------------------------------------------------------------------
/cra-client/src/components/GlossaryAuthor/components/useDebounce.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 |
4 | import { useState, useEffect } from 'react';
5 |
6 | // Our hook
7 | export default function useDebounce(value, delay) {
8 | // State and setters for debounced value
9 | const [debouncedValue, setDebouncedValue] = useState(value);
10 |
11 | useEffect(
12 | () => {
13 | // Set debouncedValue to value (passed in) after the specified delay
14 | const handler = setTimeout(() => {
15 | console.log("setDebouncedValue" + value);
16 | setDebouncedValue(value);
17 | }, delay);
18 |
19 | // Return a cleanup function that will be called every time ...
20 | // ... useEffect is re-called. useEffect will only be re-called ...
21 | // ... if value changes (see the inputs array below).
22 | // This is how we prevent debouncedValue from changing if value is ...
23 | // ... changed within the delay period. Timeout gets cleared and restarted.
24 | // To put it in context, if the user is typing within our app's ...
25 | // ... search box, we don't want the debouncedValue to update until ...
26 | // ... they've stopped typing for more than 500ms.
27 | return () => {
28 | clearTimeout(handler);
29 | };
30 | },
31 | // Only re-call effect if value changes
32 | // You could also add the "delay" var to inputs array if you ...
33 | // ... need to be able to change that dynamically.
34 | [value]
35 | );
36 |
37 | return debouncedValue;
38 | }
--------------------------------------------------------------------------------
/cra-client/src/components/GlossaryAuthor/components/views/GlossaryAuthorChildrenRoutes.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 | import React from "react";
4 | import { Route, Switch } from "react-router-dom";
5 | import GlossaryAuthorCategoriesNavigation from "../GlossaryAuthorCategoriesNavigation";
6 | import GlossaryAuthorTermsNavigation from "../GlossaryAuthorTermsNavigation";
7 |
8 | export default function GlossaryAuthorChildrenRoutes(props) {
9 |
10 | console.log("GlossaryAuthorChildrenRoutes " + location.pathname);
11 |
12 | function getTermsPath() {
13 | const path = location.pathname + "/terms";
14 | console.log("getTermsPath " + path);
15 | return path;
16 | }
17 | function getCategoriesPath() {
18 | const path = location.pathname + "/categories";
19 | console.log("getCategoriesPath " + path);
20 | return path;
21 | }
22 |
23 | return (
24 |
25 |
29 |
33 |
34 |
35 | );
36 | }
37 |
--------------------------------------------------------------------------------
/cra-client/src/components/GlossaryAuthor/components/visualisation/HELP.md:
--------------------------------------------------------------------------------
1 | ## Glossary Author Visualiser User Interface
2 |
3 |
4 |
5 | The GLOssary author Visualiser and Explorer (GLOVE) interface provides a way to visualise glossary artifacts in Egeria. It is possible to retrieve nodes and relationships, view their properties and display them as a graph of interconnected objects. The instances are presented both textually (on the left side) and diagrammatically (on the right side).
6 |
7 |
8 |
9 | 
10 |
11 |
12 |
13 | ### Using the GLOVE Interface
14 | When the GLOVE interface first loads, it displays a partifcular glossary artifact (A Glossary Category or Term). This os the focus node.
15 |
16 |
17 |
18 | You can explore the neighborhood around the focus node by clicking on the Explore button to perform a graph traversal. This will present a dialog that allows you to refine the graph traversal by filtering the types of nodes and relationships that will be retrieved. When the traversal is complete, the nodes and relationships are added to the graph.
19 |
20 |
21 |
22 | ### Diagram Controls
23 | The diagram has two layout modes - 'time-based' and 'proximity-based'. The 'time-based' layout arranges objects vertically on the diagram with the newest toward the bottom. The 'proxmity-based' layout allows the graph of objects to organize itself based on connectivity.
24 |
25 |
26 |
27 | If the 'pin dragged nodes' checkbox is checked, when the user drags an object it will be pinned where it is dropped. A pinned node is indicated by a small 'pin' drawn vertically beneath the node. It can be dragged again if needed, but it will always stay where it is dropped. To release an individual object, press shift and click on the object. To allow objects to move around independently, uncheck the 'pin dragged nodes' option.
28 |
29 |
30 |
31 | ### Undo and Clear
32 | There are buttons to undo the most recent operation (`Undo`) or clear (`Clear`) the whole graph.
33 |
34 |
35 |
36 | ### History
37 | There is a `History` button to display a summary of the operations performed by the user since the graph was last empty.
38 |
--------------------------------------------------------------------------------
/cra-client/src/components/GlossaryAuthor/components/visualisation/README.md:
--------------------------------------------------------------------------------
1 | ## Glossary Author Visualisation and Explorer User Interface
2 |
3 | The Glossary Author Visualisation and Explorer (Glove) interface provides a way to query Egeria metadata servers to retrieve and display glossary artifacts. It is possible to retrieve nodes and lines, view their properties and display them as a graph of interconnected objects.
4 |
5 | The Glossary Author Visualisation and Explorer (Glove) interface runs under the Presentation Server.
6 |
7 | The Glossary Author Visualisation and Explorer (Glove) interface delegates operations to the [Glossary Author View Service] in order to retrieve glossary artifacts.
8 |
9 |
10 |
--------------------------------------------------------------------------------
/cra-client/src/components/GlossaryAuthor/components/visualisation/components/details-panel/DetailsPanel.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 |
4 | import React from "react";
5 |
6 | import PropTypes from "prop-types";
7 |
8 | import InstanceDisplay from "./InstanceDisplay";
9 |
10 |
11 | export default function DetailsPanel(props) {
12 |
13 | return (
14 |
15 |
16 |
17 |
18 |
19 | );
20 | }
21 |
22 | DetailsPanel.propTypes = {
23 | className : PropTypes.string
24 | }
25 |
26 |
--------------------------------------------------------------------------------
/cra-client/src/components/GlossaryAuthor/components/visualisation/components/details-panel/InstanceDisplay.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 |
4 | import React, { useContext } from "react";
5 |
6 | import { InstancesContext } from "../../contexts/InstancesContext";
7 |
8 | import PropTypes from "prop-types";
9 |
10 | import NodeDisplay from "./NodeDisplay";
11 |
12 | import RelationshipDisplay from "./RelationshipDisplay";
13 |
14 |
15 |
16 | export default function InstanceDisplay() {
17 |
18 | const instancesContext = useContext(InstancesContext);
19 |
20 | if (instancesContext.getFocusGUID() === "") {
21 |
22 | /*
23 | * No instance is selected as the focus - display an 'empty' message
24 | */
25 | return Nothing is selected
26 |
27 | }
28 | else {
29 |
30 | /*
31 | * An instance is selected as the focus - display it
32 | */
33 | const focusCategory = instancesContext.getFocusCategory();
34 |
35 | if (focusCategory === "Node") {
36 | return
37 | }
38 | else if (focusCategory === "Relationship") {
39 | return
40 | }
41 | }
42 | }
43 |
44 | InstanceDisplay.propTypes = {
45 | children: PropTypes.node
46 | };
47 |
--------------------------------------------------------------------------------
/cra-client/src/components/GlossaryAuthor/components/visualisation/components/details-panel/InstancePropertiesDisplay.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 |
4 | import React from "react";
5 |
6 | import PropTypes from "prop-types";
7 |
8 | import "./details-panel.scss";
9 |
10 |
11 | export default function InstancePropertiesDisplay(props) {
12 |
13 | const instProps = props.properties;
14 |
15 | let properties;
16 |
17 |
18 | const switchValue = (prop) => {
19 | let value;
20 | switch (prop.instancePropertyCategory) {
21 | case "PRIMITIVE" :
22 | value = prop.primitiveValue;
23 | break;
24 | case "ENUM" :
25 | value = prop.symbolicName;
26 | break;
27 | case "MAP" :
28 | value = ( {expandProperties(prop.mapValues)} )
29 | break;
30 | case "ARRAY" :
31 | value = ( {expandProperties(prop.arrayValues)} )
32 | break;
33 | // it seems like this method can be driven with an unknown prop.instancePropertyCategory. I assume a render occurs before the prop value has been populated
34 | // removing this alert.
35 |
36 | // default:
37 | // alert("Unknown instance property category: "+prop.instancePropertyCategory);
38 | // break;
39 | }
40 | return value;
41 | };
42 |
43 | const expandProperties = (inProps) => {
44 |
45 | let propertyNamesUnsorted = inProps.propertyNames;
46 | let propertyNamesSorted = propertyNamesUnsorted.sort();
47 |
48 | let propertyList = propertyNamesSorted.map( (propName) =>
49 | {propName} :
50 | {
51 | switchValue(inProps.instanceProperties[propName])
52 | }
53 |
54 |
55 | );
56 |
57 | return propertyList;
58 | };
59 |
60 | if (instProps === undefined || instProps === null || instProps.propertyNames === undefined || instProps.propertyNames === null ||instProps.propertyNames.length === 0) {
61 | properties = (
62 |
63 | list is empty
64 |
65 | )
66 | }
67 | else {
68 |
69 | properties = (
70 |
71 | {expandProperties(instProps)}
72 |
73 |
74 | );
75 | }
76 |
77 | return properties;
78 | }
79 |
80 | InstancePropertiesDisplay.propTypes = {
81 | properties: PropTypes.object
82 | };
83 |
--------------------------------------------------------------------------------
/cra-client/src/components/GlossaryAuthor/components/visualisation/components/details-panel/InstanceStatusDisplay.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 |
4 | import PropTypes from "prop-types";
5 |
6 |
7 | export default function InstanceStatusDisplay(props) {
8 |
9 | let status;
10 | const inst = props.inst;
11 | if (inst.status !== "DELETED") {
12 | status = inst.status;
13 | }
14 | else {
15 | status = inst.status +"(Status on delete: "+inst.statusOnDelete;
16 | }
17 | return status;
18 | }
19 |
20 | InstanceStatusDisplay.propTypes = {
21 | inst: PropTypes.object
22 | };
23 |
--------------------------------------------------------------------------------
/cra-client/src/components/GlossaryAuthor/components/visualisation/components/details-panel/NodeDisplay.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 |
4 | import React, { useContext} from "react";
5 | import { IdentificationContext } from "../../../../../../contexts/IdentificationContext";
6 | import NodeDisplayDetails from "../../../update/NodeDisplayDetails";
7 | import getNodeType from "../../../properties/NodeTypes";
8 |
9 | export default function NodeDisplay(props) {
10 | const identificationContext = useContext(IdentificationContext);
11 | const node = props.node;
12 | const getCurrentNodeType = () => {
13 | const nodeType = getNodeType(
14 | identificationContext.getRestURL("glossary-author"),
15 | node.nodeType.toLowerCase()
16 | );
17 | return nodeType;
18 | };
19 |
20 | return (
21 |
22 |
26 |
27 | );
28 | }
29 |
--------------------------------------------------------------------------------
/cra-client/src/components/GlossaryAuthor/components/visualisation/components/details-panel/RelationshipDisplay.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 |
4 | import React, { useContext} from "react";
5 | import { IdentificationContext } from "../../../../../../contexts/IdentificationContext";
6 | import RelationshipDisplayDetails from "../../../update/RelationshipDisplayDetails";
7 | import getRelationshipType from "../../../properties/RelationshipTypes";
8 |
9 | export default function RelationshipDisplay(props) {
10 | console.log("RelationshipDisplay");
11 | const identificationContext = useContext(IdentificationContext);
12 | const relationship = props.relationship;
13 | const getCurrentRelationshipType = () => {
14 | const relationshipType = getRelationshipType(
15 | identificationContext.getRestURL("glossary-author"),
16 | relationship.relationshipType.toLowerCase()
17 | );
18 | return relationshipType;
19 | };
20 |
21 | return (
22 |
23 |
27 |
28 | );
29 | }
30 |
--------------------------------------------------------------------------------
/cra-client/src/components/GlossaryAuthor/components/visualisation/components/details-panel/details-panel.scss:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 |
4 |
5 | .instance-details-container {
6 | text-align : left;
7 | padding : 5px;
8 | background-color : rgb(240, 240, 240);
9 | font-size : 12px;
10 | }
11 |
12 | .instance-details-item {
13 | padding : inherit;
14 | }
15 |
16 | .details-sublist {
17 | margin-left : 5px;
18 | padding : inherit;
19 | }
20 |
21 | .details-sublist-item {
22 | margin-top : 3px;
23 | padding : inherit;
24 | }
25 |
26 | .details-sub-container {
27 | padding : 5px;
28 | }
29 |
30 | .details-sub-group {
31 | padding : 0px;
32 | }
33 | .details-sub-item {
34 | margin-top : 3px;
35 | padding : inherit;
36 | }
37 |
38 |
39 |
40 | .linkable {
41 | background-color : #CCCCCC;
42 | color : black;
43 | cursor : pointer;
44 | padding : 0px;
45 | width : 200px;
46 | border : none;
47 | text-align : left;
48 | outline : none;
49 | font-size : 12px;
50 | }
51 |
52 | .collapsible-non-bold {
53 | background-color : rgb(240,240,240);
54 | color : black;
55 | cursor : pointer;
56 | padding : 5px;
57 | width : 300px;
58 | border : none;
59 | text-align : left;
60 | outline : none;
61 | font-size : 12px;
62 | }
63 |
64 | .collapsible-non-bold:before {
65 | content: '\025BA';
66 | font-size: 10px;
67 | color: black;
68 | float: left;
69 | margin-left: 0px;
70 | margin-right: 10px;
71 | }
72 |
73 | .content {
74 | padding : 10px 0px 10px 10px;
75 | display : none;
76 | overflow : hidden;
77 | background-color : #CCCCCC;
78 | }
79 |
80 | .highlight {
81 | background-color : #EEEEEE;
82 | color : black;
83 | padding : 5px;
84 | width : 300px;
85 | border : 2px;
86 | text-align : left;
87 | outline : none;
88 | font-size : 12px;
89 | }
--------------------------------------------------------------------------------
/cra-client/src/components/GlossaryAuthor/components/visualisation/components/graph-controls/CreateNodeButtonWidget.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 | import React, { useState, useContext } from "react";
4 | import ReactDOM from "react-dom";
5 | import { InstancesContext } from "../../contexts/InstancesContext";
6 | import CreateNodeWizard from "../../../create/CreateNodeWizard";
7 | import { Button, Modal } from "carbon-components-react";
8 | // import Info16 from "@carbon/icons-react/lib/information/16";
9 |
10 | export default function CreateNodeButtonWidget() {
11 | console.log("CreateNodeButtonWidget");
12 | const instancesContext = useContext(InstancesContext);
13 |
14 | const onNodeCreated = (payLoad) => {
15 | instancesContext.addNodeInstance(payLoad.node);
16 | };
17 |
18 | const ModalStateManager = ({
19 | renderLauncher: LauncherContent,
20 | children: ModalContent,
21 | }) => {
22 | const [open, setOpen] = useState(false);
23 | return (
24 | <>
25 | {!ModalContent || typeof document === "undefined"
26 | ? null
27 | : ReactDOM.createPortal(
28 | ,
29 | document.body
30 | )}
31 | {LauncherContent && }
32 | >
33 | );
34 | };
35 |
36 | return (
37 |
38 | (
40 | setOpen(true)} >
41 | Create Node
42 |
43 | )}
44 | >
45 | {({ open, setOpen }) => (
46 | setOpen(false)}
51 | >
52 | setOpen(false)}
55 | />
56 |
57 | )}
58 |
59 |
60 | );
61 | }
62 |
--------------------------------------------------------------------------------
/cra-client/src/components/GlossaryAuthor/components/visualisation/components/graph-controls/SearchNodeButtonWidget.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 | import React, { useState, useContext } from "react";
4 |
5 | import ReactDOM from "react-dom";
6 |
7 | import { InstancesContext } from "../../contexts/InstancesContext";
8 |
9 | import SearchWizard from "../../../navigations/SearchWizard";
10 |
11 | import { Button, Modal } from "carbon-components-react";
12 | // import Info16 from "@carbon/icons-react/lib/information/16";
13 |
14 | export default function SearchNodeButtonWidget() {
15 | console.log("searchNodeButtonWidget");
16 | const instancesContext = useContext(InstancesContext);
17 |
18 | const onNodeChosen = (payLoad) => {
19 | instancesContext.addNodeInstance(payLoad.node);
20 | };
21 |
22 | const ModalStateManager = ({
23 | renderLauncher: LauncherContent,
24 | children: ModalContent,
25 | }) => {
26 | const [open, setOpen] = useState(false);
27 | return (
28 | <>
29 | {!ModalContent || typeof document === "undefined"
30 | ? null
31 | : ReactDOM.createPortal(
32 | ,
33 | document.body
34 | )}
35 | {LauncherContent && }
36 | >
37 | );
38 | };
39 |
40 | return (
41 |
42 | (
44 | setOpen(true)} >
45 | Add to canvas
46 |
47 | )}
48 | >
49 | {({ open, setOpen }) => (
50 | setOpen(false)}
55 | >
56 | setOpen(false)}
59 | />
60 |
61 | )}
62 |
63 |
64 | );
65 | }
66 |
--------------------------------------------------------------------------------
/cra-client/src/components/GlossaryAuthor/components/visualisation/components/graph-controls/history.scss:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 |
4 |
5 | .dialog-text {
6 | text-align : left;
7 | font-size : 12px;
8 | padding : 5px;
9 | }
10 |
11 | .status-update {
12 | margin-top : 30px;
13 | margin-bottom : 30px;
14 | }
15 |
16 | .history-results-area {
17 | height : 350px;
18 | width : 100%;
19 | overflow : auto;
20 | }
21 |
22 | .history-table {
23 | height : 350px;
24 | width : 100%;
25 | overflow : auto;
26 | }
27 |
28 | .row {
29 | margin-top : 5px;
30 | }
31 |
32 | /* Clear floats after the columns */
33 | .row:after {
34 | content : "";
35 | display : table;
36 | clear : both;
37 | width : 100%;
38 | }
39 |
40 | .gencolumn {
41 | float : left;
42 | width : 3%;
43 | text-align : left;
44 | }
45 |
46 | .qrycolumn {
47 | float : left;
48 | width : 32%;
49 | text-align : left;
50 | }
51 |
52 | .inscolumn {
53 | float : left;
54 | width : 65%;
55 | text-align : left;
56 | }
57 |
58 | .query-text {
59 | width : 90%;
60 | }
61 |
62 | .dismiss-button-container {
63 | height : 50px;
64 | width : 210px;
65 | position : absolute;
66 | right : 0px;
67 | bottom : 0px;
68 | }
69 |
70 | .dismiss-1-button-container {
71 | height : 50px;
72 | width : 105px;
73 | position : absolute;
74 | right : 0px;
75 | bottom : 0px;
76 | }
--------------------------------------------------------------------------------
/cra-client/src/components/GlossaryAuthor/components/visualisation/components/graph-controls/traversal.scss:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 |
4 |
5 | .dialog-text {
6 | text-align : left;
7 | font-size : 12px;
8 | padding : 5px;
9 | }
10 |
11 | .dialog-list {
12 | margin-left : 20px;
13 | padding : 5px;
14 | }
15 |
16 | .dialog-list-item {
17 | margin-bottom : 5px;
18 | padding : 5px;
19 | font-size : 12px;
20 | }
21 |
22 | .status-update {
23 | margin-top : 30px;
24 | margin-bottom : 30px;
25 | }
26 |
27 | .traversal-results-area {
28 | height : 200px;
29 | width : 850px;
30 | overflow : auto;
31 | }
32 |
33 | .table {
34 | height : 200px;
35 | width : 850px;
36 | overflow : auto;
37 | }
38 |
39 | /* Clear floats after the columns */
40 | .row:after {
41 | content : "";
42 | display : table;
43 | clear : both;
44 | width : 850px;
45 | }
46 |
47 | .column {
48 | float : left;
49 | width : 33.33%;
50 | text-align : left;
51 | }
52 |
53 | .traversal-filter-label {
54 | padding : 5px;
55 | font-size : 12px;
56 | }
57 |
58 | .multiselect-button-container {
59 | height : 50px;
60 | width : 210px;
61 | position : absolute;
62 | right : 0px;
63 | bottom : 60px;
64 | }
65 |
66 | .dismiss-button-container {
67 | height : 50px;
68 | width : 210px;
69 | position : absolute;
70 | right : 0px;
71 | bottom : 0px;
72 | }
73 |
74 | .dismiss-1-button-container {
75 | height : 50px;
76 | width : 105px;
77 | position : absolute;
78 | right : 0px;
79 | bottom : 0px;
80 | }
81 |
82 | .multiselect-button {
83 | height : 40px;
84 | width : 100px;
85 | background-color : rgb(180,180,180);
86 | font-size : 12px;
87 | color : 'black';
88 | }
89 |
90 |
--------------------------------------------------------------------------------
/cra-client/src/components/GlossaryAuthor/components/visualisation/components/instance-retrieval/InstanceRetrieval.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 |
4 | import React, { useContext, useState, useEffect } from "react";
5 |
6 | import PropTypes from "prop-types";
7 | import { InstancesContext } from "../../contexts/InstancesContext";
8 | import { withRouter } from "react-router-dom";
9 | import "./instance-retriever.scss";
10 | const InstanceRetrieval = (props) => {
11 | useEffect(
12 | () => {
13 | loadNodeByGUID();
14 | },
15 | []
16 | );
17 |
18 | const instancesContext = useContext(InstancesContext);
19 |
20 | /*
21 | * Function to get node by GUID
22 | */
23 | const loadNodeByGUID = () => {
24 | instancesContext.loadNode(props.guid, props.nodeType);
25 | };
26 |
27 | return
;
28 | };
29 |
30 | InstanceRetrieval.propTypes = {
31 | className: PropTypes.string,
32 | };
33 | export default withRouter(InstanceRetrieval);
34 |
--------------------------------------------------------------------------------
/cra-client/src/components/GlossaryAuthor/components/visualisation/components/instance-retrieval/filter.scss:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 |
4 |
5 | .filterControls {
6 | text-align : right;
7 | }
8 |
9 | .multiselect {
10 | width : 100%;
11 | text-align : right;
12 | }
13 |
14 | .filterSelectors {
15 | display : inline-block;
16 | }
17 |
18 | .selectBox {
19 | position : relative;
20 | width : 250px;
21 | display : inline-block;
22 | }
23 |
24 | .typeSelector {
25 | width : 250px;
26 | }
27 |
28 | .overSelect {
29 | position : absolute;
30 | left : 0;
31 | right : 0;
32 | top : 0;
33 | bottom : 0;
34 | }
35 |
36 | #selectlist {
37 | position : absolute;
38 | overflow : auto;
39 | height : 300px;
40 | z-index : 500;
41 | background-color : rgb(240,240,240);
42 | opacity : 1.0;
43 | display : none;
44 | width : 250px;
45 | }
46 |
47 | #checkboxes {
48 | border : 1px #dadada solid;
49 | text-align : left;
50 | }
51 |
52 | #checkboxes label {
53 | display : block;
54 | }
55 |
56 | #checkboxes label:hover {
57 | background-color : #1e90ff;
58 | }
--------------------------------------------------------------------------------
/cra-client/src/components/GlossaryAuthor/components/visualisation/components/instance-retrieval/instance-retriever.scss:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 |
4 | .retrieval-controls {
5 | display : flex;
6 | flex-flow : column;
7 | padding-right : 10%;
8 | padding-left : 10%;
9 | height : 200px;
10 | text-align : right;
11 | /*border-style : solid;
12 | border-width : 3px;
13 | border-color : rgb(236, 165, 12) ;*/
14 | }
15 |
16 | .retrieval-fields {
17 | text-align : right;
18 | /*border-style : solid;
19 | border-width : 3px;
20 | border-color : rgb(12, 175, 240) ;*/
21 | }
22 |
23 | .retrieval-group {
24 | margin-top : auto;
25 | margin-left : auto;
26 | margin-right : 0px;
27 | margin-bottom : 0px;
28 | }
29 |
30 | .retrieval-button {
31 | margin-top : auto;
32 | margin-left : auto;
33 | margin-right : 5px;
34 | margin-bottom : 5px;
35 | height : 40px;
36 | width : 100px;
37 | background-color : rgb(180, 180, 180);
38 | }
39 |
40 | .search-text {
41 | width : 250px;
42 | }
43 |
44 | .search-limit-text {
45 | width : 50px;
46 | }
--------------------------------------------------------------------------------
/cra-client/src/components/GlossaryAuthor/components/visualisation/components/portal/Portal.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 |
4 |
5 | import React, { useEffect, useState } from "react";
6 |
7 | import ReactDOM from "react-dom";
8 |
9 | import PropTypes from "prop-types";
10 |
11 |
12 | import "./portal.scss";
13 |
14 |
15 |
16 | export default function Portal(props) {
17 |
18 | const [newElement, setNewElement] = useState(null);
19 |
20 | /*
21 | * Emulate componentDidMount - to append the wrapper
22 | */
23 | const componentDidMount = () => {
24 | const portalRoot = props.anchorCB().current;
25 | let locElement = document.createElement("div");
26 | portalRoot.appendChild(locElement);
27 | setNewElement(locElement);
28 |
29 | return () => {
30 | /*
31 | * Emulate componentWillUnmount... to remove the wrapper
32 | */
33 | portalRoot.removeChild(locElement);
34 | setNewElement(null);
35 | }
36 | };
37 | useEffect (componentDidMount ,[]);
38 |
39 | let content = (
40 |
41 |
42 | {props.children}
43 |
44 |
45 | );
46 |
47 | /*
48 | * Render the Portal's children in the wrapper element...
49 | */
50 | if (props.show) {
51 | if (newElement) {
52 | return (
53 | ReactDOM.createPortal(content, newElement)
54 | );
55 | }
56 | }
57 | return null;
58 | }
59 |
60 | Portal.propTypes = {
61 | children: PropTypes.node,
62 | show : PropTypes.bool,
63 | anchorCB: PropTypes.func.isRequired
64 | };
65 |
--------------------------------------------------------------------------------
/cra-client/src/components/GlossaryAuthor/components/visualisation/components/portal/portal.scss:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 |
4 | .portal-div {
5 | position : fixed;
6 | z-index : 1001;
7 | top : 300px;
8 | left : 478px;
9 | border-style : solid;
10 | border-width : 3px;
11 | border-color : black;
12 | height : 500px;
13 | width : 900px;
14 | opacity : 1.0;
15 | padding : 10px;
16 | font-size : 10px;
17 | background : white;
18 | color : black;
19 | }
20 |
21 |
22 | .portal-backdrop {
23 | position : fixed;
24 | z-index : 1000;
25 | top : 0px;
26 | left : 260px;
27 | border-style : solid;
28 | border-width : 3px;
29 | border-color : rgb(72, 205, 209) ;
30 | height : 1450px;
31 | width : 1600px;
32 | opacity : 0.9;
33 | padding : 10px;
34 | font-size : 10px;
35 | background : rgb(200,200,200);
36 | }
37 |
--------------------------------------------------------------------------------
/cra-client/src/components/GlossaryAuthor/components/visualisation/question-mark-32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/odpi/egeria-react-ui/fcc6c58643b639da61799ba52b138eea044c2f4a/cra-client/src/components/GlossaryAuthor/components/visualisation/question-mark-32.png
--------------------------------------------------------------------------------
/cra-client/src/components/Home.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 | import React, { useContext } from "react";
4 | import { IdentificationContext } from "../contexts/IdentificationContext";
5 | import Egeriacolor from "../images/odpi/Egeria_logo_color_400";
6 | export default function Home() {
7 | const identificationContext = useContext(IdentificationContext);
8 | console.log("Home identificationContext", identificationContext);
9 | return (
10 |
11 |
Welcome to Egeria React UI
12 |
Click a task on the left to get started
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 | Community profile home screen coming soon.
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 | );
31 | }
32 |
--------------------------------------------------------------------------------
/cra-client/src/components/Info/Info.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 | import React from "react";
4 | import Launch32 from "../../images/carbon/Launch_32";
5 |
6 | const InfoSection = props => (
7 |
8 |
{props.heading}
9 |
10 | {/* */}
11 | {props.children}
12 |
13 |
14 | );
15 |
16 | const InfoCard = props => {
17 | return (
18 |
19 | {props.heading}
20 | {props.body}
21 |
22 | {props.icon}
23 |
24 |
25 |
26 | );
27 | };
28 | const LocalInfoCard = props => {
29 | return (
30 |
31 | {props.heading}
32 | {props.body}
33 |
34 | {props.icon}
35 |
36 |
37 |
38 |
39 | );
40 | };
41 | export { InfoSection, InfoCard, LocalInfoCard };
--------------------------------------------------------------------------------
/cra-client/src/components/Info/_info.scss:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 | .info-section {
4 | }
5 |
6 | .info-card {
7 | margin: 2px;
8 | margin-top: $spacing-09;
9 | display: flex;
10 | flex-direction: column;
11 | margin-top: $spacing-09;
12 |
13 |
14 | svg {
15 | margin-top: $spacing-09;
16 | }
17 |
18 | // top border in only small breakpoints to prevent overrides
19 | @include carbon--breakpoint-down(md) {
20 | &:not(:nth-child(2)) {
21 | border-top: 1px solid $ui-03;
22 | padding-top: $spacing-09;
23 | }
24 | }
25 |
26 | // left border in just the 2nd column items
27 | @include carbon--breakpoint(md) {
28 | &:nth-child(odd) {
29 | border-left: 1px solid $ui-03;
30 | }
31 | }
32 |
33 | // left border in all items
34 | @include carbon--breakpoint(lg) {
35 | margin-top: 0;
36 | border-left: 1px solid $ui-03;
37 |
38 | svg {
39 | margin-top: $layout-06;
40 | }
41 | }
42 | }
43 |
44 | .info-card__body {
45 | margin-top: $spacing-06;
46 | flex-grow: 1;
47 | @include type-style("body-long-01");
48 | @include carbon--breakpoint-between(321px, md) {
49 | max-width: 75%;
50 | }
51 | }
52 | .info-card__footer {
53 | display: flex;
54 | justify-content: space-between;
55 | }
--------------------------------------------------------------------------------
/cra-client/src/components/RepositoryExplorer/README.md:
--------------------------------------------------------------------------------
1 | ## Repository Explorer User Interface
2 |
3 | The Repository Explorer (Rex) interface provides a way to query Egeria metadata servers to retrieve and display about the metadata instances they contain. It is possible to retrieve entities and relationships, view their properties and display them as a graph of interconnected objects.
4 |
5 | The Repository Explorer (Rex) interface runs under the [Presentation Server](../../../../../README.md).
6 |
7 | The Repository Explorer (Rex) interface delegates operations to the [Repository Explorer (Rex) View Service](../../../../../../../view-services/rex-view/README.md). in order to retrieve metadata.
8 |
9 | For more general information about view services, see [View Services](../../../../../../../view-services/README.md).
10 |
11 |
12 | ### Configuration
13 |
14 | For information on how to configure the presentation server refer to the Admin Guide section on [Configuring the presentation server](../../../../../../../admin-services/docs/user/configuring-the-presentation-server.md).
15 |
16 | For information on how to configure the view services refer to the Admin Guide section on and [Configuring the view services](../../../../../../../admin-services/docs/user/configuring-the-view-services.md).
17 |
18 |
--------------------------------------------------------------------------------
/cra-client/src/components/RepositoryExplorer/RexInterface.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/odpi/egeria-react-ui/fcc6c58643b639da61799ba52b138eea044c2f4a/cra-client/src/components/RepositoryExplorer/RexInterface.png
--------------------------------------------------------------------------------
/cra-client/src/components/RepositoryExplorer/SearchResults.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/odpi/egeria-react-ui/fcc6c58643b639da61799ba52b138eea044c2f4a/cra-client/src/components/RepositoryExplorer/SearchResults.png
--------------------------------------------------------------------------------
/cra-client/src/components/RepositoryExplorer/components/details-panel/DetailsPanel.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 |
4 | import React from "react";
5 |
6 | import PropTypes from "prop-types";
7 |
8 | import InstanceDisplay from "./InstanceDisplay";
9 |
10 |
11 | export default function DetailsPanel(props) {
12 |
13 | return (
14 |
15 |
16 |
17 |
18 |
19 | );
20 | }
21 |
22 | DetailsPanel.propTypes = {
23 | className : PropTypes.string
24 | }
25 |
26 |
--------------------------------------------------------------------------------
/cra-client/src/components/RepositoryExplorer/components/details-panel/EntityProxyDisplay.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 |
4 | import React from "react";
5 |
6 | import PropTypes from "prop-types";
7 |
8 | import InstanceStatusDisplay from "./InstanceStatusDisplay";
9 |
10 | import InstancePropertiesDisplay from "./InstancePropertiesDisplay";
11 |
12 | import "./details-panel.scss";
13 |
14 |
15 | export default function EntityProxyDisplay(props) {
16 |
17 | const entityProxy = props.entityProxy;
18 |
19 | return (
20 |
21 |
GUID : {entityProxy.guid}
22 |
Type : {entityProxy.type.typeDefName}
23 |
Version : {entityProxy.version}
24 |
Status :
25 |
Properties : { !entityProxy.uniqueProperties ? "empty" :
26 | }
27 |
Home Repository :
28 |
29 | metadataCollectionName : {entityProxy.metadataCollectionName}
30 | metadataCollectionId : {entityProxy.metadataCollectionId}
31 |
32 |
33 |
34 | );
35 | }
36 |
37 |
38 | EntityProxyDisplay.propTypes = {
39 | entityProxy: PropTypes.object
40 | };
41 |
42 |
--------------------------------------------------------------------------------
/cra-client/src/components/RepositoryExplorer/components/details-panel/InstanceClassificationsDisplay.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 |
4 | import React from "react";
5 |
6 | import PropTypes from "prop-types";
7 |
8 | import InstancePropertiesDisplay from "./InstancePropertiesDisplay";
9 |
10 | import "./details-panel.scss";
11 |
12 |
13 |
14 | export default function InstanceClassificationsDisplay(props) {
15 |
16 |
17 | const instClassifications = props.classifications;
18 |
19 | let classifications;
20 |
21 |
22 | const expandClassifications = (inClassifications) => {
23 | let classificationMap = {};
24 | inClassifications.forEach(cls => {
25 | classificationMap[cls.name] = cls;
26 | });
27 | let classificationNamesSorted = Object.keys(classificationMap).sort();
28 |
29 | let classificationList = classificationNamesSorted.map( (clsName) =>
30 | {clsName} :
31 |
32 |
33 |
34 | );
35 |
36 | return classificationList;
37 | };
38 |
39 | if (instClassifications === undefined || instClassifications === null || instClassifications.length ===0 ) {
40 |
41 | classifications = (
42 |
45 | )
46 | }
47 |
48 | else {
49 |
50 | classifications = (
51 |
52 | {expandClassifications(instClassifications)}
53 |
54 | );
55 | }
56 |
57 | return classifications;
58 | }
59 |
60 | InstanceClassificationsDisplay.propTypes = {
61 | classifications: PropTypes.array
62 | };
63 |
--------------------------------------------------------------------------------
/cra-client/src/components/RepositoryExplorer/components/details-panel/InstanceDisplay.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 |
4 | import React, { useContext } from "react";
5 |
6 | import { InstancesContext } from "../../contexts/InstancesContext";
7 |
8 | import PropTypes from "prop-types";
9 |
10 | import EntityDisplay from "./EntityDisplay";
11 |
12 | import RelationshipDisplay from "./RelationshipDisplay";
13 |
14 |
15 |
16 | export default function InstanceDisplay() {
17 |
18 | const instancesContext = useContext(InstancesContext);
19 |
20 | if (instancesContext.getFocusGUID() === "") {
21 |
22 | /*
23 | * No instance is selected as the focus - display an 'empty' message
24 | */
25 | return Nothing is selected
26 |
27 | }
28 | else {
29 |
30 | /*
31 | * An instance is selected as the focus - display it
32 | */
33 | const focusCategory = instancesContext.getFocusCategory();
34 |
35 | const focusGen = instancesContext.getFocusGen();
36 | const enterprise = focusGen.enterpriseOption;
37 |
38 | if (focusCategory === "Entity") {
39 | return
40 | }
41 | else if (focusCategory === "Relationship") {
42 | return
43 | }
44 | }
45 |
46 | }
47 |
48 |
49 |
50 | InstanceDisplay.propTypes = {
51 | children: PropTypes.node
52 | };
53 |
--------------------------------------------------------------------------------
/cra-client/src/components/RepositoryExplorer/components/details-panel/InstanceStatusDisplay.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 |
4 | import PropTypes from "prop-types";
5 |
6 |
7 | export default function InstanceStatusDisplay(props) {
8 |
9 | let status;
10 | const inst = props.inst;
11 | if (inst.status !== "DELETED") {
12 | status = inst.status;
13 | }
14 | else {
15 | status = inst.status +"(Status on delete: "+inst.statusOnDelete;
16 | }
17 | return status;
18 | }
19 |
20 | InstanceStatusDisplay.propTypes = {
21 | inst: PropTypes.object
22 | };
23 |
--------------------------------------------------------------------------------
/cra-client/src/components/RepositoryExplorer/components/details-panel/details-panel.scss:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 |
4 |
5 | .instance-details-container {
6 | text-align : left;
7 | padding : 5px;
8 | background-color : rgb(240, 240, 240);
9 | font-size : 12px;
10 | }
11 |
12 | .instance-details-item {
13 | padding : inherit;
14 | }
15 |
16 | .details-sublist {
17 | margin-left : 5px;
18 | padding : inherit;
19 | }
20 |
21 | .details-sublist-item {
22 | margin-top : 3px;
23 | padding : inherit;
24 | }
25 |
26 | .details-sub-container {
27 | padding : 5px;
28 | }
29 |
30 | .details-sub-group {
31 | padding : 0px;
32 | }
33 | .details-sub-item {
34 | margin-top : 3px;
35 | padding : inherit;
36 | }
37 |
38 |
39 |
40 | .linkable {
41 | background-color : #CCCCCC;
42 | color : black;
43 | cursor : pointer;
44 | padding : 0px;
45 | width : 200px;
46 | border : none;
47 | text-align : left;
48 | outline : none;
49 | font-size : 12px;
50 | }
51 |
52 | .collapsible-non-bold {
53 | background-color : rgb(240,240,240);
54 | color : black;
55 | cursor : pointer;
56 | padding : 5px;
57 | width : 300px;
58 | border : none;
59 | text-align : left;
60 | outline : none;
61 | font-size : 12px;
62 | }
63 |
64 | .collapsible-non-bold:before {
65 | content: '\025BA';
66 | font-size: 10px;
67 | color: black;
68 | float: left;
69 | margin-left: 0px;
70 | margin-right: 10px;
71 | }
72 |
73 | .content {
74 | padding : 10px 0px 10px 10px;
75 | display : none;
76 | overflow : hidden;
77 | background-color : #CCCCCC;
78 | }
79 |
80 | .highlight {
81 | background-color : #EEEEEE;
82 | color : black;
83 | padding : 5px;
84 | width : 300px;
85 | border : 2px;
86 | text-align : left;
87 | outline : none;
88 | font-size : 12px;
89 | }
--------------------------------------------------------------------------------
/cra-client/src/components/RepositoryExplorer/components/graph-controls/history.scss:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 |
4 |
5 | .dialog-text {
6 | text-align : left;
7 | font-size : 12px;
8 | padding : 5px;
9 | }
10 |
11 | .status-update {
12 | margin-top : 30px;
13 | margin-bottom : 30px;
14 | }
15 |
16 | .history-results-area {
17 | height : 350px;
18 | width : 100%;
19 | overflow : auto;
20 | }
21 |
22 | .history-table {
23 | height : 350px;
24 | width : 100%;
25 | overflow : auto;
26 | }
27 |
28 | .row {
29 | margin-top : 5px;
30 | }
31 |
32 | /* Clear floats after the columns */
33 | .row:after {
34 | content : "";
35 | display : table;
36 | clear : both;
37 | width : 100%;
38 | }
39 |
40 | .gencolumn {
41 | float : left;
42 | width : 3%;
43 | text-align : left;
44 | }
45 |
46 | .qrycolumn {
47 | float : left;
48 | width : 32%;
49 | text-align : left;
50 | }
51 |
52 | .inscolumn {
53 | float : left;
54 | width : 65%;
55 | text-align : left;
56 | }
57 |
58 | .query-text {
59 | width : 90%;
60 | }
61 |
62 | .dismiss-button-container {
63 | height : 50px;
64 | width : 210px;
65 | position : absolute;
66 | right : 0px;
67 | bottom : 0px;
68 | }
69 |
70 | .dismiss-1-button-container {
71 | height : 50px;
72 | width : 105px;
73 | position : absolute;
74 | right : 0px;
75 | bottom : 0px;
76 | }
--------------------------------------------------------------------------------
/cra-client/src/components/RepositoryExplorer/components/graph-controls/traversal.scss:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 |
4 |
5 | .dialog-text {
6 | text-align : left;
7 | font-size : 12px;
8 | padding : 5px;
9 | }
10 |
11 | .dialog-list {
12 | margin-left : 20px;
13 | padding : 5px;
14 | }
15 |
16 | .dialog-list-item {
17 | margin-bottom : 5px;
18 | padding : 5px;
19 | font-size : 12px;
20 | }
21 |
22 | .status-update {
23 | margin-top : 30px;
24 | margin-bottom : 30px;
25 | }
26 |
27 | .traversal-results-area {
28 | height : 200px;
29 | width : 850px;
30 | overflow : auto;
31 | }
32 |
33 | .table {
34 | height : 200px;
35 | width : 850px;
36 | overflow : auto;
37 | }
38 |
39 | /* Clear floats after the columns */
40 | .row:after {
41 | content : "";
42 | display : table;
43 | clear : both;
44 | width : 850px;
45 | }
46 |
47 | .column {
48 | float : left;
49 | width : 33.33%;
50 | text-align : left;
51 | }
52 |
53 | .traversal-filter-label {
54 | padding : 5px;
55 | font-size : 12px;
56 | }
57 |
58 | .multiselect-button-container {
59 | height : 50px;
60 | width : 210px;
61 | position : absolute;
62 | right : 0px;
63 | bottom : 60px;
64 | }
65 |
66 | .dismiss-button-container {
67 | height : 50px;
68 | width : 210px;
69 | position : absolute;
70 | right : 0px;
71 | bottom : 0px;
72 | }
73 |
74 | .dismiss-1-button-container {
75 | height : 50px;
76 | width : 105px;
77 | position : absolute;
78 | right : 0px;
79 | bottom : 0px;
80 | }
81 |
82 | .multiselect-button {
83 | height : 40px;
84 | width : 100px;
85 | background-color : rgb(180,180,180);
86 | font-size : 12px;
87 | color : 'black';
88 | }
89 |
90 |
--------------------------------------------------------------------------------
/cra-client/src/components/RepositoryExplorer/components/instance-retrieval/HistoricalDateTime.jsx:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 |
4 | import React, { useContext, useState } from "react";
5 |
6 | import { Toggle } from "carbon-components-react";
7 |
8 | import DateTimePicker from "./DateTimePicker";
9 |
10 | import { InstancesContext } from "../../contexts/InstancesContext";
11 |
12 | import "./instance-retriever.scss";
13 |
14 | export default function HistoricalDateTime() {
15 | const instancesContext = useContext(InstancesContext);
16 |
17 | return (
18 |
19 |
Historical Query
20 |
21 |
27 | {instancesContext.useHistoricalQuery === true && (
28 |
29 |
33 | { instancesContext.asOfDate === undefined &&
34 |
Please input a date for historical queries
35 | }
36 |
37 |
38 | ) }
39 |
40 |
41 | );
42 | }
43 |
--------------------------------------------------------------------------------
/cra-client/src/components/RepositoryExplorer/components/instance-retrieval/filter.scss:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 |
4 |
5 | .filterControls {
6 | text-align : right;
7 | }
8 |
9 | .multiselect {
10 | width : 100%;
11 | text-align : right;
12 | }
13 |
14 | .filterSelectors {
15 | display : inline-block;
16 | }
17 |
18 | .selectBox {
19 | position : relative;
20 | width : 250px;
21 | display : inline-block;
22 | }
23 |
24 | .typeSelector {
25 | width : 250px;
26 | }
27 |
28 | .overSelect {
29 | position : absolute;
30 | left : 0;
31 | right : 0;
32 | top : 0;
33 | bottom : 0;
34 | }
35 |
36 | #selectlist {
37 | position : absolute;
38 | overflow : auto;
39 | height : 300px;
40 | z-index : 500;
41 | background-color : rgb(240,240,240);
42 | opacity : 1.0;
43 | display : none;
44 | width : 250px;
45 | }
46 |
47 | #checkboxes {
48 | border : 1px #dadada solid;
49 | text-align : left;
50 | }
51 |
52 | #checkboxes label {
53 | display : block;
54 | }
55 |
56 | #checkboxes label:hover {
57 | background-color : #1e90ff;
58 | }
--------------------------------------------------------------------------------
/cra-client/src/components/RepositoryExplorer/components/instance-retrieval/instance-retriever.scss:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 |
4 | .retrieval-controls {
5 | display : flex;
6 | flex-flow : column;
7 | height : 200px;
8 | text-align : right;
9 | padding-right : 10%;
10 | padding-left : 10%;
11 | /*border-style : solid;
12 | border-width : 3px;
13 | border-color : rgb(236, 165, 12) ;*/
14 | }
15 |
16 | .retrieval-fields {
17 | text-align : right;
18 | /*border-style : solid;
19 | border-width : 3px;
20 | border-color : rgb(12, 175, 240) ;*/
21 | }
22 |
23 | .retrieval-group {
24 | margin-top : auto;
25 | margin-left : auto;
26 | margin-right : 0px;
27 | margin-bottom : 0px;
28 | }
29 |
30 | .retrieval-button {
31 | margin-top : auto;
32 | margin-left : auto;
33 | margin-right : 5px;
34 | margin-bottom : 5px;
35 | height : 40px;
36 | width : 100px;
37 | background-color : rgb(180, 180, 180);
38 | }
39 |
40 | .search-text {
41 | width : 250px;
42 | }
43 |
44 | .search-limit-text {
45 | width : 50px;
46 | }
--------------------------------------------------------------------------------
/cra-client/src/components/RepositoryExplorer/components/instance-retrieval/search-results.scss:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 |
4 |
5 | .dialog-text {
6 | text-align : left;
7 | font-size : 12px;
8 | padding : 5px;
9 | }
10 |
11 | .dialog-list {
12 | margin-left : 20px;
13 | padding : 5px;
14 | }
15 |
16 | .status-update {
17 | margin-top : 30px;
18 | margin-bottom : 30px;
19 | font-size : 12px;
20 | }
21 |
22 | .search-results-area {
23 | height : 200px;
24 | width : 850px;
25 | overflow : auto;
26 | }
27 |
28 | .search-results-list {
29 | text-align : 'left';
30 | padding : 5px 20px 5px 20px;
31 | };
32 |
33 | .search-result-label {
34 | padding : 5px;
35 | font-size : 12px;
36 | }
37 |
38 | .multiselect-button-container {
39 | height : 50px;
40 | width : 210px;
41 | position : absolute;
42 | right : 0px;
43 | bottom : 60px;
44 | }
45 |
46 | .dismiss-button-container {
47 | height : 50px;
48 | width : 210px;
49 | position : absolute;
50 | right : 0px;
51 | bottom : 0px;
52 | }
53 |
54 | .dismiss-1-button-container {
55 | height : 50px;
56 | width : 105px;
57 | position : absolute;
58 | right : 0px;
59 | bottom : 0px;
60 | }
61 |
62 | .multiselect-button {
63 | height : 40px;
64 | width : 100px;
65 | background-color : rgb(180,180,180);
66 | font-size : 12px;
67 | color : 'black';
68 | }
69 |
70 |
--------------------------------------------------------------------------------
/cra-client/src/components/RepositoryExplorer/components/portal/Portal.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 |
4 |
5 | import React, { useEffect, useState } from "react";
6 |
7 | import ReactDOM from "react-dom";
8 |
9 | import PropTypes from "prop-types";
10 |
11 |
12 | import "./portal.scss";
13 |
14 |
15 |
16 | export default function Portal(props) {
17 |
18 | const [newElement, setNewElement] = useState(null);
19 |
20 | /*
21 | * Emulate componentDidMount - to append the wrapper
22 | */
23 | const componentDidMount = () => {
24 | const portalRoot = props.anchorCB().current;
25 | let locElement = document.createElement("div");
26 | portalRoot.appendChild(locElement);
27 | setNewElement(locElement);
28 |
29 | return () => {
30 | /*
31 | * Emulate componentWillUnmount... to remove the wrapper
32 | */
33 | portalRoot.removeChild(locElement);
34 | setNewElement(null);
35 | }
36 | };
37 | useEffect (componentDidMount ,[]);
38 |
39 | let content = (
40 |
41 |
42 | {props.children}
43 |
44 |
45 | );
46 |
47 | /*
48 | * Render the Portal's children in the wrapper element...
49 | */
50 | if (props.show) {
51 | if (newElement) {
52 | return (
53 | ReactDOM.createPortal(content, newElement)
54 | );
55 | }
56 | }
57 | return null;
58 | }
59 |
60 | Portal.propTypes = {
61 | children: PropTypes.node,
62 | show : PropTypes.bool,
63 | anchorCB: PropTypes.func.isRequired
64 | };
65 |
--------------------------------------------------------------------------------
/cra-client/src/components/RepositoryExplorer/components/portal/portal.scss:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 |
4 | .portal-div {
5 | position : fixed;
6 | z-index : 1001;
7 | top : 300px;
8 | left : 478px;
9 | border-style : solid;
10 | border-width : 3px;
11 | border-color : black;
12 | height : 500px;
13 | width : 900px;
14 | opacity : 1.0;
15 | padding : 10px;
16 | font-size : 10px;
17 | background : white;
18 | color : black;
19 | }
20 |
21 |
22 | .portal-backdrop {
23 | position : fixed;
24 | z-index : 1000;
25 | top : 0px;
26 | left : 260px;
27 | border-style : solid;
28 | border-width : 3px;
29 | border-color : rgb(72, 205, 209) ;
30 | height : 1450px;
31 | width : 1600px;
32 | opacity : 0.9;
33 | padding : 10px;
34 | font-size : 10px;
35 | background : rgb(200,200,200);
36 | }
37 |
--------------------------------------------------------------------------------
/cra-client/src/components/RepositoryExplorer/components/resource-selection/EnterpriseControl.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 |
4 |
5 | import React, { useContext } from "react";
6 |
7 | import { RepositoryServerContext } from "../../contexts/RepositoryServerContext";
8 |
9 | import "./resource-selector.scss"
10 |
11 |
12 |
13 | /*
14 | * The EnterpriseControl provides a checkbox that the user can check if they want queryies to be
15 | * issued at the Enterprise level - which means that results will be collected from across
16 | * the cohorts that the target server is a member of, rather than just locally.
17 | */
18 | export default function EnterpriseControl() {
19 |
20 |
21 | const repositoryServerContext = useContext(RepositoryServerContext);
22 |
23 |
24 |
25 | return (
26 |
27 |
28 |
29 | Enterprise :
30 |
36 |
37 |
38 |
39 |
40 | );
41 | }
42 |
--------------------------------------------------------------------------------
/cra-client/src/components/RepositoryExplorer/components/resource-selection/resource-selector.scss:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 |
4 | .resource-controls {
5 | font-size : 12px;
6 | text-align : center;
7 | }
8 |
9 | .descriptive-text {
10 | font-size : 12px;
11 | }
--------------------------------------------------------------------------------
/cra-client/src/components/ServerAuthor/ServerAuthor.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 |
4 | import React from "react";
5 | import ServerAuthorContext from "./contexts/ServerAuthorContext";
6 | import ServerAuthorWizard from"./components/ServerAuthorWizard";
7 |
8 | export default function ServerAuthor() {
9 | return (
10 |
11 |
12 |
13 | );
14 | }
15 |
--------------------------------------------------------------------------------
/cra-client/src/components/ServerAuthor/components/ConfigurationSteps.jsx:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 |
4 | import React, { useContext } from "react";
5 | import {
6 | ProgressIndicator,
7 | ProgressStep,
8 | } from "carbon-components-react";
9 | import { ServerAuthorContext } from "../contexts/ServerAuthorContext";
10 | import serverConfigElements from "./defaults/serverConfigElements";
11 |
12 | export default function ConfigurationSteps() {
13 |
14 | const {
15 | currentServerLocalServerType,
16 | progressIndicatorIndex,
17 | serverConfigurationSteps
18 | } = useContext(ServerAuthorContext);
19 |
20 | const steps = serverConfigurationSteps(currentServerLocalServerType);
21 |
22 | const getStepLabel = (index) => {
23 | const id = steps[index];
24 | const serverTypeElement = serverConfigElements.find(o => o.id === id);
25 | return serverTypeElement.label;
26 | };
27 |
28 | return (
29 |
30 |
37 | {steps.map((step, i) => (
38 |
43 | ))}
44 |
45 |
46 | );
47 |
48 | }
--------------------------------------------------------------------------------
/cra-client/src/components/ServerAuthor/components/ConfigureLocalRepository.jsx:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 |
4 | import React, { useContext } from "react";
5 | import { TileGroup, RadioTile } from "carbon-components-react";
6 |
7 | import { ServerAuthorContext } from "../contexts/ServerAuthorContext";
8 |
9 | export default function ConfigureLocalRepository() {
10 | const { currentServerRepository, setCurrentServerRepository } =
11 | useContext(ServerAuthorContext);
12 |
13 | return (
14 |
15 |
16 |
17 | Server repository type
18 |
19 | setCurrentServerRepository(value)}
25 | style={{ marginTop: "16px", textAlign: "left" }}
26 | >
27 |
34 | Bitemporal XTDB repository (in memory)
35 |
36 |
43 | Non-temporal local Graph (Janus)
44 |
45 |
52 | In Memory
53 |
54 |
55 |
62 | Read Only
63 |
64 |
65 |
66 |
67 | );
68 | }
69 |
--------------------------------------------------------------------------------
/cra-client/src/components/ServerAuthor/components/ConfigureRepositoryProxyConnectors.jsx:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 |
4 | import React, { useContext } from "react";
5 | import {
6 | // Button,
7 | TextInput,
8 | } from "carbon-components-react";
9 | // import {
10 | // Add16,
11 | // Subtract16,
12 | // } from "@carbon/icons-react";
13 |
14 | import { ServerAuthorContext } from "../contexts/ServerAuthorContext";
15 |
16 | export default function ConfigureRepositoryProxyConnectors() {
17 |
18 | const {
19 | currentServerProxyConnector, setCurrentServerProxyConnector,
20 | currentServerEventMapperConnector, setCurrentServerEventMapperConnector,
21 | currentServerEventSource, setCurrentServerEventSource,
22 | } = useContext(ServerAuthorContext);
23 |
24 | return (
25 |
26 |
27 |
28 | setCurrentServerProxyConnector(e.target.value)}
35 | autoComplete="off"
36 | />
37 |
38 | setCurrentServerEventMapperConnector(e.target.value)}
45 | style={{marginBottom: "16px"}}
46 | autoComplete="off"
47 | />
48 |
49 | setCurrentServerEventSource(e.target.value)}
56 | style={{marginBottom: "16px"}}
57 | autoComplete="off"
58 | />
59 |
60 |
61 |
62 | )
63 |
64 | }
--------------------------------------------------------------------------------
/cra-client/src/components/ServerAuthor/components/accessServices/options/AssetLineageOptions.jsx:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 | import React, { useContext } from "react";
4 |
5 | import { TextInput } from "carbon-components-react";
6 | import { ServerAuthorContext } from "../../../contexts/ServerAuthorContext";
7 |
8 | import AuthorStringList from "../../../../common/AuthorStringList";
9 |
10 | export default function AssetLineageOptions(props) {
11 | const {
12 | // supported zones
13 | supportedZoneNames,
14 | // setSupportedZones,
15 | addSupportedZoneName,
16 | removeSupportedZoneByIndex,
17 |
18 | // chunk
19 | glossaryTermLineageEventsChunkSize,
20 | setGlossaryTermLineageEventsChunkSize
21 |
22 | } = useContext(ServerAuthorContext);
23 |
24 | // const clearCurrentOptionState = () => {
25 | // setSupportedZones([]);
26 | // setDefaultZoneNames([]);
27 | // setPublishZones([]);
28 | // };
29 |
30 | // options functions
31 |
32 |
33 | const handleAddSupportedZones = (zoneName) => {
34 | console.log("handleAddSupportedZones() called", { zoneName });
35 | if (zoneName.length === 0) return;
36 | addSupportedZoneName(zoneName);
37 | };
38 | const handleRemoveSupportedZones = (index) => {
39 | console.log("handleRemoveSupportedZones() called", { index });
40 | removeSupportedZoneByIndex(index);
41 | };
42 |
43 | return (
44 |
45 | {props.operation === "Edit" &&
Edit Access Service }
46 |
47 | {props.operation !== null && props.operation !== "" && (
48 |
49 |
50 |
57 |
58 |
59 |
setGlossaryTermLineageEventsChunkSize(e.target.value)}
66 | style={{ marginBottom: "16px", width: "100%" }}
67 | autoComplete="off"
68 | />
69 |
70 | )}
71 |
72 | );
73 | }
74 |
--------------------------------------------------------------------------------
/cra-client/src/components/ServerAuthor/components/accessServices/options/SupportedZoneOption.jsx:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 | import React, { useContext } from "react";
4 | import { ServerAuthorContext } from "../../../contexts/ServerAuthorContext";
5 | import AuthorStringList from "../../../../common/AuthorStringList";
6 |
7 | export default function AllZonesOptions(props) {
8 | const {
9 | // supported zones
10 | supportedZoneNames,
11 | // setSupportedZones,
12 | addSupportedZoneName,
13 | removeSupportedZoneByIndex,
14 |
15 | } = useContext(ServerAuthorContext);
16 |
17 | const handleAddSupportedZones = (zoneName) => {
18 | console.log("handleAddSupportedZones() called", { zoneName });
19 | if (zoneName.length === 0) return;
20 | addSupportedZoneName(zoneName);
21 | };
22 | const handleRemoveSupportedZones = (index) => {
23 | console.log("handleRemoveSupportedZones() called", { index });
24 | removeSupportedZoneByIndex(index);
25 | };
26 |
27 | return (
28 |
29 | {props.operation === "Edit" &&
Edit Access Service }
30 |
31 | {props.operation !== null && props.operation !== "" && (
32 |
42 | )}
43 |
44 | );
45 | }
46 |
--------------------------------------------------------------------------------
/cra-client/src/components/ServerAuthor/components/defaults/auditLogDestinations.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 | const AUDIT_LOG_DESTINATION_PREFIX =
4 | "org.odpi.openmetadata.adapters.repositoryservices.auditlogstore.";
5 | const auditLogDestinations = [
6 | {
7 | id: "default",
8 | label: "Default",
9 | connectorProviderClassName: AUDIT_LOG_DESTINATION_PREFIX + "console.ConsoleAuditLogStoreProvider"
10 | },
11 | {
12 | id: "console",
13 | label: "Console",
14 | connectorProviderClassName: AUDIT_LOG_DESTINATION_PREFIX + "console.ConsoleAuditLogStoreProvider"
15 | },
16 | {
17 | id: "slf4j",
18 | label: "Simple Logging Facade for Java (SLF4J)",
19 | connectorProviderClassName: AUDIT_LOG_DESTINATION_PREFIX + "slf4j.SLF4JAuditLogStoreProvider"
20 | },
21 | {
22 | id: "files",
23 | label: "JSON Files",
24 | connectorProviderClassName: AUDIT_LOG_DESTINATION_PREFIX + "file.FileBasedAuditLogStoreProvider"
25 | },
26 | {
27 | id: "event-topic",
28 | label: "Event Topic",
29 | connectorProviderClassName: AUDIT_LOG_DESTINATION_PREFIX + "eventtopic.EventTopicAuditLogStoreProvider"
30 | },
31 | {
32 | id: "connection",
33 | label: "Connection"
34 | }
35 | ];
36 |
37 | export default auditLogDestinations;
38 |
--------------------------------------------------------------------------------
/cra-client/src/components/ServerAuthor/components/defaults/integrationServices.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 |
4 | const integrationServices = [
5 | {
6 | "serviceName": "Files Integrator OMIS",
7 | "serviceURLMarker": "files-integrator",
8 | "serviceDescription": "Extract metadata about files stored in a file system or file manager.",
9 | "serviceWiki": "https://egeria.odpi.org/open-metadata-implementation/integration-services/files-integrator/"
10 | },
11 | {
12 | "serviceName": "Database Integrator OMIS",
13 | "serviceURLMarker": "database-integrator",
14 | "serviceDescription": "Extract metadata such as schema, tables and columns from database managers.",
15 | "serviceWiki": "https://egeria.odpi.org/open-metadata-implementation/integration-services/database-integrator/"
16 | },
17 | {
18 | "serviceName": "Lineage Integrator OMIS",
19 | "serviceURLMarker": "lineage-integrator",
20 | "serviceDescription": "Manage capture of lineage from a third party tool.",
21 | "serviceWiki": "https://egeria.odpi.org/open-metadata-implementation/integration-services/lineage-integrator/"
22 | },
23 | {
24 | "serviceName": "Catalog Integrator OMIS",
25 | "serviceURLMarker": "catalog-integrator",
26 | "serviceDescription": "Exchange metadata with third party data catalogs.",
27 | "serviceWiki": "https://egeria.odpi.org/open-metadata-implementation/integration-services/catalog-integrator/"
28 | },
29 | {
30 | "serviceName": "Organization Integrator OMIS",
31 | "serviceURLMarker": "organization-integrator",
32 | "serviceDescription": "Load information about the teams and people in an organization and return collaboration activity.",
33 | "serviceWiki": "https://egeria.odpi.org/open-metadata-implementation/integration-services/organization-integrator/"
34 | }
35 | ];
36 |
37 | export default integrationServices;
--------------------------------------------------------------------------------
/cra-client/src/components/ServerAuthor/components/defaults/serverConfigElements.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 |
4 | /**
5 | * This is an array of config elements that can occur in the Wizard.
6 | * The Server types
7 | */
8 |
9 | const serverConfigElements = [
10 | {
11 | id: "server-type-config-element",
12 | label: "Server Type",
13 | description: "Set the type of server to be configured.",
14 | initialiseAsInvalid: true
15 | },
16 | {
17 | id: "config-basic-config-element",
18 | label: "Basic",
19 | description: "Basic configuration that all server types can have",
20 | initialiseAsInvalid: true
21 | },
22 | {
23 | id: "audit-log-config-element",
24 | label: "Audit log",
25 | description: "Configure the audit log destinations"
26 | },
27 | {
28 | id: "local-repository-config-element",
29 | label: "Repository",
30 | description: "Configure the local repository type."
31 | },
32 | {
33 | id: "access-services-config-element",
34 | label: "Access services",
35 | description: "Select the access services required for this server."
36 | },
37 | {
38 | id: "esb-config-element",
39 | label: "Event Bus",
40 | description: "Configure Event Bus."
41 | },
42 | {
43 | id: "cohort-config-element",
44 | label: "Cohorts",
45 | description: "Register which cohorts this server will be part of."
46 | },
47 | {
48 | id: "archives-config-element",
49 | label: "Archives",
50 | description: "Configure which open types archives are to be used by this server."
51 | },
52 | {
53 | id: "repository-proxy-config-element",
54 | label: "repository proxy",
55 | description: "Configure the repository proxy connectors to the target proprietory metadata repository.",
56 | initialiseAsInvalid: true
57 | },
58 | {
59 | id: "view-services-config-element",
60 | label: "View Services",
61 | description: "Configure view services in order to be able to service a UI",
62 | initialiseAsInvalid: true
63 | },
64 | {
65 | id: "integration-daemon-config-element",
66 | label: "Integration Daemon",
67 | description: "Select and configure the Integration Services."
68 | },
69 | {
70 | id: "final-config-element",
71 | label: "Configured",
72 | description: "Server has been configured."
73 | },
74 |
75 | ];
76 |
77 | export default serverConfigElements;
--------------------------------------------------------------------------------
/cra-client/src/components/ServerAuthor/components/defaults/viewServices.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 |
4 | const viewServices = [
5 | {
6 | "serviceName": "Glossary Author",
7 | "serviceURLMarker": "glossary-author",
8 | "serviceDescription": "View Service for glossary authoring.",
9 | "serviceWiki": "https://odpi.github.io/egeria/open-metadata-implementation/access-services/subject-area/"
10 | },
11 | {
12 | "serviceName": "Repository Explorer",
13 | "serviceURLMarker": "rex",
14 | "serviceDescription": "Explore open metadata instances.",
15 | "serviceWiki": "https://odpi.github.io/egeria/open-metadata-implementation/access-services/subject-area/"
16 | },
17 | {
18 | "serviceName": "Type Explorer",
19 | "serviceURLMarker": "type-explorer",
20 | "serviceDescription": "Explore the open metadata types.",
21 | "serviceWiki": "https://odpi.github.io/egeria/open-metadata-implementation/access-services/subject-area/"
22 | }
23 | ];
24 |
25 | export default viewServices;
--------------------------------------------------------------------------------
/cra-client/src/components/ServerAuthor/components/serverConfig.scss:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 |
4 | .customAccordionItem > div.bx--accordion__content {
5 | // padding-right: 1rem;
6 | // padding-top: 0;
7 | // padding-bottom: 0;
8 | padding: 0;
9 | }
10 |
11 | .customStructuredListHeader {
12 | vertical-align: baseline;
13 | }
14 |
15 | .expanded-td > td {
16 | padding-top: 16px;
17 | padding-bottom: 16px;
18 | padding-left: 64px;
19 | }
20 |
21 | .bx--structured-list:first-child {
22 | border-top: 1px solid #e0e0e0;
23 | }
24 |
25 | .server-type-card {
26 | width:fit-content;
27 | border:1px;
28 | }
29 | .server-type-container {
30 | display: flex;
31 | flex-direction: row;
32 | justify-content: left
33 | }
34 | .flex-column {
35 | flex-direction: column;
36 | }
37 | .diagram-heading {
38 | margin-top: 30px;
39 | text-align: left;
40 | }
41 | .left-text {
42 | text-align: left;
43 | }
44 |
45 | .left-text-bottom-margin-32 {
46 | text-align: left;
47 | margin-bottom: 32px;
48 | }
49 | .left-text-bottom-margin-24 {
50 | text-align: left;
51 | margin-bottom: 24px;
52 | }
53 | .left-text-bottom-margin-16 {
54 | text-align: left;
55 | margin-bottom: 16px;
56 | }
57 |
58 |
59 |
--------------------------------------------------------------------------------
/cra-client/src/components/TypeExplorer/InheritanceDiagram.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/odpi/egeria-react-ui/fcc6c58643b639da61799ba52b138eea044c2f4a/cra-client/src/components/TypeExplorer/InheritanceDiagram.png
--------------------------------------------------------------------------------
/cra-client/src/components/TypeExplorer/NeighborhoodDiagram.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/odpi/egeria-react-ui/fcc6c58643b639da61799ba52b138eea044c2f4a/cra-client/src/components/TypeExplorer/NeighborhoodDiagram.png
--------------------------------------------------------------------------------
/cra-client/src/components/TypeExplorer/TexInterface.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/odpi/egeria-react-ui/fcc6c58643b639da61799ba52b138eea044c2f4a/cra-client/src/components/TypeExplorer/TexInterface.png
--------------------------------------------------------------------------------
/cra-client/src/components/TypeExplorer/components/details-panel/ClassificationTypeDisplay.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 |
4 | import React, { useContext } from "react";
5 |
6 | import PropTypes from "prop-types";
7 |
8 | import { TypesContext } from "../../contexts/TypesContext";
9 |
10 | import ClassificationPropertiesDisplay from "./ClassificationPropertiesDisplay";
11 |
12 | import ClassificationEntitiesDisplay from "./ClassificationEntitiesDisplay";
13 |
14 |
15 | import "./details-panel.scss";
16 |
17 |
18 |
19 | export default function ClassificationTypeDisplay(props) {
20 |
21 | const typesContext = useContext(TypesContext);
22 |
23 | const typeName = props.typeName;
24 |
25 | const classificationExpl = typesContext.getClassificationType(typeName);
26 |
27 | if (classificationExpl) {
28 |
29 | return (
30 |
31 |
Classification Type : {typeName}
32 |
{classificationExpl.classificationDef.description}
33 |
Type Status : {classificationExpl.classificationDef.status}
34 |
Attributes : { !classificationExpl.classificationDef.propertiesDefinition ? "none" :
35 | }
36 |
Valid entity types : { !classificationExpl.classificationDef.validEntityDefs && !classificationExpl.classificationDef.validEntityDefs.length > 0 ? "none" :
37 | }
38 |
39 | );
40 | }
41 | else {
42 | return (
43 |
44 |
Classification type {typeName} not in server's types
45 |
46 | );
47 | }
48 | }
49 |
50 | ClassificationTypeDisplay.propTypes = {
51 | typeName: PropTypes.string
52 | };
53 |
--------------------------------------------------------------------------------
/cra-client/src/components/TypeExplorer/components/details-panel/DetailsPanel.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 |
4 | import React from "react";
5 |
6 | import TypeDisplay from "./TypeDisplay"
7 |
8 | import "./details-panel.scss";
9 |
10 |
11 | /**
12 | *
13 | * DetailsPanel implements a web component for presentation of details of the focus or view type
14 | *
15 | * It should present to the user a summary of the key characteristics of the focus or view type. This includes:
16 | *
17 | * For entity types:
18 | * * type name
19 | * * description
20 | * * attributes (listing names of types)
21 | * * relationships (listing attribute names and types and providing a link to the relationship details)
22 | * * classifications (listing attribute names and types and providing a link to the classification details)
23 | *
24 | * For relationship types:
25 | * * type name
26 | * * description
27 | * * attributes (listing names of types)
28 | * * ends (listing entity types and providing a link to the entity details)
29 | *
30 | * For classification types:
31 | *
32 | * * type name
33 | * * description
34 | * * attributes (listing names of types)
35 | * * valid entity types (listing entity types and providing a link to the entity details)
36 | *
37 | * The details panel reacts to events that indicate a change of focus (an entity type's details should be shown)
38 | * or a change of view (a relationship or classification details should be shown).
39 | * Because the details panel also includes links to entity, relationship and classification types (as outlined above)
40 | * the details panel also generates events requesting changeFocus or changeView.
41 | *
42 | * When the UI is first loaded there will be no type information, and until a focus or view type is selected there is
43 | * no particular type to display - therefore following initial load and until a focus/view type is selected, the details
44 | * panel will be blank.
45 | *
46 | */
47 | export default function DetailsPanel() {
48 |
49 | return (
50 |
51 |
52 |
53 | );
54 | }
55 |
56 |
--------------------------------------------------------------------------------
/cra-client/src/components/TypeExplorer/components/details-panel/EnumTypeDisplay.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 |
4 | import React, { useContext } from "react";
5 |
6 | import PropTypes from "prop-types";
7 |
8 | import { TypesContext } from "../../contexts/TypesContext";
9 |
10 | import { FocusContext } from "../../contexts/FocusContext";
11 |
12 | import "./details-panel.scss";
13 |
14 |
15 |
16 | export default function EnumTypeDisplay(props) {
17 |
18 | const typesContext = useContext(TypesContext);
19 |
20 | const focusContext = useContext(FocusContext);
21 |
22 | const typeName = props.typeName;
23 |
24 | const enumExpl = typesContext.getEnumType(typeName);
25 |
26 |
27 |
28 | const expandValues = (elementDefs) => {
29 | let values = elementDefs.map( (element) =>
30 |
31 | {element.ordinal} : {element.value} : {element.description}
32 |
33 | );
34 | return values;
35 | };
36 |
37 | const viewLinkHandler = () => {
38 | focusContext.typeSelected(focusContext.prevView.category,focusContext.prevView.typeName );
39 | }
40 |
41 |
42 | return (
43 |
44 |
45 |
Back to {focusContext.prevView.category} {focusContext.prevView.typeName}
46 |
47 |
48 |
Enum Type : {typeName}
49 |
{enumExpl.description}
50 |
Type Status : {enumExpl.enumDef.status}
51 |
Possible Values : { !enumExpl.elementDefs ? "none" :
52 | expandValues( enumExpl.elementDefs ) }
53 |
54 |
55 | );
56 | }
57 |
58 | EnumTypeDisplay.propTypes = {
59 | typeName: PropTypes.string
60 | };
61 |
--------------------------------------------------------------------------------
/cra-client/src/components/TypeExplorer/components/details-panel/RelationshipTypeDisplay.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 |
4 | import React, { useContext } from "react";
5 |
6 | import PropTypes from "prop-types";
7 |
8 | import { TypesContext } from "../../contexts/TypesContext";
9 |
10 | import RelationshipPropertiesDisplay from "./RelationshipPropertiesDisplay";
11 |
12 | import RelationshipEntitiesDisplay from "./RelationshipEntitiesDisplay";
13 |
14 |
15 | import "./details-panel.scss";
16 |
17 |
18 |
19 | export default function RelationshipTypeDisplay(props) {
20 |
21 | const typesContext = useContext(TypesContext);
22 |
23 | const typeName = props.typeName;
24 |
25 | const relationshipExpl = typesContext.getRelationshipType(typeName);
26 |
27 | if (relationshipExpl) {
28 |
29 | return (
30 |
31 |
Relationship Type : {typeName}
32 |
{relationshipExpl.relationshipDef.description}
33 |
Type Status : {relationshipExpl.relationshipDef.status}
34 |
Attributes : { !relationshipExpl.relationshipDef.propertiesDefinition ? "none" :
35 | }
36 |
Entities : { !relationshipExpl.relationshipDef.endDef1 && !relationshipExpl.relationshipDef.endDef2 ? "none" :
37 | }
38 |
39 | );
40 | }
41 | else {
42 | return (
43 |
44 |
Relationship type {typeName} not in server's types
45 |
46 | );
47 | }
48 | }
49 |
50 | RelationshipTypeDisplay.propTypes = {
51 | typeName: PropTypes.string
52 | };
53 |
--------------------------------------------------------------------------------
/cra-client/src/components/TypeExplorer/components/details-panel/TypeDisplay.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 |
4 | import React, { useContext } from "react";
5 |
6 | import { FocusContext } from "../../contexts/FocusContext";
7 |
8 | import PropTypes from "prop-types";
9 |
10 | import EntityTypeDisplay from "./EntityTypeDisplay";
11 |
12 | import RelationshipTypeDisplay from "./RelationshipTypeDisplay";
13 |
14 | import ClassificationTypeDisplay from "./ClassificationTypeDisplay";
15 |
16 | import EnumTypeDisplay from "./EnumTypeDisplay";
17 |
18 |
19 |
20 |
21 | export default function TypeDisplay() {
22 |
23 |
24 | const focusContext = useContext(FocusContext);
25 |
26 | /*
27 | * Until there is a focus type display an advisory message
28 | * Once there is a focus type, display the type selected for the current view category (not simply the focus)
29 | */
30 |
31 | if (focusContext.view.typeName === "") {
32 |
33 | /*
34 | * No entity type has been selected as the focus - display an 'empty' message
35 | */
36 | return No type selected
37 |
38 | }
39 | else {
40 |
41 | /*
42 | * Display the currently selected view type.
43 | */
44 | switch (focusContext.view.category) {
45 |
46 | case "Entity":
47 | return
48 |
49 | case "Relationship":
50 | return
51 |
52 | case "Classification":
53 | return
54 |
55 | case "Enum":
56 | return
57 |
58 | default:
59 | alert("Unknown fous category in TypeDisplay: "+focusContext.view.category);
60 | break;
61 | }
62 | }
63 | }
64 |
65 |
66 | TypeDisplay.propTypes = {
67 | children: PropTypes.node
68 | };
--------------------------------------------------------------------------------
/cra-client/src/components/TypeExplorer/components/diagram/diagram.scss:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 |
4 | .diagram-manager {
5 | font-size : 12px;
6 | }
7 |
8 | .drawing-container {
9 | overflow : auto;
10 | }
11 |
--------------------------------------------------------------------------------
/cra-client/src/components/TypeExplorer/components/focus-controls/focus-controls.scss:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 |
4 | .connection-controls {
5 | text-align : right;
6 | }
7 |
8 | .button {
9 | width : 100px;
10 | height : 25px;
11 | padding : 10px;
12 | font-size : 10px;
13 | background :'white';
14 | color : 'black';
15 | }
--------------------------------------------------------------------------------
/cra-client/src/components/TypeExplorer/components/portal/Portal.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 |
4 |
5 | import React, { useEffect, useState } from "react";
6 |
7 | import ReactDOM from "react-dom";
8 |
9 | import PropTypes from "prop-types";
10 |
11 |
12 | import "./portal.scss";
13 |
14 |
15 |
16 | export default function Portal(props) {
17 |
18 | const [newElement, setNewElement] = useState(null);
19 |
20 | /*
21 | * Emulate componentDidMount - to append the wrapper
22 | */
23 | const componentDidMount = () => {
24 | const portalRoot = props.anchorCB().current;
25 | let locElement = document.createElement("div");
26 | portalRoot.appendChild(locElement);
27 | setNewElement(locElement);
28 |
29 | return () => {
30 | /*
31 | * Emulate componentWillUnmount... to remove the wrapper
32 | */
33 | portalRoot.removeChild(locElement);
34 | setNewElement(null);
35 | }
36 | };
37 | useEffect (componentDidMount ,[]);
38 |
39 | let content = (
40 |
41 |
42 | {props.children}
43 |
44 |
45 | );
46 |
47 | /*
48 | * Render the Portal's children in the wrapper element...
49 | */
50 | if (props.show) {
51 | if (newElement) {
52 | return (
53 | ReactDOM.createPortal(content, newElement)
54 | );
55 | }
56 | }
57 | return null;
58 | }
59 |
60 | Portal.propTypes = {
61 | children: PropTypes.node,
62 | show : PropTypes.bool,
63 | anchorCB: PropTypes.func.isRequired
64 | };
65 |
--------------------------------------------------------------------------------
/cra-client/src/components/TypeExplorer/components/portal/portal.scss:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 |
4 | .portal-div {
5 | position : fixed;
6 | z-index : 1001;
7 | top : 300px;
8 | left : 478px;
9 | border-style : solid;
10 | border-width : 3px;
11 | border-color : black;
12 | height : 500px;
13 | width : 900px;
14 | opacity : 1.0;
15 | padding : 10px;
16 | font-size : 10px;
17 | background : white;
18 | color : black;
19 | }
20 |
21 |
22 | .portal-backdrop {
23 | position : fixed;
24 | z-index : 1000;
25 | top : 0px;
26 | left : 260px;
27 | border-style : solid;
28 | border-width : 3px;
29 | border-color : rgb(72, 205, 209) ;
30 | height : 1450px;
31 | width : 1600px;
32 | opacity : 0.9;
33 | padding : 10px;
34 | font-size : 10px;
35 | background : rgb(200,200,200);
36 | }
37 |
--------------------------------------------------------------------------------
/cra-client/src/components/TypeExplorer/components/resource-selection/DeprecatedAttributeControl.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 |
4 |
5 | import React, { useContext } from "react";
6 |
7 | import { TypesContext } from "../../contexts/TypesContext";
8 |
9 | import "./resource-selector.scss"
10 |
11 |
12 | /*
13 | * The DeprecatedAttributeControl provides a checkbox that the user can check if they want
14 | * display of deprecated attributes. If checked, the attributes are read in the explorer and
15 | * displayed in diagrams or on details panels. If unchecked, the attributes are still read
16 | * in the explorer, but are not displayed.
17 | */
18 |
19 | export default function DeprecatedAttributeControl() {
20 |
21 |
22 | const typesContext = useContext(TypesContext);
23 |
24 | const updateDeprecatedAttributeOption = () => {
25 | typesContext.updateDeprecatedAttributeOption();
26 | };
27 |
28 | return (
29 |
30 |
31 |
32 | Include deprecated attributes :
33 |
39 |
40 |
41 |
42 |
43 | );
44 | }
45 |
--------------------------------------------------------------------------------
/cra-client/src/components/TypeExplorer/components/resource-selection/DeprecatedTypeControl.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 |
4 |
5 | import React, { useContext } from "react";
6 |
7 | import { RequestContext } from "../../contexts/RequestContext";
8 |
9 | import "./resource-selector.scss"
10 |
11 |
12 | /*
13 | * The DeprecatedTypeControl provides a checkbox that the user can check if they want
14 | * display of deprecated types. If the option is checked, the types are read in
15 | * the explorer and will be displayed in diagrams or on details panels. If not
16 | * checked, the types are not read in the explorer.
17 | */
18 |
19 | export default function DeprecatedTypeControl() {
20 |
21 | const requestContext = useContext(RequestContext);
22 |
23 | const updateDeprecatedTypeOption = () => {
24 | requestContext.updateDeprecatedTypeOption();
25 | };
26 |
27 | return (
28 |
29 |
30 |
31 | Include deprecated types :
32 |
38 |
39 |
40 |
41 |
42 | );
43 | }
44 |
--------------------------------------------------------------------------------
/cra-client/src/components/TypeExplorer/components/resource-selection/EnterpriseControl.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 |
4 |
5 | import React, { useContext } from "react";
6 |
7 | import { RequestContext } from "../../contexts/RequestContext";
8 |
9 | import "./resource-selector.scss"
10 |
11 |
12 | /*
13 | * The EnterpriseControl provides a checkbox that the user can check to issue queries
14 | * at the Enterprise level - which means that results will be collected from across
15 | * the cohorts that the target server is a member of, rather than just locally.
16 | */
17 |
18 | export default function EnterpriseControl() {
19 |
20 |
21 | const requestContext = useContext(RequestContext);
22 |
23 |
24 |
25 | return (
26 |
27 |
28 |
29 | Enterprise :
30 |
36 |
37 |
38 |
39 |
40 | );
41 | }
42 |
--------------------------------------------------------------------------------
/cra-client/src/components/TypeExplorer/components/resource-selection/resource-selector.scss:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 |
4 | .resource-controls {
5 | font-size : 12px;
6 | text-align : right;
7 | }
8 |
9 | .platform-selector {
10 | width : 200px;
11 | }
12 |
13 | .server-selector {
14 | width : 200px;
15 | }
16 |
17 | .descriptive-text {
18 | font-size : 12px;
19 | }
--------------------------------------------------------------------------------
/cra-client/src/components/TypeExplorer/tex.scss:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 |
4 |
5 |
6 | .tex-container {
7 | top : 0px;
8 | left : 260px;
9 | height : 100%;
10 | display : flex;
11 | flex-flow : column;
12 | }
13 |
14 | .tex-top {
15 | display : flex;
16 | flex-flow : row;
17 | width : 100%;
18 | overflow : none;
19 | padding : 10px;
20 | font-size : 10px;
21 | background-color : rgb(240,240,240);
22 | color : 'black';
23 | }
24 |
25 | .tex-top-left {
26 | flex : 0 0 auto;
27 | width : 300px;
28 | height : 140px;
29 | }
30 |
31 | .tex-top-middle {
32 | flex : 0 0 auto;
33 | width : 300px;
34 | height : 140px;
35 | }
36 |
37 |
38 | .tex-content {
39 | flex : 2;
40 | display : flex;
41 | flex-flow : row;
42 | width : 100%;
43 | padding : 10px;
44 | font-size : 10px;
45 | background-color : rgb(240,240,240);
46 | color : 'black';
47 | }
48 |
49 | .tex-lhs {
50 | flex : 0 0 auto;
51 | width : 400px;
52 | overflow : auto;
53 | padding : 0px 10px 10px 10px;
54 | font-size : 10px;
55 | background-color : rgb(240,240,240);
56 | color : 'black';
57 | }
58 |
59 | .tex-rhs {
60 | flex : 1 1 auto;
61 | padding : 10px;
62 | font-size : 10px;
63 | background-color : white;
64 | background : 'white';
65 | color : 'black';
66 | }
67 |
68 | .descriptive-text {
69 | font-size : 12px;
70 | }
71 |
72 | .top-control-button {
73 | position : absolute;
74 | right : 0px;
75 | bottom : 40px;
76 | height : 40px;
77 | width : 100px;
78 | background-color : rgb(180,180,180);
79 | }
80 |
81 | .graph-control-button {
82 | height : 40px;
83 | width : 100px;
84 | background-color : rgb(180,180,180);
85 | }
86 |
87 | .title {
88 | padding : 20px;
89 | font-size : 20px;
90 | }
--------------------------------------------------------------------------------
/cra-client/src/images/carbon/Egeria_add_16.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 | import React from "react";
4 | import icon from '../../imagesHolder/carbon/add.svg';
5 |
6 | export default function Egeria_add_16(props) {
7 | return (
8 |
9 | );
10 | }
11 |
--------------------------------------------------------------------------------
/cra-client/src/images/carbon/Egeria_add_32.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 | import React from "react";
4 | import icon from '../../imagesHolder/carbon/add.svg';
5 |
6 | export default function Egeria_add_32(props) {
7 | return (
8 |
9 | );
10 | }
11 |
--------------------------------------------------------------------------------
/cra-client/src/images/carbon/Egeria_close_16.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 | import React from "react";
4 | import icon from '../../imagesHolder/carbon/close.svg';
5 |
6 | export default function Egeria_close_16(props) {
7 | return (
8 |
9 | );
10 | }
11 |
--------------------------------------------------------------------------------
/cra-client/src/images/carbon/Egeria_datavis_16.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 | import React from "react";
4 | import icon from '../../imagesHolder/carbon/data-vis--1.svg';
5 |
6 | export default function Egeria_datavis_16(props) {
7 | return (
8 |
9 | );
10 | }
11 |
--------------------------------------------------------------------------------
/cra-client/src/images/carbon/Egeria_datavis_32.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 | import React from "react";
4 | import icon from '../../imagesHolder/carbon/data-vis--1.svg';
5 |
6 | export default function Egeria_datavis_32(props) {
7 | return (
8 |
9 | );
10 | }
11 |
--------------------------------------------------------------------------------
/cra-client/src/images/carbon/Egeria_delete_16.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 | import React from "react";
4 | import icon from '../../imagesHolder/carbon/trash-can.svg';
5 |
6 | export default function Egeria_delete_16(props) {
7 | return (
8 |
9 | );
10 | }
11 |
--------------------------------------------------------------------------------
/cra-client/src/images/carbon/Egeria_delete_32.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 | import React from "react";
4 | import icon from '../../imagesHolder/carbon/trash-can.svg';
5 |
6 | export default function Egeria_delete_32(props) {
7 | return (
8 |
9 | );
10 | }
11 |
--------------------------------------------------------------------------------
/cra-client/src/images/carbon/Egeria_edit_16.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 | import React from "react";
4 | import icon from '../../imagesHolder/carbon/edit.svg';
5 |
6 | export default function Egeria_edit_16(props) {
7 | return (
8 |
9 | );
10 | }
11 |
--------------------------------------------------------------------------------
/cra-client/src/images/carbon/Egeria_edit_32.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 | import React from "react";
4 | import icon from '../../imagesHolder/carbon/edit.svg';
5 |
6 | export default function Egeria_edit_32(props) {
7 | return (
8 |
9 | );
10 | }
11 |
--------------------------------------------------------------------------------
/cra-client/src/images/carbon/Egeria_parent_child_32.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 | import React from "react";
4 | import icon from '../../imagesHolder/carbon/parent-child.svg';
5 |
6 | export default function Egeria_parent_child_32(props) {
7 | return (
8 |
9 | );
10 | }
11 |
--------------------------------------------------------------------------------
/cra-client/src/images/carbon/Egeria_search_16.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 | import React from "react";
4 | import icon from '../../imagesHolder/carbon/search.svg';
5 |
6 | export default function Egeria_search_16(props) {
7 | return (
8 |
9 | );
10 | }
11 |
--------------------------------------------------------------------------------
/cra-client/src/images/carbon/Fade16.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 | import React from "react";
4 |
5 | export default function Fade16(props) {
6 | return (
7 |
14 |
15 |
16 | );
17 | }
18 |
--------------------------------------------------------------------------------
/cra-client/src/images/carbon/Launch_32.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 | import React from "react";
4 | import icon from '../../imagesHolder/carbon/launch.svg';
5 | function createTarget(props) {
6 | let html = '';
7 | if (props.external) {
8 | html = '_blank';
9 | }
10 | return html;
11 |
12 | }
13 |
14 | export default function Launch_32(props) {
15 | return (
16 |
17 |
18 |
19 | );
20 | }
21 |
--------------------------------------------------------------------------------
/cra-client/src/images/carbon/Launch_inline_32.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 | import React from "react";
4 | import icon from '../../imagesHolder/carbon/launch.svg';
5 |
6 | export default function Launch_inline_32(props) {
7 | return (
8 |
9 |
10 |
11 | );
12 | }
13 |
--------------------------------------------------------------------------------
/cra-client/src/images/github/GitHub_logo_32.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 | import React from "react";
4 | import icon from '../../imagesHolder/github/logo--github.svg';
5 |
6 | export default function GitHub_Logo_32(props) {
7 | return (
8 |
9 | );
10 | }
11 |
--------------------------------------------------------------------------------
/cra-client/src/images/lf/Linux_Foundation_logo.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 | import React from "react";
4 | import icon from '../../imagesHolder/lf/Linux_Foundation_logo_2013.svg';
5 |
6 | export default function Linux_Foundation_logo(props) {
7 | return (
8 |
9 | );
10 | }
11 |
--------------------------------------------------------------------------------
/cra-client/src/images/odpi/Egeria_category_16.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 | import React from "react";
4 | import icon from '../../imagesHolder/odpi/ODPiEgeria_Icon_glossarycategory.svg'
5 |
6 | export default function Egeria_category_16(props) {
7 | return (
8 |
9 | );
10 | }
11 |
--------------------------------------------------------------------------------
/cra-client/src/images/odpi/Egeria_category_32.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 | import React from "react";
4 | import icon from '../../imagesHolder/odpi/ODPiEgeria_Icon_glossarycategory.svg'
5 |
6 | export default function Egeria_category_32(props) {
7 | return (
8 |
9 | );
10 | }
11 |
--------------------------------------------------------------------------------
/cra-client/src/images/odpi/Egeria_glossary_16.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 | import React from "react";
4 | import icon from '../../imagesHolder/odpi/egeria_glossary.svg';
5 |
6 | export default function Egeria_glossary_16(props) {
7 | return (
8 |
9 | );
10 | }
11 |
--------------------------------------------------------------------------------
/cra-client/src/images/odpi/Egeria_glossary_32.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 | import React from "react";
4 | import icon from '../../imagesHolder/odpi/Egeria_glossary.svg';
5 |
6 | export default function Egeria_glossary_32(props) {
7 | return (
8 |
9 | );
10 | }
11 |
--------------------------------------------------------------------------------
/cra-client/src/images/odpi/Egeria_glossary_author_16.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 | import React from "react";
4 | import icon from '../../imagesHolder/odpi/egeria_glossary_author.svg';
5 |
6 | export default function Egeria_glossary_author_16(props) {
7 | return (
8 |
9 | );
10 | }
11 |
--------------------------------------------------------------------------------
/cra-client/src/images/odpi/Egeria_glossary_author_32.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 | import React from "react";
4 | import icon from '../../imagesHolder/odpi/Egeria_glossary_author.svg';
5 |
6 | export default function Egeria_glossary_author_32(props) {
7 | return (
8 |
9 | );
10 | }
11 |
--------------------------------------------------------------------------------
/cra-client/src/images/odpi/Egeria_logo_black_80.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 | import React from "react";
4 | import icon from '../../imagesHolder/odpi/egeria-black.svg';
5 |
6 | export default function Egeria_logo_black(props) {
7 | return (
8 |
9 | );
10 | }
11 |
--------------------------------------------------------------------------------
/cra-client/src/images/odpi/Egeria_logo_color.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 | import React from "react";
4 | import icon from '../../imagesHolder/odpi/egeria-color.svg';
5 |
6 | export default function Egeria_logo_color(props) {
7 | return (
8 |
9 |
10 |
11 | );
12 | }
13 |
--------------------------------------------------------------------------------
/cra-client/src/images/odpi/Egeria_logo_color_32.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 | import React from "react";
4 | import icon from '../../imagesHolder/odpi/egeria-color.svg';
5 |
6 | export default function Egeria_logo_color_32(props) {
7 | return (
8 |
9 | );
10 | }
11 |
--------------------------------------------------------------------------------
/cra-client/src/images/odpi/Egeria_logo_color_400.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 | import React from "react";
4 | import icon from '../../imagesHolder/odpi/egeria-color.svg';
5 |
6 | export default function Egeria_logo_color_64(props) {
7 | return (
8 |
9 | );
10 | }
11 |
--------------------------------------------------------------------------------
/cra-client/src/images/odpi/Egeria_logo_color_64.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 | import React from "react";
4 | import icon from '../../imagesHolder/odpi/egeria-color.svg';
5 |
6 | export default function Egeria_logo_color_64(props) {
7 | return (
8 |
9 | );
10 | }
11 |
--------------------------------------------------------------------------------
/cra-client/src/images/odpi/Egeria_logo_white.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 | import React from "react";
4 | import icon from '../../imagesHolder/odpi/egeria-white.svg';
5 |
6 | export default function Egeria_logo_white(props) {
7 | return (
8 |
9 | );
10 | }
11 |
--------------------------------------------------------------------------------
/cra-client/src/images/odpi/Egeria_logo_white_110.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 | import React from "react";
4 | import icon from '../../imagesHolder/odpi/egeria-white.svg';
5 |
6 | export default function Egeria_logo_white_110(props) {
7 | return (
8 |
9 | );
10 | }
11 |
--------------------------------------------------------------------------------
/cra-client/src/images/odpi/Egeria_project_16.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 | import React from "react";
4 | import icon from '../../imagesHolder/odpi/egeria_project.svg';
5 |
6 | export default function Egeria_project_16(props) {
7 | return (
8 |
9 | );
10 | }
11 |
--------------------------------------------------------------------------------
/cra-client/src/images/odpi/Egeria_project_32.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 | import React from "react";
4 | import icon from '../../imagesHolder/odpi/Egeria_project.svg';
5 |
6 | export default function Egeria_project_32(props) {
7 | return (
8 |
9 | );
10 | }
11 |
--------------------------------------------------------------------------------
/cra-client/src/images/odpi/Egeria_relationships_16.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 | import React from "react";
4 | import icon from '../../src/imagesHolder/odpi/chart--relationship.svg';
5 |
6 | export default function Egeria_relationships_16(props) {
7 | return (
8 |
9 | );
10 | }
11 |
--------------------------------------------------------------------------------
/cra-client/src/images/odpi/Egeria_term_16.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 | import React from "react";
4 | import icon from '../../src/imagesHolder/odpi/ODPiEgeria_Icon_glossaryterm.svg'
5 |
6 | export default function Egeria_term_16(props) {
7 | return (
8 |
9 | );
10 | }
11 |
--------------------------------------------------------------------------------
/cra-client/src/images/odpi/Egeria_term_32.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 | import React from "react";
4 | import icon from '../../imagesHolder/odpi/ODPiEgeria_Icon_glossaryterm.svg'
5 |
6 | export default function Egeria_term_32(props) {
7 | return (
8 |
9 | );
10 | }
11 |
--------------------------------------------------------------------------------
/cra-client/src/imagesHolder/carbon/add.svg:
--------------------------------------------------------------------------------
1 | Add
--------------------------------------------------------------------------------
/cra-client/src/imagesHolder/carbon/chart--relationship.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
9 | chart--relationship
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/cra-client/src/imagesHolder/carbon/close.svg:
--------------------------------------------------------------------------------
1 | close
--------------------------------------------------------------------------------
/cra-client/src/imagesHolder/carbon/concept.svg:
--------------------------------------------------------------------------------
1 | Concept
--------------------------------------------------------------------------------
/cra-client/src/imagesHolder/carbon/copy.svg:
--------------------------------------------------------------------------------
1 | Copy
--------------------------------------------------------------------------------
/cra-client/src/imagesHolder/carbon/data-vis--1.svg:
--------------------------------------------------------------------------------
1 | data-vis--1
--------------------------------------------------------------------------------
/cra-client/src/imagesHolder/carbon/edit.svg:
--------------------------------------------------------------------------------
1 | Edit
--------------------------------------------------------------------------------
/cra-client/src/imagesHolder/carbon/favorite--filled.svg:
--------------------------------------------------------------------------------
1 | Favorite filled
--------------------------------------------------------------------------------
/cra-client/src/imagesHolder/carbon/favorite.svg:
--------------------------------------------------------------------------------
1 | Favorite
--------------------------------------------------------------------------------
/cra-client/src/imagesHolder/carbon/launch.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/cra-client/src/imagesHolder/carbon/parent-child.svg:
--------------------------------------------------------------------------------
1 | parent-child
--------------------------------------------------------------------------------
/cra-client/src/imagesHolder/carbon/paste.svg:
--------------------------------------------------------------------------------
1 | Paste
--------------------------------------------------------------------------------
/cra-client/src/imagesHolder/carbon/search.svg:
--------------------------------------------------------------------------------
1 | Search
--------------------------------------------------------------------------------
/cra-client/src/imagesHolder/carbon/table.svg:
--------------------------------------------------------------------------------
1 | Table
--------------------------------------------------------------------------------
/cra-client/src/imagesHolder/carbon/term.svg:
--------------------------------------------------------------------------------
1 | Term
--------------------------------------------------------------------------------
/cra-client/src/imagesHolder/carbon/trash-can.svg:
--------------------------------------------------------------------------------
1 | Trash can
--------------------------------------------------------------------------------
/cra-client/src/imagesHolder/carbon/tree-view--alt.svg:
--------------------------------------------------------------------------------
1 | Tree view alt
--------------------------------------------------------------------------------
/cra-client/src/imagesHolder/github/logo--github.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/cra-client/src/imagesHolder/odpi/Egeria_glossary.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
5 |
20 |
22 |
23 |
--------------------------------------------------------------------------------
/cra-client/src/imagesHolder/odpi/Egeria_project.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
5 |
20 |
28 |
29 |
--------------------------------------------------------------------------------
/cra-client/src/imagesHolder/odpi/ODPiEgeria_Icon_canonicalglossary.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
5 |
20 |
23 |
27 |
28 |
--------------------------------------------------------------------------------
/cra-client/src/imagesHolder/odpi/ODPiEgeria_Icon_glossary.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
5 |
20 |
22 |
23 |
--------------------------------------------------------------------------------
/cra-client/src/imagesHolder/odpi/ODPiEgeria_Icon_glossarycategory.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
5 |
20 |
22 |
24 |
25 |
--------------------------------------------------------------------------------
/cra-client/src/imagesHolder/odpi/ODPiEgeria_Icon_glossaryterm.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
5 |
20 |
24 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/cra-client/src/imagesHolder/odpi/ODPiEgeria_Icon_taxonomy.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
5 |
20 |
26 |
27 |
--------------------------------------------------------------------------------
/cra-client/src/imagesHolder/odpi/egeria_logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/odpi/egeria-react-ui/fcc6c58643b639da61799ba52b138eea044c2f4a/cra-client/src/imagesHolder/odpi/egeria_logo.png
--------------------------------------------------------------------------------
/cra-client/src/index.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 | import React from 'react';
4 | import ReactDOM from 'react-dom';
5 | import App from './App';
6 | import './index.scss';
7 |
8 | ReactDOM.render( , document.getElementById('root'));
9 |
--------------------------------------------------------------------------------
/cra-client/src/index.scss:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 | @import '@carbon/themes/scss/themes';
4 | @import 'carbon-components/scss/globals/scss/styles.scss';
5 | @import '@carbon/elements/scss/elements';
6 | @import './components/Info/_info.scss';
7 | @import './components/GlossaryAuthor/_glossaryAuthor.scss';
8 | @import './components/GlossaryAuthor/components/NodeCard/_nodeCard.scss';
9 |
10 |
11 | // @import 'carbon-components/scss/globals/scss/vendor/@carbon/layout/scss/breakpoint.scss';
12 | // @import 'carbon-components/scss/globals/scss/typography.scss';
13 | // @import 'carbon-components/scss/globals/scss/vars.scss';
--------------------------------------------------------------------------------
/cra-client/src/react.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/odpi/egeria-react-ui/fcc6c58643b639da61799ba52b138eea044c2f4a/cra-client/src/react.png
--------------------------------------------------------------------------------
/cra-server/db/index.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 | const users = require('./users.js');
4 |
5 | exports.users = users;
6 |
--------------------------------------------------------------------------------
/cra-server/functions/getAxiosInstance.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 |
4 | const axios = require('axios');
5 | const https = require("https");
6 | const getCertificateFromFileSystem = require("../functions/getCertificateFromFileSystem");
7 |
8 | const getAxiosInstance = (url, app) => {
9 |
10 | try {
11 |
12 | const urlArray = url.split("/");
13 |
14 | const suppliedServerName = urlArray[2];
15 | const remainingURL = urlArray.slice(3).join("/");
16 | const servers = app.get('servers');
17 | const urlRoot = servers[suppliedServerName].remoteURL;
18 | const remoteServerName = servers[suppliedServerName].remoteServerName;
19 | const server = servers[suppliedServerName]
20 |
21 | const pfx = getCertificateFromFileSystem(server.pfx);
22 | const ca = getCertificateFromFileSystem(server.ca);
23 | const passphrase = server.passphrase;
24 |
25 |
26 | const rejectUnauthorized = server.rejectUnauthorizedForOmag;
27 | const downStreamURL =
28 | urlRoot +
29 | "/servers/" +
30 | remoteServerName +
31 | "/open-metadata/view-services/" +
32 | remainingURL;
33 | const instance = axios.create({
34 | baseURL: downStreamURL,
35 | httpsAgent: new https.Agent({
36 | ca: ca,
37 | pfx: pfx,
38 | passphrase: passphrase,
39 | rejectUnauthorized: rejectUnauthorized
40 | }),
41 | });
42 | return instance;
43 |
44 | } catch (err) {
45 |
46 | console.log(err);
47 | throw err;
48 |
49 | }
50 |
51 | };
52 |
53 | module.exports = getAxiosInstance;
--------------------------------------------------------------------------------
/cra-server/functions/getCertificateFromFileSystem.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 |
4 | const path = require("path")
5 | const fs = require("fs");
6 | const getCertificateFromFileSystem = (certificate_fileName) => {
7 |
8 | return fs.readFileSync(path.join(__dirname, "../../ssl/") + certificate_fileName);
9 | };
10 |
11 | module.exports = getCertificateFromFileSystem;
12 |
--------------------------------------------------------------------------------
/cra-server/functions/loggedIn.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 |
4 | /**
5 | * If not logged in redirect to the login screen otehreise continue to process the request by calling the next in the middleware chain.
6 | * @param {*} req request
7 | * @param {*} res response
8 | * @param {*} next function of the next in the middleware chain
9 | */
10 | const loggedIn = (req, res, next) => {
11 |
12 | if (req.user) {
13 | next();
14 | } else {
15 | res.redirect("/" + req.query.serverName + "/login");
16 | }
17 |
18 | }
19 |
20 | module.exports = loggedIn;
--------------------------------------------------------------------------------
/cra-server/functions/passportConfiguration.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 | const LocalStrategy = require("passport-local").Strategy;
4 | const db = require("../db");
5 |
6 |
7 | const passportConfiguration = (passport) => {
8 |
9 | /**
10 | * Middleware to configure Passport to use Local strategy
11 | */
12 | passport.use(
13 | new LocalStrategy(function (username, password, cb) {
14 | // console.log("username: " + username);
15 | // console.log("password: " + password);
16 | db.users.findByUsername(username, function (err, user) {
17 | if (err) {
18 | return cb(err);
19 | }
20 | if (!user) {
21 | return cb(null, false);
22 | }
23 | if (user.password != password) {
24 | return cb(null, false);
25 | }
26 | return cb(null, user);
27 | });
28 | })
29 | );
30 | // Configure Passport authenticated session persistence.
31 | //
32 | // In order to restore authentication state across HTTP requests, Passport needs
33 | // to serialize users into and deserialize users out of the session. The
34 | // typical implementation of this is as simple as supplying the user ID when
35 | // serializing, and querying the user record by ID from the database when
36 | // deserializing.
37 | passport.serializeUser(function (user, cb) {
38 | // console.log("serializeUser called with user " + user);
39 | cb(null, user.id);
40 | });
41 | /**
42 | * Deserialise the user. This means look up the id in the database (db).
43 | */
44 | passport.deserializeUser(function (id, cb) {
45 | db.users.findById(id, function (err, user) {
46 | // Disabling logging as CodeQL does not like user supplied values being logged.
47 | // console.log("passport.deserializeUser user is " + user + ",err is" + err);
48 | if (err) {
49 | return cb(err);
50 | }
51 | cb(null, user);
52 | });
53 | });
54 |
55 | return passport;
56 |
57 | }
58 |
59 | module.exports = passportConfiguration;
--------------------------------------------------------------------------------
/cra-server/o.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/odpi/egeria-react-ui/fcc6c58643b639da61799ba52b138eea044c2f4a/cra-server/o.jar
--------------------------------------------------------------------------------
/cra-server/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "egeria-react-ui-server",
3 | "version": "3.11.0-rc.0",
4 | "private": true,
5 | "description": "Egeria React User Interface server component, also known as the presentation server.",
6 | "main": "index.js",
7 | "scripts": {
8 | "start": "run-p start:server start:client",
9 | "start:server": "nodemon index.js",
10 | "start:client": "cd ../cra-client && npm start",
11 | "build": "cd ../cra-client && npm run build",
12 | "test": "echo \"Error: no test specified\" && exit 1",
13 | "prod": "NODE_ENV=production node index.js"
14 | },
15 | "contributors": [
16 | {
17 | "name": "SPDX-License-Identifier: Apache-2.0 Copyright Contributors to the ODPi Egeria project."
18 | }
19 | ],
20 | "license": "Apache-2.0",
21 | "dependencies": {
22 | "axios": "^1.6.7",
23 | "body-parser": "^1.19.1",
24 | "dotenv": "^16.4.1",
25 | "express": "^4.17.2",
26 | "express-rate-limit": "^7.1.5",
27 | "express-session": "^1.17.2",
28 | "passport": "^0.7.0",
29 | "passport-local": "^1.0.0"
30 | },
31 | "devDependencies": {
32 | "nodemon": "^3.0.3",
33 | "npm-run-all": "^4.1.5"
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/cra-server/validations/validateAdminURL.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 |
4 | const validateAdminURL = (url) => {
5 | const urlArray = url.split("/");
6 | let isValid = true;
7 | if (url.length < 7) {
8 | // Disabling logging as CodeQL does not like user supplied values being logged.
9 | // console.debug("Supplied url not long enough " + url);
10 | // console.debug(urlArray.length);
11 | isValid = false;
12 | } else if (urlArray[3] != "users") {
13 | // Disabling logging as CodeQL does not like user supplied values being logged.
14 | // console.debug("Users expected in url " + url);
15 | // console.debug(urlArray[3]);
16 | isValid = false;
17 | } else if (urlArray[4].length == 0) {
18 | // Disabling logging as CodeQL does not like user supplied values being logged.
19 | // console.debug("No user supplied");
20 | // console.debug(urlArray[4]);
21 | isValid = false;
22 | } else if (urlArray[5] != "servers") {
23 | // Disabling logging as CodeQL does not like user supplied values being logged.
24 | // console.debug("Servers expected in url");
25 | // console.debug(urlArray[5]);
26 | isValid = false;
27 | } else if (urlArray[6].length == 0) {
28 | // Disabling logging as CodeQL does not like user supplied values being logged.
29 | // console.debug("No server supplied");
30 | // console.debug(urlArray[6]);
31 | isValid = false;
32 | }
33 | return isValid;
34 | };
35 |
36 | module.exports = validateAdminURL;
--------------------------------------------------------------------------------
/cra-server/validations/validateURL.js:
--------------------------------------------------------------------------------
1 | /* SPDX-License-Identifier: Apache-2.0 */
2 | /* Copyright Contributors to the ODPi Egeria project. */
3 |
4 | const validateURL = (url, servers) => {
5 | const urlArray = url.split("/");
6 | let isValid = true;
7 | if (url.length < 5) {
8 | // Disabling logging as CodeQL does not like user supplied values being logged.
9 | // console.log("Supplied url not long enough " + url);
10 | isValid = false;
11 | } else if (urlArray[4] != "users") {
12 | // Disabling logging as CodeQL does not like user supplied values being logged.
13 | // console.log("Users expected in url " + url);
14 | isValid = false;
15 | } else if (urlArray[5].length == 0) {
16 | console.log("No user supplied");
17 | isValid = false;
18 | } else {
19 | const suppliedserverName = urlArray[2];
20 | if (suppliedserverName.length == 0) {
21 | console.log("No supplied serverName ");
22 | isValid = false;
23 | } else {
24 | // check against environment -which have been parsed into the servers variable
25 | const serverDetails = servers[suppliedserverName];
26 | if (serverDetails == null) {
27 | console.log("ServerName not configured");
28 | isValid = false;
29 | } else if (serverDetails.remoteURL == undefined) {
30 | // Disabling logging as CodeQL does not like user supplied values being logged.
31 | // console.log(
32 | // "ServerName " +
33 | // suppliedserverName +
34 | // " found but there was no associated remoteURL"
35 | // );
36 | isValid = false;
37 | } else if (serverDetails.remoteServerName == undefined) {
38 | // Disabling logging as CodeQL does not like user supplied values being logged.
39 | // console.log(
40 | // "ServerName " +
41 | // suppliedserverName +
42 | // " found but there was no associated remoteServerName"
43 | // );
44 | isValid = false;
45 | }
46 | }
47 | }
48 | return isValid;
49 | };
50 |
51 | module.exports = validateURL;
52 |
--------------------------------------------------------------------------------
/ssl/EgeriaReactUIServer.p12:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/odpi/egeria-react-ui/fcc6c58643b639da61799ba52b138eea044c2f4a/ssl/EgeriaReactUIServer.p12
--------------------------------------------------------------------------------
/ssl/EgeriaRootCA.p12:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/odpi/egeria-react-ui/fcc6c58643b639da61799ba52b138eea044c2f4a/ssl/EgeriaRootCA.p12
--------------------------------------------------------------------------------
/ssl/keys/EgeriaReactUIServer.cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIIFGTCCAwGgAwIBAgICEAcwDQYJKoZIhvcNAQELBQAwXjELMAkGA1UEBhMCVVMx
3 | CzAJBgNVBAgMAkNBMREwDwYDVQQKDAhMRkFJRGF0YTEvMC0GA1UEAwwmRWdlcmlh
4 | SW50ZXJtZWRpYXRlQ2VydGlmaWNhdGVBdXRob3JpdHkwHhcNMjMwMzA5MTIzMDQ4
5 | WhcNMjQwMzE4MTIzMDQ4WjBFMQswCQYDVQQGEwJVUzELMAkGA1UECAwCQ0ExETAP
6 | BgNVBAoMCExGQUlEYXRhMRYwFAYDVQQDDA1SZWFjdFVJU2VydmVyMIIBIjANBgkq
7 | hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAucylK7zaFZgqxNjIGdy/xXfVdoidPGnB
8 | FkBd39XxNnBo2AFYTov3SX/OqNT6ih3XoMZvBHGJcwc0kziWHgFvdOnAJlu5zOsY
9 | WbzbIBuoxDfUGxWody1oC1sr8b1UjQqFARKdy9D2OXoHxr15IbSKjIlATFzI7/09
10 | OgOu3ZOoRCVDj2XMfL3SIINv6LayZ9iURVanm3rHaJLZoSxq7wMqVyEaDzbETtAX
11 | lFJKhwClR/A04zrq0BKNGQ7HkwskeUAq7/NYTJPbGNwG82dI3jWDDhLywQqwgpbH
12 | ZgaP8SaHlBltu7WbqfIKSmVmsRQ4ExXxT1iR4qTg8axttvkQPMmi4wIDAQABo4H5
13 | MIH2MAkGA1UdEwQCMAAwEQYJYIZIAYb4QgEBBAQDAgZAMB0GA1UdDgQWBBSQjsNx
14 | t7AvG5qSFI/MVj2+JRmsyDALBgNVHQ8EBAMCBeAwEwYDVR0lBAwwCgYIKwYBBQUH
15 | AwEwFAYDVR0RBA0wC4IJbG9jYWxob3N0MH8GA1UdIwR4MHaAFLArm+30E8wsZ1rD
16 | NwQswImGenG+oVqkWDBWMQswCQYDVQQGEwJVUzELMAkGA1UECAwCQ0ExETAPBgNV
17 | BAoMCExGQUlEYXRhMScwJQYDVQQDDB5FZ2VyaWFSb290Q2VydGlmaWNhdGVBdXRo
18 | b3JpdHmCAhAAMA0GCSqGSIb3DQEBCwUAA4ICAQC5ctOj+MthxA171+/p+q/Zq8vc
19 | krrnIy3us22eFYaHnYaqWxhtzP3ZwANhFeOTANy6/O559XB2VSvl7twuVTz0Ypjn
20 | 6faT806LNL6UHgO4ABEA4yjnZHnTzoRjoY9tryaJe+9H349fGxSXvNGOz/zkzw9V
21 | dA6mREiIA48iLpotkiTpJWCqM/ZBwGXDA+XT2RCKkTrW8KAy1Tr+nES2a/mAT3KL
22 | IE6FqE3K+6pZ4YG5hVfpz8ziCZ3K+IBfEwssfd+7/+eIE9L4iika45QRcyG23CoD
23 | QdLM7iqZug1P7PH0kRpjxpLlB9KrRYkyxF81Ie1ymO6awV6WXNA8yrtzz1mstxo3
24 | 96ZawiQT9b0B1v49eBdZQbtpA5JZaTS0FsMhmCj80pDmNHWWp0QYyRdiw6vUH2Rl
25 | 1G4AD4YXXCL9XtDrLufwrBYof+1u9TTNL7dCq8TUekRvMX4joyHvxKjpxxp8FjS8
26 | dafWfoHU9Z4Bc/s0h6NUISGfZEJ3IgWWRyPuvUgy7ge8cDE1QEfbd4DrZtNVz62W
27 | TjSgJGqOFNrA/CXe0oRFfm0BjgXvZkvf1g1Rq1NILzFfp3/MxoNtvW0Ewuj/8nz4
28 | Bqx+8C9mVJ32g65aHrCj3m7tT97U/Wj4XIFjfaxYNAURTf9yq9/YZ+6yNg6KLJDS
29 | JdxBetwmhfXKsFzpVQ==
30 | -----END CERTIFICATE-----
31 |
--------------------------------------------------------------------------------
/ssl/keys/EgeriaReactUIServer.key.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN ENCRYPTED PRIVATE KEY-----
2 | MIIFLTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIm2Gv6E2wf08CAggA
3 | MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBAU61gJbOqV12qym+j6QY9GBIIE
4 | 0D7Dj0POosRbR9B5Dy7z91xmKc63QV7aQkJJ7yhRy0SzzyC5elJiTMwI6JKCzUqy
5 | dAvdVtSuVnPm9D/BxsbnjNCAEhaWU6jBPjfgNJ8OtPs7BifdNvSpYYw1yBJgccZH
6 | s52RlQa2MRzqs520A6jiZXKrIAOZqtX41Jrm3ZKxHmrZZ/Crr4aam2Zmx6MNI0RY
7 | L/qgdZuKy7MzI1BEc4qowL6GSu5ST+a53zFGlQEiXKYnnbN2hr/d49VrTbmWLJpz
8 | F5RwCkF35qz/6DKqJPeMykfWGKQNB4lcK79z1afR7BsQSdATGI2dWA4H3xyO3cCq
9 | DviqYo2hhIZJbckpkuy9srYVAWf+42zu8029eKq8rLURbE08IzSOJqfAehPTEskd
10 | +mgjGm1Sgl5vmnX7bRDAs7yTzGZr913rHDCpUlVaBgYEpvg4Kbb8/eXbn8sP81VH
11 | tdzpb1QEAOfoQcGT5P7/Vv1QvQ1QsmK06cW9zWQbMHmKAdnIWQTLAYogHgHI9r5n
12 | g/L0XO45vMrM1Fzc0NKxtgnSIe27sTK89bxSHk4JZpmCEWWxLPt0JS3cucBbyHKq
13 | gw6jU6441MeTKyeQoOS09VZWi0ySYfbrvZyUf7wvMtoxseZmG/Grkiu9p4OajM2b
14 | TCBCZLMgzaxRfzKFZ2h7iIvl4X1Lisdud9NadWzv7NSxZYaMWAAT07DiMZ/2sqjm
15 | RFERu7n2PPpeyDMMUCUlZX4oO+qxVplJbco9Iva9iyOrf8yId8/Paqait4bGF88K
16 | anWAzQCP6IitoKxwT+CyjhpVl1jF59SF9xZd/5lu9OI8YtpTAZltfDBq6DMUrqQq
17 | T4sfkBmoAFgJVJOHRTHeItBXLeArWMWRSCEQxIVgEqKiZC8kkAyRroeKGHzb9UaN
18 | 6wXFLoZhkujK47NyPncjkI81VADn1A9aCj8701Tjk9KBevPwxeIlVn6UDij+qJaM
19 | BKx55Vizw/kDbRx6WHUS5L9KaphsRW5dha9VmDz1RbjOHks/D+O5LPg0zHkbkM7B
20 | w6C1ENsH65v9qE6YFJGr3DemJ0MryY4Julos3rXzpVxyFGA7kcYKJR7lHSrbfi6z
21 | fLRe9ZnYvU4PHd97MAyfXKAuHZzfHtXiIA6SwBod0Evyy9EeBD+p8p/EgS+Vw84S
22 | hisi1DkRKGDeu4lIltShJ9ZwRisBe+BMRAXvLuzXHwd/YmABfuxLZT2qfncqz7bD
23 | 7966LQ4ZsqDjcd4BugqbM3HETpj5NugYpQLMcdLOVnGw4LIjmSBQLRhFMMLf6Hxk
24 | DukB/CVoW9CcDyR1KDvLeoTaV9FnhQgNwgUJJjaDZRnKI1R1xF7VjAVhvDUZReba
25 | r62FZHyrK6dYsGvIIjS8wClpyuAdnjHd0FEfgPVwSijgphoc+CHhSauT6qtn66jm
26 | 1lnoUaKm5PCQZjiMcvc68WqT6Wt1+l/HqzX8Xev3nm7KkKv2vHNxKBMOTn8AtNha
27 | veUG7zIZ5UvVtkJKCdJfISMAqr/qn5nc256GtixIR7hqWehz0e2CTvpmKJRSKBCV
28 | lR1DSyC0i/u8wf9ARReL41fznoeKsRTz7GZSO8YTtfj20ZL5vfbeiT44qDNiX615
29 | pBYsI6go1lUCkp5GDStblsDj/MA6eHrOPY0uYK4dz3/F
30 | -----END ENCRYPTED PRIVATE KEY-----
31 |
--------------------------------------------------------------------------------