This is an automated email from the ASF dual-hosted git repository. dimuthuupe pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/airavata-data-lake.git
commit 2724b9a8e90f7a66150b69b359fe319d9b9dba0e Author: Isuru Ranawaka <[email protected]> AuthorDate: Wed Mar 10 21:44:02 2021 -0500 metadata service neo4j implementation --- airavata-data-lake.ipr | 112 ++++++ airavata-data-lake.iws | 418 ++++++++++++++++++++ metadata-service/data-builders/data-builders.iml | 16 + metadata-service/data-builders/pom.xml | 20 + metadata-service/db-service/db-service.iml | 420 +++++++++++++++++++++ metadata-service/db-service/pom.xml | 49 +++ .../datalake/metadata/db/service/AppConfig.java | 108 ++++++ .../db/service/Neo4JServiceInitializer.java | 14 + .../metadata/db/service/XmlConfiguration.java | 9 + .../metadata/db/service/backend/Connector.java | 10 + .../metadata/db/service/backend/Person.java | 74 ++++ .../db/service/backend/neo4j/Neo4JConnector.java | 53 +++ .../neo4j/curd/operators/GenericService.java | 79 ++++ .../backend/neo4j/curd/operators/GroupService.java | 4 + .../neo4j/curd/operators/ResourceService.java | 4 + .../neo4j/curd/operators/SearchOperator.java | 33 ++ .../backend/neo4j/curd/operators/Service.java | 24 ++ .../backend/neo4j/curd/operators/UserService.java | 4 + .../service/backend/neo4j/model/nodes/Entity.java | 109 ++++++ .../service/backend/neo4j/model/nodes/Group.java | 208 ++++++++++ .../backend/neo4j/model/nodes/Resource.java | 215 +++++++++++ .../db/service/backend/neo4j/model/nodes/Role.java | 37 ++ .../backend/neo4j/model/nodes/ServiceAccount.java | 29 ++ .../service/backend/neo4j/model/nodes/Tenant.java | 125 ++++++ .../db/service/backend/neo4j/model/nodes/User.java | 132 +++++++ .../backend/neo4j/model/relationships/Belongs.java | 9 + .../neo4j/model/relationships/ConfiguredWith.java | 7 + .../backend/neo4j/model/relationships/Has.java | 9 + .../neo4j/model/relationships/HasAccess.java | 23 ++ .../neo4j/model/relationships/HasChildGroup.java | 9 + .../model/relationships/HasChildResource.java | 8 + .../neo4j/model/relationships/HasChildUser.java | 19 + .../neo4j/model/relationships/HasParentGroup.java | 19 + .../model/relationships/HasParentResource.java | 7 + .../backend/neo4j/model/relationships/HasRole.java | 8 + .../neo4j/model/relationships/MemberOf.java | 19 + .../neo4j/model/relationships/Relationship.java | 81 ++++ .../neo4j/model/relationships/SharedWith.java | 25 ++ .../service/exceptions/DBConnectorException.java | 10 + .../src/main/resources/application.properties | 23 ++ .../src/main/resources/applicationContext.xml | 12 + metadata-service/metadata-service.iml | 14 + metadata-service/pom.xml | 130 +++++++ pom.xml | 77 +++- 44 files changed, 2814 insertions(+), 1 deletion(-) diff --git a/airavata-data-lake.ipr b/airavata-data-lake.ipr new file mode 100644 index 0000000..3bec1ac --- /dev/null +++ b/airavata-data-lake.ipr @@ -0,0 +1,112 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> +<project version="4" relativePaths="false"> + <component name="ProjectRootManager" version="2" assert-keyword="true" project-jdk-name="11." jdk-15="true"/> + <component name="CodeStyleManager"> + <option name="USE_DEFAULT_CODE_STYLE_SCHEME" value="true"/> + <option name="CODE_STYLE_SCHEME" value=""/> + </component> + <component name="libraryTable"/> + <component name="CompilerConfiguration"> + <option name="DEFAULT_COMPILER" value="Javac"/> + <option name="CLEAR_OUTPUT_DIRECTORY" value="false"/> + <!-- + <wildcardResourcePatterns> + <entry name="${wildcardResourcePattern}"/> + </wildcardResourcePatterns> + --> + <wildcardResourcePatterns> + <entry name="!?*.java"/> + </wildcardResourcePatterns> + </component> + <component name="JavacSettings"> + <option name="DEBUGGING_INFO" value="true"/> + <option name="GENERATE_NO_WARNINGS" value="false"/> + <option name="DEPRECATION" value="true"/> + <option name="ADDITIONAL_OPTIONS_STRING" value=""/> + <option name="MAXIMUM_HEAP_SIZE" value="128"/> + <option name="USE_GENERICS_COMPILER" value="false"/> + </component> + <component name="JikesSettings"> + <option name="DEBUGGING_INFO" value="true"/> + <option name="DEPRECATION" value="true"/> + <option name="GENERATE_NO_WARNINGS" value="false"/> + <option name="GENERATE_MAKE_FILE_DEPENDENCIES" value="false"/> + <option name="DO_FULL_DEPENDENCE_CHECK" value="false"/> + <option name="IS_INCREMENTAL_MODE" value="false"/> + <option name="IS_EMACS_ERRORS_MODE" value="true"/> + <option name="ADDITIONAL_OPTIONS_STRING" value=""/> + <option name="MAXIMUM_HEAP_SIZE" value="128"/> + </component> + <component name="AntConfiguration"> + <option name="IS_AUTOSCROLL_TO_SOURCE" value="false"/> + <option name="FILTER_TARGETS" value="false"/> + </component> + <component name="JavadocGenerationManager"> + <option name="OUTPUT_DIRECTORY"/> + <option name="OPTION_SCOPE" value="protected"/> + <option name="OPTION_HIERARCHY" value="false"/> + <option name="OPTION_NAVIGATOR" value="false"/> + <option name="OPTION_INDEX" value="false"/> + <option name="OPTION_SEPARATE_INDEX" value="false"/> + <option name="OPTION_USE_1_1" value="false"/> + <option name="OPTION_DOCUMENT_TAG_USE" value="false"/> + <option name="OPTION_DOCUMENT_TAG_AUTHOR" value="false"/> + <option name="OPTION_DOCUMENT_TAG_VERSION" value="false"/> + <option name="OPTION_DOCUMENT_TAG_DEPRECATED" value="false"/> + <option name="OPTION_DEPRECATED_LIST" value="false"/> + <option name="OTHER_OPTIONS"/> + <option name="HEAP_SIZE"/> + <option name="OPEN_IN_BROWSER" value="false"/> + </component> + <component name="JUnitProjectSettings"> + <option name="TEST_RUNNER" value="UI"/> + </component> + <component name="EntryPointsManager"> + <entry_points/> + </component> + <component name="DataSourceManager"/> + <component name="ExportToHTMLSettings"> + <option name="PRINT_LINE_NUMBERS" value="false"/> + <option name="OPEN_IN_BROWSER" value="false"/> + <option name="OUTPUT_DIRECTORY"/> + </component> + <component name="ImportConfiguration"> + <option name="VENDOR"/> + <option name="RELEASE_TAG"/> + <option name="LOG_MESSAGE"/> + <option name="CHECKOUT_AFTER_IMPORT" value="true"/> + </component> + <component name="ProjectModuleManager"> + <modules> + <!-- module filepath="$$PROJECT_DIR$$/${pom.artifactId}.iml"/ --> + <module filepath="$PROJECT_DIR$/airavata-data-lake.iml"/> + <module filepath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-api/data-orchestrator-api.iml"/> + <module filepath="$PROJECT_DIR$/data-orchestrator/data-orchestrator-core/data-orchestrator-core.iml"/> + <module filepath="$PROJECT_DIR$/data-orchestrator/data-orchestrator.iml"/> + <module filepath="$PROJECT_DIR$/metadata-service/neo4j-service/neo4j-service.iml"/> + <module filepath="$PROJECT_DIR$/metadata-service/metadata-service.iml"/> + </modules> + </component> + <UsedPathMacros> + <!--<macro name="cargo"></macro>--> + </UsedPathMacros> +</project> diff --git a/airavata-data-lake.iws b/airavata-data-lake.iws new file mode 100644 index 0000000..57de9a0 --- /dev/null +++ b/airavata-data-lake.iws @@ -0,0 +1,418 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> +<project version="4" relativePaths="false"> + <component name="LvcsProjectConfiguration"> + <option name="ADD_LABEL_ON_PROJECT_OPEN" value="true"/> + <option name="ADD_LABEL_ON_PROJECT_COMPILATION" value="true"/> + <option name="ADD_LABEL_ON_FILE_PACKAGE_COMPILATION" value="true"/> + <option name="ADD_LABEL_ON_PROJECT_MAKE" value="true"/> + <option name="ADD_LABEL_ON_RUNNING" value="true"/> + <option name="ADD_LABEL_ON_DEBUGGING" value="true"/> + <option name="ADD_LABEL_ON_UNIT_TEST_PASSED" value="true"/> + <option name="ADD_LABEL_ON_UNIT_TEST_FAILED" value="true"/> + </component> + <component name="PropertiesComponent"> + <property name="MemberChooser.copyJavadoc" value="false"/> + <property name="GoToClass.includeLibraries" value="false"/> + <property name="MemberChooser.showClasses" value="true"/> + <property name="MemberChooser.sorted" value="false"/> + <property name="GoToFile.includeJavaFiles" value="false"/> + <property name="GoToClass.toSaveIncludeLibraries" value="false"/> + </component> + <component name="ToolWindowManager"> + <frame x="-4" y="-4" width="1032" height="746" extended-state="6"/> + <editor active="false"/> + <layout> + <window_info id="CVS" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.33" order="-1"/> + <window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.33" order="7"/> + <window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.25" order="0"/> + <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.33" order="1"/> + <window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.25" order="1"/> + <window_info id="Messages" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.33" order="-1"/> + <window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.4" order="6"/> + <window_info id="Aspects" active="false" anchor="right" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.33" order="-1"/> + <window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.25" order="1"/> + <window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.33" order="2"/> + <window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.25" order="2"/> + <window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.4" order="4"/> + <window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="sliding" type="sliding" visible="false" weight="0.4" order="0"/> + <window_info id="Web" active="false" anchor="left" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.25" order="2"/> + <window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.33" order="0"/> + <window_info id="EJB" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.25" order="3"/> + <window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.25" order="5"/> + </layout> + </component> + <component name="ErrorTreeViewConfiguration"> + <option name="IS_AUTOSCROLL_TO_SOURCE" value="false"/> + <option name="HIDE_WARNINGS" value="false"/> + </component> + <component name="StructureViewFactory"> + <option name="SORT_MODE" value="0"/> + <option name="GROUP_INHERITED" value="true"/> + <option name="AUTOSCROLL_MODE" value="true"/> + <option name="SHOW_FIELDS" value="true"/> + <option name="AUTOSCROLL_FROM_SOURCE" value="false"/> + <option name="GROUP_GETTERS_AND_SETTERS" value="true"/> + <option name="SHOW_INHERITED" value="false"/> + <option name="HIDE_NOT_PUBLIC" value="false"/> + </component> + <component name="ProjectViewSettings"> + <navigator currentView="ProjectPane" flattenPackages="false" showMembers="false" showStructure="false" autoscrollToSource="false" splitterProportion="0.5"/> + <view id="ProjectPane"> + <expanded_node type="directory" url="file://$PROJECT_DIR$"/> + </view> + <view id="SourcepathPane"/> + <view id="ClasspathPane"/> + </component> + <component name="Commander"> + <leftPanel view="Project"/> + <rightPanel view="Project"/> + <splitter proportion="0.5"/> + </component> + <component name="AspectsView"/> + <component name="SelectInManager"/> + <component name="HierarchyBrowserManager"> + <option name="SHOW_PACKAGES" value="false"/> + <option name="IS_AUTOSCROLL_TO_SOURCE" value="false"/> + <option name="SORT_ALPHABETICALLY" value="false"/> + </component> + <component name="TodoView" selected-index="0"> + <todo-panel id="selected-file"> + <are-packages-shown value="false"/> + <flatten-packages value="false"/> + <is-autoscroll-to-source value="true"/> + </todo-panel> + <todo-panel id="all"> + <are-packages-shown value="true"/> + <flatten-packages value="false"/> + <is-autoscroll-to-source value="true"/> + </todo-panel> + </component> + <component name="editorManager"/> + <component name="editorHistoryManager"/> + <component name="DaemonCodeAnalyzer"> + <disable_hints/> + </component> + <component name="InspectionManager"> + <option name="AUTOSCROLL_TO_SOURCE" value="false"/> + <option name="SPLITTER_PROPORTION" value="0.5"/> + <profile name="Default"/> + </component> + <component name="BookmarkManager"/> + <component name="DebuggerManager"> + <line_breakpoints/> + <exception_breakpoints> + <breakpoint_any> + <option name="NOTIFY_CAUGHT" value="true"/> + <option name="NOTIFY_UNCAUGHT" value="true"/> + <option name="ENABLED" value="false"/> + <option name="SUSPEND_VM" value="true"/> + <option name="COUNT_FILTER_ENABLED" value="false"/> + <option name="COUNT_FILTER" value="0"/> + <option name="CONDITION_ENABLED" value="false"/> + <option name="CONDITION"/> + <option name="LOG_ENABLED" value="false"/> + <option name="LOG_EXPRESSION_ENABLED" value="false"/> + <option name="LOG_MESSAGE"/> + <option name="CLASS_FILTERS_ENABLED" value="false"/> + <option name="INVERSE_CLASS_FILLTERS" value="false"/> + <option name="SUSPEND_POLICY" value="SuspendAll"/> + </breakpoint_any> + </exception_breakpoints> + <field_breakpoints/> + <method_breakpoints/> + </component> + <component name="DebuggerSettings"> + <option name="TRACING_FILTERS_ENABLED" value="true"/> + <option name="TOSTRING_CLASSES_ENABLED" value="false"/> + <option name="VALUE_LOOKUP_DELAY" value="700"/> + <option name="DEBUGGER_TRANSPORT" value="0"/> + <option name="FORCE_CLASSIC_VM" value="true"/> + <option name="HIDE_DEBUGGER_ON_PROCESS_TERMINATION" value="false"/> + <option name="SKIP_SYNTHETIC_METHODS" value="true"/> + <option name="SKIP_CONSTRUCTORS" value="false"/> + <option name="STEP_THREAD_SUSPEND_POLICY" value="SuspendThread"/> + <default_breakpoint_settings> + <option name="NOTIFY_CAUGHT" value="true"/> + <option name="NOTIFY_UNCAUGHT" value="true"/> + <option name="WATCH_MODIFICATION" value="true"/> + <option name="WATCH_ACCESS" value="true"/> + <option name="WATCH_ENTRY" value="true"/> + <option name="WATCH_EXIT" value="true"/> + <option name="ENABLED" value="true"/> + <option name="SUSPEND_VM" value="true"/> + <option name="COUNT_FILTER_ENABLED" value="false"/> + <option name="COUNT_FILTER" value="0"/> + <option name="CONDITION_ENABLED" value="false"/> + <option name="CONDITION"/> + <option name="LOG_ENABLED" value="false"/> + <option name="LOG_EXPRESSION_ENABLED" value="false"/> + <option name="LOG_MESSAGE"/> + <option name="CLASS_FILTERS_ENABLED" value="false"/> + <option name="INVERSE_CLASS_FILLTERS" value="false"/> + <option name="SUSPEND_POLICY" value="SuspendAll"/> + </default_breakpoint_settings> + <filter> + <option name="PATTERN" value="com.sun.*"/> + <option name="ENABLED" value="true"/> + </filter> + <filter> + <option name="PATTERN" value="java.*"/> + <option name="ENABLED" value="true"/> + </filter> + <filter> + <option name="PATTERN" value="javax.*"/> + <option name="ENABLED" value="true"/> + </filter> + <filter> + <option name="PATTERN" value="org.omg.*"/> + <option name="ENABLED" value="true"/> + </filter> + <filter> + <option name="PATTERN" value="sun.*"/> + <option name="ENABLED" value="true"/> + </filter> + <filter> + <option name="PATTERN" value="junit.*"/> + <option name="ENABLED" value="true"/> + </filter> + </component> + <component name="CompilerWorkspaceConfiguration"> + <option name="COMPILE_IN_BACKGROUND" value="false"/> + <option name="AUTO_SHOW_ERRORS_IN_EDITOR" value="true"/> + </component> + <component name="RunManager"> + <activeType name="Application"/> + <configuration selected="false" default="true" type="Applet" factoryName="Applet"> + <module name=""/> + <option name="MAIN_CLASS_NAME"/> + <option name="HTML_FILE_NAME"/> + <option name="HTML_USED" value="false"/> + <option name="WIDTH" value="400"/> + <option name="HEIGHT" value="300"/> + <option name="POLICY_FILE" value="$APPLICATION_HOME_DIR$/bin/appletviewer.policy"/> + <option name="VM_PARAMETERS"/> + </configuration> + <configuration selected="false" default="true" type="Remote" factoryName="Remote"> + <option name="USE_SOCKET_TRANSPORT" value="true"/> + <option name="SERVER_MODE" value="false"/> + <option name="SHMEM_ADDRESS" value="javadebug"/> + <option name="HOST" value="localhost"/> + <option name="PORT" value="5005"/> + </configuration> + <configuration selected="false" default="true" type="Application" factoryName="Application"> + <option name="MAIN_CLASS_NAME"/> + <option name="VM_PARAMETERS"/> + <option name="PROGRAM_PARAMETERS"/> + <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$"/> + <module name=""/> + </configuration> + <configuration selected="false" default="true" type="JUnit" factoryName="JUnit"> + <module name=""/> + <option name="PACKAGE_NAME"/> + <option name="MAIN_CLASS_NAME"/> + <option name="METHOD_NAME"/> + <option name="TEST_OBJECT" value="class"/> + <option name="VM_PARAMETERS"/> + <option name="PARAMETERS"/> + <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$"/> + <option name="ADDITIONAL_CLASS_PATH"/> + <option name="TEST_SEARCH_SCOPE"> + <value defaultName="wholeProject"/> + </option> + </configuration> + </component> + <component name="VcsManagerConfiguration"> + <option name="ACTIVE_VCS_NAME" value="git"/> + <option name="STATE" value="0"/> + </component> + <component name="VssConfiguration"> + <CheckoutOptions> + <option name="COMMENT" value=""/> + <option name="DO_NOT_GET_LATEST_VERSION" value="false"/> + <option name="REPLACE_WRITABLE" value="false"/> + <option name="RECURSIVE" value="false"/> + </CheckoutOptions> + <CheckinOptions> + <option name="COMMENT" value=""/> + <option name="KEEP_CHECKED_OUT" value="false"/> + <option name="RECURSIVE" value="false"/> + </CheckinOptions> + <AddOptions> + <option name="COMMENT" value=""/> + <option name="STORE_ONLY_LATEST_VERSION" value="false"/> + <option name="CHECK_OUT_IMMEDIATELY" value="false"/> + <option name="FILE_TYPE" value="0"/> + </AddOptions> + <UndocheckoutOptions> + <option name="MAKE_WRITABLE" value="false"/> + <option name="REPLACE_LOCAL_COPY" value="0"/> + <option name="RECURSIVE" value="false"/> + </UndocheckoutOptions> + <DiffOptions> + <option name="IGNORE_WHITE_SPACE" value="false"/> + <option name="IGNORE_CASE" value="false"/> + </DiffOptions> + <GetOptions> + <option name="REPLACE_WRITABLE" value="0"/> + <option name="MAKE_WRITABLE" value="false"/> + <option name="RECURSIVE" value="false"/> + </GetOptions> + <option name="CLIENT_PATH" value=""/> + <option name="SRCSAFEINI_PATH" value=""/> + <option name="USER_NAME" value=""/> + <option name="PWD" value=""/> + <option name="SHOW_CHECKOUT_OPTIONS" value="true"/> + <option name="SHOW_ADD_OPTIONS" value="true"/> + <option name="SHOW_UNDOCHECKOUT_OPTIONS" value="true"/> + <option name="SHOW_DIFF_OPTIONS" value="true"/> + <option name="SHOW_GET_OPTIONS" value="true"/> + <option name="USE_EXTERNAL_DIFF" value="false"/> + <option name="EXTERNAL_DIFF_PATH" value=""/> + <option name="REUSE_LAST_COMMENT" value="false"/> + <option name="PUT_FOCUS_INTO_COMMENT" value="false"/> + <option name="SHOW_CHECKIN_OPTIONS" value="true"/> + <option name="LAST_COMMIT_MESSAGE" value=""/> + <option name="CHECKIN_DIALOG_SPLITTER_PROPORTION" value="0.8"/> + </component> + <component name="CheckinPanelState"/> + <component name="WebViewSettings"> + <webview flattenPackages="false" showMembers="false" autoscrollToSource="false"/> + </component> + <component name="EjbViewSettings"> + <EjbView showMembers="false" autoscrollToSource="false"/> + </component> + <component name="AppServerRunManager"/> + <component name="StarteamConfiguration"> + <option name="SERVER" value=""/> + <option name="PORT" value="49201"/> + <option name="USER" value=""/> + <option name="PASSWORD" value=""/> + <option name="PROJECT" value=""/> + <option name="VIEW" value=""/> + <option name="ALTERNATIVE_WORKING_PATH" value=""/> + <option name="PUT_FOCUS_INTO_COMMENT" value="false"/> + <option name="SHOW_CHECKIN_OPTIONS" value="true"/> + <option name="LAST_COMMIT_MESSAGE" value=""/> + <option name="CHECKIN_DIALOG_SPLITTER_PROPORTION" value="0.8"/> + </component> + <component name="Cvs2Configuration"> + <option name="ON_FILE_ADDING" value="0"/> + <option name="ON_FILE_REMOVING" value="0"/> + <option name="PRUNE_EMPTY_DIRECTORIES" value="true"/> + <option name="SHOW_UPDATE_OPTIONS" value="true"/> + <option name="SHOW_ADD_OPTIONS" value="true"/> + <option name="SHOW_REMOVE_OPTIONS" value="true"/> + <option name="MERGING_MODE" value="0"/> + <option name="MERGE_WITH_BRANCH1_NAME" value="HEAD"/> + <option name="MERGE_WITH_BRANCH2_NAME" value="HEAD"/> + <option name="RESET_STICKY" value="false"/> + <option name="CREATE_NEW_DIRECTORIES" value="true"/> + <option name="DEFAULT_TEXT_FILE_SUBSTITUTION" value="kv"/> + <option name="PROCESS_UNKNOWN_FILES" value="false"/> + <option name="PROCESS_DELETED_FILES" value="false"/> + <option name="SHOW_EDIT_DIALOG" value="true"/> + <option name="RESERVED_EDIT" value="false"/> + <option name="FILE_HISTORY_SPLITTER_PROPORTION" value="0.6"/> + <option name="SHOW_CHECKOUT_OPTIONS" value="true"/> + <option name="CHECKOUT_DATE_OR_REVISION_SETTINGS"> + <value> + <option name="BRANCH" value=""/> + <option name="DATE" value=""/> + <option name="USE_BRANCH" value="false"/> + <option name="USE_DATE" value="false"/> + </value> + </option> + <option name="UPDATE_DATE_OR_REVISION_SETTINGS"> + <value> + <option name="BRANCH" value=""/> + <option name="DATE" value=""/> + <option name="USE_BRANCH" value="false"/> + <option name="USE_DATE" value="false"/> + </value> + </option> + <option name="SHOW_CHANGES_REVISION_SETTINGS"> + <value> + <option name="BRANCH" value=""/> + <option name="DATE" value=""/> + <option name="USE_BRANCH" value="false"/> + <option name="USE_DATE" value="false"/> + </value> + </option> + <option name="SHOW_OUTPUT" value="false"/> + <option name="SHOW_FILE_HISTORY_AS_TREE" value="false"/> + <option name="UPDATE_GROUP_BY_PACKAGES" value="false"/> + <option name="ADD_WATCH_INDEX" value="0"/> + <option name="REMOVE_WATCH_INDEX" value="0"/> + <option name="UPDATE_KEYWORD_SUBSTITUTION"/> + <option name="MAKE_NEW_FILES_READONLY" value="false"/> + <option name="SHOW_CORRUPTED_PROJECT_FILES" value="0"/> + <option name="TAG_AFTER_FILE_COMMIT" value="false"/> + <option name="TAG_AFTER_FILE_COMMIT_NAME" value=""/> + <option name="TAG_AFTER_PROJECT_COMMIT" value="false"/> + <option name="TAG_AFTER_PROJECT_COMMIT_NAME" value=""/> + <option name="PUT_FOCUS_INTO_COMMENT" value="false"/> + <option name="SHOW_CHECKIN_OPTIONS" value="true"/> + <option name="FORCE_NON_EMPTY_COMMENT" value="false"/> + <option name="LAST_COMMIT_MESSAGE" value=""/> + <option name="SAVE_LAST_COMMIT_MESSAGE" value="true"/> + <option name="CHECKIN_DIALOG_SPLITTER_PROPORTION" value="0.8"/> + <option name="OPTIMIZE_IMPORTS_BEFORE_PROJECT_COMMIT" value="false"/> + <option name="OPTIMIZE_IMPORTS_BEFORE_FILE_COMMIT" value="false"/> + <option name="REFORMAT_BEFORE_PROJECT_COMMIT" value="false"/> + <option name="REFORMAT_BEFORE_FILE_COMMIT" value="false"/> + <option name="FILE_HISTORY_DIALOG_COMMENTS_SPLITTER_PROPORTION" value="0.8"/> + <option name="FILE_HISTORY_DIALOG_SPLITTER_PROPORTION" value="0.5"/> + </component> + <component name="CvsTabbedWindow"/> + <component name="SvnConfiguration"> + <option name="USER" value=""/> + <option name="PASSWORD" value=""/> + <option name="AUTO_ADD_FILES" value="0"/> + <option name="AUTO_DEL_FILES" value="0"/> + </component> + <component name="PerforceConfiguration"> + <option name="PORT" value="magic:1666"/> + <option name="USER" value=""/> + <option name="PASSWORD" value=""/> + <option name="CLIENT" value=""/> + <option name="TRACE" value="false"/> + <option name="PERFORCE_STATUS" value="true"/> + <option name="CHANGELIST_OPTION" value="false"/> + <option name="SYSTEMROOT" value=""/> + <option name="P4_EXECUTABLE" value="p4"/> + <option name="SHOW_BRANCH_HISTORY" value="false"/> + <option name="GENERATE_COMMENT" value="false"/> + <option name="SYNC_OPTION" value="Sync"/> + <option name="PUT_FOCUS_INTO_COMMENT" value="false"/> + <option name="SHOW_CHECKIN_OPTIONS" value="true"/> + <option name="FORCE_NON_EMPTY_COMMENT" value="true"/> + <option name="LAST_COMMIT_MESSAGE" value=""/> + <option name="SAVE_LAST_COMMIT_MESSAGE" value="true"/> + <option name="CHECKIN_DIALOG_SPLITTER_PROPORTION" value="0.8"/> + <option name="OPTIMIZE_IMPORTS_BEFORE_PROJECT_COMMIT" value="false"/> + <option name="OPTIMIZE_IMPORTS_BEFORE_FILE_COMMIT" value="false"/> + <option name="REFORMAT_BEFORE_PROJECT_COMMIT" value="false"/> + <option name="REFORMAT_BEFORE_FILE_COMMIT" value="false"/> + <option name="FILE_HISTORY_DIALOG_COMMENTS_SPLITTER_PROPORTION" value="0.8"/> + <option name="FILE_HISTORY_DIALOG_SPLITTER_PROPORTION" value="0.5"/> + </component> +</project> diff --git a/metadata-service/data-builders/data-builders.iml b/metadata-service/data-builders/data-builders.iml new file mode 100644 index 0000000..3d5413d --- /dev/null +++ b/metadata-service/data-builders/data-builders.iml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="UTF-8"?> +<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4"> + <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_11"> + <output url="file://$MODULE_DIR$/target/classes" /> + <output-test url="file://$MODULE_DIR$/target/test-classes" /> + <content url="file://$MODULE_DIR$"> + <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" /> + <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" /> + <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" /> + <sourceFolder url="file://$MODULE_DIR$/target/maven-shared-archive-resources" isTestSource="false" /> + <excludeFolder url="file://$MODULE_DIR$/target" /> + </content> + <orderEntry type="inheritedJdk" /> + <orderEntry type="sourceFolder" forTests="false" /> + </component> +</module> \ No newline at end of file diff --git a/metadata-service/data-builders/pom.xml b/metadata-service/data-builders/pom.xml new file mode 100644 index 0000000..1af2131 --- /dev/null +++ b/metadata-service/data-builders/pom.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <parent> + <artifactId>airavata-data-lake</artifactId> + <groupId>org.apache.airavata.data.lake</groupId> + <version>0.01-SNAPSHOT</version> + <relativePath>../../pom.xml</relativePath> + </parent> + <modelVersion>4.0.0</modelVersion> + + <artifactId>data-builders</artifactId> + + <properties> + <maven.compiler.source>11</maven.compiler.source> + <maven.compiler.target>11</maven.compiler.target> + </properties> + +</project> \ No newline at end of file diff --git a/metadata-service/db-service/db-service.iml b/metadata-service/db-service/db-service.iml new file mode 100644 index 0000000..a137c71 --- /dev/null +++ b/metadata-service/db-service/db-service.iml @@ -0,0 +1,420 @@ +<?xml version="1.0" encoding="UTF-8"?> +<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4"> + <component name="FacetManager"> + <facet type="web" name="Web"> + <configuration> + <webroots /> + <sourceRoots> + <root url="file://$MODULE_DIR$/src/main/java" /> + <root url="file://$MODULE_DIR$/src/main/resources" /> + </sourceRoots> + </configuration> + </facet> + <facet type="Spring" name="Spring"> + <configuration /> + </facet> + </component> + <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_11"> + <output url="file://$MODULE_DIR$/target/classes" /> + <output-test url="file://$MODULE_DIR$/target/test-classes" /> + <content url="file://$MODULE_DIR$"> + <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" /> + <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" /> + <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" /> + <sourceFolder url="file://$MODULE_DIR$/target/maven-shared-archive-resources" isTestSource="true" /> + <excludeFolder url="file://$MODULE_DIR$/target" /> + </content> + <orderEntry type="inheritedJdk" /> + <orderEntry type="sourceFolder" forTests="false" /> + <orderEntry type="module-library"> + <library> + <CLASSES> + <root url="jar://$USER_HOME$/.m12/org/neo4j/neo4j-ogm-bolt-driver/3.2.20/neo4j-ogm-bolt-driver-3.2.20.jar!/" /> + </CLASSES> + <JAVADOC /> + <SOURCES /> + </library> + </orderEntry> + <orderEntry type="module-library"> + <library> + <CLASSES> + <root url="jar://$USER_HOME$/.m12/org/neo4j/neo4j-ogm-api/3.2.20/neo4j-ogm-api-3.2.20.jar!/" /> + </CLASSES> + <JAVADOC /> + <SOURCES /> + </library> + </orderEntry> + <orderEntry type="module-library"> + <library> + <CLASSES> + <root url="jar://$USER_HOME$/.m12/com/fasterxml/jackson/core/jackson-databind/2.9.9/jackson-databind-2.9.9.jar!/" /> + </CLASSES> + <JAVADOC /> + <SOURCES /> + </library> + </orderEntry> + <orderEntry type="module-library"> + <library> + <CLASSES> + <root url="jar://$USER_HOME$/.m12/com/fasterxml/jackson/core/jackson-annotations/2.9.0/jackson-annotations-2.9.0.jar!/" /> + </CLASSES> + <JAVADOC /> + <SOURCES /> + </library> + </orderEntry> + <orderEntry type="module-library"> + <library> + <CLASSES> + <root url="jar://$USER_HOME$/.m12/com/fasterxml/jackson/core/jackson-core/2.9.9/jackson-core-2.9.9.jar!/" /> + </CLASSES> + <JAVADOC /> + <SOURCES /> + </library> + </orderEntry> + <orderEntry type="module-library"> + <library> + <CLASSES> + <root url="jar://$USER_HOME$/.m12/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.9.9/jackson-datatype-jdk8-2.9.9.jar!/" /> + </CLASSES> + <JAVADOC /> + <SOURCES /> + </library> + </orderEntry> + <orderEntry type="module-library"> + <library> + <CLASSES> + <root url="jar://$USER_HOME$/.m12/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.9.9/jackson-datatype-jsr310-2.9.9.jar!/" /> + </CLASSES> + <JAVADOC /> + <SOURCES /> + </library> + </orderEntry> + <orderEntry type="module-library"> + <library> + <CLASSES> + <root url="jar://$USER_HOME$/.m12/org/slf4j/slf4j-api/1.7.25/slf4j-api-1.7.25.jar!/" /> + </CLASSES> + <JAVADOC /> + <SOURCES /> + </library> + </orderEntry> + <orderEntry type="module-library"> + <library> + <CLASSES> + <root url="jar://$USER_HOME$/.m12/org/neo4j/driver/neo4j-java-driver/4.0.2/neo4j-java-driver-4.0.2.jar!/" /> + </CLASSES> + <JAVADOC /> + <SOURCES /> + </library> + </orderEntry> + <orderEntry type="module-library"> + <library> + <CLASSES> + <root url="jar://$USER_HOME$/.m12/org/reactivestreams/reactive-streams/1.0.3/reactive-streams-1.0.3.jar!/" /> + </CLASSES> + <JAVADOC /> + <SOURCES /> + </library> + </orderEntry> + <orderEntry type="module-library"> + <library> + <CLASSES> + <root url="jar://$USER_HOME$/.m12/org/neo4j/neo4j-ogm-core/3.2.20/neo4j-ogm-core-3.2.20.jar!/" /> + </CLASSES> + <JAVADOC /> + <SOURCES /> + </library> + </orderEntry> + <orderEntry type="module-library"> + <library> + <CLASSES> + <root url="jar://$USER_HOME$/.m12/org/apache/commons/commons-lang3/3.8/commons-lang3-3.8.jar!/" /> + </CLASSES> + <JAVADOC /> + <SOURCES /> + </library> + </orderEntry> + <orderEntry type="module-library"> + <library> + <CLASSES> + <root url="jar://$USER_HOME$/.m12/io/github/classgraph/classgraph/4.8.86/classgraph-4.8.86.jar!/" /> + </CLASSES> + <JAVADOC /> + <SOURCES /> + </library> + </orderEntry> + <orderEntry type="module-library"> + <library> + <CLASSES> + <root url="jar://$USER_HOME$/.m12/org/springframework/boot/spring-boot-starter-web/2.4.2/spring-boot-starter-web-2.4.2.jar!/" /> + </CLASSES> + <JAVADOC /> + <SOURCES /> + </library> + </orderEntry> + <orderEntry type="module-library"> + <library> + <CLASSES> + <root url="jar://$USER_HOME$/.m12/org/springframework/boot/spring-boot-starter/2.4.2/spring-boot-starter-2.4.2.jar!/" /> + </CLASSES> + <JAVADOC /> + <SOURCES /> + </library> + </orderEntry> + <orderEntry type="module-library"> + <library> + <CLASSES> + <root url="jar://$USER_HOME$/.m12/org/springframework/boot/spring-boot/2.4.2/spring-boot-2.4.2.jar!/" /> + </CLASSES> + <JAVADOC /> + <SOURCES /> + </library> + </orderEntry> + <orderEntry type="module-library"> + <library> + <CLASSES> + <root url="jar://$USER_HOME$/.m12/org/springframework/spring-core/5.3.3/spring-core-5.3.3.jar!/" /> + </CLASSES> + <JAVADOC /> + <SOURCES /> + </library> + </orderEntry> + <orderEntry type="module-library"> + <library> + <CLASSES> + <root url="jar://$USER_HOME$/.m12/org/springframework/spring-jcl/5.3.3/spring-jcl-5.3.3.jar!/" /> + </CLASSES> + <JAVADOC /> + <SOURCES /> + </library> + </orderEntry> + <orderEntry type="module-library"> + <library> + <CLASSES> + <root url="jar://$USER_HOME$/.m12/org/springframework/spring-context/5.3.3/spring-context-5.3.3.jar!/" /> + </CLASSES> + <JAVADOC /> + <SOURCES /> + </library> + </orderEntry> + <orderEntry type="module-library"> + <library> + <CLASSES> + <root url="jar://$USER_HOME$/.m12/org/springframework/spring-aop/5.3.3/spring-aop-5.3.3.jar!/" /> + </CLASSES> + <JAVADOC /> + <SOURCES /> + </library> + </orderEntry> + <orderEntry type="module-library"> + <library> + <CLASSES> + <root url="jar://$USER_HOME$/.m12/org/springframework/spring-beans/5.3.3/spring-beans-5.3.3.jar!/" /> + </CLASSES> + <JAVADOC /> + <SOURCES /> + </library> + </orderEntry> + <orderEntry type="module-library"> + <library> + <CLASSES> + <root url="jar://$USER_HOME$/.m12/org/springframework/spring-expression/5.3.3/spring-expression-5.3.3.jar!/" /> + </CLASSES> + <JAVADOC /> + <SOURCES /> + </library> + </orderEntry> + <orderEntry type="module-library"> + <library> + <CLASSES> + <root url="jar://$USER_HOME$/.m12/org/springframework/boot/spring-boot-autoconfigure/2.4.2/spring-boot-autoconfigure-2.4.2.jar!/" /> + </CLASSES> + <JAVADOC /> + <SOURCES /> + </library> + </orderEntry> + <orderEntry type="module-library"> + <library> + <CLASSES> + <root url="jar://$USER_HOME$/.m12/org/springframework/boot/spring-boot-starter-logging/2.4.2/spring-boot-starter-logging-2.4.2.jar!/" /> + </CLASSES> + <JAVADOC /> + <SOURCES /> + </library> + </orderEntry> + <orderEntry type="module-library"> + <library> + <CLASSES> + <root url="jar://$USER_HOME$/.m12/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar!/" /> + </CLASSES> + <JAVADOC /> + <SOURCES /> + </library> + </orderEntry> + <orderEntry type="module-library"> + <library> + <CLASSES> + <root url="jar://$USER_HOME$/.m12/ch/qos/logback/logback-core/1.2.3/logback-core-1.2.3.jar!/" /> + </CLASSES> + <JAVADOC /> + <SOURCES /> + </library> + </orderEntry> + <orderEntry type="module-library"> + <library> + <CLASSES> + <root url="jar://$USER_HOME$/.m12/org/apache/logging/log4j/log4j-to-slf4j/2.13.3/log4j-to-slf4j-2.13.3.jar!/" /> + </CLASSES> + <JAVADOC /> + <SOURCES /> + </library> + </orderEntry> + <orderEntry type="module-library"> + <library> + <CLASSES> + <root url="jar://$USER_HOME$/.m12/org/apache/logging/log4j/log4j-api/2.13.3/log4j-api-2.13.3.jar!/" /> + </CLASSES> + <JAVADOC /> + <SOURCES /> + </library> + </orderEntry> + <orderEntry type="module-library"> + <library> + <CLASSES> + <root url="jar://$USER_HOME$/.m12/org/slf4j/jul-to-slf4j/1.7.30/jul-to-slf4j-1.7.30.jar!/" /> + </CLASSES> + <JAVADOC /> + <SOURCES /> + </library> + </orderEntry> + <orderEntry type="module-library"> + <library> + <CLASSES> + <root url="jar://$USER_HOME$/.m12/jakarta/annotation/jakarta.annotation-api/1.3.5/jakarta.annotation-api-1.3.5.jar!/" /> + </CLASSES> + <JAVADOC /> + <SOURCES /> + </library> + </orderEntry> + <orderEntry type="module-library"> + <library> + <CLASSES> + <root url="jar://$USER_HOME$/.m12/org/yaml/snakeyaml/1.27/snakeyaml-1.27.jar!/" /> + </CLASSES> + <JAVADOC /> + <SOURCES /> + </library> + </orderEntry> + <orderEntry type="module-library"> + <library> + <CLASSES> + <root url="jar://$USER_HOME$/.m12/org/springframework/boot/spring-boot-starter-json/2.4.2/spring-boot-starter-json-2.4.2.jar!/" /> + </CLASSES> + <JAVADOC /> + <SOURCES /> + </library> + </orderEntry> + <orderEntry type="module-library"> + <library> + <CLASSES> + <root url="jar://$USER_HOME$/.m12/org/springframework/spring-web/5.3.3/spring-web-5.3.3.jar!/" /> + </CLASSES> + <JAVADOC /> + <SOURCES /> + </library> + </orderEntry> + <orderEntry type="module-library"> + <library> + <CLASSES> + <root url="jar://$USER_HOME$/.m12/com/fasterxml/jackson/module/jackson-module-parameter-names/2.11.4/jackson-module-parameter-names-2.11.4.jar!/" /> + </CLASSES> + <JAVADOC /> + <SOURCES /> + </library> + </orderEntry> + <orderEntry type="module-library"> + <library> + <CLASSES> + <root url="jar://$USER_HOME$/.m12/org/springframework/boot/spring-boot-starter-tomcat/2.4.2/spring-boot-starter-tomcat-2.4.2.jar!/" /> + </CLASSES> + <JAVADOC /> + <SOURCES /> + </library> + </orderEntry> + <orderEntry type="module-library"> + <library> + <CLASSES> + <root url="jar://$USER_HOME$/.m12/org/apache/tomcat/embed/tomcat-embed-core/9.0.41/tomcat-embed-core-9.0.41.jar!/" /> + </CLASSES> + <JAVADOC /> + <SOURCES /> + </library> + </orderEntry> + <orderEntry type="module-library"> + <library> + <CLASSES> + <root url="jar://$USER_HOME$/.m12/org/glassfish/jakarta.el/3.0.3/jakarta.el-3.0.3.jar!/" /> + </CLASSES> + <JAVADOC /> + <SOURCES /> + </library> + </orderEntry> + <orderEntry type="module-library"> + <library> + <CLASSES> + <root url="jar://$USER_HOME$/.m12/org/apache/tomcat/embed/tomcat-embed-websocket/9.0.41/tomcat-embed-websocket-9.0.41.jar!/" /> + </CLASSES> + <JAVADOC /> + <SOURCES /> + </library> + </orderEntry> + <orderEntry type="module-library"> + <library> + <CLASSES> + <root url="jar://$USER_HOME$/.m12/org/springframework/spring-webmvc/5.3.3/spring-webmvc-5.3.3.jar!/" /> + </CLASSES> + <JAVADOC /> + <SOURCES /> + </library> + </orderEntry> + <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:2.4.2" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.4.2" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.4.2" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.4.2" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.4.2" level="project" /> + <orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.2.3" level="project" /> + <orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.2.3" level="project" /> + <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.13.3" level="project" /> + <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.13.3" level="project" /> + <orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.30" level="project" /> + <orderEntry type="library" name="Maven: jakarta.annotation:jakarta.annotation-api:1.3.5" level="project" /> + <orderEntry type="library" name="Maven: org.springframework:spring-core:5.3.3" level="project" /> + <orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.3.3" level="project" /> + <orderEntry type="library" name="Maven: org.yaml:snakeyaml:1.27" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-json:2.4.2" level="project" /> + <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.11.4" level="project" /> + <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.11.4" level="project" /> + <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.11.4" level="project" /> + <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.11.4" level="project" /> + <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.11.4" level="project" /> + <orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.11.4" level="project" /> + <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:2.4.2" level="project" /> + <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:9.0.41" level="project" /> + <orderEntry type="library" name="Maven: org.glassfish:jakarta.el:3.0.3" level="project" /> + <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:9.0.41" level="project" /> + <orderEntry type="library" name="Maven: org.springframework:spring-web:5.3.3" level="project" /> + <orderEntry type="library" name="Maven: org.springframework:spring-beans:5.3.3" level="project" /> + <orderEntry type="library" name="Maven: org.springframework:spring-webmvc:5.3.3" level="project" /> + <orderEntry type="library" name="Maven: org.springframework:spring-aop:5.3.3" level="project" /> + <orderEntry type="library" name="Maven: org.springframework:spring-context:5.3.3" level="project" /> + <orderEntry type="library" name="Maven: org.springframework:spring-expression:5.3.3" level="project" /> + <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-core:3.2.20" level="project" /> + <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-api:3.2.20" level="project" /> + <orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.25" level="project" /> + <orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.8" level="project" /> + <orderEntry type="library" name="Maven: io.github.classgraph:classgraph:4.8.86" level="project" /> + <orderEntry type="library" name="Maven: org.neo4j:neo4j-ogm-bolt-driver:3.2.20" level="project" /> + <orderEntry type="library" name="Maven: org.neo4j.driver:neo4j-java-driver:4.0.2" level="project" /> + <orderEntry type="library" name="Maven: org.reactivestreams:reactive-streams:1.0.3" level="project" /> + </component> +</module> \ No newline at end of file diff --git a/metadata-service/db-service/pom.xml b/metadata-service/db-service/pom.xml new file mode 100644 index 0000000..594f50f --- /dev/null +++ b/metadata-service/db-service/pom.xml @@ -0,0 +1,49 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <parent> + <artifactId>metadata-service</artifactId> + <groupId>org.apache.airavata.data.lake</groupId> + <version>0.01-SNAPSHOT</version> + </parent> + <modelVersion>4.0.0</modelVersion> + + <artifactId>db-service</artifactId> + + <properties> + <maven.compiler.source>11</maven.compiler.source> + <maven.compiler.target>11</maven.compiler.target> + </properties> + + <dependencies> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-web</artifactId> + </dependency> + +<!-- <dependency>--> +<!-- <groupId>org.springframework.data</groupId>--> +<!-- <artifactId>spring-data-neo4j</artifactId>--> +<!-- </dependency>--> + <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-neo4j --> +<!-- <dependency>--> +<!-- <groupId>org.springframework.boot</groupId>--> +<!-- <artifactId>spring-boot-starter-data-neo4j</artifactId>--> +<!-- </dependency>--> + + <dependency> + <groupId>org.neo4j</groupId> + <artifactId>neo4j-ogm-core</artifactId> + </dependency> + + <!-- Only add if you're using the Bolt driver --> + <dependency> + <groupId>org.neo4j</groupId> + <artifactId>neo4j-ogm-bolt-driver</artifactId> + </dependency> + + </dependencies> + + +</project> \ No newline at end of file diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/AppConfig.java b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/AppConfig.java new file mode 100644 index 0000000..d941b92 --- /dev/null +++ b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/AppConfig.java @@ -0,0 +1,108 @@ +package org.apache.airavata.datalake.metadata.db.service; + +import org.apache.airavata.datalake.metadata.db.service.backend.Connector; +import org.apache.airavata.datalake.metadata.db.service.backend.neo4j.Neo4JConnector; +import org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.nodes.Group; +import org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.nodes.Resource; +import org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.nodes.Tenant; +import org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.nodes.User; +import org.neo4j.ogm.cypher.ComparisonOperator; +import org.neo4j.ogm.cypher.Filter; +import org.neo4j.ogm.session.Session; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + + +@Configuration +public class AppConfig { + + private static final Logger LOGGER = LoggerFactory.getLogger(AppConfig.class); + + @Autowired + private Connector connector; + + + @Bean + Tenant getTenant() { + LOGGER.info("Calling get tenant############"); + Tenant tenant = new Tenant(); + tenant.setTenantId("123456789"); + tenant.setName("Tenant"); + + User user = new User(); + user.setFirstName("UserA"); + user.setUserName("user_a"); + + User user1 = new User(); + user1.setFirstName("UserB"); + user1.setUserName("user_b"); + + User user2 = new User(); + user2.setFirstName("UserC"); + user2.setUserName("user_c"); + + Group group = new Group(); + group.setName("g1"); + + Group group2 = new Group(); + group2.setName("g2"); + + Group group3 = new Group(); + group3.setName("g3"); + + group.addChildGroup(group2, 0, 0, null); + group2.addChildGroup(group3, 0, 0, null); + + + Resource resource = new Resource(); + resource.setName("R1"); + + Resource resource1 = new Resource(); + resource1.setName("R2"); + + Resource resource2 = new Resource(); + resource2.setName("R3"); + + Resource resource3 = new Resource(); + resource3.setName("R4"); + + + group.addChildUser(user, "ADMIN", 0, 0, null); + resource.addChildResource(resource1, 0, 0, null); + resource.shareWithAUser(user, "READ", 0, 0, null); + + + group2.addChildUser(user1, "ADMIN", 0, 0, null); + group3.addChildUser(user2, "ADMIN", 0, 0, null); + + resource1.shareWithAGroup(group2, "WRITE", 0, 0, null); + resource2.shareWithAGroup(group3, "WRITE", 0, 0, null); + + tenant.add(user, 0, 0, null); + tenant.add(group, 0, 0, null); + tenant.add(resource, 0, 0, null); + + Session session = ((Neo4JConnector) connector).openConnection(); + session.save(tenant); + + Filter filter = new Filter("name", ComparisonOperator.EQUALS, "R3"); + +// Collection<Resource> resources = session.loadAll(Resource.class, filter, 1); +// resources.stream().forEach(t -> { +// LOGGER.info("Resources " + t.getName()); +// t.addChildResource(resource3, 0, 0, null); +// Resource resource4 = (Resource) session.load(Resource.class, new Long(13)); +// session.delete(resource4); +// session.save(t); +// }); + + + return tenant; + + } + + +} diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/Neo4JServiceInitializer.java b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/Neo4JServiceInitializer.java new file mode 100644 index 0000000..9a3d9c8 --- /dev/null +++ b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/Neo4JServiceInitializer.java @@ -0,0 +1,14 @@ +package org.apache.airavata.datalake.metadata.db.service; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.annotation.ComponentScan; + +@ComponentScan(basePackages = {"org.apache.airavata"}) +@SpringBootApplication +public class Neo4JServiceInitializer { + + public static void main(String[] args) { + SpringApplication.run(Neo4JServiceInitializer.class, args); + } +} diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/XmlConfiguration.java b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/XmlConfiguration.java new file mode 100644 index 0000000..bd8e468 --- /dev/null +++ b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/XmlConfiguration.java @@ -0,0 +1,9 @@ +package org.apache.airavata.datalake.metadata.db.service; + +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.ImportResource; + +@Configuration +@ImportResource({"classpath*:applicationContext.xml"}) +public class XmlConfiguration { +} diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/Connector.java b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/Connector.java new file mode 100644 index 0000000..c96905f --- /dev/null +++ b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/Connector.java @@ -0,0 +1,10 @@ +package org.apache.airavata.datalake.metadata.db.service.backend; + +import java.io.Closeable; + +public interface Connector extends Closeable { + + public boolean init(); + + +} diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/Person.java b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/Person.java new file mode 100644 index 0000000..83988ac --- /dev/null +++ b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/Person.java @@ -0,0 +1,74 @@ +package org.apache.airavata.datalake.metadata.db.service.backend; + + +import org.neo4j.ogm.annotation.Properties; +import org.neo4j.ogm.annotation.*; + +import java.util.*; +import java.util.stream.Collectors; + +@NodeEntity +public class Person { + + + @Id + @GeneratedValue +// //Add this annotation +// @org.springframework.data.annotation.Id +// @Property + private Long id; + + @Property + private String name; + + @Properties(allowCast = true) + private Map<String, Object> valueProperties = new HashMap<>(); + + private Person() { + // Empty constructor required as of Neo4j API 2.0.5 + } + + ; + + public Person(String name) { + this.name = name; + } + + + /** + * Neo4j doesn't REALLY have bi-directional relationships. It just means when querying + * to ignore the direction of the relationship. + * https://dzone.com/articles/modelling-data-neo4j + */ + @Relationship(type = "TEAMMATE") + public Set<Person> teammates; + + public void worksWith(Person person) { + if (teammates == null) { + teammates = new HashSet<>(); + } + teammates.add(person); + } + + + public void addProperty(String key, String value) { + this.valueProperties.put(key, value); + } + + public String toString() { + + return this.name + "'s teammates => " + + Optional.ofNullable(this.teammates).orElse( + Collections.emptySet()).stream() + .map(Person::getName) + .collect(Collectors.toList()); + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } +} \ No newline at end of file diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/Neo4JConnector.java b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/Neo4JConnector.java new file mode 100644 index 0000000..befa1cd --- /dev/null +++ b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/Neo4JConnector.java @@ -0,0 +1,53 @@ +package org.apache.airavata.datalake.metadata.db.service.backend.neo4j; + +import org.apache.airavata.datalake.metadata.db.service.backend.Connector; +import org.apache.airavata.datalake.metadata.db.service.exceptions.DBConnectorException; +import org.neo4j.ogm.config.Configuration; +import org.neo4j.ogm.session.Session; +import org.neo4j.ogm.session.SessionFactory; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; + +import java.io.IOException; + +public class Neo4JConnector implements Connector { + + private static final Logger LOGGER = LoggerFactory.getLogger(Neo4JConnector.class); + + private SessionFactory factory; + + @Value("${spring.neo4j.uri}") + private String neo4JURI; + + + @Override + public boolean init() { + try { + LOGGER.info("Initializing Neo4J connector ......"); + Configuration configuration = new Configuration.Builder() + .uri(neo4JURI) + .build(); + factory = + new SessionFactory(configuration, "org.apache.airavata.datalake.metadata.db.service"); + return true; + } catch (Exception ex) { + String msg = "Neo4J Connection Failure, " + ex.getMessage(); + LOGGER.error(msg); + throw new DBConnectorException(msg, ex); + } + } + + @Override + public void close() throws IOException { + if (factory != null) { + factory.close(); + } + } + + public Session openConnection() { + return factory.openSession(); + } + + +} diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/curd/operators/GenericService.java b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/curd/operators/GenericService.java new file mode 100644 index 0000000..1a24815 --- /dev/null +++ b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/curd/operators/GenericService.java @@ -0,0 +1,79 @@ +package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.curd.operators; + +import org.apache.airavata.datalake.metadata.db.service.backend.Connector; +import org.apache.airavata.datalake.metadata.db.service.backend.neo4j.Neo4JConnector; +import org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.nodes.Entity; +import org.neo4j.ogm.cypher.Filter; +import org.neo4j.ogm.cypher.query.Pagination; +import org.neo4j.ogm.cypher.query.SortOrder; +import org.neo4j.ogm.session.Session; +import org.springframework.beans.factory.annotation.Autowired; + +import java.util.Collection; +import java.util.List; +import java.util.concurrent.atomic.AtomicReference; + +public abstract class GenericService<T> implements Service<T> { + + private static final int DEPTH_LIST = 0; + private static final int DEPTH_ENTITY = 1; + + private Connector connector; + + private Session session; + + public GenericService(@Autowired Connector connector) { + this.connector = connector; + this.session = ((Neo4JConnector) this.connector).openConnection(); + } + + + @Override + public Iterable<T> findAll() { + return session.loadAll(getEntityType(), DEPTH_LIST); + } + + @Override + public T find(Long id) { + return session.load(getEntityType(), id, DEPTH_ENTITY); + } + + @Override + public void delete(Long id) { + session.delete(session.load(getEntityType(), id)); + } + + @Override + public Collection<T> search(List<SearchOperator> searchOperatorList) { + AtomicReference<Filter> filter = null; + searchOperatorList.forEach(value -> { + if (filter.get() == null) { + filter.set(new Filter(value.getValue(), value.getComparisonOperator(), value.getValue())); + } else { + filter.get().and(new Filter(value.getValue(), value.getComparisonOperator(), value.getValue())); + } + + }); + return session.loadAll(getEntityType(), filter.get()); + } + + @Override + public Iterable<T> sort(SortOrder.Direction sortOrder, String property) { + return session.loadAll(getEntityType(),new SortOrder().add(sortOrder,property)); + } + + @Override + public Iterable<T> sortAndPaging(SortOrder.Direction sortOrder, int pageNumber, + int itemsPerPage, String property) { + return session.loadAll(getEntityType(), + new SortOrder().add(sortOrder,property), new Pagination(pageNumber,itemsPerPage)); + } + + @Override + public T createOrUpdate(T entity) { + session.save(entity, DEPTH_ENTITY); + return find(((Entity) entity).getId()); + } + + abstract Class<T> getEntityType(); +} diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/curd/operators/GroupService.java b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/curd/operators/GroupService.java new file mode 100644 index 0000000..dc83a02 --- /dev/null +++ b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/curd/operators/GroupService.java @@ -0,0 +1,4 @@ +package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.curd.operators; + +public interface GroupService { +} diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/curd/operators/ResourceService.java b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/curd/operators/ResourceService.java new file mode 100644 index 0000000..5cf5a03 --- /dev/null +++ b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/curd/operators/ResourceService.java @@ -0,0 +1,4 @@ +package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.curd.operators; + +public interface ResourceService { +} diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/curd/operators/SearchOperator.java b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/curd/operators/SearchOperator.java new file mode 100644 index 0000000..1717d1a --- /dev/null +++ b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/curd/operators/SearchOperator.java @@ -0,0 +1,33 @@ +package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.curd.operators; + +import org.neo4j.ogm.cypher.ComparisonOperator; + +public class SearchOperator { + private String key; + private String value; + private ComparisonOperator comparisonOperator; + + public String getKey() { + return key; + } + + public void setKey(String key) { + this.key = key; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + + public ComparisonOperator getComparisonOperator() { + return comparisonOperator; + } + + public void setComparisonOperator(ComparisonOperator comparisonOperator) { + this.comparisonOperator = comparisonOperator; + } +} diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/curd/operators/Service.java b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/curd/operators/Service.java new file mode 100644 index 0000000..ee73d18 --- /dev/null +++ b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/curd/operators/Service.java @@ -0,0 +1,24 @@ +package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.curd.operators; + +import org.neo4j.ogm.cypher.query.SortOrder; + +import java.util.Collection; +import java.util.List; + +public interface Service<T> { + + Iterable<T> findAll(); + + T find(Long id); + + void delete(Long id); + + Collection<T> search(List<SearchOperator> searchOperatorList); + + Iterable<T> sort(SortOrder.Direction sortOrder, String property); + + Iterable<T> sortAndPaging(SortOrder.Direction direction, int pageNumber, int itemsPerPage, String property); + + T createOrUpdate(T Object); + +} diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/curd/operators/UserService.java b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/curd/operators/UserService.java new file mode 100644 index 0000000..7669a05 --- /dev/null +++ b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/curd/operators/UserService.java @@ -0,0 +1,4 @@ +package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.curd.operators; + +public interface UserService { +} diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/nodes/Entity.java b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/nodes/Entity.java new file mode 100644 index 0000000..158f94a --- /dev/null +++ b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/nodes/Entity.java @@ -0,0 +1,109 @@ +package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.nodes; + +import org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.relationships.Has; +import org.neo4j.ogm.annotation.*; + +import java.util.HashMap; +import java.util.Map; + +public abstract class Entity { + @Id + @GeneratedValue + private Long id; + + @Properties(prefix = "external_id") + private Map<String,String > externalIds = new HashMap<>(); + + @Property(name = "created_at") + private long createdAt = System.currentTimeMillis(); + + @Property(name = "last_modified_at") + private long lastModifiedAt = System.currentTimeMillis(); + + @Property(name = "source") + private String source; + + @Properties(prefix = "custom") + private Map<String, String> properties = new HashMap<>(); + + @Property(name = "primary_external_key") + private String primaryExternalKey; + + @Relationship(type = "HAS", direction = Relationship.INCOMING) + private Has tenantInPointer; + + @Property(name = "tenant_id") + private String tenantId; + + public Long getId() { + return id; + } + + public long getCreatedAt() { + return createdAt; + } + + public void setCreatedAt(long createdAt) { + this.createdAt = createdAt; + } + + public long getLastModifiedAt() { + return lastModifiedAt; + } + + public void setLastModifiedAt(long lastModifiedAt) { + this.lastModifiedAt = lastModifiedAt; + } + + public Map<String, String> getProperties() { + return properties; + } + + public void setProperties(Map<String, String> properties) { + this.properties = properties; + } + + public Map<String, String> getExternalIds() { + return externalIds; + } + + public void setExternalIds(Map<String, String> externalIds) { + this.externalIds = externalIds; + } + + public String getSource() { + return source; + } + + public void setSource(String source) { + this.source = source; + } + + public String getPrimaryExternalKey() { + return primaryExternalKey; + } + + public void setPrimaryExternalKey(String primaryExternalKey) { + this.primaryExternalKey = primaryExternalKey; + } + + public Has getTenantInPointer() { + return tenantInPointer; + } + + public void setTenantInPointer(Has tenantInPointer) { + this.tenantInPointer = tenantInPointer; + } + + public String getTenantId() { + return tenantId; + } + + public void setTenantId(String tenantId) { + this.tenantId = tenantId; + } + + public void setId(Long id) { + this.id = id; + } +} diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/nodes/Group.java b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/nodes/Group.java new file mode 100644 index 0000000..3d26d98 --- /dev/null +++ b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/nodes/Group.java @@ -0,0 +1,208 @@ +package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.nodes; + +import org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.relationships.*; +import org.neo4j.ogm.annotation.NodeEntity; +import org.neo4j.ogm.annotation.Property; +import org.neo4j.ogm.annotation.Relationship; + +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + +@NodeEntity +public class Group extends Entity { + + @Property(name = "name") + private String name; + + @Property(name = "description") + private String description; + + + @Relationship(type = "HAS_CHILD_GROUP") + private Set<HasChildGroup> childGroups = new HashSet<>(); + + @Relationship(type = "HAS_CHILD_GROUP", direction = Relationship.INCOMING) + private HasChildGroup ChildGroupInPointers; + + @Relationship(type = "HAS_CHILD_USER") + private Set<HasChildUser> childUsers = new HashSet<>(); + + @Relationship(type = "HAS_PARENT_GROUP", direction = Relationship.INCOMING) + private Set<HasParentGroup> parentGroupInPointers = new HashSet<>(); + + @Relationship(type = "HAS_PARENT_GROUP") + private HasParentGroup parent; + + @Relationship(type = "MEMBER_OF", direction = Relationship.INCOMING) + private Set<MemberOf> memberUsersInPointers = new HashSet<>(); + + @Relationship(type = "SHARED_WITH", direction = Relationship.INCOMING) + private Set<SharedWith> sharedResourcesInPointers = new HashSet<>(); + + @Relationship(type = "HAS_ACCESS") + private Set<HasAccess> accessibleResources = new HashSet<>(); + + + public Group() { + + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + + public Set<HasChildGroup> getChildGroups() { + return childGroups; + } + + public void addChildGroup(HasChildGroup childGroup) { + this.childGroups.add(childGroup); + } + + public Set<HasChildUser> getChildUsers() { + return childUsers; + } + + public void addChildUser(HasChildUser childUser) { + this.childUsers.add(childUser); + } + + + public Set<MemberOf> getMemberUsersInPointers() { + return memberUsersInPointers; + } + + private void addMemberUserInPointer(MemberOf memberUser) { + this.memberUsersInPointers.add(memberUser); + } + + public Set<SharedWith> getSharedResourcesInPointers() { + return sharedResourcesInPointers; + } + + public void addSharedResourcesInPointers(SharedWith sharedResourcesInPointer) { + this.sharedResourcesInPointers.add(sharedResourcesInPointer); + } + + public Set<HasAccess> getAccessibleResources() { + return accessibleResources; + } + + public void addAccessibleResources(HasAccess accessibleResources) { + this.accessibleResources.add(accessibleResources); + } + + public void setChildGroups(Set<HasChildGroup> childGroups) { + this.childGroups = childGroups; + } + + public HasChildGroup getChildGroupInPointers() { + return ChildGroupInPointers; + } + + public void setChildGroupInPointers(HasChildGroup childGroupInPointers) { + this.ChildGroupInPointers = childGroupInPointers; + } + + public void setChildUsers(Set<HasChildUser> childUsers) { + this.childUsers = childUsers; + } + + public Set<HasParentGroup> getParentGroupInPointers() { + return parentGroupInPointers; + } + + private void addParentGroupInPointer(HasParentGroup parentGroup) { + this.parentGroupInPointers.add(parentGroup); + } + + public HasParentGroup getParent() { + return parent; + } + + public void setParent(HasParentGroup parent) { + this.parent = parent; + } + + public void setMemberUsersInPointers(Set<MemberOf> memberUsersInPointers) { + this.memberUsersInPointers = memberUsersInPointers; + } + + public void addChildUser(User user, String membership, long relationshipCreatedAt, + long relationshipModifiedAt, Map<String, String> relationshipProperties) { + MemberOf memberOf = new MemberOf(); + memberOf.setMembershipType(membership); + memberOf.setStartEntity(user); + memberOf.setEndEntity(this); + user.addMemberGroup(memberOf); + this.addMemberUserInPointer(memberOf); + + HasChildUser childUser = new HasChildUser(); + childUser.setUserType(membership); + childUser.setStartEntity(this); + childUser.setEndEntity(user); + user.addGroup(childUser); + this.addChildUser(childUser); + + if (relationshipCreatedAt != 0) { + memberOf.setCreatedAt(relationshipCreatedAt); + childUser.setCreatedAt(relationshipCreatedAt); + } + if (relationshipModifiedAt != 0) { + memberOf.setLastModifiedAt(relationshipModifiedAt); + childUser.setLastModifiedAt(relationshipModifiedAt); + } + if (relationshipProperties != null) { + memberOf.setProperties(relationshipProperties); + childUser.setProperties(relationshipProperties); + } + + } + + + public void addChildGroup(Group group, long relationShipCreatedAt, + long relationShipModifiedAt, Map<String, String> relationshipProperties) { + + HasChildGroup hasChildGroup = new HasChildGroup(); + hasChildGroup.setStartEntity(this); + hasChildGroup.setEndEntity(group); + this.addChildGroup(hasChildGroup); + group.setChildGroupInPointers(hasChildGroup); + + HasParentGroup hasParentGroup = new HasParentGroup(); + hasParentGroup.setStartEntity(group); + hasParentGroup.setEndEntity(this); + group.setParent(hasParentGroup); + this.addParentGroupInPointer(hasParentGroup); + + if (relationShipCreatedAt != 0) { + hasParentGroup.setCreatedAt(relationShipCreatedAt); + hasChildGroup.setCreatedAt(relationShipCreatedAt); + } + if (relationShipModifiedAt != 0) { + hasParentGroup.setLastModifiedAt(relationShipModifiedAt); + hasChildGroup.setLastModifiedAt(relationShipModifiedAt); + } + if (relationshipProperties != null) { + hasParentGroup.setProperties(relationshipProperties); + hasChildGroup.setProperties(relationshipProperties); + } + + } + + +} diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/nodes/Resource.java b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/nodes/Resource.java new file mode 100644 index 0000000..5df5e77 --- /dev/null +++ b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/nodes/Resource.java @@ -0,0 +1,215 @@ +package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.nodes; + +import org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.relationships.*; +import org.neo4j.ogm.annotation.*; +import org.neo4j.ogm.annotation.Relationship; + +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + +@NodeEntity +public class Resource extends Entity { + + @Id + @GeneratedValue + private Long id; + + @Property(name = "name") + private String name; + + @Relationship(type = "HAS", direction = Relationship.INCOMING) + private Has tenantPointer; + + @Relationship(type = "HAS_CHILD_RESOURCE") + private Set<HasChildResource> childResourceSet = new HashSet<>(); + + @Relationship(type = "HAS_CHILD_RESOURCE", direction = Relationship.INCOMING) + private HasChildResource parentInPointer; + + @Relationship(type = "HAS_PARENT_RESOURCE", direction = Relationship.INCOMING) + private Set<HasParentResource> childInPointers = new HashSet<>(); + + @Relationship(type = "HAS_PARENT_RESOURCE") + private HasParentResource parent; + + @Relationship(type = "SHARED_WITH") + private Set<SharedWith> shares = new HashSet<>(); + + @Relationship(type = "HAS_ACCESS", direction = Relationship.INCOMING) + private Set<HasAccess> accesses = new HashSet<>(); + + public Resource() { + } + + + public Has getTenantPointer() { + return tenantPointer; + } + + public void setTenantPointer(Has tenantPointer) { + this.tenantPointer = tenantPointer; + } + + public Set<HasChildResource> getChildResourceSet() { + return childResourceSet; + } + + public void addChildResource(HasChildResource childResource) { + this.childResourceSet.add(childResource); + } + + public Set<HasParentResource> getChildInPointers() { + return childInPointers; + } + + public void addChildInPointers(HasParentResource childInPointers) { + this.childInPointers.add(childInPointers); + } + + public HasParentResource getParent() { + return parent; + } + + public void setParent(HasParentResource parent) { + this.parent = parent; + } + + public HasChildResource getParentInPointer() { + return parentInPointer; + } + + public void setParentInPointer(HasChildResource parentInPointer) { + this.parentInPointer = parentInPointer; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Set<SharedWith> getShares() { + return shares; + } + + public void addShares(SharedWith share) { + this.shares.add(share); + } + + public Set<HasAccess> getAccesses() { + return accesses; + } + + public void addAccess(HasAccess access) { + this.accesses.add(access); + } + + @Override + public Long getId() { + return id; + } + + @Override + public void setId(Long id) { + this.id = id; + } + + public void addChildResource(Resource resource, long createdAt, long lastModifiedAt, + Map<String, String> properties) { + HasChildResource hasChildResource = new HasChildResource(); + hasChildResource.setStartEntity(this); + hasChildResource.setEndEntity(resource); + this.addChildResource(hasChildResource); + resource.setParentInPointer(hasChildResource); + + HasParentResource hasParentResource = new HasParentResource(); + hasParentResource.setStartEntity(resource); + hasParentResource.setEndEntity(this); + resource.setParent(hasParentResource); + this.addChildInPointers(hasParentResource); + + if (createdAt != 0) { + hasParentResource.setCreatedAt(createdAt); + hasChildResource.setCreatedAt(createdAt); + } + if (lastModifiedAt != 0) { + hasParentResource.setLastModifiedAt(lastModifiedAt); + hasChildResource.setLastModifiedAt(lastModifiedAt); + } + if (properties != null) { + hasParentResource.setProperties(properties); + hasChildResource.setProperties(properties); + } + + } + + public void shareWithAUser(User user, String permission, long createdAt, long lastModifiedAt, + Map<String, String> properties) { + + SharedWith sharedWith = new SharedWith(); + sharedWith.setStartEntity(this); + sharedWith.setEndEntity(user); + sharedWith.setPermissionType(permission); + this.addShares(sharedWith); + user.addSharedResource(sharedWith); + + HasAccess hasAccess = new HasAccess(); + hasAccess.setStartEntity(user); + hasAccess.setEndEntity(this); + hasAccess.setPermissionType(permission); + this.addAccess(hasAccess); + user.addAccessibleResources(hasAccess); + + if (createdAt != 0) { + sharedWith.setCreatedAt(createdAt); + hasAccess.setCreatedAt(createdAt); + } + if (lastModifiedAt != 0) { + sharedWith.setLastModifiedAt(lastModifiedAt); + hasAccess.setLastModifiedAt(lastModifiedAt); + } + if (properties != null) { + sharedWith.setProperties(properties); + hasAccess.setProperties(properties); + } + + } + + public void shareWithAGroup(Group group, String permission, long relationshipCreatedAt, long relationshipLastModifiedAt, + Map<String, String> relationshipProperties) { + + SharedWith sharedWith = new SharedWith(); + sharedWith.setStartEntity(this); + sharedWith.setEndEntity(group); + sharedWith.setPermissionType(permission); + this.addShares(sharedWith); + group.addSharedResourcesInPointers(sharedWith); + + HasAccess hasAccess = new HasAccess(); + hasAccess.setStartEntity(group); + hasAccess.setEndEntity(this); + hasAccess.setPermissionType(permission); + this.addAccess(hasAccess); + group.addAccessibleResources(hasAccess); + + if (relationshipCreatedAt != 0) { + sharedWith.setCreatedAt(relationshipCreatedAt); + hasAccess.setCreatedAt(relationshipCreatedAt); + } + if (relationshipLastModifiedAt != 0) { + sharedWith.setLastModifiedAt(relationshipLastModifiedAt); + hasAccess.setLastModifiedAt(relationshipLastModifiedAt); + } + if (relationshipProperties != null) { + sharedWith.setProperties(relationshipProperties); + hasAccess.setProperties(relationshipProperties); + } + + + } + + +} diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/nodes/Role.java b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/nodes/Role.java new file mode 100644 index 0000000..e70579a --- /dev/null +++ b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/nodes/Role.java @@ -0,0 +1,37 @@ +package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.nodes; + +import org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.relationships.HasRole; +import org.neo4j.ogm.annotation.NodeEntity; +import org.neo4j.ogm.annotation.Property; +import org.neo4j.ogm.annotation.Relationship; + +@NodeEntity +public class Role extends Entity { + + @Property(name = "scope") + private String scope; + + + @Relationship(type = "HAS_ROLE", direction = Relationship.INCOMING) + private HasRole hasRole; + + public Role() { + } + + public String getScope() { + return scope; + } + + public void setScope(String scope) { + this.scope = scope; + } + + + public HasRole getHasRole() { + return hasRole; + } + + public void setHasRole(HasRole hasRole) { + this.hasRole = hasRole; + } +} diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/nodes/ServiceAccount.java b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/nodes/ServiceAccount.java new file mode 100644 index 0000000..2802c5c --- /dev/null +++ b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/nodes/ServiceAccount.java @@ -0,0 +1,29 @@ +package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.nodes; + +import org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.relationships.Has; +import org.neo4j.ogm.annotation.NodeEntity; +import org.neo4j.ogm.annotation.Property; +import org.neo4j.ogm.annotation.Relationship; + +@NodeEntity +public class ServiceAccount extends Entity { + + @Property(name = "status") + private String status; + + + @Relationship(type = "HAS", direction = Relationship.INCOMING) + private Has hasRole; + + public ServiceAccount() { + + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } +} diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/nodes/Tenant.java b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/nodes/Tenant.java new file mode 100644 index 0000000..c8f619b --- /dev/null +++ b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/nodes/Tenant.java @@ -0,0 +1,125 @@ +package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.nodes; + +import org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.relationships.Has; +import org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.relationships.HasRole; +import org.neo4j.ogm.annotation.NodeEntity; +import org.neo4j.ogm.annotation.Property; +import org.neo4j.ogm.annotation.Relationship; + +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +@NodeEntity +public class Tenant extends Entity { + @Property(name = "tenant_id") + private String tenantId; + @Property(name = "domain") + private String domain; + @Property(name = "name") + private String name; + @Property(name = "requester_email") + private String requesterEmail; + @Property(name = "scope") + private String scope; + @Property(name = "redirect_uris") + private List<String> redirectURIs; + + @Relationship(type = "HAS_ROLE") + private Set<HasRole> roles = new HashSet<>(); + + @Relationship(type = "HAS") + private Set<Has> entities = new HashSet<>(); + + + public Tenant() { + } + + public String getTenantId() { + return tenantId; + } + + public void setTenantId(String tenantId) { + this.tenantId = tenantId; + } + + public String getDomain() { + return domain; + } + + public void setDomain(String domain) { + this.domain = domain; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getRequesterEmail() { + return requesterEmail; + } + + public void setRequesterEmail(String requesterEmail) { + this.requesterEmail = requesterEmail; + } + + public String getScope() { + return scope; + } + + public void setScope(String scope) { + this.scope = scope; + } + + public List<String> getRedirectURIs() { + return redirectURIs; + } + + public void setRedirectURIs(List<String> redirectURIs) { + this.redirectURIs = redirectURIs; + } + + public Set<HasRole> getRoles() { + return roles; + } + + public void setRoles(Set<HasRole> roles) { + this.roles = roles; + } + + + public Set<Has> getEntities() { + return entities; + } + + public void addEntities(Has entity) { + this.entities.add(entity); + } + + public void add(Entity entity, long relationShipCreatedAt, long relationShipModifiedAt, + Map<String, String> relationshipProperties) { + + Has has = new Has(); + has.setStartEntity(this); + has.setEndEntity(entity); + entity.setTenantInPointer(has); + this.addEntities(has); + + if (relationShipCreatedAt != 0) { + has.setCreatedAt(relationShipCreatedAt); + } + if (relationShipModifiedAt != 0) { + has.setLastModifiedAt(relationShipModifiedAt); + } + if (relationshipProperties != null) { + has.setProperties(relationshipProperties); + } + + + } +} diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/nodes/User.java b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/nodes/User.java new file mode 100644 index 0000000..07b1979 --- /dev/null +++ b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/nodes/User.java @@ -0,0 +1,132 @@ +package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.nodes; + +import org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.relationships.*; +import org.neo4j.ogm.annotation.NodeEntity; +import org.neo4j.ogm.annotation.Property; +import org.neo4j.ogm.annotation.Relationship; + +import java.util.HashSet; +import java.util.Set; + +@NodeEntity +public class User extends Entity { + @Property(name = "name") + private String userName; + @Property(name = "first_name") + private String firstName; + @Property(name = "last_name") + private String lastName; + @Property(name = "email") + private String email; + @Property(name = "status") + private String status; + + @Relationship(type = "BELONGS") + private Belongs belongs; + + @Relationship(type = "HAS", direction = Relationship.INCOMING) + private Has hasRole; + + @Relationship(type = "MEMBER_OF") + private Set<MemberOf> memberGroups = new HashSet<>(); + + @Relationship(type = "HAS_CHILD_USER", direction = Relationship.INCOMING) + private Set<HasChildUser> groups = new HashSet<>(); + + @Relationship(type = "SHARED_WITH", direction = Relationship.INCOMING) + private Set<SharedWith> sharedResources = new HashSet<>(); + + @Relationship(type = "HAS_ACCESS") + private Set<HasAccess> accessibleResources = new HashSet<>(); + + public User() { + } + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getFirstName() { + return firstName; + } + + public void setFirstName(String firstName) { + this.firstName = firstName; + } + + public String getLastName() { + return lastName; + } + + public void setLastName(String lastName) { + this.lastName = lastName; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public Belongs getBelongs() { + return belongs; + } + + public void setBelongs(Belongs belongs) { + this.belongs = belongs; + } + + public Has getHasRole() { + return hasRole; + } + + public void setHasRole(Has hasRole) { + this.hasRole = hasRole; + } + + public Set<MemberOf> getMemberGroups() { + return memberGroups; + } + + public void addMemberGroup(MemberOf memberGroup) { + this.memberGroups.add(memberGroup); + } + + public Set<HasChildUser> getGroups() { + return groups; + } + + public void addGroup(HasChildUser hasChildUser) { + this.groups.add(hasChildUser); + } + + public Set<SharedWith> getSharedResources() { + return sharedResources; + } + + public void addSharedResource(SharedWith sharedResource) { + this.sharedResources.add(sharedResource); + } + + public Set<HasAccess> getAccessibleResources() { + return accessibleResources; + } + + public void addAccessibleResources(HasAccess accessibleResources) { + this.accessibleResources.add(accessibleResources); + } +} diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/Belongs.java b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/Belongs.java new file mode 100644 index 0000000..0f0e8ce --- /dev/null +++ b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/Belongs.java @@ -0,0 +1,9 @@ +package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.relationships; + +import org.neo4j.ogm.annotation.RelationshipEntity; + +@RelationshipEntity(type = "BELONGS") +public class Belongs extends Relationship { + + +} diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/ConfiguredWith.java b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/ConfiguredWith.java new file mode 100644 index 0000000..22cbfcf --- /dev/null +++ b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/ConfiguredWith.java @@ -0,0 +1,7 @@ +package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.relationships; + +import org.neo4j.ogm.annotation.RelationshipEntity; + +@RelationshipEntity(type = "CONFIGURED_WITH") +public class ConfiguredWith extends Relationship { +} diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/Has.java b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/Has.java new file mode 100644 index 0000000..c315762 --- /dev/null +++ b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/Has.java @@ -0,0 +1,9 @@ +package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.relationships; + +import org.neo4j.ogm.annotation.RelationshipEntity; + +@RelationshipEntity(type = "HAS") +public class Has extends Relationship { + + +} diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/HasAccess.java b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/HasAccess.java new file mode 100644 index 0000000..b76369b --- /dev/null +++ b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/HasAccess.java @@ -0,0 +1,23 @@ +package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.relationships; + +import org.neo4j.ogm.annotation.Property; +import org.neo4j.ogm.annotation.RelationshipEntity; + +@RelationshipEntity(type = "HAS_ACCESS") +public class HasAccess extends Relationship { + + public HasAccess() { + } + + @Property(name = "permission_type") + private String permissionType; + + public String getPermissionType() { + return permissionType; + } + + public void setPermissionType(String permissionType) { + this.permissionType = permissionType; + } + +} diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/HasChildGroup.java b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/HasChildGroup.java new file mode 100644 index 0000000..a97bfb8 --- /dev/null +++ b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/HasChildGroup.java @@ -0,0 +1,9 @@ +package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.relationships; + +import org.neo4j.ogm.annotation.RelationshipEntity; + +@RelationshipEntity(type = "HAS_CHILD_GROUP") +public class HasChildGroup extends Relationship { + + +} diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/HasChildResource.java b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/HasChildResource.java new file mode 100644 index 0000000..2a29c8d --- /dev/null +++ b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/HasChildResource.java @@ -0,0 +1,8 @@ +package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.relationships; + +import org.neo4j.ogm.annotation.RelationshipEntity; + +@RelationshipEntity(type = "HAS_CHILD_RESOURCE") +public class HasChildResource extends Relationship { + +} diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/HasChildUser.java b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/HasChildUser.java new file mode 100644 index 0000000..bc04572 --- /dev/null +++ b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/HasChildUser.java @@ -0,0 +1,19 @@ +package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.relationships; + +import org.neo4j.ogm.annotation.Property; +import org.neo4j.ogm.annotation.RelationshipEntity; + +@RelationshipEntity(type = "HAS_CHILD_USER") +public class HasChildUser extends Relationship { + + @Property(name = "user_type") + private String userType; + + public String getUserType() { + return userType; + } + + public void setUserType(String userType) { + this.userType = userType; + } +} diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/HasParentGroup.java b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/HasParentGroup.java new file mode 100644 index 0000000..fe07ddb --- /dev/null +++ b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/HasParentGroup.java @@ -0,0 +1,19 @@ +package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.relationships; + +import org.neo4j.ogm.annotation.Property; +import org.neo4j.ogm.annotation.RelationshipEntity; + +@RelationshipEntity(type = "HAS_PARENT_GROUP") +public class HasParentGroup extends Relationship{ + + @Property(name = "membership_type") + private String membershipType; + + public String getMembershipType() { + return membershipType; + } + + public void setMembershipType(String membershipType) { + this.membershipType = membershipType; + } +} diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/HasParentResource.java b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/HasParentResource.java new file mode 100644 index 0000000..d8a0340 --- /dev/null +++ b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/HasParentResource.java @@ -0,0 +1,7 @@ +package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.relationships; + +import org.neo4j.ogm.annotation.RelationshipEntity; + +@RelationshipEntity(type = "HAS_PARENT_RESOURCE") +public class HasParentResource extends Relationship{ +} diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/HasRole.java b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/HasRole.java new file mode 100644 index 0000000..5b02f4e --- /dev/null +++ b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/HasRole.java @@ -0,0 +1,8 @@ +package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.relationships; + +import org.neo4j.ogm.annotation.RelationshipEntity; + +@RelationshipEntity(type = "HAS_ROLE") +public class HasRole extends Relationship{ + +} diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/MemberOf.java b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/MemberOf.java new file mode 100644 index 0000000..f381f33 --- /dev/null +++ b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/MemberOf.java @@ -0,0 +1,19 @@ +package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.relationships; + +import org.neo4j.ogm.annotation.Property; +import org.neo4j.ogm.annotation.RelationshipEntity; + +@RelationshipEntity(type = "MEMBER_OF") +public class MemberOf extends Relationship { + + @Property(name = "membership_type") + private String membershipType; + + public String getMembershipType() { + return membershipType; + } + + public void setMembershipType(String membershipType) { + this.membershipType = membershipType; + } +} diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/Relationship.java b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/Relationship.java new file mode 100644 index 0000000..f7ccdff --- /dev/null +++ b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/Relationship.java @@ -0,0 +1,81 @@ +package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.relationships; + +import org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.nodes.Entity; +import org.neo4j.ogm.annotation.*; + +import java.util.HashMap; +import java.util.Map; + +public abstract class Relationship { + @Id + @GeneratedValue + private Long id; + + + @Property(name = "created_at") + private long createdAt = System.currentTimeMillis(); + + @Property(name = "last_modified_at") + private long lastModifiedAt = System.currentTimeMillis(); + + + @StartNode + private Entity startEntity; + + @EndNode + private Entity endEntity; + + + @Properties(prefix = "custom") + private Map<String, String> properties = new HashMap<>(); + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public long getCreatedAt() { + return createdAt; + } + + public void setCreatedAt(long createdAt) { + this.createdAt = createdAt; + } + + public long getLastModifiedAt() { + return lastModifiedAt; + } + + public void setLastModifiedAt(long lastModifiedAt) { + this.lastModifiedAt = lastModifiedAt; + } + + + public Map<String, String> getProperties() { + return properties; + } + + public void setProperties(Map<String, String> properties) { + this.properties = properties; + } + + + public Entity getStartEntity() { + return startEntity; + } + + public void setStartEntity(Entity startEntity) { + this.startEntity = startEntity; + } + + public Entity getEndEntity() { + return endEntity; + } + + public void setEndEntity(Entity endEntity) { + this.endEntity = endEntity; + } +} diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/SharedWith.java b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/SharedWith.java new file mode 100644 index 0000000..b3434cb --- /dev/null +++ b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/backend/neo4j/model/relationships/SharedWith.java @@ -0,0 +1,25 @@ +package org.apache.airavata.datalake.metadata.db.service.backend.neo4j.model.relationships; + +import org.neo4j.ogm.annotation.Property; +import org.neo4j.ogm.annotation.RelationshipEntity; + +@RelationshipEntity(type = "SHARED_WITH") +public class SharedWith extends Relationship { + + + public SharedWith() { + + } + + @Property(name = "permission_type") + private String permissionType; + + public String getPermissionType() { + return permissionType; + } + + public void setPermissionType(String permissionType) { + this.permissionType = permissionType; + } + +} diff --git a/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/exceptions/DBConnectorException.java b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/exceptions/DBConnectorException.java new file mode 100644 index 0000000..c4860d8 --- /dev/null +++ b/metadata-service/db-service/src/main/java/org/apache/airavata/datalake/metadata/db/service/exceptions/DBConnectorException.java @@ -0,0 +1,10 @@ +package org.apache.airavata.datalake.metadata.db.service.exceptions; + +public class DBConnectorException extends RuntimeException{ + String msg; + + public DBConnectorException(String message, Throwable throwable) { + super(message,throwable); + this.msg = message; + } +} diff --git a/metadata-service/db-service/src/main/resources/application.properties b/metadata-service/db-service/src/main/resources/application.properties new file mode 100644 index 0000000..f0d53ae --- /dev/null +++ b/metadata-service/db-service/src/main/resources/application.properties @@ -0,0 +1,23 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# + +server.port=9090 +spring.neo4j.uri=bolt://neo4j:[email protected] +spring.neo4j.authentication.username=username +spring.neo4j.authentication.password=password diff --git a/metadata-service/db-service/src/main/resources/applicationContext.xml b/metadata-service/db-service/src/main/resources/applicationContext.xml new file mode 100644 index 0000000..adeadaf --- /dev/null +++ b/metadata-service/db-service/src/main/resources/applicationContext.xml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="UTF-8"?> +<beans xmlns="http://www.springframework.org/schema/beans" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" + xsi:schemaLocation="http://www.springframework.org/schema/beans + http://www.springframework.org/schema/beans/spring-beans.xsd + http://www.springframework.org/schema/context + http://www.springframework.org/schema/context/spring-context.xsd"> + + <bean id="dbConnector" class="org.apache.airavata.datalake.metadata.db.service.backend.neo4j.Neo4JConnector" + init-method="init" destroy-method="close"></bean> + +</beans> \ No newline at end of file diff --git a/metadata-service/metadata-service.iml b/metadata-service/metadata-service.iml new file mode 100644 index 0000000..5fa3710 --- /dev/null +++ b/metadata-service/metadata-service.iml @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="UTF-8"?> +<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4"> + <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_11"> + <output url="file://$MODULE_DIR$/target/classes" /> + <output-test url="file://$MODULE_DIR$/target/test-classes" /> + <content url="file://$MODULE_DIR$"> + <sourceFolder url="file://$MODULE_DIR$/target/maven-shared-archive-resources" isTestSource="true" /> + <sourceFolder url="file://$MODULE_DIR$/target/maven-shared-archive-resources" isTestSource="false" /> + <excludeFolder url="file://$MODULE_DIR$/target" /> + </content> + <orderEntry type="inheritedJdk" /> + <orderEntry type="sourceFolder" forTests="false" /> + </component> +</module> \ No newline at end of file diff --git a/metadata-service/pom.xml b/metadata-service/pom.xml new file mode 100644 index 0000000..7125b8a --- /dev/null +++ b/metadata-service/pom.xml @@ -0,0 +1,130 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <parent> + <artifactId>airavata-data-lake</artifactId> + <groupId>org.apache.airavata.data.lake</groupId> + <version>0.01-SNAPSHOT</version> + </parent> + <modelVersion>4.0.0</modelVersion> + + <artifactId>metadata-service</artifactId> + <packaging>pom</packaging> + <modules> + <module>db-service</module> + </modules> + + <properties> + <maven.compiler.source>11</maven.compiler.source> + <maven.compiler.target>11</maven.compiler.target> + </properties> + <dependencyManagement> + <dependencies> + <!-- neo4J servide dependencies--> +<!-- <dependency>--> +<!-- <groupId>org.springframework.boot</groupId>--> +<!-- <artifactId>spring-boot-starter-parent</artifactId>--> +<!-- <version>${spring.boot.version}</version>--> +<!-- <type>pom</type>--> +<!-- <scope>import</scope>--> +<!-- </dependency>--> +<!-- <dependency>--> +<!-- <groupId>org.springframework.cloud</groupId>--> +<!-- <artifactId>spring-cloud-dependencies</artifactId>--> +<!-- <version>${spring.cloud.version}</version>--> +<!-- <type>pom</type>--> +<!-- <scope>import</scope>--> +<!-- </dependency>--> +<!-- <dependency>--> +<!-- <groupId>io.github.lognet</groupId>--> +<!-- <artifactId>grpc-spring-boot-starter</artifactId>--> +<!-- <version>${grpc.spring.boot.version}</version>--> +<!-- <exclusions>--> +<!-- <exclusion>--> +<!-- <groupId>io.grpc</groupId>--> +<!-- <artifactId>grpc-netty</artifactId>--> +<!-- </exclusion>--> +<!-- <exclusion>--> +<!-- <groupId>org.springframework.boot</groupId>--> +<!-- <artifactId>spring-boot-starter</artifactId>--> +<!-- </exclusion>--> +<!-- </exclusions>--> +<!-- </dependency>--> +<!-- <dependency>--> +<!-- <groupId>io.grpc</groupId>--> +<!-- <artifactId>grpc-stub</artifactId>--> +<!-- <version>${io.grpc.version}</version>--> +<!-- </dependency>--> +<!-- <dependency>--> +<!-- <groupId>io.grpc</groupId>--> +<!-- <artifactId>grpc-protobuf</artifactId>--> +<!-- <version>${io.grpc.version}</version>--> +<!-- </dependency>--> +<!-- <dependency>--> +<!-- <groupId>io.grpc</groupId>--> +<!-- <artifactId>grpc-netty</artifactId>--> +<!-- <version>${io.grpc.version}</version>--> +<!-- </dependency>--> +<!-- <dependency>--> +<!-- <groupId>javax.annotation</groupId>--> +<!-- <artifactId>javax.annotation-api</artifactId>--> +<!-- <version>${javax.annotation.version}</version>--> +<!-- </dependency>--> +<!-- <dependency>--> +<!-- <groupId>org.springframework.cloud</groupId>--> +<!-- <artifactId>spring-cloud-starter-sleuth</artifactId>--> +<!-- <version>${spring.cloud.slueth.version}</version>--> +<!-- </dependency>--> +<!-- <dependency>--> +<!-- <groupId>org.springframework.cloud</groupId>--> +<!-- <artifactId>spring-cloud-sleuth-zipkin</artifactId>--> +<!-- <version>${spring.cloud.slueth.version}</version>--> +<!-- </dependency>--> +<!-- <dependency>--> +<!-- <groupId>org.springframework.cloud</groupId>--> +<!-- <artifactId>spring-cloud-starter-vault-config</artifactId>--> +<!-- <version>${spring.boot.version}</version>--> +<!-- </dependency>--> + <!-- <dependency>--> + <!-- <groupId>org.springframework.data</groupId>--> + <!-- <artifactId>spring-data-neo4j</artifactId>--> + <!-- <version>${spring.data.neo4j.version}</version>--> + <!-- </dependency>--> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-web</artifactId> + <version>2.4.2</version> + </dependency> +<!-- <dependency>--> +<!-- <groupId>org.springframework.data</groupId>--> +<!-- <artifactId>spring-data-neo4j</artifactId>--> +<!-- <version>5.2.0</version>--> +<!-- </dependency>--> +<!-- <!– https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-neo4j –>--> +<!-- <dependency>--> +<!-- <groupId>org.springframework.boot</groupId>--> +<!-- <artifactId>spring-boot-starter-data-neo4j</artifactId>--> +<!-- <version>2.4.2</version>--> +<!-- </dependency>--> + <dependency> + <groupId>org.neo4j</groupId> + <artifactId>neo4j-ogm-core</artifactId> + <version>3.2.20</version> + </dependency> + <dependency> + <groupId>org.neo4j</groupId> + <artifactId>neo4j-ogm-bolt-driver</artifactId> + <version>3.2.20</version> + </dependency> +<!-- <dependency>--> +<!-- <groupId>org.springframework.data</groupId>--> +<!-- <artifactId>spring-data-commons</artifactId>--> +<!-- <version>2.4.2</version>--> +<!-- </dependency>--> + + </dependencies> + </dependencyManagement> + + +</project> \ No newline at end of file diff --git a/pom.xml b/pom.xml index 48bcf01..c0bb353 100644 --- a/pom.xml +++ b/pom.xml @@ -20,7 +20,8 @@ under the License. --> -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> @@ -29,6 +30,7 @@ </prerequisites> <modules> <module>data-orchestrator</module> + <module>metadata-service</module> </modules> <parent> @@ -65,4 +67,77 @@ </plugins> </build> + + <properties> + <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> + <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> + <org.slf4j.version>1.7.25</org.slf4j.version> + <log4j.version>1.2.17</log4j.version> + <thrift.version>0.12.0</thrift.version> + <openjpa.version>2.4.3</openjpa.version> + <mysql.connector.version>5.1.34</mysql.connector.version> + <maven.assembly.plugin>3.3.0</maven.assembly.plugin> + <junit.version>4.8.1</junit.version> + <jmockit.version>1.8</jmockit.version> + <java.version>11</java.version> + <javax.annotation.version>1.3.2</javax.annotation.version> + <maven.compiler.plugin>3.8.1</maven.compiler.plugin> + + <protobuf.maven.plugin>0.5.1</protobuf.maven.plugin> + <os.maven.plugin>1.5.0.Final</os.maven.plugin> + + <!-- Spring dependencies --> + <spring.boot.version>2.4.2</spring.boot.version> + <spring.cloud.version>Greenwich.RELEASE</spring.cloud.version> + <grpc.spring.boot.version>2.4.4</grpc.spring.boot.version> + + <spring.cloud.stream.version>2.0.0.RELEASE</spring.cloud.stream.version> + <spring.cloud.slueth.version>2.1.6.RELEASE</spring.cloud.slueth.version> + <spring.data.neo4j.version>6.0.3</spring.data.neo4j.version> + + <io.grpc.version>1.25.0</io.grpc.version> + <google.common.protos>1.17.0</google.common.protos> + <io.micrometer.version>1.3.1</io.micrometer.version> + <brave.version>5.9.1</brave.version> + + <docker.image.prefix>apachecustos</docker.image.prefix> + <docker.image.repo>custos</docker.image.repo> + <docker.plugin.version>1.4.13</docker.plugin.version> + + <helm.maven.plugin.version>2.8.0</helm.maven.plugin.version> + <maven.assembly.plugin.version>3.2.0</maven.assembly.plugin.version> + + <mysql.connector.java>8.0.18</mysql.connector.java> + <javax.persistance>1.0.2</javax.persistance> + + <keycloak.admin.version>7.0.0</keycloak.admin.version> + + <reasteasy.client.version>3.0.14.Final</reasteasy.client.version> + + <com.google.protobuf.util>3.11.3</com.google.protobuf.util> + + <springfox.swagger.version>2.9.2</springfox.swagger.version> + <org.wso2.charon>3.3.16</org.wso2.charon> + <jaxb.version>2.1</jaxb.version> + + <kube.java.client.version>5.0.0</kube.java.client.version> + + <testng.version>6.8</testng.version> + <org.json.version>20190722</org.json.version> + + <apache.rat.plugin.version>0.13</apache.rat.plugin.version> + + <maven.surefile.plugin.version>3.0.0-M4</maven.surefile.plugin.version> + + <log.back.version>1.2.3</log.back.version> + + <com.jcraft.version>0.1.55</com.jcraft.version> + + <io.commons.version>2.7</io.commons.version> + + <com.codahale.version>0.7.0</com.codahale.version> + + + </properties> + </project>
