├── .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 |
41 | 42 | 52 | 53 | {validateForm() && ( 54 | Login with server name {serverName} 55 | )} 56 |
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 | 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 | 29 | 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 |
33 |
Properties
34 |
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 |
33 |
Properties
34 |
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 |
33 |
Properties
34 |
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 | ![GLOssary author Visualiser and Explorer Interface](image1) 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 | 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 | 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 |
      43 |
    • list is empty
    • 44 |
    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 | 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 |
    33 | 34 | 41 |
    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 | 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 | 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 | 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 | 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 | Add node 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 | Data visualisation 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 | Data visualisation 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 | Delete Node 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 | Edit node 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 | Work with the children nodes. 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 | 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 | Launch 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 | Github logo 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 | Glossary contains terms and categories 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 | Glossary author UI capability 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 | Egeria color logo 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 | Egeria color logo 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 | Egeria color logo 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 | Egeria white logo 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 | A Term, a meaningful word within a glossary. 9 | ); 10 | } 11 | -------------------------------------------------------------------------------- /cra-client/src/imagesHolder/carbon/add.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /cra-client/src/imagesHolder/carbon/copy.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cra-client/src/imagesHolder/carbon/data-vis--1.svg: -------------------------------------------------------------------------------- 1 | data-vis--1 -------------------------------------------------------------------------------- /cra-client/src/imagesHolder/carbon/edit.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cra-client/src/imagesHolder/carbon/favorite--filled.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cra-client/src/imagesHolder/carbon/favorite.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /cra-client/src/imagesHolder/carbon/search.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cra-client/src/imagesHolder/carbon/table.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cra-client/src/imagesHolder/carbon/term.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cra-client/src/imagesHolder/carbon/trash-can.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cra-client/src/imagesHolder/carbon/tree-view--alt.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /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 | --------------------------------------------------------------------------------