Compare commits

...

1618 Commits

Author SHA1 Message Date
Efstratios Giannopoulos 62db01e4cf update pom 2024-05-03 18:33:26 +03:00
Efstratios Giannopoulos b734606141 add no tracking 2024-05-03 18:33:03 +03:00
Efstratios Giannopoulos 86aff14a64 refactor namespaces 2024-05-03 16:41:08 +03:00
Efstratios Giannopoulos 5a181fe786 Merge branch 'dmp-refactoring' of code-repo.d4science.org:MaDgiK-CITE/argos into dmp-refactoring 2024-05-03 15:19:01 +03:00
Efstratios Giannopoulos c02d108331 ui fix 2024-05-03 15:18:34 +03:00
Thomas Georgios Giannos e5a6dee348 Added docs for descryption templates, improved docs structure on some cases 2024-05-03 15:13:53 +03:00
Efstratios Giannopoulos 08d29aac5b fix elastic recent search 2024-05-03 15:00:44 +03:00
Efstratios Giannopoulos 7158fdb6c3 update common model 2024-05-03 11:50:06 +03:00
Efstratios Giannopoulos b7bd6dc449 Remove description template numbering 2024-05-02 18:13:35 +03:00
Efstratios Giannopoulos 8efd17a4a1 Remove description template numbering 2024-05-02 18:10:41 +03:00
Efstratios Giannopoulos 6928b436ee remove section default visibility 2024-05-02 17:52:10 +03:00
Efstratios Giannopoulos 8426d49157 bug fixes 2024-05-02 17:37:17 +03:00
Efstratios Giannopoulos a3fba92999 remove multi value support from rules and default values 2024-05-02 17:13:59 +03:00
Efstratios Giannopoulos 528fbcd758 remove unused rules 2024-05-02 16:29:50 +03:00
Efstratios Giannopoulos c7c7255e19 no message 2024-05-02 16:04:32 +03:00
Efstratios Giannopoulos dd9461bc7a default value implementation 2024-05-02 15:57:19 +03:00
Efstratios Giannopoulos 6eb01fbd1c revert tenant filter disable 2024-05-02 12:38:36 +03:00
Efstratios Giannopoulos 2d2750c44c add boolean value to description 2024-05-02 10:46:36 +03:00
Efstratios Giannopoulos 5f796edc62 table of contents visibility fix 2024-05-02 10:43:34 +03:00
amentis dcf2f89b22 remove default checked description for dmp clone, new version dialogs 2024-05-01 18:10:49 +03:00
Sofia Papacharalampous 53dc4c179f Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-05-01 17:23:09 +03:00
Sofia Papacharalampous 0d0e23d240 fixed description template type editor on finalized status 2024-05-01 17:22:57 +03:00
amentis ac3e1cfcfe blueprint ui changes 2024-05-01 17:22:01 +03:00
Sofia Papacharalampous 3af2642583 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-05-01 16:57:37 +03:00
Sofia Papacharalampous 5f36ebe3ca fixed validation issue on rich text editor 2024-05-01 16:57:21 +03:00
amentis e470cf5807 rename description template field type label to placeholder 2024-05-01 16:44:54 +03:00
amentis 95c075cd24 update references types with first() logic and prefilling sources changes 2024-05-01 16:31:40 +03:00
Efstratios Giannopoulos adf37777d9 language fixes 2024-05-01 15:45:47 +03:00
Sofia Papacharalampous 803e63dd41 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-05-01 15:00:37 +03:00
Sofia Papacharalampous f8592ef945 styling changes 2024-05-01 15:00:22 +03:00
Efstratios Giannopoulos 1888711fe9 tenant fixes 2024-05-01 14:57:49 +03:00
Sofia Papacharalampous d955f999ff notification dialog styling changes 2024-05-01 14:48:26 +03:00
Sofia Papacharalampous f6ea1e2b04 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-05-01 14:28:28 +03:00
Sofia Papacharalampous 2dc1f2b12c styling changes on description template editor numbering 2024-05-01 14:28:15 +03:00
amentis 3c72b741c5 remove descriptionTemplateNewVersion users required validator and default user logic 2024-05-01 13:53:22 +03:00
Efstratios Giannopoulos a591c66875 code styles 2024-05-01 13:47:23 +03:00
Efstratios Giannopoulos 1474eda8b9 external fetcher fixes add first logic 2024-05-01 13:46:57 +03:00
Efstratios Giannopoulos 81156955dc migration fix 2024-05-01 13:45:57 +03:00
Efstratios Giannopoulos fc9a4134e7 fix table view 2024-05-01 13:45:27 +03:00
Sofia Papacharalampous 5c4292d735 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-05-01 11:52:37 +03:00
Sofia Papacharalampous 17a431d97c fixed dmp blueprint editor on new version 2024-05-01 11:52:05 +03:00
amentis a50a1e8bc1 remove EXTERNAL_DATASETS enum field type value from UI 2024-05-01 11:32:55 +03:00
Efstratios Giannopoulos ac9a377eb4 update reference types 2024-04-30 18:08:06 +03:00
Efstratios Giannopoulos a3c92bb087 table view fixes 2024-04-30 17:53:00 +03:00
Sofia Papacharalampous e5af155b31 fixed single autocomplete panel behavior 2024-04-30 17:43:10 +03:00
Sofia Papacharalampous 49d8df1894 disable dmp blueprint form after finalized new version 2024-04-30 17:22:49 +03:00
amentis 115892875e ui can create new version if dmp version status is current 2024-04-30 16:06:06 +03:00
amentis 96894f4ca4 ui can create new version if dmp version status is current 2024-04-30 15:59:26 +03:00
amentis 67ed7db89d small fix 2024-04-30 15:24:33 +03:00
Sofia Papacharalampous 95e78705df Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-04-30 15:19:24 +03:00
Sofia Papacharalampous 97449226fe fixed dmp blueprint saving 2024-04-30 15:19:09 +03:00
amentis ea752d9cec prefilling sources update sql script 2024-04-30 15:12:53 +03:00
amentis e41c7f8abc prefill tags changes 2024-04-30 15:04:55 +03:00
Efstratios Giannopoulos 500503ad37 dmp authz changes 2024-04-30 14:55:53 +03:00
Sofia Papacharalampous 1a3aa18d35 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-04-30 14:26:19 +03:00
Sofia Papacharalampous efeea398da fixed toc drag and drop on description template type editor 2024-04-30 14:25:54 +03:00
Efstratios Giannopoulos da8efe5130 description authz changes 2024-04-30 14:06:24 +03:00
Sofia Papacharalampous 965af355d8 styling changes 2024-04-30 13:17:37 +03:00
Sofia Papacharalampous 555261dadf Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-04-30 13:06:45 +03:00
Sofia Papacharalampous 27291e24be styling changes 2024-04-30 13:06:21 +03:00
amentis a8500ebf69 description template save with close small fix 2024-04-30 13:03:23 +03:00
Sofia Papacharalampous f2cf61938d added finalize function for description template type 2024-04-30 13:00:53 +03:00
Efstratios Giannopoulos 7ed9a59595 Merge branch 'dmp-refactoring' of code-repo.d4science.org:MaDgiK-CITE/argos into dmp-refactoring 2024-04-30 12:54:39 +03:00
Efstratios Giannopoulos a8c1736e83 elastic fixes 2024-04-30 12:54:26 +03:00
amentis f0f4319721 insert manually reference changes 2024-04-30 12:39:01 +03:00
Sofia Papacharalampous 683552707f hide annotations for new descriptions and description template previews 2024-04-30 11:52:50 +03:00
Sofia Papacharalampous bb206125a6 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-04-30 11:06:45 +03:00
Sofia Papacharalampous 4fe02698b1 styling fixes 2024-04-30 11:06:31 +03:00
Efstratios Giannopoulos 33196e28cd fix description storage file 2024-04-30 11:01:39 +03:00
Efstratios Giannopoulos 787aa31d53 change queue interval 2024-04-30 10:21:57 +03:00
Sofia Papacharalampous d1492e0a93 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-04-29 18:32:34 +03:00
Sofia Papacharalampous 7022de0bc8 fixed multiple autocomplete panel behavior 2024-04-29 18:31:50 +03:00
Alexandros Mandilaras 3f69ab0fc0 finalize elasticsearch deployment. Update app configurations 2024-04-29 17:55:53 +03:00
Efstratios Giannopoulos e8f40b852a Merge branch 'dmp-refactoring' of code-repo.d4science.org:MaDgiK-CITE/argos into dmp-refactoring 2024-04-29 17:43:00 +03:00
Efstratios Giannopoulos 418188546a export xml changes 2024-04-29 17:42:44 +03:00
amentis 7056678bbb description small fiexes 2024-04-29 17:25:59 +03:00
Efstratios Giannopoulos 85b2258e19 Description export 2024-04-29 17:08:24 +03:00
Sofia Papacharalampous 30d338bbbd used label as the title on dmp and description editor 2024-04-29 16:40:11 +03:00
Sofia Papacharalampous 8a16098fc1 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-04-29 15:18:59 +03:00
Sofia Papacharalampous 204d593363 styling fixes on reference component 2024-04-29 15:18:11 +03:00
Efstratios Giannopoulos 21457bd9b0 Merge branch 'dmp-refactoring' of code-repo.d4science.org:MaDgiK-CITE/argos into dmp-refactoring 2024-04-29 14:56:48 +03:00
Efstratios Giannopoulos e8be226a0b dmp export 2024-04-29 14:56:32 +03:00
amentis e871068443 new version small fix 2024-04-29 14:35:11 +03:00
Thomas Georgios Giannos ebbc92b908 Adding docs for field types and semantics, site name fix 2024-04-29 14:30:56 +03:00
Sofia Papacharalampous a0e5c3931f description editor styling change 2024-04-29 14:26:37 +03:00
Sofia Papacharalampous aa5235e950 clean up description editor progress bar 2024-04-29 14:24:12 +03:00
Sofia Papacharalampous b9f1805bb2 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-04-29 13:42:08 +03:00
Sofia Papacharalampous 88ba79c406 clean up description editor progress bar 2024-04-29 13:41:01 +03:00
amentis bac8fa197e checkbox fix visible state 2024-04-29 13:39:50 +03:00
Sofia Papacharalampous 2180bebc7f Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-04-29 13:26:54 +03:00
Sofia Papacharalampous 7e3cebd299 added description editor progress bar 2024-04-29 13:26:41 +03:00
amentis c396e6a305 Merge remote-tracking branch 'origin/dmp-refactoring' into dmp-refactoring 2024-04-29 11:48:58 +03:00
amentis 80e6ffb07a licences fix filter type 2024-04-29 11:48:02 +03:00
Sofia Papacharalampous e9e06fa51f description editor change > do not validate form on save 2024-04-29 11:46:16 +03:00
Sofia Papacharalampous 9bcc486c1c dmp progrss bar styling changes 2024-04-29 11:45:33 +03:00
Sofia Papacharalampous 0c54b11923 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-04-26 18:38:07 +03:00
Efstratios Giannopoulos f89074b695 Merge branch 'dmp-refactoring' of code-repo.d4science.org:MaDgiK-CITE/argos into dmp-refactoring 2024-04-26 18:25:27 +03:00
Efstratios Giannopoulos 0aae469583 remove Annotation Tenant Configuration 2024-04-26 18:25:09 +03:00
Sofia Papacharalampous 57cbc1d8e4 revert changes on "description editor > added option to skip form-refresh on save" 2024-04-26 18:21:55 +03:00
amentis 7bda4a6b22 clone add new to label 2024-04-26 18:11:46 +03:00
Efstratios Giannopoulos e073fc718c Merge branch 'dmp-refactoring' of code-repo.d4science.org:MaDgiK-CITE/argos into dmp-refactoring 2024-04-26 18:10:31 +03:00
Efstratios Giannopoulos b267f2f30c UserNotificationPreference changes 2024-04-26 18:10:10 +03:00
amentis 429d4a35ea add sActive description tags filter and fix dmp clone 2024-04-26 18:03:34 +03:00
Sofia Papacharalampous c91a2408a3 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-04-26 17:18:01 +03:00
Sofia Papacharalampous 1cdd77e73a progress bar styling changes 2024-04-26 17:17:50 +03:00
Efstratios Giannopoulos b58dd531ff rename to OpenCDMP 2024-04-26 17:12:29 +03:00
Efstratios Giannopoulos 00ca67d5fc rename to OpenCDMP 2024-04-26 16:35:32 +03:00
Sofia Papacharalampous 627ea6f5c0 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-04-26 16:06:18 +03:00
Sofia Papacharalampous 2f75ec8757 description editor > added option to skip form-refresh on save.3 2024-04-26 16:05:40 +03:00
Sofia Papacharalampous 9a8ddfa7ea fixed bug on toc error indicator, on nested sections 2024-04-26 16:05:05 +03:00
Sofia Papacharalampous 6e73dd66df description editor > added option to skip form-refresh on save.2 2024-04-26 16:04:28 +03:00
Sofia Papacharalampous e7bc0406d6 description editor > added option to skip form-refresh on save 2024-04-26 16:03:49 +03:00
amentis 73ed35ca33 show user role to home page and description save and close fix 2024-04-26 15:55:18 +03:00
Efstratios Giannopoulos 96f160476a rename to OpenCDMP 2024-04-26 14:33:42 +03:00
Efstratios Giannopoulos 3bdace15bb backend rename to OpenCDMP 2024-04-26 13:50:56 +03:00
Alexandros Mandilaras b18f8ccf9a remove certificates & user and https configurations. Fix keycloak import realm names and urls 2024-04-26 13:42:55 +03:00
Efstratios Giannopoulos 8722e15750 Merge branch 'dmp-refactoring' of code-repo.d4science.org:MaDgiK-CITE/argos into dmp-refactoring 2024-04-26 12:19:57 +03:00
Efstratios Giannopoulos 8d20ff57e9 tenant configuration changes 2024-04-26 12:19:24 +03:00
amentis d30613b061 reference type routing fix 2024-04-26 12:14:46 +03:00
Thomas Georgios Giannos db80cb1c34 Fixes and preparing for field types and prefilling docs 2024-04-26 11:04:17 +03:00
Diamantis Tziotzios de03e4776b single autocomplete fix 2024-04-26 10:17:57 +03:00
Alexandros Mandilaras 9c2f8ecf4e Merge remote-tracking branch 'origin/dmp-refactoring' into dmp-refactoring 2024-04-25 18:01:15 +03:00
Alexandros Mandilaras f1c1503b1c Finalize deployment for keycloak, rabbitmq, and gotenberg 2024-04-25 17:59:42 +03:00
Efstratios Giannopoulos 7ea32faa94 TenantDefaultLocale queue event 2024-04-25 17:59:36 +03:00
Sofia Papacharalampous 52799fdd7d Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-04-25 17:15:48 +03:00
Sofia Papacharalampous 945aa9ee30 fix autocomplete selection from laptop touchpad 2024-04-25 17:15:30 +03:00
amentis 514621c252 update currency sql script 2024-04-25 16:52:29 +03:00
amentis ea3b1a762d query static reference 2024-04-25 15:00:32 +03:00
Thomas Georgios Giannos a1c95f35fd Added root docs for blueprints, added sections on existing pages for navigation info 2024-04-25 14:57:51 +03:00
Efstratios Giannopoulos bc073574c1 Merge branch 'dmp-refactoring' of code-repo.d4science.org:MaDgiK-CITE/argos into dmp-refactoring 2024-04-25 14:53:23 +03:00
Efstratios Giannopoulos 4ae62076f8 tenant configuration changes 2024-04-25 14:53:07 +03:00
Alexandros Mandilaras 9fd28bbbf1 Finish Postgres initialization and deployment 2024-04-25 14:38:36 +03:00
amentis 21de37e980 fix buildPersist for description validate 2024-04-25 14:23:09 +03:00
Sofia Papacharalampous 5ff5825f00 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-04-25 14:08:11 +03:00
Sofia Papacharalampous 279ae95b5a description editor ui fixes 2024-04-25 14:07:58 +03:00
Efstratios Giannopoulos 7bcf66900d migration changes 2024-04-25 13:13:44 +03:00
Efstratios Giannopoulos 10a8e93803 update common models 2024-04-25 12:21:02 +03:00
Sofia Papacharalampous 2c98acb185 show generic backend error status 400 on save of dmp-description 2024-04-25 12:02:13 +03:00
Alexandros Mandilaras f2a1ce4f0f init microservice deployment commit 2024-04-25 11:48:25 +03:00
Efstratios Giannopoulos ed9a4ab2c8 Merge branch 'dmp-refactoring' of code-repo.d4science.org:MaDgiK-CITE/argos into dmp-refactoring 2024-04-25 11:35:27 +03:00
Efstratios Giannopoulos 33d9bab4bf migration fixes 2024-04-25 11:35:08 +03:00
amentis 99ae216cf3 change description validator with visibility service 2024-04-25 10:48:13 +03:00
Sofia Papacharalampous e9fa56f5c9 description-editor > description-template >bug fix on 2024-04-25 10:41:40 +03:00
Efstratios Giannopoulos c27e98acd8 Merge branch 'dmp-refactoring' of code-repo.d4science.org:MaDgiK-CITE/argos into dmp-refactoring
# Conflicts:
#	dmp-backend/core/src/main/java/eu/eudat/model/persist/descriptionproperties/PropertyDefinitionFieldSetPersist.java
2024-04-25 10:27:06 +03:00
Efstratios Giannopoulos c243da1b9e migration fixes 2024-04-24 18:28:13 +03:00
Efstratios Giannopoulos ae7366c3ff scrip changes 2024-04-24 18:23:44 +03:00
Diamantis Tziotzios 23d656c401 more brand changes 2024-04-24 17:35:47 +03:00
Diamantis Tziotzios 259e38fa71 script name fixes 2024-04-24 17:23:47 +03:00
amentis a6f0996fa1 update insert sql script 2024-04-24 17:20:06 +03:00
Diamantis Tziotzios 4b321778fa brand change 2024-04-24 17:12:09 +03:00
Sofia Papacharalampous 8ee64a502b Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-04-24 16:58:53 +03:00
Sofia Papacharalampous eee9d65ee8 fix bug on dmp editor > on description delete 2024-04-24 16:58:39 +03:00
amentis 76743539da description copy fix 2024-04-24 16:33:58 +03:00
Sofia Papacharalampous 64698bbe21 sidebar active route fix 2024-04-24 15:54:49 +03:00
amentis dadd536539 description upload fix issue 2024-04-24 15:09:45 +03:00
Sofia Papacharalampous f8e6cb6462 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-04-24 15:07:18 +03:00
Sofia Papacharalampous a4c75c291d dmp-editor ui fixes 2024-04-24 15:07:02 +03:00
amentis 5a618168dd description validation small fixes 2024-04-24 14:28:12 +03:00
Efstratios Giannopoulos e5e1f23811 add Description template hasMultiplicity 2024-04-24 14:07:51 +03:00
Efstratios Giannopoulos cd8545590e sql script updates 2024-04-24 14:06:10 +03:00
amentis 6eca4c4628 description validation add if field is rule target 2024-04-24 13:58:07 +03:00
Sofia Papacharalampous 0f2e974556 minor ui changes 2024-04-24 13:20:32 +03:00
Sofia Papacharalampous 7d9a8b3aa1 fix on table-of-content validation - on table-of-content-internal initialization 2024-04-24 12:14:21 +03:00
Sofia Papacharalampous 7f352004ed Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-04-24 12:05:02 +03:00
Sofia Papacharalampous 649e08a755 fix on table-of-content validation - trigger on finalization 2024-04-24 12:04:46 +03:00
Thomas Georgios Giannos de3a352e39 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-04-24 12:04:27 +03:00
Thomas Georgios Giannos e7112ccfab Added docs for reference types 2024-04-24 12:03:56 +03:00
amentis 9a7b209290 Merge remote-tracking branch 'origin/dmp-refactoring' into dmp-refactoring 2024-04-24 12:02:56 +03:00
amentis a6118f44e3 fix dmp, description, home title tabs 2024-04-24 12:02:01 +03:00
Sofia Papacharalampous 434a207ac3 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-04-24 12:01:46 +03:00
Sofia Papacharalampous 18365de1d4 fix on table-of-content validation trigger 2024-04-24 12:01:29 +03:00
Sofia Papacharalampous 850eed05d0 minor ui fixes 2024-04-24 12:00:13 +03:00
Diamantis Tziotzios a7c49ca4af canRemoveItem logic added to multiple auto complete and Teamplates control @ DmpEditor 2024-04-24 11:35:23 +03:00
amentis efe6a9616f Merge remote-tracking branch 'origin/dmp-refactoring' into dmp-refactoring 2024-04-24 11:19:47 +03:00
amentis b78de951ce remove check box required condition 2024-04-24 11:19:25 +03:00
Sofia Papacharalampous 2dfa34db40 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-04-24 11:07:03 +03:00
Sofia Papacharalampous ad49a4b86e minor ui changes 2024-04-24 11:06:46 +03:00
Diamantis Tziotzios 6a221671fc minor fixes 2024-04-24 11:03:24 +03:00
amentis a3350b2f2c fix description checkBox bug and add hash conflict to callback errors 2024-04-23 18:52:41 +03:00
Efstratios Giannopoulos f5b0af516a tenant configuration changes 2024-04-23 18:09:31 +03:00
amentis e7a500e3ec description validation changes 2024-04-23 17:59:42 +03:00
Alexandros Mandilaras c57d5793f2 uncomment certificate commands 2024-04-23 16:41:37 +03:00
Alexandros Mandilaras bdc50c41da revert to using sonar-scanner plugin 2024-04-23 16:31:31 +03:00
Alexandros Mandilaras 1dd578fe4d add sonar-scanner command to package json 2024-04-23 15:41:41 +03:00
Sofia Papacharalampous 8e139eb0c2 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-04-23 15:20:36 +03:00
Sofia Papacharalampous 4935ec14f5 description editor > table-of-content base-info > error indication bug fix 2024-04-23 15:18:44 +03:00
Alexandros Mandilaras d320f3e94b no message 2024-04-23 15:13:18 +03:00
Sofia Papacharalampous 3c94f1eae0 apply name varibles on en.json 2024-04-23 15:01:09 +03:00
Alexandros Mandilaras 56d3152478 dont look for package-lock when scanning 2024-04-23 14:55:07 +03:00
Alexandros Mandilaras 1563641515 no message 2024-04-23 14:53:18 +03:00
amentis 5bfe76f5c6 add description save validation error dialog 2024-04-23 14:51:52 +03:00
Alexandros Mandilaras 7cb559bf31 apply the same to the other api dockerfiles too 2024-04-23 14:40:37 +03:00
Alexandros Mandilaras 019aa3055b add all env variables to sonar scanner command 2024-04-23 14:37:12 +03:00
Sofia Papacharalampous da7397e811 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-04-23 14:27:20 +03:00
Sofia Papacharalampous 30d552265b description editor > table-of-content > error indication bug fix 2024-04-23 14:26:13 +03:00
Alexandros Mandilaras a1263c57a1 one more path fix 2024-04-23 14:20:17 +03:00
Alexandros Mandilaras 88d211e6f9 fix copy paths 2024-04-23 14:16:20 +03:00
Efstratios Giannopoulos 5b59bfe195 Merge branch 'dmp-refactoring' of code-repo.d4science.org:MaDgiK-CITE/argos into dmp-refactoring 2024-04-23 14:10:45 +03:00
Efstratios Giannopoulos dcbcc951b6 fix ui ordinal 2024-04-23 14:10:08 +03:00
Alexandros Mandilaras b1cea088f7 split Sonar dockerfile into one for each service for pipeline optimization 2024-04-23 14:02:06 +03:00
Efstratios Giannopoulos 0d2db89f1c tenant configuration changes 2024-04-23 13:20:17 +03:00
Efstratios Giannopoulos 61ccefa9f7 tenant configuration changes 2024-04-23 11:57:16 +03:00
Thomas Georgios Giannos 480814ae30 Docs for managing notification templates, supportive material and languages 2024-04-23 11:49:02 +03:00
Alexandros Mandilaras 1bcdd24f13 update annotation build profile && update Dockerfile.Sonar with frontend 2024-04-23 11:38:57 +03:00
Alexandros Mandilaras e038a6fdf0 annotation dockerfile fix 2024-04-23 11:19:41 +03:00
Alexandros Mandilaras f2af35a9aa add sonar dockerfile & update notification service build profile 2024-04-23 11:08:47 +03:00
amentis 1e2eb7545d add can remove description template logic in dmp editor 2024-04-23 10:09:35 +03:00
Efstratios Giannopoulos db90097c16 tenant configuration changes 2024-04-22 18:36:35 +03:00
Sofia Papacharalampous 73701b206c Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-04-22 17:28:57 +03:00
Sofia Papacharalampous d65eca136d ui changes (language editor) 2024-04-22 17:27:55 +03:00
amentis 8ef952ec80 upload access denied fix 2024-04-22 17:25:44 +03:00
Sofia Papacharalampous 9a1515f479 ui changes (prefilling-sources) 2024-04-22 17:24:39 +03:00
Sofia Papacharalampous 42a302f77f Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-04-22 16:55:47 +03:00
Sofia Papacharalampous 2c181bc460 added error indication on dmp editor 2024-04-22 16:55:20 +03:00
Efstratios Giannopoulos ddbf83479d tenant configuration changes 2024-04-22 16:47:40 +03:00
amentis e6309a8885 description ui changes (add next button) 2024-04-22 16:02:51 +03:00
Sofia Papacharalampous 218fab4fd1 description editor > added error indicator for base infos 2024-04-22 14:11:02 +03:00
Sofia Papacharalampous fbbefdb59e Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-04-22 13:50:28 +03:00
Sofia Papacharalampous b772a97d00 description editor ui changes 2024-04-22 13:50:15 +03:00
amentis 88054462c6 small fix 2024-04-22 13:39:10 +03:00
Sofia Papacharalampous 3f1d5205ac Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-04-22 13:37:25 +03:00
Sofia Papacharalampous 1f7bcc52ea description error indicator bug fix on nested sections 2024-04-22 13:37:10 +03:00
Efstratios Giannopoulos 4b38b990fc tenant configuration changes 2024-04-22 12:13:23 +03:00
amentis 1b78203d27 dmp, description autocomplete config changes 2024-04-22 11:51:45 +03:00
Efstratios Giannopoulos e90e49b4f1 tenant configuration changes 2024-04-22 11:42:07 +03:00
Diamantis Tziotzios 378f3c957b mat-autocomplete change 2024-04-22 10:32:24 +03:00
Efstratios Giannopoulos ada4dcfe99 Merge branch 'dmp-refactoring' of code-repo.d4science.org:MaDgiK-CITE/argos into dmp-refactoring 2024-04-22 10:00:31 +03:00
Efstratios Giannopoulos c523bda52b fix tenant scope 2024-04-22 10:00:04 +03:00
Thomas Georgios Giannos cb3ff760e5 Adding documentation on users and tenants 2024-04-22 09:44:48 +03:00
Sofia Papacharalampous 65660b9537 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-04-19 18:52:02 +03:00
Sofia Papacharalampous 8ae7f61bf4 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring
# Conflicts:
#	dmp-frontend/src/app/ui/description/editor/description-editor.component.ts
#	dmp-frontend/src/app/ui/description/editor/description-editor.model.ts
2024-04-19 18:41:55 +03:00
Efstratios Giannopoulos 2be94e39ff tenant configuration changes 2024-04-19 18:39:51 +03:00
Sofia Papacharalampous 79817e63e0 table of contents error indicator 2024-04-19 18:37:06 +03:00
amentis 0a26968462 fix languages 2024-04-19 17:32:48 +03:00
amentis 92a3b64286 Revert "fix languages"
This reverts commit 04e5292a0a.
2024-04-19 17:22:56 +03:00
amentis 04e5292a0a fix languages 2024-04-19 17:16:57 +03:00
Efstratios Giannopoulos 4d0b71db20 Merge branch 'dmp-refactoring' of code-repo.d4science.org:MaDgiK-CITE/argos into dmp-refactoring 2024-04-19 15:34:25 +03:00
Efstratios Giannopoulos 26bdabe03b add tenant configuration 2024-04-19 15:34:07 +03:00
amentis 943e7bc23e change build dmp persist for validation with reference single option 2024-04-19 15:01:14 +03:00
amentis a1437fd314 small fixes 2024-04-19 13:50:11 +03:00
amentis 8e9fee55aa add ui dmp remove template validation 2024-04-19 12:29:21 +03:00
Efstratios Giannopoulos 0db2f12b1d remove unused code 2024-04-19 12:26:37 +03:00
Efstratios Giannopoulos 8f45c14a51 remove unused code 2024-04-19 12:10:19 +03:00
Efstratios Giannopoulos 5c06d1ee44 dmp blueprint reference add multiple 2024-04-19 11:46:23 +03:00
Efstratios Giannopoulos 57e0755da6 update script 2024-04-19 11:16:21 +03:00
Efstratios Giannopoulos eb38e1d948 dmp blueprint reference add multiple 2024-04-19 11:10:51 +03:00
Diamantis Tziotzios 7daafdae2e minor fix 2024-04-19 10:53:27 +03:00
Diamantis Tziotzios eb146b21c7 no message 2024-04-19 10:13:02 +03:00
amentis 6fe74c2218 prefill description pop up clean up 2024-04-19 10:00:57 +03:00
Efstratios Giannopoulos 804ba2d537 prefilling changes 2024-04-18 17:12:41 +03:00
Thomas Georgios Giannos d268d9b435 Adding docs full structure and all pages, keeping built-in docusaurus tutorials temporarily (on separate category) 2024-04-18 16:57:12 +03:00
Efstratios Giannopoulos 5e6b231a0f prefilling fixes 2024-04-18 14:15:03 +03:00
Diamantis Tziotzios 7cc067125a added docs project 2024-04-18 13:08:56 +03:00
Efstratios Giannopoulos b1a17faa40 fix prefiling without get 2024-04-18 12:34:46 +03:00
Efstratios Giannopoulos c762613509 Merge branch 'dmp-refactoring' of code-repo.d4science.org:MaDgiK-CITE/argos into dmp-refactoring 2024-04-18 12:20:20 +03:00
Efstratios Giannopoulos ef016f5419 dependency field fix 2024-04-18 12:20:05 +03:00
Thomas Georgios Giannos 4d363938fc Fixes on dmp template metrics queries 2024-04-18 11:45:25 +03:00
Efstratios Giannopoulos ed96403d25 update file formatters to use exportEntityTypes importEntityTypes 2024-04-18 10:08:46 +03:00
amentis 3ec12fdf59 description template has conflict bug fix 2024-04-17 18:29:22 +03:00
Efstratios Giannopoulos aaac7dfdf4 reference type editor bug fix 2024-04-17 17:41:15 +03:00
Efstratios Giannopoulos c28c700eff Merge branch 'dmp-refactoring' of code-repo.d4science.org:MaDgiK-CITE/argos into dmp-refactoring 2024-04-17 17:18:01 +03:00
Efstratios Giannopoulos 0eb78b5107 grant reference fix 2024-04-17 17:17:36 +03:00
amentis d6e447eb53 dmp discard fix 2024-04-17 17:13:36 +03:00
amentis 1961973971 prefill popup small fix 2024-04-17 15:40:49 +03:00
amentis b6ee298ba4 prefill popup small fix 2024-04-17 15:39:30 +03:00
Efstratios Giannopoulos 2f0056c62b config changes 2024-04-17 13:54:00 +03:00
amentis 3d8ba6ea7e description ui fix finalized issue and remove save and add button 2024-04-17 13:48:40 +03:00
amentis 95e3fd859b admin browse users temp fix 2024-04-17 13:40:47 +03:00
Efstratios Giannopoulos ec7e2a6ea3 fix researchers reference fetcher 2024-04-17 13:01:43 +03:00
Diamantis Tziotzios 0757713e63 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-04-17 11:44:36 +03:00
Diamantis Tziotzios 47dfc6162e minor ui fixes 2024-04-17 11:44:25 +03:00
Efstratios Giannopoulos cc1be4f194 fix reference authz 2024-04-17 11:27:25 +03:00
Efstratios Giannopoulos a158e78101 get value by patter for reference 2024-04-17 10:23:56 +03:00
amentis 56efe184c9 description discard button fix 2024-04-16 18:37:27 +03:00
Diamantis Tziotzios be1b6df610 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-04-16 18:21:13 +03:00
Diamantis Tziotzios 04da845f49 minor fixes 2024-04-16 18:20:43 +03:00
Sofia Papacharalampous 7305fe7afa Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-04-16 18:04:17 +03:00
Sofia Papacharalampous 1421dcf009 editor-screens spacing changes 2024-04-16 18:03:59 +03:00
Diamantis Tziotzios b7774759f6 minor fixes 2024-04-16 16:57:20 +03:00
Diamantis Tziotzios 0fa4c58363 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-04-16 16:21:51 +03:00
Diamantis Tziotzios b9b5e36e93 minor lang changes 2024-04-16 16:21:30 +03:00
Sofia Papacharalampous 6bb091868c notification template ui changes 2024-04-16 16:06:28 +03:00
Efstratios Giannopoulos 0598067608 tenant scope fix 2024-04-16 15:35:44 +03:00
Sofia Papacharalampous 0672a60494 ui fix 2024-04-16 15:32:08 +03:00
Sofia Papacharalampous 1642a4f4f2 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-04-16 15:26:35 +03:00
Sofia Papacharalampous af52c4aa8d ui and guided tour fixes 2024-04-16 15:25:10 +03:00
Efstratios Giannopoulos 36bb96f9d6 Merge branch 'dmp-refactoring' of code-repo.d4science.org:MaDgiK-CITE/argos into dmp-refactoring 2024-04-16 14:22:06 +03:00
Efstratios Giannopoulos 3c9844abb6 fix script 2024-04-16 14:21:52 +03:00
Efstratios Giannopoulos 235512efc0 keycloak changes 2024-04-16 14:21:37 +03:00
Diamantis Tziotzios 40f847c96f updated oidc-authn to 2.2.2 2024-04-16 14:15:07 +03:00
Sofia Papacharalampous 733dad05cd description-overview ui fix 2024-04-16 13:43:48 +03:00
Sofia Papacharalampous cf9a65ae53 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-04-16 13:29:50 +03:00
Sofia Papacharalampous c2d6e7b61b dmp-overview ui fix 2024-04-16 13:29:34 +03:00
Thomas Georgios Giannos 1b156ca78e Calculating doied datasets and used description templates query 2024-04-16 13:21:05 +03:00
Efstratios Giannopoulos 2e083df185 auto create keycloak tenant groups 2024-04-16 13:17:58 +03:00
Efstratios Giannopoulos 3e4316a627 fix tenant scope 2024-04-16 13:17:06 +03:00
Efstratios Giannopoulos d9a59b5570 fix script 2024-04-16 13:16:39 +03:00
Sofia Papacharalampous 7314bee9d2 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-04-16 12:27:48 +03:00
Sofia Papacharalampous 6b0aea671f tour dialog fixes 2024-04-16 12:27:27 +03:00
amentis ec2a93f8c6 show recent in app notifications fix 2024-04-16 12:17:40 +03:00
Sofia Papacharalampous 2f6dcb7300 ui fix on autocomple options 2024-04-16 11:45:56 +03:00
Sofia Papacharalampous dcbaf92128 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-04-16 11:37:23 +03:00
Sofia Papacharalampous 730011a83b ui fixes on autocomplete of add-description-dialog 2024-04-16 11:37:09 +03:00
Efstratios Giannopoulos 48352f0461 Merge branch 'dmp-refactoring' of code-repo.d4science.org:MaDgiK-CITE/argos into dmp-refactoring
# Conflicts:
#	dmp-frontend/src/app/core/common/enum/app-role.ts
#	dmp-frontend/src/app/core/services/utilities/enum-utils.service.ts
#	dmp-frontend/src/app/ui/admin/user/listing/role-editor/user-role-editor.component.html
#	dmp-frontend/src/app/ui/admin/user/listing/role-editor/user-role-editor.component.scss
#	dmp-frontend/src/assets/i18n/en.json
2024-04-16 11:12:49 +03:00
Efstratios Giannopoulos f3282c7fc6 user role page changes 2024-04-16 11:02:17 +03:00
Thomas Georgios Giannos 39ad49241e Metrics fix on calculating doied dmps query 2024-04-16 10:48:53 +03:00
amentis 3a0203e942 small fix 2024-04-16 10:30:58 +03:00
amentis 50881d059e notification service changes 2024-04-15 18:36:55 +03:00
Diamantis Tziotzios be9b8df468 added progress indication at DMP Editor. 2024-04-15 18:19:56 +03:00
Sofia Papacharalampous f05d629c14 minor ui changes 2024-04-15 17:50:16 +03:00
Sofia Papacharalampous 9ad0c59b9e ui fixes on dmp tour 2024-04-15 17:07:20 +03:00
Sofia Papacharalampous 1f90266057 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-04-15 15:48:47 +03:00
Sofia Papacharalampous 2905feca07 ui fixes on users listing > role editor 2024-04-15 15:48:21 +03:00
amentis fc5932f56a main app notify event changes 2024-04-15 15:11:35 +03:00
Sofia Papacharalampous e7d6615fbc ui fixes on dashboard (unauthorized) 2024-04-15 14:50:05 +03:00
Sofia Papacharalampous 44a75e5ffd ui fixes on dashboard (unauthorized) 2024-04-15 14:08:44 +03:00
Sofia Papacharalampous 8c89ffe50e minor ui fixes 2024-04-15 13:22:54 +03:00
Sofia Papacharalampous 3ad70e521a minor ui fixes 2024-04-15 13:07:18 +03:00
Sofia Papacharalampous 94151966ec Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-04-15 13:02:14 +03:00
Sofia Papacharalampous 5268051a0d ui fixes on listing screens > filters 2024-04-15 13:01:58 +03:00
Thomas Georgios Giannos 48e21f5cb9 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-04-15 12:26:25 +03:00
Thomas Georgios Giannos 249cc24be4 Metrics config cleanup and bug fix 2024-04-15 12:26:16 +03:00
amentis 8942784d49 notification enum utils fix 2024-04-15 12:22:23 +03:00
Thomas Georgios Giannos 0cf61944dc Small fix on metrics config 2024-04-15 12:00:48 +03:00
Sofia Papacharalampous e43327a86c minor ui change on notifcation dialog 2024-04-15 11:37:17 +03:00
Sofia Papacharalampous 19ed0bfabb minor ui change on tour dialog 2024-04-15 11:36:50 +03:00
Thomas Georgios Giannos 0b62822f64 Small fix on metrics 2024-04-15 11:29:00 +03:00
Thomas Georgios Giannos e2aab3e523 Small fixes on metrics 2024-04-15 11:26:18 +03:00
Diamantis Tziotzios af5a9c269e minor ui fixes 2024-04-15 10:47:30 +03:00
Sofia Papacharalampous 5118e696d0 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-04-12 18:30:34 +03:00
Sofia Papacharalampous e9596a8cc1 ui fixes on dmp-blueprints>filters 2024-04-12 18:30:11 +03:00
Diamantis Tziotzios c19fc7276b Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-04-12 18:16:43 +03:00
Diamantis Tziotzios a425902b24 email template cleanup 2024-04-12 18:16:32 +03:00
Efstratios Giannopoulos 5b56e24ffc Merge branch 'dmp-refactoring' of code-repo.d4science.org:MaDgiK-CITE/argos into dmp-refactoring 2024-04-12 18:16:21 +03:00
Efstratios Giannopoulos e072dc17a5 config clean up 2024-04-12 18:15:59 +03:00
Sofia Papacharalampous b570a6f0fa Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-04-12 18:11:01 +03:00
Sofia Papacharalampous 05a063a0a5 ui fixes on mine-inapp-notification>filters 2024-04-12 18:10:08 +03:00
Efstratios Giannopoulos 254a289e2a sidebar fix 2024-04-12 18:02:54 +03:00
Efstratios Giannopoulos fab39a3776 config changes 2024-04-12 17:44:13 +03:00
Sofia Papacharalampous 9c8d1aa1dc Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-04-12 17:37:50 +03:00
Sofia Papacharalampous 1d465955be moved notification services and components under the "src\notification-service" 2024-04-12 17:37:37 +03:00
Thomas Georgios Giannos c477eb5460 Adding back metrics for users, languages, installations, dmps with grants for prometheus 2024-04-12 16:51:44 +03:00
Efstratios Giannopoulos 5257e41109 update GlobalExceptionHandler 2024-04-12 14:06:57 +03:00
Thomas Georgios Giannos d5e43e12bf Adding back metrics for dmps, datasets, dataset templates and references for prometheus 2024-04-12 13:49:13 +03:00
Sofia Papacharalampous 1f2408d15d navbar ui fix 2024-04-12 12:08:20 +03:00
Sofia Papacharalampous ce07fb0894 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-04-12 11:47:06 +03:00
Sofia Papacharalampous 87ffbfb880 ui fixes on dmp and description listing 2024-04-12 11:46:53 +03:00
amentis 8fc4f939b9 full name upload file display 2024-04-12 11:11:16 +03:00
Sofia Papacharalampous 25d8503f26 navbar ui fix 2024-04-12 10:59:31 +03:00
Efstratios Giannopoulos f12ddd7090 typo fix 2024-04-11 18:22:33 +03:00
Efstratios Giannopoulos 94cc0b87cd bug fixes 2024-04-11 18:09:47 +03:00
Sofia Papacharalampous 928babb9d5 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-04-11 17:46:58 +03:00
Sofia Papacharalampous 4e791e78af ui fixes (description template editor) 2024-04-11 17:46:45 +03:00
amentis e0317e95b8 Merge remote-tracking branch 'origin/dmp-refactoring' into dmp-refactoring 2024-04-11 17:31:42 +03:00
amentis 15b4c7fbc6 description template upload changes, dmp description tag field type fix 2024-04-11 17:30:55 +03:00
Efstratios Giannopoulos f98742f577 metrics impl 2024-04-11 17:26:04 +03:00
Sofia Papacharalampous f75d9ba777 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-04-11 16:43:28 +03:00
Sofia Papacharalampous d772365b23 added user notification preferences 2024-04-11 16:43:10 +03:00
Diamantis Tziotzios 5f8121e687 cleanup 2024-04-11 16:29:39 +03:00
amentis c11966f658 description template preview select button fix 2024-04-11 14:20:06 +03:00
Efstratios Giannopoulos 39ea1b6c88 add authn only permissions to me 2024-04-11 12:36:00 +03:00
Efstratios Giannopoulos 0ceadf2ab1 bug fix 2024-04-11 11:25:34 +03:00
Efstratios Giannopoulos 1e568bb2dd no message 2024-04-11 11:14:26 +03:00
Alexandros Mandilaras 0e0e40afeb more path fixing 2024-04-11 10:22:46 +03:00
Alexandros Mandilaras 2bb5369a00 change request mapping to match proxy setup 2024-04-11 10:00:30 +03:00
Alexandros Mandilaras 1f43bac181 Revert "try changing path"
This reverts commit dea932ca95.
2024-04-10 22:33:14 +03:00
Alexandros Mandilaras dea932ca95 try changing path 2024-04-10 22:09:25 +03:00
Efstratios Giannopoulos 0fa6f4dc83 no message 2024-04-10 18:24:14 +03:00
Efstratios Giannopoulos f9c89e4f92 bug fix 2024-04-10 18:17:47 +03:00
amentis cf5333c788 add file storage to ui 2024-04-10 17:38:39 +03:00
Efstratios Giannopoulos 906cee7621 db script changes 2024-04-10 16:48:12 +03:00
Efstratios Giannopoulos 871c3bc166 notification remove tenant from contact and cred 2024-04-10 16:40:26 +03:00
Efstratios Giannopoulos a5160d3ecd code clean up 2024-04-10 15:16:15 +03:00
Efstratios Giannopoulos 5a6ab32768 maintenance changes 2024-04-10 15:10:16 +03:00
Efstratios Giannopoulos 1c5c699195 update common models 2024-04-10 13:36:21 +03:00
Efstratios Giannopoulos 53a04ba970 migration changes 2024-04-10 12:10:35 +03:00
amentis e3479eb313 blueprint disabled required button fix 2024-04-10 11:21:13 +03:00
Diamantis Tziotzios 8c24740382 minor ui fixes 2024-04-10 11:03:53 +03:00
Diamantis Tziotzios 6068878cd4 upload small fix 2024-04-10 10:47:05 +03:00
Diamantis Tziotzios abd4f0e5e2 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-04-10 10:04:23 +03:00
Diamantis Tziotzios 6b75bcb06c description editor fix 2024-04-10 10:01:27 +03:00
Sofia Papacharalampous 1d68d217bd code clean up 2024-04-10 09:35:25 +03:00
Diamantis Tziotzios 29e0d032ca dmp blueprint fixes 2024-04-09 18:35:53 +03:00
amentis 6b7a33c0b4 remove currency from description template field type enum 2024-04-09 18:28:07 +03:00
Efstratios Giannopoulos 6ecd52dd2f remove allowNullTenant 2024-04-09 18:19:10 +03:00
Efstratios Giannopoulos a84332001e migration currency changes 2024-04-09 18:14:16 +03:00
amentis c27ba6ee6a search static reference fix 2024-04-09 17:21:00 +03:00
amentis 9bd50f379f update sql insert script 2024-04-09 17:13:40 +03:00
amentis 43c958b2b1 update sql currency script 2024-04-09 16:44:22 +03:00
amentis cdae5b2bd3 no message 2024-04-09 16:30:05 +03:00
amentis 02c3ed7563 create list of static external fetcher items 2024-04-09 16:15:15 +03:00
Efstratios Giannopoulos 125b0aa408 persist external reference to type tenant 2024-04-09 14:48:04 +03:00
Efstratios Giannopoulos 74526f7927 bug fix 2024-04-09 13:46:15 +03:00
Sofia Papacharalampous 29836cf362 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-04-09 13:19:46 +03:00
Sofia Papacharalampous 5523ca2fe1 description template update 2024-04-09 13:19:32 +03:00
amentis 19cb076b03 more dmp validation changes 2024-04-09 11:48:20 +03:00
Diamantis Tziotzios ab010026a7 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-04-08 18:59:48 +03:00
Diamantis Tziotzios 02fc5b7bea description fixes 2024-04-08 18:59:42 +03:00
Efstratios Giannopoulos 0569e8bd6d updateDescriptionTemplate changes 2024-04-08 18:07:47 +03:00
Sofia Papacharalampous a556aef2cd stlyling fixes on dashboard > activity cards 2024-04-08 18:03:26 +03:00
amentis a6b1a371a1 add currency reference-type sql script 2024-04-08 16:30:21 +03:00
Diamantis Tziotzios 29d38630e1 update angular to v17. 2024-04-08 16:22:56 +03:00
Sofia Papacharalampous bf868d306a 1. dmp editor > new dmp > removed extra (*) from description field
2. dashboard styling changes
2024-04-08 15:10:12 +03:00
Sofia Papacharalampous d2816b9454 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-04-08 14:58:49 +03:00
Sofia Papacharalampous 658b5d948d dmp editor > initialize next step when dmp is not new 2024-04-08 14:58:08 +03:00
Diamantis Tziotzios ed55841164 build fix 2024-04-08 14:56:10 +03:00
Diamantis Tziotzios 060bfbed20 Dockerfile update 2024-04-08 14:22:14 +03:00
Diamantis Tziotzios d59676d6dc annotation fixes 2024-04-08 14:19:42 +03:00
Alexandros Mandilaras fad3448e3e dont copy package-lock 2024-04-08 14:09:18 +03:00
Alexandros Mandilaras 48e9ca17b1 remove legacy peer deps 2024-04-08 14:08:10 +03:00
Alexandros Mandilaras 6b57cdd20b use production configuration in frontend dockerfile 2024-04-08 14:03:29 +03:00
Alexandros Mandilaras 7a168c2024 legacy-peer-deps 2024-04-08 13:53:32 +03:00
amentis fe6bbca30b add validation dmp 2024-04-08 13:47:00 +03:00
Alexandros Mandilaras a71b85bb6b update frontend dockerfile 2024-04-08 13:38:28 +03:00
Diamantis Tziotzios a5099d8d5d Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring
# Conflicts:
#	dmp-backend/Dockerfile
#	dmp-backend/Dockerfile.CI
2024-04-08 13:34:36 +03:00
Diamantis Tziotzios 03067fe6f6 Dockerfile changes 2024-04-08 13:31:46 +03:00
Alexandros Mandilaras e1b09c9250 no message 2024-04-08 12:58:55 +03:00
Alexandros Mandilaras a11e2c300d dockerfile fixes 2024-04-08 12:43:07 +03:00
Alexandros Mandilaras c898227035 revert that also 2024-04-08 12:23:19 +03:00
Alexandros Mandilaras 40d9850727 try different groupID 2024-04-08 12:14:28 +03:00
Alexandros Mandilaras c63f8cf928 remove unused profile in annotation-service 2024-04-08 11:36:34 +03:00
Efstratios Giannopoulos 399e8e2f2a Merge branch 'dmp-refactoring' of code-repo.d4science.org:MaDgiK-CITE/argos into dmp-refactoring 2024-04-08 11:22:15 +03:00
Efstratios Giannopoulos abc60aa11e bug fix 2024-04-08 11:21:51 +03:00
Alexandros Mandilaras ffd521f4dc remove packaging type from core 2024-04-08 11:21:49 +03:00
Sofia Papacharalampous 325356a2ae config 2024-04-08 11:02:44 +03:00
Sofia Papacharalampous 8d2d936a73 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-04-08 11:00:55 +03:00
Sofia Papacharalampous 6013cb5225 dmp editor > select default blueprint 2024-04-08 10:59:26 +03:00
Alexandros Mandilaras bdfcb8cdf6 update Dockerfiles 2024-04-08 10:59:10 +03:00
Alexandros Mandilaras 79431f0865 revert devProfulURL change 2024-04-08 10:52:22 +03:00
amentis f2e6189fac Merge remote-tracking branch 'origin/dmp-refactoring' into dmp-refactoring 2024-04-08 10:48:36 +03:00
Alexandros Mandilaras 9ce9632c37 remove devProfileURL from dockerfile 2024-04-08 10:47:48 +03:00
amentis 51d941b0f7 Merge remote-tracking branch 'origin/dmp-refactoring' into dmp-refactoring 2024-04-08 10:46:41 +03:00
amentis e89bfdf0f4 remove description template section multiplicity property 2024-04-08 10:45:32 +03:00
Alexandros Mandilaras c1a241e4a8 try not use revision variable 2024-04-08 10:34:21 +03:00
Alexandros Mandilaras c0ac0bb728 correct path 2024-04-08 10:29:05 +03:00
Alexandros Mandilaras ef5125bb04 rm -devel configs 2024-04-08 10:21:56 +03:00
Alexandros Mandilaras 8833905325 Dockerfile updates 2024-04-08 10:09:19 +03:00
Alexandros Mandilaras 565e8a3b1e uncomment the groupID 2024-04-08 09:52:49 +03:00
Alexandros Mandilaras b676bafdab try more fixes 2024-04-08 09:50:16 +03:00
Alexandros Mandilaras 6ffc0a0a10 add groupID when building backend core 2024-04-08 09:39:17 +03:00
Alexandros Mandilaras 83855540d2 revert that change 2024-04-08 09:35:31 +03:00
Alexandros Mandilaras 3e8cb9b17e try possible fix for backend web build 2024-04-08 09:25:06 +03:00
Efstratios Giannopoulos a4252a6157 updateDescriptionTemplate backend 2024-04-05 18:33:23 +03:00
Efstratios Giannopoulos c8809ee457 updateDescriptionTemplate backend 2024-04-05 18:32:49 +03:00
Efstratios Giannopoulos 17b787c142 Merge branch 'dmp-refactoring' of code-repo.d4science.org:MaDgiK-CITE/argos into dmp-refactoring 2024-04-05 18:04:20 +03:00
Efstratios Giannopoulos 45e3426969 fix delete callback 2024-04-05 18:03:26 +03:00
Alexandros Mandilaras ad069b5568 remove duplicate properties 2024-04-05 17:55:19 +03:00
Alexandros Mandilaras 1f142c672f possible fixes for Docker build 2024-04-05 17:52:20 +03:00
Efstratios Giannopoulos 7ebe22a45f Merge branch 'dmp-refactoring' of code-repo.d4science.org:MaDgiK-CITE/argos into dmp-refactoring
# Conflicts:
#	dmp-frontend/src/app/ui/description/listing/description-listing.component.ts
#	dmp-frontend/src/app/ui/dmp/listing/dmp-listing.component.ts
2024-04-05 17:50:07 +03:00
Efstratios Giannopoulos 5176916ce7 add belongsToCurrentTenant to ui 2024-04-05 17:49:20 +03:00
amentis 4503bc0bcf description field fixes 2024-04-05 17:25:25 +03:00
Sofia Papacharalampous 405bf0c9b2 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-04-05 17:18:17 +03:00
Sofia Papacharalampous 9ba20bdd17 added finalized date on dmp and description listing screens 2024-04-05 17:17:33 +03:00
Alexandros Mandilaras 328ac3b1f6 Dockerfile changes 2024-04-05 16:57:00 +03:00
Efstratios Giannopoulos 4963d8ffc3 add belongsToCurrentTenant to ui 2024-04-05 15:20:03 +03:00
Efstratios Giannopoulos 6a89feb31b Merge branch 'dmp-refactoring' of code-repo.d4science.org:MaDgiK-CITE/argos into dmp-refactoring 2024-04-05 14:13:42 +03:00
Efstratios Giannopoulos 028b1e0c94 description template new version tenant validation 2024-04-05 14:13:30 +03:00
Efstratios Giannopoulos efb816c627 pom changes 2024-04-05 14:12:15 +03:00
Alexandros Mandilaras 2cc9d2bee0 revert 2024-04-05 14:11:15 +03:00
Alexandros Mandilaras 9f99f622ef try remove revision 2024-04-05 13:35:13 +03:00
Alexandros Mandilaras 42af117718 update Dockerfile 2024-04-05 13:32:07 +03:00
amentis b6138da7ab multiplicity on description template fix bug 2024-04-05 13:16:22 +03:00
Efstratios Giannopoulos bf08b6abb7 Merge branch 'dmp-refactoring' of code-repo.d4science.org:MaDgiK-CITE/argos into dmp-refactoring 2024-04-05 12:43:48 +03:00
Efstratios Giannopoulos e61f06c192 use ilike 2024-04-05 12:43:33 +03:00
Sofia Papacharalampous 3f69f4ebe2 description-editor> update template if obsolete and emit refresh data 2024-04-05 11:54:11 +03:00
Sofia Papacharalampous f82501344c Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-04-05 11:39:57 +03:00
Sofia Papacharalampous 0c197ffcd4 description-editor> prefill> added version information to the description label 2024-04-05 11:39:39 +03:00
Efstratios Giannopoulos ff722b1d97 Merge branch 'dmp-refactoring' of code-repo.d4science.org:MaDgiK-CITE/argos into dmp-refactoring 2024-04-05 11:35:51 +03:00
Efstratios Giannopoulos c35fb3ad3c migration fixes 2024-04-05 11:35:37 +03:00
Efstratios Giannopoulos 0d3e72028f fix cache to use tenant 2024-04-05 11:34:30 +03:00
Sofia Papacharalampous 4ffbafc85f Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-04-05 11:34:04 +03:00
Sofia Papacharalampous 023c0dd7b6 styling fixes on language and tenant menu 2024-04-05 11:33:49 +03:00
amentis 139ee2d259 Merge remote-tracking branch 'origin/dmp-refactoring' into dmp-refactoring 2024-04-05 11:12:26 +03:00
amentis fea69ff087 update custom blueprint system validator 2024-04-05 11:11:52 +03:00
Sofia Papacharalampous f0ec8b5fae Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-04-05 11:11:49 +03:00
Sofia Papacharalampous 5519c6890f fixed dmp editor first step validation.3 2024-04-05 11:11:31 +03:00
Diamantis Tziotzios 76a355891f added tenantcode to dashboard statistics cacahe key 2024-04-05 10:07:38 +03:00
amentis 0ded82e5cb description multiplicity ui changes 2024-04-05 09:44:26 +03:00
amentis b4f54bc330 Merge remote-tracking branch 'origin/dmp-refactoring' into dmp-refactoring 2024-04-04 18:36:05 +03:00
amentis 2b2e04012d fix validators to description template and dmp blueprint 2024-04-04 18:35:24 +03:00
Sofia Papacharalampous dc5928cf49 fixed dmp editor first step validation.2 2024-04-04 18:31:16 +03:00
Sofia Papacharalampous 192018051d Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-04-04 18:28:19 +03:00
Sofia Papacharalampous 3e86a43fb0 fixed dmp editor first step validation 2024-04-04 18:27:59 +03:00
Efstratios Giannopoulos f7aaa04c0c fix sql script order 2024-04-04 18:27:18 +03:00
Efstratios Giannopoulos 399efde673 config changes 2024-04-04 17:47:01 +03:00
amentis 805702459f Merge remote-tracking branch 'origin/dmp-refactoring' into dmp-refactoring 2024-04-04 17:08:27 +03:00
amentis 4de68e34b2 description template fixes 2024-04-04 17:07:04 +03:00
Sofia Papacharalampous d94759ff5d Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-04-04 17:03:03 +03:00
Sofia Papacharalampous c71d0e96c3 added option to update a description template if it is obsolete 2024-04-04 17:02:43 +03:00
Sofia Papacharalampous ef6970ffe6 styling fixes 2024-04-04 17:01:04 +03:00
Efstratios Giannopoulos ab993c43af multitenant changes 2024-04-04 16:39:40 +03:00
Thomas Georgios Giannos 5ec8417f4e Bug fix on maintenance.service.ts 2024-04-04 16:16:45 +03:00
Thomas Georgios Giannos cfd508ccc5 Bug fix on maintenance.service.ts 2024-04-04 16:15:37 +03:00
Thomas Georgios Giannos fcda984d7e Added removal events when the entities (users / tenants) are found inactive on event maintenance tasks controller 2024-04-04 14:33:04 +03:00
Thomas Georgios Giannos 6eed99c1cc Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-04-04 13:54:05 +03:00
Thomas Georgios Giannos f9839b14ed Added new maintenance tasks in the UI. Old indexes management component merged with the new one viewed on /maintenance-tasks 2024-04-04 13:52:13 +03:00
Sofia Papacharalampous 93c90ddcef Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-04-04 13:51:04 +03:00
Sofia Papacharalampous 5decf6f4b1 login with the default tenant 2024-04-04 13:50:51 +03:00
amentis 1aec9d4eff description editor submit fix 2024-04-04 13:43:58 +03:00
Sofia Papacharalampous 8cec0c3552 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-04-04 13:21:38 +03:00
Sofia Papacharalampous 527130cb02 added tenant switch on navbar 2024-04-04 13:21:26 +03:00
amentis e7f140cb51 add response error code enum, belongsToTenant field, fix description template new version issue 2024-04-04 12:56:23 +03:00
Efstratios Giannopoulos 3fe87a024a script changes 2024-04-04 12:25:43 +03:00
Efstratios Giannopoulos c1a3ac89d6 Merge branch 'dmp-refactoring' of code-repo.d4science.org:MaDgiK-CITE/argos into dmp-refactoring
# Conflicts:
#	dmp-backend/core/src/main/java/eu/eudat/integrationevent/outbox/tenanttouched/TenantTouchedIntegrationEventHandlerImpl.java
2024-04-04 12:22:35 +03:00
Efstratios Giannopoulos bbe2d91830 multi tenant changes 2024-04-04 12:21:12 +03:00
Thomas Georgios Giannos bc44887675 Added maintenance tasks for sending touch events (users and tenants) 2024-04-04 11:43:04 +03:00
Sofia Papacharalampous 199ffef673 fix public descriptions page when logged-out 2024-04-04 10:53:24 +03:00
Efstratios Giannopoulos ea6ea25116 Merge branch 'dmp-refactoring' of code-repo.d4science.org:MaDgiK-CITE/argos into dmp-refactoring 2024-04-03 18:35:52 +03:00
Efstratios Giannopoulos 671f8f75ba multitenant integration changes 2024-04-03 18:35:37 +03:00
amentis 330231f217 add maximum multiplicity message 2024-04-03 18:22:55 +03:00
Sofia Papacharalampous 7c83fd0e67 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-04-03 17:55:31 +03:00
Sofia Papacharalampous 5a5e190534 added translations 2024-04-03 17:55:10 +03:00
amentis 26cbe562ad add multiplicity validation ui 2024-04-03 17:50:47 +03:00
Sofia Papacharalampous 6f7ed58523 user-profile > added "switch tenant" option 2024-04-03 15:55:22 +03:00
Sofia Papacharalampous ca4e7e6feb ui fixes
*reference dialog
2024-04-03 15:54:43 +03:00
Efstratios Giannopoulos 424d18526b Add belongsToCurrentTenant to builders 2024-04-03 13:22:22 +03:00
Sofia Papacharalampous 87bd9e5b24 ui fixes on description and dmp overview 2024-04-03 13:21:17 +03:00
Sofia Papacharalampous 5e5bd8aab0 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-04-03 12:59:12 +03:00
Sofia Papacharalampous 519870efce minor ui changes 2024-04-03 12:58:49 +03:00
Sofia Papacharalampous da0633e4c0 ui fixes on dmp and description overview 2024-04-03 12:46:21 +03:00
Efstratios Giannopoulos f47c049b8c elastic apply tenant logic 2024-04-03 12:22:43 +03:00
Efstratios Giannopoulos b3db6f1085 remove tenant from UserContactInfo UserCredential 2024-04-03 11:36:31 +03:00
Efstratios Giannopoulos a5e69fe777 bug fix 2024-04-03 10:24:51 +03:00
Efstratios Giannopoulos a5f31ab880 add cache to tenant interceptor 2024-04-03 10:15:28 +03:00
Diamantis Tziotzios fcc3dd7609 minor ui changes 2024-04-02 21:23:59 +03:00
Sofia Papacharalampous 2bad85019b Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-04-02 19:09:21 +03:00
Sofia Papacharalampous 7fe36b1505 styling changes in progress
*dmp overview
2024-04-02 19:08:46 +03:00
Efstratios Giannopoulos 3e37c91035 multi tenant changes 2024-04-02 18:39:46 +03:00
Efstratios Giannopoulos 83b5ec5a80 multitenant changes 2024-04-02 17:18:07 +03:00
amentis 27e6677a21 add multiplicity validation to description persist 2024-04-02 15:46:17 +03:00
Sofia Papacharalampous bc16f8a2c4 styling changes
1. description template > fixed import dialog
2. description template editor > fixed autocomplete input for editors on screen resize
2024-04-02 14:46:25 +03:00
Sofia Papacharalampous 340692a3b5 styling changes
*more changes on description overview
2024-04-02 14:43:49 +03:00
Sofia Papacharalampous 9d5d891701 styling changes
*description-overview
2024-04-02 14:02:54 +03:00
Efstratios Giannopoulos 9fad0abf73 Merge branch 'dmp-refactoring' of code-repo.d4science.org:MaDgiK-CITE/argos into dmp-refactoring 2024-04-02 13:07:28 +03:00
Efstratios Giannopoulos cc407c202a support default tenant as null 2024-04-02 13:07:00 +03:00
amentis ea97f8ca88 add reference id exist condition in reference-editor-dialog 2024-04-02 11:15:07 +03:00
Efstratios Giannopoulos 77d2dcdc39 Merge branch 'dmp-refactoring' of code-repo.d4science.org:MaDgiK-CITE/argos into dmp-refactoring 2024-04-01 18:36:19 +03:00
Efstratios Giannopoulos 9acc26667b tenant scope implementation 2024-04-01 18:36:03 +03:00
amentis ec65f0d76d description template small validation fixes 2024-04-01 18:13:50 +03:00
Sofia Papacharalampous 950b7ae918 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-04-01 16:16:04 +03:00
Sofia Papacharalampous 91ab347f40 styling changes
*close navbar dialogs on screen resize
2024-04-01 16:05:57 +03:00
amentis cbc3990cdf add reference dialog pop up 2024-04-01 16:05:28 +03:00
Sofia Papacharalampous 34fe15eb2f minor ui fixes 2024-04-01 16:04:33 +03:00
Sofia Papacharalampous cc68ed5188 styling changes
*annotations-dialog>user image
2024-04-01 14:11:21 +03:00
Sofia Papacharalampous 72c9137d8b Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-04-01 12:14:27 +03:00
Sofia Papacharalampous 69b71ee253 styling fixes
*ngx-datatable header issue
2024-04-01 12:13:34 +03:00
amentis f4bf80aeb5 final description template preview changes 2024-04-01 12:10:29 +03:00
Efstratios Giannopoulos 621ddd0aee Merge branch 'dmp-refactoring' of code-repo.d4science.org:MaDgiK-CITE/argos into dmp-refactoring 2024-04-01 11:34:03 +03:00
Efstratios Giannopoulos c5aac53ec8 pom clean up 2024-04-01 11:33:46 +03:00
Efstratios Giannopoulos 20f6ae27ed move configuration 2024-04-01 11:16:19 +03:00
Sofia Papacharalampous 52aaa9c213 styling changes
*reverse sizing changes for plans and descriptions listings
2024-04-01 10:23:54 +03:00
amentis b642ec52bc final description template preview changes 2024-03-29 18:41:27 +02:00
Sofia Papacharalampous 2e9d1366e9 styling changes
*annotations dialog
2024-03-29 18:09:26 +02:00
Sofia Papacharalampous 7e84ed0138 styling changes
*annotations dialog
2024-03-29 18:08:43 +02:00
Sofia Papacharalampous 5edcb24983 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-03-29 17:42:43 +02:00
Sofia Papacharalampous 8550d95128 styling changes
*deposit dialog buttons
2024-03-29 17:42:29 +02:00
amentis 7a3bdedb8c fix description template preview dialog 2024-03-29 17:37:08 +02:00
amentis c1509baf38 remove profile pom.xml 2024-03-29 17:11:45 +02:00
Efstratios Giannopoulos eba8bc9cb6 Merge branch 'dmp-refactoring' of code-repo.d4science.org:MaDgiK-CITE/argos into dmp-refactoring 2024-03-29 16:54:03 +02:00
Efstratios Giannopoulos c0aa671337 visibility changes 2024-03-29 16:53:47 +02:00
Sofia Papacharalampous 1a74939321 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-03-29 16:31:36 +02:00
Efstratios Giannopoulos aa6768e67d remove integration event descriptiontouched integration event 2024-03-29 16:27:27 +02:00
Sofia Papacharalampous 0b8f2e2fa7 styling changes
*annotations
2024-03-29 16:26:48 +02:00
amentis 2339b51c24 description template final preview changes (in progress) 2024-03-29 16:22:31 +02:00
Diamantis Tziotzios ba26a1bd67 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring
# Conflicts:
#	dmp-frontend/src/app/ui/description/editor/description-form/description-form-annotation.service.ts
2024-03-29 15:47:43 +02:00
Diamantis Tziotzios 0778842f38 small fixes 2024-03-29 15:46:19 +02:00
Sofia Papacharalampous f8b7bfc96c styling changes
*changed sizing for editors and listings
2024-03-29 14:41:19 +02:00
Efstratios Giannopoulos 102141aa0d update queues to use smallint enums 2024-03-29 14:32:47 +02:00
Efstratios Giannopoulos 21e6015f89 annotation authz changes 2024-03-29 11:47:27 +02:00
amentis 7d42777aa0 add Public Entity Doi 2024-03-29 11:06:47 +02:00
amentis 76d1d50850 description template fixes 2024-03-28 18:41:28 +02:00
Sofia Papacharalampous db68644eff styling changes
*annotations > added annotations count
2024-03-28 17:58:48 +02:00
Sofia Papacharalampous 2673857d74 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-03-28 17:01:47 +02:00
Sofia Papacharalampous 9af7cd64f1 styling changes
*annotations
2024-03-28 17:00:58 +02:00
Diamantis Tziotzios cf17c87a09 ui fix 2024-03-28 16:58:23 +02:00
Efstratios Giannopoulos 0c2d2e2f6a update configurations 2024-03-28 14:57:51 +02:00
Thomas Georgios Giannos adfc2f5dac Updating cache.yml and pom version 2024-03-28 14:46:36 +02:00
Efstratios Giannopoulos 198158a2c3 upgrade cache 2024-03-28 13:16:38 +02:00
amentis 2e7606a497 apply authz flags to dashboard 2024-03-28 13:10:51 +02:00
amentis 6d96e56ec8 apply entity doi active filter 2024-03-28 11:51:26 +02:00
Efstratios Giannopoulos 3e155de0d4 web client throw error on failed 2024-03-28 11:43:12 +02:00
Sofia Papacharalampous ccf3fa3111 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-03-28 10:56:42 +02:00
Efstratios Giannopoulos fc0cb21e57 deposit fixes 2024-03-28 10:52:27 +02:00
Sofia Papacharalampous ba7d690e39 styling changes
*plans>overview>deposit
2024-03-28 10:50:51 +02:00
Sofia Papacharalampous 662afe9827 styling changes
*plans > doi provider
2024-03-28 10:14:00 +02:00
Diamantis Tziotzios f4cbc3742c Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-03-27 20:08:00 +02:00
Diamantis Tziotzios 04efb9c0b1 annotation counts added 2024-03-27 20:07:49 +02:00
amentis 993406e3f0 field builder fix 2024-03-27 19:02:14 +02:00
Diamantis Tziotzios 4d50aefacd Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-03-27 18:49:03 +02:00
Diamantis Tziotzios 7fcada8839 various ui changes 2024-03-27 18:48:58 +02:00
Efstratios Giannopoulos 308f1364af visibly performance improvements 2024-03-27 18:43:52 +02:00
Efstratios Giannopoulos 09c428bd99 Merge branch 'dmp-refactoring' of code-repo.d4science.org:MaDgiK-CITE/argos into dmp-refactoring 2024-03-27 18:21:05 +02:00
Efstratios Giannopoulos eb770ed65e visibility changes 2024-03-27 18:20:49 +02:00
Efstratios Giannopoulos d0ad9a8be0 Merge branch 'dmp-refactoring' of code-repo.d4science.org:MaDgiK-CITE/argos into dmp-refactoring 2024-03-27 18:13:16 +02:00
amentis d8ba1a00c7 small ui fix 2024-03-27 17:21:28 +02:00
Efstratios Giannopoulos 21fb68128d visibility rule changes 2024-03-27 17:09:10 +02:00
amentis 49e6e9ac9f small ui fix 2024-03-27 16:13:50 +02:00
amentis 839f74868e remove dmp fkey from Entity Doi table script 2024-03-27 16:03:50 +02:00
amentis 62f1946279 authz fixes 2024-03-27 14:57:02 +02:00
Diamantis Tziotzios d086e3128e added second zenodo deposit plugin for testing 2024-03-27 13:37:25 +02:00
amentis 833abddea2 multiple choice dialog small fix 2024-03-27 13:22:16 +02:00
amentis c6a38efd83 add file transformer service to description editor 2024-03-27 12:22:33 +02:00
amentis c5b1c89a7e add single reference description editor build form 2024-03-27 11:39:41 +02:00
Diamantis Tziotzios 1d5403fc25 no message 2024-03-27 10:55:49 +02:00
Diamantis Tziotzios 55361e6a60 no message 2024-03-27 10:44:35 +02:00
Diamantis Tziotzios d884f577f4 no message 2024-03-27 10:42:00 +02:00
Diamantis Tziotzios 1408cc0a59 no message 2024-03-27 09:54:04 +02:00
amentis 7ec9c0b3c6 make description reference persist and ui fixes 2024-03-26 18:44:59 +02:00
Sofia Papacharalampous 8206602387 styling changes
*annotations
2024-03-26 17:46:13 +02:00
Sofia Papacharalampous fe323d9b6a Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-03-26 16:55:05 +02:00
Sofia Papacharalampous 7615e135e9 styling changes
*annotations
2024-03-26 16:54:49 +02:00
Efstratios Giannopoulos 9b30fb60d7 common model changes 2024-03-26 16:30:13 +02:00
Sofia Papacharalampous 8be851763b user-profile > unlink account 2024-03-26 15:57:59 +02:00
Sofia Papacharalampous dff8785e7b Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-03-26 13:24:41 +02:00
Sofia Papacharalampous 5387a2c3df 1. added merge-account-confirm page 2. fixed config for google-auth-provider 2024-03-26 13:23:56 +02:00
amentis 12bf3aca8f Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-03-26 11:29:48 +02:00
amentis 34189c5dcd insert values sql script 2024-03-26 11:28:07 +02:00
Sofia Papacharalampous e4516ef0ed dmp-editor ui
*contacts > toggle drag_handler icon on hover
2024-03-26 10:34:51 +02:00
Diamantis Tziotzios 2a515f095b Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-03-22 18:37:48 +02:00
Diamantis Tziotzios 9176e68e33 languge en fixes 2024-03-22 18:37:10 +02:00
Efstratios Giannopoulos 30e3bbf9de Merge branch 'dmp-refactoring' of code-repo.d4science.org:MaDgiK-CITE/argos into dmp-refactoring 2024-03-22 18:33:26 +02:00
Sofia Papacharalampous f7289126d0 styling changes 2024-03-22 18:07:40 +02:00
Sofia Papacharalampous a55128543a Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-03-22 17:26:42 +02:00
Sofia Papacharalampous d310e24d7c minor styling changes and cleanup 2024-03-22 17:26:26 +02:00
amentis d69b30df49 ui fixes 2024-03-22 17:22:12 +02:00
Sofia Papacharalampous 5e1cbc94a0 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-03-22 16:27:19 +02:00
Sofia Papacharalampous 190317a413 add-account functionality from my-profile and styling changes 2024-03-22 16:27:01 +02:00
amentis d4d06a9d47 lock and description template fixes 2024-03-22 15:18:51 +02:00
Sofia Papacharalampous 49164dac9b Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-03-22 14:15:12 +02:00
Sofia Papacharalampous c2c42297e5 my-profile, added configuration for auth-provider icons 2024-03-22 14:15:01 +02:00
Efstratios Giannopoulos a90a4e1180 Merge branch 'dmp-refactoring' of code-repo.d4science.org:MaDgiK-CITE/argos into dmp-refactoring 2024-03-22 13:49:47 +02:00
Efstratios Giannopoulos 704c9f2018 file transformer changes 2024-03-22 13:49:26 +02:00
Diamantis Tziotzios 15cc2d16ca small ui fixes 2024-03-22 13:06:10 +02:00
Sofia Papacharalampous e6b4cd7786 styling changes
*dmp-editor>description-templates
2024-03-22 12:08:22 +02:00
Sofia Papacharalampous aed0f9de8e fixed sortable field
*dmp-blueprint-editor>description-template
2024-03-22 12:04:43 +02:00
Sofia Papacharalampous 0d40d56484 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-03-22 11:49:08 +02:00
Sofia Papacharalampous 0d9f6ec3c4 styling changes
*dmp-description
2024-03-22 11:48:54 +02:00
amentis ffb5d5ee7e fix lock bug 2024-03-22 11:45:31 +02:00
Sofia Papacharalampous b0cd53d74b styling changes
*dmp-user fields and semantics
2024-03-22 11:04:11 +02:00
amentis 4e61353f77 remove section selection from add description pop up and fix dashboard home page sizes 2024-03-22 09:41:35 +02:00
Diamantis Tziotzios 76e251c14d en language cleanup 2024-03-21 20:57:51 +02:00
Sofia Papacharalampous 9d1088d3a8 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-03-21 18:49:28 +02:00
Sofia Papacharalampous 923872d3b8 styling changes
*dmp-user-field > fit internal/external option
2024-03-21 18:49:11 +02:00
Efstratios Giannopoulos 598e27bf74 dmp user changes 2024-03-21 18:44:19 +02:00
Sofia Papacharalampous efd6f5df47 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-03-21 18:01:34 +02:00
Sofia Papacharalampous 6ca7b792e7 1. renamed user-field->dmp-user-field, 2. fixed sorting issue, 3. styling changes 2024-03-21 18:01:17 +02:00
amentis af329498cd small fix 2024-03-21 17:36:55 +02:00
Efstratios Giannopoulos 37e128ec15 Merge branch 'dmp-refactoring' of code-repo.d4science.org:MaDgiK-CITE/argos into dmp-refactoring 2024-03-21 15:37:06 +02:00
Efstratios Giannopoulos 67240affcf migration changes 2024-03-21 15:36:48 +02:00
Sofia Papacharalampous abb7aca6da Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-03-21 13:57:45 +02:00
Sofia Papacharalampous f1f67b9790 styling changes
*add-description popup and fixed dashboard button
2024-03-21 13:57:26 +02:00
amentis efc0db5500 ui changes for lock 2024-03-21 13:06:59 +02:00
Sofia Papacharalampous 0dbd652cf3 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-03-21 12:49:41 +02:00
Sofia Papacharalampous 279a7f97d2 styling changes
*dmp-blueprint-editor
2024-03-21 12:48:36 +02:00
Efstratios Giannopoulos e61f1afaf5 dmp version add not finalized 2024-03-21 12:12:12 +02:00
Diamantis Tziotzios 0dffbec480 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-03-21 10:33:12 +02:00
Diamantis Tziotzios 11911bd16e ui changes 2024-03-21 10:32:59 +02:00
Efstratios Giannopoulos f663fc24b7 add visibility to models 2024-03-21 10:17:39 +02:00
Efstratios Giannopoulos 709fecf1f1 add visibility to models 2024-03-21 10:16:55 +02:00
amentis ba33b29e41 fix lock and add entity locks admin page 2024-03-21 09:46:18 +02:00
Efstratios Giannopoulos 48a310e561 visibility changes 2024-03-20 18:40:34 +02:00
Efstratios Giannopoulos 2f283ae594 migration fixes 2024-03-20 18:39:47 +02:00
Diamantis Tziotzios 8719b56920 style changes 2024-03-20 18:06:05 +02:00
Sofia Papacharalampous 09351701ab styling changes
*dmp blueprint editor > sections
2024-03-20 17:06:26 +02:00
Sofia Papacharalampous 8e5c6e3579 styling changes
*finalize dmp dialog
2024-03-20 13:18:37 +02:00
Sofia Papacharalampous 15824ab952 styling changes
*descriptions>add description dialog
2024-03-20 13:15:11 +02:00
Sofia Papacharalampous a85c8a32ba clean up 2024-03-20 13:07:56 +02:00
Sofia Papacharalampous 3e4302bfe2 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-03-20 13:07:03 +02:00
Sofia Papacharalampous 024680c0e6 styling changes
*mine-notification-listing dialog
2024-03-20 13:06:39 +02:00
Diamantis Tziotzios cdd753a5d8 no message 2024-03-20 12:36:51 +02:00
Diamantis Tziotzios 674ce60a29 ui fixes 2024-03-20 12:35:55 +02:00
amentis b66932b413 fix start new description dialog 2024-03-19 18:27:30 +02:00
Sofia Papacharalampous c425da9a5f styling changes
*mine-notifications
2024-03-19 17:59:47 +02:00
Sofia Papacharalampous 031e07b6e4 styling changes
*user-dialog
2024-03-19 17:45:54 +02:00
Sofia Papacharalampous 28ae763eb8 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-03-19 17:26:08 +02:00
Sofia Papacharalampous 558e1331f2 styling changes
*notification popup
2024-03-19 17:25:37 +02:00
Efstratios Giannopoulos 5801818a69 Merge branch 'dmp-refactoring' of code-repo.d4science.org:MaDgiK-CITE/argos into dmp-refactoring 2024-03-19 17:22:10 +02:00
Efstratios Giannopoulos c480e8e508 authz changes 2024-03-19 17:21:50 +02:00
Sofia Papacharalampous 551249af33 styling changes
*user-profile
2024-03-19 17:12:36 +02:00
Sofia Papacharalampous 5f52e646a5 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-03-19 14:01:26 +02:00
Sofia Papacharalampous ff40bee420 styling changes
*my profile
2024-03-19 13:57:30 +02:00
amentis ed3f3ebb27 build description persist model for validate endpoint 2024-03-19 13:54:23 +02:00
Efstratios Giannopoulos b49975931b authz changes 2024-03-19 12:48:17 +02:00
Efstratios Giannopoulos f19ac6c45e fix elastic configuration 2024-03-19 12:11:01 +02:00
Sofia Papacharalampous 553fd05040 styling changes
*warning popup (on my-descriptions>edit>finalize) and save-expandable-button (on my-descriptions>edit)
2024-03-19 11:13:32 +02:00
Sofia Papacharalampous 6444575de3 styling changes
*dmp editor
2024-03-19 10:50:33 +02:00
Sofia Papacharalampous 7bfff54d30 styling changes
*dmp editor
2024-03-19 10:47:50 +02:00
amentis 9a99c0c300 add validate description 2024-03-19 09:50:29 +02:00
amentis 54e194e078 view descriptions from dmp editor ui 2024-03-15 18:28:39 +02:00
Sofia Papacharalampous 030f59ac06 styling changes
*dmp-bluprint-editor header, dmp sections (in progress)
2024-03-15 18:05:00 +02:00
Sofia Papacharalampous c0aaa00eb5 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-03-15 15:50:35 +02:00
Sofia Papacharalampous 765440b509 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-03-15 15:49:44 +02:00
Sofia Papacharalampous 66bfbe24d8 styling changes
*faq
2024-03-15 15:49:18 +02:00
amentis 119ddebbcc small fix 2024-03-15 15:49:10 +02:00
amentis f71bc64ce5 change pop up description finalize dialog 2024-03-15 15:48:32 +02:00
Sofia Papacharalampous 327991c473 styling changes
*upload-file
2024-03-15 15:44:54 +02:00
amentis 65d62b2849 fix description authz 2024-03-15 15:16:20 +02:00
Efstratios Giannopoulos 388857cdce Merge branch 'dmp-refactoring' of code-repo.d4science.org:MaDgiK-CITE/argos into dmp-refactoring 2024-03-15 14:14:27 +02:00
Efstratios Giannopoulos 266c05ee80 description authz 2024-03-15 14:13:55 +02:00
amentis b618bc8612 fix dashboard ui filters 2024-03-15 13:58:34 +02:00
Sofia Papacharalampous c479d86ee4 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-03-15 13:01:56 +02:00
Sofia Papacharalampous c0b197b645 styling changes
*faq dialog, user-fields, dmp-upload dialog in progress
2024-03-15 13:01:42 +02:00
amentis 498ffca73d dmp finalize changes 2024-03-15 11:39:01 +02:00
Thomas Georgios Giannos 5d24a38472 ui language update 2024-03-15 09:51:45 +02:00
amentis 3045130b27 add dmp finalize 2024-03-15 09:39:36 +02:00
Sofia Papacharalampous 5b23cc0aa6 styling changes
*invite user dialog
2024-03-14 18:15:25 +02:00
Sofia Papacharalampous 025933ee61 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-03-14 14:03:16 +02:00
Sofia Papacharalampous e20b992128 styling changes
*user profile dialog
2024-03-14 14:03:02 +02:00
Thomas Georgios Giannos c62a945a6a Updating annotation and notification services paths 2024-03-14 12:57:17 +02:00
Thomas Georgios Giannos 00815b4b80 Sending replies and new messages using the annotation dialog is now possible, displayed hierarchically as message threads, layout tweaks 2024-03-14 12:10:23 +02:00
Efstratios Giannopoulos 1bdafbc9e6 dmp authz changes 2024-03-14 11:41:32 +02:00
Efstratios Giannopoulos dadda72a09 Merge branch 'dmp-refactoring' of code-repo.d4science.org:MaDgiK-CITE/argos into dmp-refactoring
# Conflicts:
#	dmp-frontend/src/app/ui/dmp/overview/dmp-overview.component.ts
2024-03-14 11:26:21 +02:00
Efstratios Giannopoulos cef1e295f7 dmp authz changes 2024-03-14 11:23:46 +02:00
Diamantis Tziotzios f1a2c9f4c0 no message 2024-03-14 10:03:04 +02:00
Diamantis Tziotzios 4b585bc8c4 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-03-14 09:54:51 +02:00
Diamantis Tziotzios f1c70325a3 no message 2024-03-14 09:54:46 +02:00
amentis 9d6fbcd3ee dashboard changes and add finalize description 2024-03-14 09:36:07 +02:00
Alexandros Mandilaras f1290a1e56 Revert "try removing allow-credentials"
This reverts commit 2c4a0efe9c.
2024-03-13 19:47:07 +02:00
Alexandros Mandilaras 2c4a0efe9c try removing allow-credentials 2024-03-13 19:30:10 +02:00
Diamantis Tziotzios dfd2f3eeff dmp finalizatiion popup 2024-03-13 19:24:01 +02:00
Sofia Papacharalampous ea3b1b1558 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-03-13 18:00:09 +02:00
Sofia Papacharalampous 17071f9114 styling changes 2024-03-13 17:59:54 +02:00
Efstratios Giannopoulos e9cbf27295 authz changes 2024-03-13 17:45:25 +02:00
Sofia Papacharalampous 9aaaf226bb Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring
# Conflicts:
#	dmp-frontend/src/assets/i18n/en.json
2024-03-13 17:30:51 +02:00
Sofia Papacharalampous cf1cc0a4fb styling changes 2024-03-13 17:26:47 +02:00
Efstratios Giannopoulos db68cd32e1 migration fixes 2024-03-13 17:04:42 +02:00
Efstratios Giannopoulos cbfe4ec4f2 authz changes 2024-03-13 17:04:17 +02:00
Thomas Georgios Giannos cf5acb2656 Annotation dialog ui update 2024-03-13 15:01:56 +02:00
Thomas Georgios Giannos 1b7ecf201e Getting annotation authors on query responses, ui update 2024-03-13 13:24:21 +02:00
Sofia Papacharalampous 99a870ff84 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-03-13 11:48:30 +02:00
Efstratios Giannopoulos dcb112f843 Merge branch 'dmp-refactoring' of code-repo.d4science.org:MaDgiK-CITE/argos into dmp-refactoring 2024-03-13 11:48:04 +02:00
Efstratios Giannopoulos ae56e2dbf2 fix counter backend 2024-03-13 11:47:48 +02:00
Diamantis Tziotzios 27aa7163e8 no message 2024-03-13 11:47:24 +02:00
Sofia Papacharalampous 162f680062 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-03-13 10:54:43 +02:00
Diamantis Tziotzios 83565a0e52 annotation popup changes 2024-03-13 10:45:22 +02:00
Sofia Papacharalampous 4e80c5cd5d Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-03-13 10:05:33 +02:00
Efstratios Giannopoulos 5f88e835b7 Merge branch 'dmp-refactoring' of code-repo.d4science.org:MaDgiK-CITE/argos into dmp-refactoring 2024-03-13 10:02:25 +02:00
Efstratios Giannopoulos 52e1c42cd2 reference autz fix 2024-03-13 10:02:04 +02:00
Sofia Papacharalampous e7cb7f44d3 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring
# Conflicts:
#	dmp-frontend/src/assets/i18n/en.json
2024-03-13 09:47:38 +02:00
Sofia Papacharalampous f754dbe661 no message 2024-03-13 09:46:16 +02:00
amentis a45dec7a5f fix backend dmp user and dashboard ui fixes 2024-03-12 18:47:57 +02:00
Efstratios Giannopoulos cfbd3233ec authz changes 2024-03-12 18:27:16 +02:00
Efstratios Giannopoulos a0554724a8 migration changes 2024-03-12 16:28:07 +02:00
amentis b8f14e957e add remove backend validators, fix public dmp/descriptions 2024-03-12 14:07:47 +02:00
Thomas Georgios Giannos 2cbb6297cb Fixing issues on annotation service 2024-03-12 13:10:37 +02:00
Efstratios Giannopoulos e3ac2394c2 common models changes 2024-03-12 11:07:47 +02:00
Efstratios Giannopoulos c592226e77 migration fix 2024-03-11 18:32:21 +02:00
Efstratios Giannopoulos a399b183f6 remove old files 2024-03-11 18:32:06 +02:00
Thomas Georgios Giannos 3fc805ab85 Sending annotation users event on dmp persist 2024-03-11 16:02:09 +02:00
Thomas Georgios Giannos 7347fbbd5a Adding annotation entity touch event 2024-03-11 15:55:52 +02:00
amentis 06e6ee406b fixes 2024-03-11 15:20:09 +02:00
Efstratios Giannopoulos 097d2832be Merge branch 'dmp-refactoring' of code-repo.d4science.org:MaDgiK-CITE/argos into dmp-refactoring
# Conflicts:
#	dmp-backend/core/src/main/java/eu/eudat/audit/AuditableAction.java
2024-03-11 15:03:04 +02:00
Efstratios Giannopoulos 403e618d04 deposit changes 2024-03-11 15:01:56 +02:00
Diamantis Tziotzios 60899bfea3 minor ui changes 2024-03-11 13:26:58 +02:00
amentis 83ee9a7e45 fixes 2024-03-11 09:47:03 +02:00
Efstratios Giannopoulos a73eef6529 migration fix 2024-03-08 18:36:37 +02:00
Efstratios Giannopoulos 49f3da1314 file transformer changes 2024-03-08 18:36:16 +02:00
Thomas Georgios Giannos d844d35392 Solving issues with Annotation persist 2024-03-08 17:38:03 +02:00
Thomas Georgios Giannos f37407063f Updating queue configurations 2024-03-08 11:47:37 +02:00
amentis 2c8982bfef fixes 2024-03-07 17:14:39 +02:00
Thomas Georgios Giannos 8141d40ecf Updating Annotation persist and validator 2024-03-07 14:22:29 +02:00
Thomas Georgios Giannos 50dd06b3f1 Updating annotation-web pom cite dependencies 2024-03-07 13:38:11 +02:00
Thomas Georgios Giannos 9d706c6e11 Adding new columns on Annotation entity 2024-03-07 13:36:27 +02:00
Thomas Georgios Giannos fa97c55862 Updating db script 00.01.058, adding 00.01.059 2024-03-07 13:34:56 +02:00
amentis bb6037afba ui fixes 2024-03-06 18:41:26 +02:00
Efstratios Giannopoulos f92f3c1a4d Merge branch 'dmp-refactoring' of code-repo.d4science.org:MaDgiK-CITE/argos into dmp-refactoring 2024-03-06 18:18:24 +02:00
Efstratios Giannopoulos 535c07a1ad common models changes 2024-03-06 18:18:10 +02:00
Diamantis Tziotzios 69a1ea5584 no message 2024-03-06 14:39:10 +02:00
amentis 5851c2ff26 ui fixes and add dmpBlueprintVersionStatus lookup field 2024-03-06 11:53:40 +02:00
amentis 043d4d2e96 fix description template ui field types 2024-03-05 17:37:01 +02:00
amentis 6c82fcf8b0 builder component bean conflict fix 2024-03-05 13:59:53 +02:00
amentis 4ebabd68ab prefilling source changes 2024-03-05 13:41:58 +02:00
Efstratios Giannopoulos 0530373c83 change to common models for Deposit 2024-03-04 16:36:15 +02:00
amentis 5fc7241dc2 dmp fixes 2024-03-04 12:42:14 +02:00
amentis b84cd93ce6 dmp ui fixes 2024-03-01 18:50:46 +02:00
amentis f0c076fe4f prefilling source changes 2024-03-01 18:45:32 +02:00
amentis a5c194ac95 prefilling small changes 2024-03-01 11:14:27 +02:00
Efstratios Giannopoulos b1ebc6b35a Merge branch 'dmp-refactoring' of code-repo.d4science.org:MaDgiK-CITE/argos into dmp-refactoring 2024-03-01 10:55:09 +02:00
Efstratios Giannopoulos 25adaf23e2 prefiling changes 2024-03-01 10:54:52 +02:00
Diamantis Tziotzios 806f763e2b dmp listing small changes 2024-03-01 10:54:02 +02:00
amentis 5da3c4f9b9 refactor tenant, notification-template ui editors 2024-03-01 09:38:11 +02:00
Efstratios Giannopoulos 46862e06cc Prefilling changes 2024-02-29 17:51:20 +02:00
amentis 96696f1a14 UI separate prefilling sources fixed Value fields 2024-02-29 15:18:55 +02:00
Efstratios Giannopoulos 656afc2045 migration changes 2024-02-29 12:38:57 +02:00
amentis b8c5edf4fb separate prefilling sources fixed Value fields 2024-02-29 11:46:59 +02:00
Efstratios Giannopoulos 1a8180c64e merge fix 2024-02-28 18:51:16 +02:00
Efstratios Giannopoulos ef50193175 Merge branch 'dmp-refactoring' of code-repo.d4science.org:MaDgiK-CITE/argos into dmp-refactoring 2024-02-28 18:49:24 +02:00
Efstratios Giannopoulos 8237e7936d migration changes 2024-02-28 18:48:46 +02:00
amentis fd77a44039 remove ExternalUrlConfigProvider 2024-02-28 17:37:56 +02:00
Diamantis Tziotzios 067e81207f prefill popup refactor 2024-02-28 15:41:36 +02:00
amentis be796bc68f prefilling sources ui changes 2024-02-28 13:30:12 +02:00
amentis 9989f5ca69 prefilling sources ui changes 2024-02-28 13:29:53 +02:00
amentis dad32207e3 add dmp blueprint prefilling source and validation prefilling source fixes 2024-02-27 16:27:26 +02:00
Thomas Georgios Giannos 141d6346fb Small fixes on annotation service client 2024-02-27 13:44:50 +02:00
Diamantis Tziotzios 90bcc40dde no message 2024-02-27 10:01:45 +02:00
amentis 57908f342b refactor reference type enums to prefilling source and ui code clean up 2024-02-26 19:47:20 +02:00
amentis 69b00a7a26 add prefilling source frontend 2024-02-26 19:40:31 +02:00
Efstratios Giannopoulos 0e7813cded migration changes 2024-02-26 10:53:11 +02:00
Efstratios Giannopoulos e0deaef950 Merge branch 'dmp-refactoring' of code-repo.d4science.org:MaDgiK-CITE/argos into dmp-refactoring 2024-02-23 18:55:51 +02:00
Efstratios Giannopoulos 098b80b3f4 migration changes 2024-02-23 18:55:35 +02:00
amentis adcf169b17 make referenceType api config independent and add PrefillingSource definition 2024-02-23 14:30:05 +02:00
Efstratios Giannopoulos dabbbf3fa4 remove external dataset field 2024-02-23 11:40:40 +02:00
Diamantis Tziotzios 3f8716ab0a prefilling source defintion classes 2024-02-23 10:32:18 +02:00
amentis fdf8e13af9 Add Prefilling Source Entity backend stack 2024-02-22 19:01:23 +02:00
Efstratios Giannopoulos a28323dcaf migration changes 2024-02-22 18:33:52 +02:00
Thomas Georgios Giannos 6ebbb885fb Adding anchors list on annotation entity lookup / query 2024-02-22 17:47:01 +02:00
amentis 40f56986b4 small dmp overview fixes 2024-02-22 15:05:09 +02:00
amentis 9f42381992 delete old DmpUserInviteType 2024-02-22 14:03:27 +02:00
amentis a387349aad create common dmpUser component for dmp ui and dmp overview popup invite 2024-02-22 13:57:42 +02:00
Thomas Georgios Giannos add1bb582f Adding annotation service config entry on config.json 2024-02-22 12:21:54 +02:00
Thomas Georgios Giannos 9982f89767 Adding annotation service to the UI client 2024-02-22 12:16:05 +02:00
Alexandros Mandilaras 3e5ea407e4 revert duplicate 2024-02-22 11:55:34 +02:00
Alexandros Mandilaras ec4cf780eb add revision propery 2024-02-22 11:52:47 +02:00
Alexandros Mandilaras b8cd2e3757 set version and groupid for core 2024-02-22 10:56:46 +02:00
Alexandros Mandilaras 63bc7f3685 typo fix 2024-02-22 10:26:33 +02:00
Alexandros Mandilaras 3d2018f59a copy core in Dockerfile also 2024-02-22 10:01:08 +02:00
Alexandros Mandilaras d7c480f0ee add dev profile 2024-02-22 09:40:50 +02:00
Alexandros Mandilaras a95ed902d5 comment dirs that dont exist in this branch 2024-02-22 09:34:49 +02:00
Alexandros Mandilaras 530623b931 build as name change 2024-02-22 09:32:38 +02:00
Alexandros Mandilaras 5bb31d0a59 upgrade argos Dockerfiles 2024-02-22 09:30:30 +02:00
Efstratios Giannopoulos f7babf1f0b migration changes 2024-02-21 18:38:28 +02:00
Efstratios Giannopoulos bc5f394ece Merge branch 'dmp-refactoring' of code-repo.d4science.org:MaDgiK-CITE/argos into dmp-refactoring 2024-02-21 18:37:53 +02:00
Efstratios Giannopoulos 1bd8a9f09d reorder sql scripts 2024-02-21 18:37:24 +02:00
Thomas Georgios Giannos 14f5f689f9 Small migration scripts fixes 2024-02-21 18:00:25 +02:00
Thomas Georgios Giannos 5c1f6a096b Resolving migration scripts issues for annotation service tables regarding queue messages 2024-02-21 17:53:28 +02:00
Diamantis Tziotzios 446268719d Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-02-21 17:52:59 +02:00
Diamantis Tziotzios c9c0ea614b reference types @ description editor 2024-02-21 17:52:50 +02:00
Thomas Georgios Giannos c6c3ed4a5f Adding migration scripts for annotation service tables 2024-02-21 17:48:03 +02:00
Thomas Georgios Giannos 0634324151 Adding dmp and description touched integration events 2024-02-21 17:45:48 +02:00
Diamantis Tziotzios 443ce153ee description editor fix 2024-02-21 17:21:17 +02:00
amentis cc6359e0fc add dmpUser section ui 2024-02-21 15:18:41 +02:00
amentis 38eef575d0 add dmp user type 2024-02-21 13:10:18 +02:00
amentis 4738a92f6e add section id to DmpUser 2024-02-21 12:46:24 +02:00
amentis a1394e6629 fix dmp save and view references 2024-02-21 11:03:11 +02:00
Alexandros Mandilaras 347ed854ae use revision env on notification 2024-02-21 10:57:54 +02:00
Alexandros Mandilaras c1c12ded5c apply same changes to notification-web 2024-02-21 10:49:06 +02:00
Alexandros Mandilaras eac744bd95 fix build name 2024-02-21 10:30:29 +02:00
Alexandros Mandilaras b0124d3800 even more pom fixes 2024-02-21 10:18:20 +02:00
Alexandros Mandilaras 7e7229424a more pom fixes 2024-02-21 10:14:30 +02:00
Alexandros Mandilaras d19fdc0898 add revision propery on pom 2024-02-21 10:08:46 +02:00
Efstratios Giannopoulos 07cdb91b9e renames 2024-02-21 09:55:29 +02:00
Alexandros Mandilaras d6cd18729f expose port on run stage 2024-02-20 17:47:29 +02:00
amentis be672aab57 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-02-20 17:00:29 +02:00
amentis 0cbcae3afe add dmpUser ui 2024-02-20 17:00:20 +02:00
Alexandros Mandilaras ece652e828 revert one change 2024-02-20 16:58:11 +02:00
Alexandros Mandilaras 6e1f1d110a annotation web pom fixes 2024-02-20 16:54:16 +02:00
Alexandros Mandilaras 26eb185ce9 fix jar names on dockerfile 2024-02-20 16:41:29 +02:00
Alexandros Mandilaras 2fb3332390 add revision env when copying from build-stage 2024-02-20 16:18:42 +02:00
Alexandros Mandilaras ece54563d0 fix annotation service Dockerfile 2024-02-20 16:01:31 +02:00
Alexandros Mandilaras 6f1f14a058 use java 21 2024-02-20 15:59:01 +02:00
Alexandros Mandilaras 16b53ba11d more Dockerfile fixes 2024-02-20 15:47:55 +02:00
Alexandros Mandilaras 6f2c8101f2 leave only dev server 2024-02-20 15:46:08 +02:00
Alexandros Mandilaras fcf6ee4087 Dockerfile fixes 2024-02-20 15:35:56 +02:00
Alexandros Mandilaras 2bbb2c35f6 bind cite maven arguments to xml environments 2024-02-20 15:21:09 +02:00
amentis c55f160d9b add semantics controller 2024-02-20 14:58:16 +02:00
amentis b009829d6f add semantics lookup 2024-02-20 11:39:58 +02:00
amentis d3659aad24 add semantics to dmp blueprint 2024-02-20 11:37:09 +02:00
Efstratios Giannopoulos 61560ec8ad reference changes 2024-02-20 11:28:33 +02:00
Efstratios Giannopoulos d50613f416 Merge branch 'dmp-refactoring' of code-repo.d4science.org:MaDgiK-CITE/argos into dmp-refactoring 2024-02-20 10:12:38 +02:00
Efstratios Giannopoulos eb228fa329 reference type changes 2024-02-20 10:11:49 +02:00
amentis 057f444ff1 description template semantics small fix 2024-02-20 09:38:32 +02:00
Efstratios Giannopoulos 9f36710276 update remote fetcher 2024-02-19 18:10:34 +02:00
Efstratios Giannopoulos a44fe43cf3 fix supportive materials to use config 2024-02-19 17:28:46 +02:00
amentis fd30b89f93 fetcher, ui small changes 2024-02-19 15:50:01 +02:00
amentis b343b76c9e reference type small changes 2024-02-16 17:42:01 +02:00
Diamantis Tziotzios 4f5b3cf647 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-02-16 11:49:04 +02:00
Diamantis Tziotzios bc8da3676a no message 2024-02-16 11:48:56 +02:00
amentis 720e5f96f3 reference type small changes 2024-02-16 11:24:28 +02:00
Diamantis Tziotzios 244c8f2afd reference type ui fixes 2024-02-15 18:36:46 +02:00
amentis aabcdd8c65 reference type changes 2024-02-15 16:43:12 +02:00
Thomas Georgios Giannos 20498001b3 Updating annotation entity, adding migration scripts (not all) 2024-02-13 18:31:01 +02:00
amentis 6e443c69fa small changes 2024-02-13 18:26:26 +02:00
Efstratios Giannopoulos 384b9883a8 more reference type changes 2024-02-13 18:16:59 +02:00
Efstratios Giannopoulos f826c2297b reference type changes 2024-02-13 15:54:28 +02:00
Thomas Georgios Giannos bd436e55b1 Adding annotation controller with persist / delete / query / lookup on annotation service, implementing annotation query 2024-02-13 12:48:55 +02:00
Efstratios Giannopoulos 40316781a2 RemoteFetcherService changes 2024-02-13 12:22:11 +02:00
Efstratios Giannopoulos 28d08d99e8 clean up code 2024-02-13 09:53:33 +02:00
Diamantis Tziotzios 8b267ef5ff Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-02-12 18:33:26 +02:00
Diamantis Tziotzios 366dcf6e01 Merge branch 'reference-type-refactor' into dmp-refactoring
# Conflicts:
#	dmp-frontend/src/app/ui/admin/description-template/editor/components/field/description-template-editor-field.component.html
#	dmp-frontend/src/app/ui/description/editor/description-form/components/form-field/form-field.component.html
#	dmp-frontend/src/app/ui/reference/reference-field/reference-field.component.html
#	dmp-frontend/src/app/ui/reference/reference-field/reference-field.component.ts
2024-02-12 18:33:21 +02:00
Thomas Georgios Giannos 30870c690f Adding annotation entity on annotation service 2024-02-12 18:00:50 +02:00
Efstratios Giannopoulos fef2df6014 Merge branch 'reference-type-refactor' of code-repo.d4science.org:MaDgiK-CITE/argos into reference-type-refactor
# Conflicts:
#	dmp-backend/web/src/main/java/eu/eudat/controllers/v2/ReferenceController.java
2024-02-12 17:44:46 +02:00
Efstratios Giannopoulos 957c1fad58 reference fetcher changes 2024-02-12 17:43:41 +02:00
Thomas Georgios Giannos 1eef4bfb1c Renaming packages on annotation service not to interfere with notification service 2024-02-12 11:49:37 +02:00
Diamantis Tziotzios 9f5002802b some frontend changes for reference type refactor 2024-02-09 22:46:05 +02:00
Thomas Georgios Giannos 5c98648e56 Adding new annotation service 2024-02-09 18:50:34 +02:00
amentis 075573ffaf small reapply validator fix 2024-02-09 16:16:46 +02:00
amentis 1a6e776b41 description template validation changes 2024-02-09 15:07:15 +02:00
Thomas Georgios Giannos 80096e9164 Refactoring public api dependencies from 'to be deleted' data and queryable modules 2024-02-09 13:24:23 +02:00
Thomas Georgios Giannos 510ec954fa Adding versions on description template query 2024-02-09 11:45:17 +02:00
Diamantis Tziotzios 174e57f62b more description editor changes 2024-02-08 19:48:14 +02:00
amentis 313f5e3b3c description template validation changes 2024-02-08 18:47:19 +02:00
Efstratios Giannopoulos 87dd56ff2c reference type refactor 2024-02-08 18:27:54 +02:00
Efstratios Giannopoulos 4f1b05ab20 reference-type-refactor 2024-02-08 18:12:47 +02:00
Diamantis Tziotzios e5946f90cd no message 2024-02-08 17:48:44 +02:00
Diamantis Tziotzios 0f4a80ef1e Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring
# Conflicts:
#	dmp-frontend/src/app/ui/description/editor/description-form/components/form-section/form-section.component.ts
2024-02-08 17:38:22 +02:00
Diamantis Tziotzios 6f74689d3f no message 2024-02-08 17:37:39 +02:00
amentis 2574cb424e Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring
# Conflicts:
#	dmp-frontend/src/app/ui/description/editor/description-editor.model.ts
2024-02-08 17:28:07 +02:00
amentis bd8a67f6bb description editor validation changes 2024-02-08 17:23:03 +02:00
Diamantis Tziotzios f6151b085f Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-02-08 17:14:29 +02:00
Diamantis Tziotzios 98d6636855 description template ui changes 2024-02-08 17:14:25 +02:00
Thomas Georgios Giannos 45c8eb9768 Removing default value on version column on description template migration script (00.01.010) 2024-02-08 17:10:56 +02:00
Thomas Georgios Giannos 5d0c8d97e5 Removing new version from file option for description templates 2024-02-08 16:53:20 +02:00
Thomas Georgios Giannos fbf5f65318 Adding all versions listing and new version form for description templates 2024-02-08 16:48:50 +02:00
Thomas Georgios Giannos f255f61ee6 Adding all versions listing and new version form for description templates 2024-02-08 16:48:29 +02:00
Efstratios Giannopoulos 9d4e814d1c Merge branch 'dmp-refactoring' of code-repo.d4science.org:MaDgiK-CITE/argos into dmp-refactoring
# Conflicts:
#	dmp-backend/web/src/main/java/eu/eudat/logic/utilities/documents/xml/datasetProfileXml/ExportXmlBuilderDatasetProfile.java
2024-02-08 11:07:37 +02:00
Efstratios Giannopoulos ab653e4f94 code clean up 2024-02-08 11:04:38 +02:00
amentis 2204119503 description template field type validation fix 2024-02-08 10:46:30 +02:00
Diamantis Tziotzios 0c2fb8cbef Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-02-08 09:40:24 +02:00
Diamantis Tziotzios 3a514af843 more description editor changes 2024-02-08 09:40:16 +02:00
amentis 305729eb48 description template validation changes 2024-02-07 18:44:17 +02:00
amentis 0a473bfd04 fix reference-field label bug 2024-02-07 18:32:16 +02:00
Thomas Georgios Giannos ce1cb02d43 Fixed issue with paths on dmp blueprint listing actions 2024-02-07 17:59:11 +02:00
Efstratios Giannopoulos f8251aaf43 bug fix 2024-02-07 17:23:47 +02:00
Thomas Georgios Giannos 6e767f1e5e Added all versions listing on dmp blueprints, actions menu on that listing not yet functional 2024-02-07 17:13:13 +02:00
amentis 02cd51b751 description template backend validator changes 2024-02-07 16:27:14 +02:00
amentis 3deb17dbea remove dmp blueprint editor old code 2024-02-07 16:03:45 +02:00
Diamantis Tziotzios 8bf262693f more description editor changes 2024-02-07 14:15:25 +02:00
Efstratios Giannopoulos 2b436be2cd description properties changes 2024-02-07 13:53:01 +02:00
Thomas Georgios Giannos 176d13d443 Removed new version from file on dmp blueprint listing options, added version column, fixed header and save button disabled conditions on dmp blueprint editor 2024-02-07 13:03:47 +02:00
amentis bc9691fa5d description templates validation small changes 2024-02-07 10:15:06 +02:00
Thomas Georgios Giannos 5802c2149d Fixed issue on dmp blueprint fields form, integrated new version endpoint 2024-02-06 20:41:57 +02:00
George Kalampokis ed2a29d14b Update file transformer base version 2024-02-06 18:05:39 +02:00
Efstratios Giannopoulos a52a3758d5 remove old logic 2024-02-06 16:38:18 +02:00
George Kalampokis fbe9683842 Merge remote-tracking branch 'origin/dmp-refactoring' into dmp-refactoring 2024-02-06 16:20:45 +02:00
Efstratios Giannopoulos 51285f722b remove old logic 2024-02-06 16:20:37 +02:00
George Kalampokis a22644be56 Merge remote-tracking branch 'origin/dmp-refactor-desc-templates' into dmp-refactoring 2024-02-06 16:18:58 +02:00
amentis b4ccd71f85 description templates fix reapply validation 2024-02-06 16:00:52 +02:00
Efstratios Giannopoulos f7dc3e5a32 description use storage file 2024-02-06 15:03:49 +02:00
Efstratios Giannopoulos fd974d3ee4 change description properties definition 2024-02-06 12:27:47 +02:00
George Kalampokis 3ac4ed1237 Apply minor file transformer fixes 2024-02-06 09:40:28 +02:00
amentis fc756a1780 description templates validation fixes (in progress) 2024-02-05 17:59:11 +02:00
amentis 8bf1e0c4d6 small fix 2024-02-05 10:26:41 +02:00
Diamantis Tziotzios 70e3c9fabc more description editor changes 2024-02-02 18:43:24 +02:00
Thomas Georgios Giannos 3de2c8cbbe Added versioning migration script for DmpBlueprintEntity 2024-02-02 15:10:02 +02:00
Thomas Georgios Giannos e4c1efe98c Added versioning fields on DmpBlueprintEntity and stack 2024-02-02 14:59:11 +02:00
Diamantis Tziotzios acc754823f description editor frontend changes 2024-02-02 10:29:38 +02:00
George Kalampokis 02a1437a91 Update File Transformer Builder 2024-02-01 18:15:06 +02:00
Efstratios Giannopoulos 5f6eab6e11 remove old code 2024-02-01 17:46:28 +02:00
Efstratios Giannopoulos 55fb0f3e00 remove old code 2024-02-01 17:29:04 +02:00
Diamantis Tziotzios fde91b6677 more description template changes 2024-02-01 17:14:03 +02:00
Efstratios Giannopoulos cba0741149 Merge branch 'dmp-refactoring' of code-repo.d4science.org:MaDgiK-CITE/argos into dmp-refactoring 2024-02-01 16:58:26 +02:00
Efstratios Giannopoulos 8524213d14 remove old code 2024-02-01 16:58:05 +02:00
Diamantis Tziotzios 8d5b399dba ui changes for description template editor 2024-02-01 16:57:40 +02:00
Efstratios Giannopoulos 46c19f61a1 update description properties json format 2024-02-01 16:40:11 +02:00
Thomas Georgios Giannos 1fc4e8add5 Added integration events and handlers on the main app outbox queue for tenants 2024-02-01 16:05:21 +02:00
Diamantis Tziotzios bef333ebc9 description templates editor ui fixes. 2024-02-01 15:41:05 +02:00
amentis da62f79a73 dmp editor add dmp associated user and placeholders 2024-02-01 14:42:23 +02:00
Thomas Georgios Giannos 20ffacad0d Fixing user deleter not deleting contact info and credentials 2024-02-01 13:30:47 +02:00
Thomas Georgios Giannos 30abd31974 Added data field on AssociatedProfilePublicModel on public api 2024-02-01 12:53:02 +02:00
Diamantis Tziotzios bd2a935606 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-02-01 11:37:12 +02:00
Diamantis Tziotzios 30902bbab8 ui fixes 2024-02-01 11:36:55 +02:00
Efstratios Giannopoulos 4a3f002672 move public api classes 2024-02-01 11:13:07 +02:00
Thomas Georgios Giannos 23c19888ca Added missing mapping for AssociatedProfilePublicModel on public api 2024-02-01 10:24:39 +02:00
Diamantis Tziotzios 5373e2d867 fixes 2024-01-31 21:25:15 +02:00
Diamantis Tziotzios 8b5a54814d description template changes in frontend 2024-01-31 21:16:39 +02:00
amentis 3c32e57aad reference type editor changes 2024-01-31 18:39:18 +02:00
Efstratios Giannopoulos b4f55a721c Merge branch 'dmp-refactor-desc-templates' into dmp-refactoring 2024-01-31 17:49:56 +02:00
Efstratios Giannopoulos bcd42d66b7 refactor description template xml 2024-01-31 17:48:59 +02:00
amentis 6eea7d8088 dmp editor small changes 2024-01-31 17:07:16 +02:00
Thomas Georgios Giannos 8f7a3cf768 Resolving issues with notification service user integration (on user creation) 2024-01-31 15:23:41 +02:00
Efstratios Giannopoulos 7e63abca50 refactor description template xml 2024-01-31 14:44:20 +02:00
Efstratios Giannopoulos 6a0d1a7c8b refactor description template xml 2024-01-31 14:33:24 +02:00
Diamantis Tziotzios 2ba9e146e5 more ui changes 2024-01-31 12:53:30 +02:00
Diamantis Tziotzios 078ca9e0cb minor ui fixes 2024-01-31 12:30:21 +02:00
amentis f604eac172 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-01-31 11:42:03 +02:00
amentis 59e70de4f8 small fix 2024-01-31 11:41:11 +02:00
Diamantis Tziotzios 95568c5f7c Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring
# Conflicts:
#	dmp-frontend/src/app/core/services/utilities/enum-utils.service.ts
#	dmp-frontend/src/assets/i18n/en.json
2024-01-31 11:37:28 +02:00
Diamantis Tziotzios 4c1372257a more ui changes 2024-01-31 11:36:12 +02:00
amentis 285978fb58 add contacts dmp editor ui 2024-01-31 11:27:36 +02:00
Diamantis Tziotzios 59c425a240 no message 2024-01-31 10:44:48 +02:00
Diamantis Tziotzios 5377b1db18 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-01-30 19:28:09 +02:00
Diamantis Tziotzios f296bc44f9 description template frontend changes 2024-01-30 19:27:55 +02:00
Efstratios Giannopoulos 4d1d712215 xml serializer changes 2024-01-30 18:34:22 +02:00
Efstratios Giannopoulos 16222fc02c bug fix 2024-01-30 17:23:18 +02:00
Efstratios Giannopoulos 268b82eb49 update description template xml 2024-01-30 16:31:03 +02:00
amentis 7d66c1e857 fix dmp contact builders 2024-01-30 15:24:15 +02:00
Efstratios Giannopoulos 2f48b3bae2 remove old code 2024-01-29 18:26:58 +02:00
Efstratios Giannopoulos aebc6056f9 UserRemovalIntegrationEvent changes 2024-01-29 18:10:55 +02:00
Thomas Georgios Giannos 80a3aa5616 Setting outbox calls on user updates / creations, removing not needed inbox events 2024-01-29 16:51:29 +02:00
Diamantis Tziotzios 953fa2710e ui fixes 2024-01-29 15:25:59 +02:00
Diamantis Tziotzios 4542189a26 autocomplete changes 2024-01-29 14:39:20 +02:00
amentis 8fb3556acb dmp blueprint editor fixes 2024-01-29 13:13:30 +02:00
Diamantis Tziotzios 37d349fa9b ui fixes 2024-01-29 11:47:12 +02:00
amentis ea6e2765ea add integration event component names 2024-01-29 09:37:25 +02:00
Efstratios Giannopoulos d89d8d4aa8 DescriptionTemplate version status fixes 2024-01-26 18:18:05 +02:00
Thomas Georgios Giannos a55d7c3692 Adding outbox events for users on the main app 2024-01-26 17:42:45 +02:00
Efstratios Giannopoulos f58832e3e9 migration changes 2024-01-26 14:41:19 +02:00
George Kalampokis ac932ffb05 Merge remote-tracking branch 'origin/dmp-refactoring' into dmp-refactoring 2024-01-26 12:55:08 +02:00
George Kalampokis c9121ebb1a Fix error if one of the file transformer clients doesn't respond 2024-01-26 12:54:55 +02:00
Efstratios Giannopoulos 2726d232dd upgrade blueprint xml 2024-01-26 12:42:46 +02:00
amentis 962840d738 change frontend blueprint description template group id 2024-01-26 12:17:01 +02:00
Efstratios Giannopoulos c05ccef28e change blueprint to user description template group id 2024-01-26 11:41:20 +02:00
Efstratios Giannopoulos 447059530d migration bug fix 2024-01-26 10:30:06 +02:00
Diamantis Tziotzios 4644d24874 various UI updates 2024-01-25 20:55:42 +02:00
Diamantis Tziotzios ae543324a4 dmp blueprint editor changes 2024-01-25 18:08:47 +02:00
amentis b6a85e151d add xml type to dmp blueprint entity 2024-01-25 15:50:52 +02:00
amentis f8fa4e519b fix dmp blueprint system fields ui 2024-01-25 15:49:34 +02:00
Thomas Georgios Giannos ecb82f5812 Removing certificate from repo 2024-01-25 13:15:15 +02:00
Thomas Georgios Giannos a369d36677 Fixing relative paths on notification service poms, changes not needed anymore since the project moved to a folder on its own 2024-01-25 13:12:25 +02:00
Thomas Georgios Giannos 39982aa264 Moving notification service to root folder 2024-01-25 13:01:23 +02:00
Thomas Georgios Giannos b6231feacd Adding configurable prefix for database table names, adding missing updated_at and is_active columns, updating db scripts 2024-01-25 12:28:21 +02:00
amentis 9b27d38026 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-01-24 17:51:09 +02:00
amentis 8828be7dfa fix dmp blueprint create and blueprint description template validators 2024-01-24 17:50:34 +02:00
Thomas Georgios Giannos bca0144111 Adding notification related user table scripts, altering existing foreign keys, aligning more entities 2024-01-24 17:49:50 +02:00
amentis 0faa5f731a remove notification from main app 2024-01-24 14:54:33 +02:00
Thomas Georgios Giannos 7a318da46a Fixing build issue 2024-01-24 14:26:08 +02:00
Thomas Georgios Giannos ca4a9db3f8 Started aligning notification service entities with the database, code cleanup 2024-01-24 14:24:58 +02:00
amentis 7d38ab742d update validators with list null or empty 2024-01-24 13:55:28 +02:00
amentis d0faa6713d update validators with list null or empty 2024-01-24 13:54:26 +02:00
amentis b5c31590d3 add description template editor validator (in progress) 2024-01-24 11:40:32 +02:00
Efstratios Giannopoulos c30f499f30 change notification interceptor 2024-01-24 10:29:44 +02:00
Efstratios Giannopoulos d5292f5cec reference migration changes 2024-01-23 17:20:46 +02:00
amentis f49f6d1c04 add dmp editor re apply validators 2024-01-23 14:12:50 +02:00
Thomas Georgios Giannos 6502221343 Setting userId from userScope on NotifyEvent in contact support service 2024-01-23 11:53:49 +02:00
amentis 470de047d8 add description template re apply validators and small changes 2024-01-22 18:16:45 +02:00
Thomas Georgios Giannos 21b5201bf2 Fixes on notification service NotifyIntegrationEventHandler 2024-01-22 18:03:34 +02:00
amentis 101a0aace9 add notification template editor validators 2024-01-22 11:35:40 +02:00
amentis c26c472ea8 add notification service persist validators 2024-01-22 11:27:24 +02:00
amentis dcf5a5d690 update notification service poms 2024-01-22 11:06:59 +02:00
Diamantis Tziotzios ef02fa806e various fixes 2024-01-19 18:28:53 +02:00
amentis d60ecc4f1c fix update form validators 2024-01-19 16:23:34 +02:00
Thomas Georgios Giannos 53062a879f Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-01-19 15:12:44 +02:00
Thomas Georgios Giannos a56a9075b1 Fixes on notification service and core 2024-01-19 15:12:33 +02:00
Efstratios Giannopoulos 698c27747d change DmpPropertiesPersist to use map 2024-01-19 15:12:03 +02:00
Diamantis Tziotzios d4739ed1d0 small validation fix 2024-01-19 15:00:46 +02:00
Efstratios Giannopoulos 409b96f518 Merge branch 'dmp-refactoring' of code-repo.d4science.org:MaDgiK-CITE/argos into dmp-refactoring 2024-01-19 14:55:38 +02:00
Efstratios Giannopoulos c94d57f3a0 upgrade validations 2024-01-19 14:52:39 +02:00
Diamantis Tziotzios c4dac0e7d0 various ui fixes 2024-01-19 14:28:31 +02:00
amentis 9356352e7d fix reference type editor validators 2024-01-18 14:40:51 +02:00
Diamantis Tziotzios 5e32f1e74d Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-01-18 14:23:46 +02:00
Diamantis Tziotzios 7ad8077bc8 changes on the dmp editor frontend 2024-01-18 14:23:20 +02:00
amentis ace6ce1119 fix dmp blueprint editor validators 2024-01-18 11:59:42 +02:00
George Kalampokis 17dc3e47f1 Minor change 2024-01-18 10:31:46 +02:00
George Kalampokis 3f436846f6 Fix some merge issues 2024-01-18 10:28:16 +02:00
George Kalampokis e39d8d25b6 Merge branch 'dmp-refactoring-file-transformer-builder' into dmp-refactoring 2024-01-18 10:11:29 +02:00
George Kalampokis 3749365e87 Merge remote-tracking branch 'origin/dmp-refactoring' into dmp-refactoring 2024-01-18 10:10:23 +02:00
George Kalampokis cd696bf55a Yet another fix and set proper file transformer base version 2024-01-18 10:08:46 +02:00
amentis 3bd60509e7 fix persist validators 2024-01-17 18:20:39 +02:00
Thomas Georgios Giannos d0df9c7e79 Fixing missing parts on notification service migration 2024-01-17 17:36:22 +02:00
George Kalampokis 01d78cd491 Fix Front End's File Export UI 2024-01-17 14:47:32 +02:00
George Kalampokis aa75b3e3ab Update file transformer Service and add xml transformer config 2024-01-17 14:31:31 +02:00
Efstratios Giannopoulos 70c94c5bdc update validator package 2024-01-17 12:04:33 +02:00
Efstratios Giannopoulos b76a158824 Merge branch 'dmp-refactoring' of code-repo.d4science.org:MaDgiK-CITE/argos into dmp-refactoring 2024-01-17 11:20:33 +02:00
Efstratios Giannopoulos 200948d962 update validator package 2024-01-17 11:20:02 +02:00
Diamantis Tziotzios 85e299a4b8 backend dynamic field cleanup 2024-01-17 10:42:46 +02:00
Thomas Georgios Giannos aab7571763 Notification service upgrade to Spring Boot 3, fixing startup and dependency issues 2024-01-16 19:13:07 +02:00
George Kalampokis 7b963858f2 Finalize File Transformer Builder 2024-01-16 18:07:13 +02:00
Efstratios Giannopoulos b04c0aebab confirmRemoveCredential changes 2024-01-16 12:56:48 +02:00
Efstratios Giannopoulos 37aa6061a4 add locale config 2024-01-16 12:51:38 +02:00
Efstratios Giannopoulos 1828e28485 Merge branch 'dmp-refactoring' of code-repo.d4science.org:MaDgiK-CITE/argos into dmp-refactoring 2024-01-16 12:28:36 +02:00
Efstratios Giannopoulos d1cad30fcb add CredentialData 2024-01-16 12:26:29 +02:00
amentis 412c778d8c add backend validation in language, references, tenant,supportive material editor forms. 2024-01-16 11:55:46 +02:00
Diamantis Tziotzios d760209d20 more dmp editor frontend changes 2024-01-15 18:47:34 +02:00
Efstratios Giannopoulos 04381aec20 user credential changes 2024-01-15 18:03:12 +02:00
Efstratios Giannopoulos f6b7b6e00d add dmp properties models 2024-01-15 15:06:50 +02:00
Efstratios Giannopoulos 9b079e4d4d old code cleanup 2024-01-15 14:16:20 +02:00
Efstratios Giannopoulos 4da8c2a6a9 merge remove credential changes 2024-01-15 13:57:33 +02:00
Diamantis Tziotzios 0e61925f8d validators remove logic 2024-01-15 13:33:49 +02:00
amentis 0d65c38668 add in app notification fallback from db 2024-01-12 18:32:27 +02:00
Diamantis Tziotzios c7a3b58019 validator fixes 2024-01-12 18:22:06 +02:00
amentis 951f34e0cc fix notification, inapp notification permissions 2024-01-12 15:57:38 +02:00
Efstratios Giannopoulos 141ef488e5 Merge branch 'dmp-refactoring' of code-repo.d4science.org:MaDgiK-CITE/argos into dmp-refactoring 2024-01-12 15:00:58 +02:00
Efstratios Giannopoulos 4b9b5cc056 dmp reference changes 2024-01-12 15:00:34 +02:00
amentis 9e413d77f2 add user field in notification listing and small changes in other UI listings 2024-01-12 14:01:59 +02:00
Thomas Georgios Giannos a2edcd6a04 Notification service config update 2024-01-12 13:56:22 +02:00
Thomas Georgios Giannos 93ce7ecd6d Notification service config update 2024-01-12 13:55:50 +02:00
Thomas Georgios Giannos 2fb387825d Notification service inbox event handlers 2024-01-12 09:47:31 +02:00
Efstratios Giannopoulos df7a43d2de Merge branch 'dmp-refactoring' of code-repo.d4science.org:MaDgiK-CITE/argos into dmp-refactoring 2024-01-11 18:23:39 +02:00
Efstratios Giannopoulos 4d60698327 public contact send changes 2024-01-11 18:23:21 +02:00
George Kalampokis 3d5be3a00a Add more missing field on File Transformer Builder 2024-01-11 18:02:38 +02:00
amentis 479159ff86 add notifications listing ui 2024-01-11 17:59:27 +02:00
Efstratios Giannopoulos ab8ad0be51 role editor bug fix 2024-01-11 16:40:53 +02:00
amentis 46ba3dcb62 mine in app notification listing changes 2024-01-11 12:16:50 +02:00
amentis cb7d5b342f fix read all inapp notifications query 2024-01-11 10:47:57 +02:00
amentis b2e2fc593f small change 2024-01-10 17:54:30 +02:00
amentis 17d97bb3b3 add inapp notification events in main app 2024-01-10 17:46:45 +02:00
amentis 708fa69c53 add more in app notification templates 2024-01-10 15:59:46 +02:00
amentis 29bea9f246 add inapp notification listing like filter and read all sql query 2024-01-10 15:12:26 +02:00
amentis c7ea2ce2db change in app notification listing 2024-01-10 14:24:32 +02:00
Efstratios Giannopoulos d0157fa0e5 bug fixes 2024-01-09 18:28:04 +02:00
Efstratios Giannopoulos e123338a2c Merge branch 'dmp-refactoring' of code-repo.d4science.org:MaDgiK-CITE/argos into dmp-refactoring 2024-01-09 16:02:47 +02:00
Efstratios Giannopoulos 59aae92a0e elastic changes 2024-01-09 16:02:12 +02:00
amentis da657b667b add in app notification navbar 2024-01-09 15:52:07 +02:00
Efstratios Giannopoulos 1f92872158 elastic changes 2024-01-09 14:53:48 +02:00
amentis 3f85f1c9af add inapp notification ui 2024-01-08 18:32:07 +02:00
amentis c36aff22e8 inapp notification changes 2024-01-08 18:29:23 +02:00
George Kalampokis 742fa49a7c Fix File Transformer builder issues and add support for the File Storage Service 2024-01-08 17:54:30 +02:00
Efstratios Giannopoulos 3fc04a1e3a simplify description template fielddata 2024-01-08 16:10:29 +02:00
Efstratios Giannopoulos 371dcd5a61 elastic changes 2024-01-08 13:25:56 +02:00
Efstratios Giannopoulos 614fa9314a prefiling service refactor 2024-01-08 12:58:00 +02:00
Efstratios Giannopoulos 658310d8ce prefiling service refactor 2024-01-05 18:32:24 +02:00
George Kalampokis 71746419fc Add FileTransformer Builders 2024-01-05 18:06:16 +02:00
amentis 043b43b9be notification template UI small changes 2024-01-05 18:02:06 +02:00
Thomas Georgios Giannos e8553b1605 Resolving some validations applying based on status 'Finalized' 2024-01-05 17:10:13 +02:00
amentis 34df0b640c fix query available languages by ordinal 2024-01-05 16:27:37 +02:00
amentis 8807d42121 fix supportive material error 2024-01-05 15:55:18 +02:00
amentis a5f88db680 fix dmp invitation dialog 2024-01-05 15:33:27 +02:00
Thomas Georgios Giannos 9dd0405dc8 Resolving validation service implementation not available after cleanup of old code 2024-01-05 15:18:28 +02:00
Thomas Georgios Giannos b7d1424e0c Code cleanup 2024-01-05 14:02:22 +02:00
Thomas Georgios Giannos 897d099c2c Resolving issues with validators, removing old validation methods 2024-01-05 13:32:38 +02:00
amentis 7ba374d844 small fix 2024-01-05 11:41:57 +02:00
amentis a3fb03b41b fix contact support UI 2024-01-05 11:34:21 +02:00
Efstratios Giannopoulos c9640bcb54 add dmp associated user query 2024-01-05 11:05:40 +02:00
Efstratios Giannopoulos 1a567c9a81 authz changes 2024-01-04 18:09:09 +02:00
amentis 6a077d2b09 add more UI notification types 2024-01-04 16:58:10 +02:00
Efstratios Giannopoulos f8e1b4ab8b add contact support 2024-01-04 16:25:07 +02:00
amentis 065cd249c9 add notification type UI dropdown 2024-01-04 15:17:56 +02:00
Thomas Georgios Giannos 0e1a9c88b1 Implementing validators for Deposit request models (completed) 2024-01-04 13:31:14 +02:00
Efstratios Giannopoulos c056e04a89 remove old notification 2024-01-04 13:23:16 +02:00
Efstratios Giannopoulos a53396e38a remove content 2024-01-04 13:19:00 +02:00
Efstratios Giannopoulos 26ab1fb612 remove old notification 2024-01-04 13:11:13 +02:00
Efstratios Giannopoulos 5b18809da0 remove old lock 2024-01-04 13:05:06 +02:00
Efstratios Giannopoulos 73b0272672 Merge branch 'dmp-refactoring' of code-repo.d4science.org:MaDgiK-CITE/argos into dmp-refactoring 2024-01-04 12:56:23 +02:00
Efstratios Giannopoulos f253fd965c remove old refence classes 2024-01-04 12:55:42 +02:00
Thomas Georgios Giannos 29022ee1cd Implementing validators for User persist models (completed) 2024-01-04 12:39:31 +02:00
Thomas Georgios Giannos 18a4684859 Implementing validators for Tenant and other persist models (completed) 2024-01-04 11:51:56 +02:00
Efstratios Giannopoulos ccd7d069cb reference refactor 2024-01-04 11:23:13 +02:00
Thomas Georgios Giannos eb2b5d4df3 Implementing validators for Reference persist models (completed) 2024-01-04 10:15:29 +02:00
amentis 659c213360 fix notification template tiny editor plugins 2024-01-03 18:28:43 +02:00
Efstratios Giannopoulos 503fe2c3dc Merge branch 'dmp-refactoring' of code-repo.d4science.org:MaDgiK-CITE/argos into dmp-refactoring 2024-01-03 18:22:41 +02:00
Efstratios Giannopoulos a4ced2be21 reference refactor 2024-01-03 18:22:24 +02:00
Thomas Georgios Giannos c4ec41bec1 Implementing validators for Reference persist models (not completed) 2024-01-03 18:09:14 +02:00
amentis 8bccb9a224 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2024-01-03 16:49:05 +02:00
amentis 438333786b fix formatting notification template UI 2024-01-03 16:46:57 +02:00
Thomas Georgios Giannos e5410f39fc Implementing validators for Reference persist models (not completed) 2024-01-03 16:45:57 +02:00
Efstratios Giannopoulos b87612c783 code cleanup 2024-01-03 16:21:39 +02:00
Efstratios Giannopoulos 71343c51e5 Add excludedTags, bug fixes 2024-01-03 14:06:26 +02:00
amentis 88b4bb0d2f add fallback notification template 2024-01-03 10:14:03 +02:00
Thomas Georgios Giannos 8d5b3d0426 Implementing validators for Dmp persist models (completed) 2024-01-02 17:39:50 +02:00
Thomas Georgios Giannos 3f554554fd Implementing validators for Dmp blueprint persist models (completed) 2024-01-02 14:10:35 +02:00
Thomas Georgios Giannos 1462b9944d Implementing validators for Description template related persist models (completed) 2024-01-02 11:50:32 +02:00
amentis 28238c7a6d change idpclaims.yml and add user interceptor 2024-01-02 11:06:10 +02:00
George Kalampokis 1fb516c8ef Merge remote-tracking branch 'origin/dmp-refactoring' into dmp-refactoring
# Conflicts:
#	dmp-frontend/src/app/core/model/file/file-format.model.ts
2024-01-02 09:52:47 +02:00
George Kalampokis e6278bff41 Add missing file format model 2024-01-02 09:52:03 +02:00
Diamantis Tziotzios de67f17603 more frontend changes 2023-12-29 18:36:02 +02:00
Diamantis Tziotzios 7b28f499a8 frontend cleanup 2023-12-29 17:04:16 +02:00
Diamantis Tziotzios 244e0e83a2 more frontend changes 2023-12-28 17:18:49 +02:00
Diamantis Tziotzios 2d377f6003 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2023-12-22 19:21:28 +02:00
Thomas Georgios Giannos 2a6b047327 Implementing validators for Description template related persist models (not completed) 2023-12-22 19:00:53 +02:00
Thomas Georgios Giannos 63ffeabe62 Implementing validators for Description related persist models, action confirmation and dmp clone persist (in progress) 2023-12-21 18:45:49 +02:00
Diamantis Tziotzios 17150126cb Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2023-12-21 09:46:12 +02:00
amentis 62970ebd35 add notification service to config.json 2023-12-20 18:08:28 +02:00
amentis a8ee89fbc4 notification template ui changes 2023-12-20 18:02:55 +02:00
Diamantis Tziotzios 4178e2c619 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2023-12-20 17:58:38 +02:00
George Kalampokis ea371cb1a1 Merge remote-tracking branch 'origin/dmp-refactoring' into dmp-refactoring 2023-12-20 10:49:56 +02:00
George Kalampokis acc4557836 Update file-transformer-base version 2023-12-20 10:49:42 +02:00
Thomas Georgios Giannos 306053acba Updating definitions info on migrated licenses 2023-12-20 10:21:44 +02:00
George Kalampokis 8d7f6582ee Merge remote-tracking branch 'origin/dmp-refactoring' into dmp-refactoring 2023-12-20 09:35:25 +02:00
Diamantis Tziotzios 128fc3d29e Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2023-12-20 09:20:42 +02:00
Diamantis Tziotzios c6508a0082 description editor refactor - WIP 2023-12-20 09:20:38 +02:00
amentis b3b619d354 add UI Notification Template 2023-12-19 19:08:17 +02:00
amentis 35b0d58ec9 small changes in Notification Template 2023-12-19 19:05:19 +02:00
George Kalampokis 3b12e89ac2 Merge remote-tracking branch 'origin/dmp-refactoring' into dmp-refactoring 2023-12-19 18:09:15 +02:00
George Kalampokis 8f6d0cc33d Made File export menus dynamic and based on the available file transformers (no POM) 2023-12-19 18:09:09 +02:00
Thomas Georgios Giannos aa648cda1d Adding definitions info on migrated licenses 2023-12-19 16:37:54 +02:00
Thomas Georgios Giannos f9a47f2de7 Refactoring license migration 2023-12-19 15:57:13 +02:00
Efstratios Giannopoulos f09e031e0c move old validation logic 2023-12-19 15:46:31 +02:00
Efstratios Giannopoulos 4fa4cdc671 DescriptionTemplateTypePersist remove old validators 2023-12-19 15:11:22 +02:00
Efstratios Giannopoulos 68c56d70a4 new logic of validations 2023-12-19 14:54:17 +02:00
Thomas Georgios Giannos 3e97d0fdd1 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2023-12-19 10:38:54 +02:00
Thomas Georgios Giannos 6e0821f703 Updating file-transformer-base version to 0.0.1 2023-12-19 10:38:29 +02:00
Thomas Georgios Giannos 54a83e98ac Updating repositorydepositbase version to 0.0.1 2023-12-19 10:36:05 +02:00
Efstratios Giannopoulos bd64566e8c new validation logic 2023-12-18 18:23:37 +02:00
amentis ab68a0bd4d fix enums with database enum short logic 2023-12-18 14:22:48 +02:00
amentis 18a1d43f01 add notification template entity 2023-12-18 13:13:29 +02:00
George Kalampokis f06d3de1ec Merge remote-tracking branch 'origin/dmp-refactoring' into dmp-refactoring 2023-12-18 12:57:21 +02:00
George Kalampokis 625a322467 Add File transformer integration 2023-12-18 12:55:19 +02:00
amentis 6a6840fc79 add custom required one field validator 2023-12-18 10:30:37 +02:00
Thomas Georgios Giannos 0fd552f29c Updating repositorydepositbase 1.0.4 -> 2.0.0 to resolve dependency clash between old and new core modules on the migration tool 2023-12-15 16:52:45 +02:00
Thomas Georgios Giannos 25e9f2a5c7 Updating repositorydepositbase 1.0.4 -> 2.0.0 to resolve dependency clash between old and new core modules on the migration tool 2023-12-15 16:52:26 +02:00
amentis 653991a066 change dmpInvitationExisting User template 2023-12-15 16:06:30 +02:00
Thomas Georgios Giannos a9eb2ff8a7 Resolving migration tool startup issues due to core module changes, change on handling of license json objects 2023-12-15 14:47:54 +02:00
amentis fd1d6c9b1a create dmpInvitationExistingUser notification and small changes 2023-12-15 11:51:08 +02:00
amentis bcd42e7ec1 change exception for confirm notifications requests 2023-12-15 10:15:00 +02:00
amentis 3990be182c add notifications to user,description,description-template 2023-12-14 18:19:43 +02:00
Thomas Georgios Giannos a213ca3e84 Migrating tags from elastic service 2023-12-14 17:37:43 +02:00
George Kalampokis f405fdc32a Add Maintenance on the Side bar 2023-12-14 15:02:13 +02:00
George Kalampokis 0b45dd6981 Refactor index-management (maintance refactor) 2023-12-14 14:34:39 +02:00
amentis e2c352bf00 add action confirmation entity and dmp notifications 2023-12-14 14:02:30 +02:00
Thomas Georgios Giannos e4d2cde296 Migrating licenses from dmps extra properties, while avoiding creating duplicates 2023-12-13 17:35:29 +02:00
amentis a72770868e rename notification templated 2023-12-13 12:25:26 +02:00
Efstratios Giannopoulos 8eda8402ab Merge branch 'dmp-refactoring' of code-repo.d4science.org:MaDgiK-CITE/argos into dmp-refactoring 2023-12-13 11:46:02 +02:00
Efstratios Giannopoulos 048980ac39 zenodo model changes 2023-12-13 11:42:59 +02:00
Thomas Georgios Giannos baae057c6a Fixing issues on building migration tool 2023-12-12 18:06:30 +02:00
Thomas Georgios Giannos 9f781853a7 Resolving role naming conflicts 2023-12-12 17:51:40 +02:00
Thomas Georgios Giannos 24bfd69e4d Error handling on user role assignment service 2023-12-12 17:04:01 +02:00
amentis f47f9721fe remove mail service 2023-12-12 16:42:11 +02:00
Thomas Georgios Giannos f46543f1a4 Fix on role naming compatibility 2023-12-12 16:32:37 +02:00
Thomas Georgios Giannos b46c4e19e2 Extracting subject id from user credentials for role mapping on Keycloak Api 2023-12-12 16:17:08 +02:00
amentis a94473be49 small change 2023-12-12 11:49:52 +02:00
amentis 86628a59a7 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2023-12-12 10:17:12 +02:00
amentis f6100a8ea2 add inbox, outbox 2023-12-12 10:14:26 +02:00
Thomas Georgios Giannos a42e858f71 Small fix 2023-12-12 09:38:25 +02:00
amentis 2a00fe7ec1 change lock service 2023-12-11 18:55:20 +02:00
amentis 28fad3ccc4 remove mail service 2023-12-11 18:47:35 +02:00
Efstratios Giannopoulos aa8c73b6ed security changes 2023-12-11 15:00:21 +02:00
Thomas Georgios Giannos e70db447c8 Adding and removing users from Keycloak groups on role assignment 2023-12-11 10:56:40 +02:00
amentis 880e8c5aa8 refactor lock entity 2023-12-08 18:05:48 +02:00
Thomas Georgios Giannos 0c34502f08 Fixing issues on Dataset public Api mappers 2023-12-08 17:21:06 +02:00
Thomas Georgios Giannos 038c78fb04 Configuring groups for user roles 2023-12-08 13:27:04 +02:00
Thomas Georgios Giannos e7c7d1f991 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2023-12-08 11:48:46 +02:00
Thomas Georgios Giannos 08a5b49d1d Supporting client roles for users on Keycloak API service 2023-12-08 11:48:32 +02:00
amentis 903388c3ce add missing body fields 2023-12-08 11:45:45 +02:00
amentis 0c6e800118 add notification microservice 2023-12-08 11:28:19 +02:00
amentis 5e72a4197b add notification microservice 2023-12-08 11:25:07 +02:00
Diamantis Tziotzios 56bd12a4e3 more ui changes 2023-12-06 23:10:01 +02:00
Efstratios Giannopoulos c1b197ea30 Dmp/Description changes 2023-12-06 18:33:01 +02:00
Thomas Georgios Giannos b9eba9edcb Fix on entity doi query 2023-12-06 18:08:15 +02:00
Thomas Georgios Giannos 8227f60cda Updating EntityDoi db script removing problematic column entity_type and adding a new one with the same name of type smallint in order for the queries to work properly 2023-12-06 18:02:42 +02:00
Thomas Georgios Giannos 9ba8751564 Fixing issues in public API mappers 2023-12-06 17:38:03 +02:00
amentis 5825aa642a add tenant users on User model 2023-12-06 17:07:14 +02:00
Thomas Georgios Giannos 37c170ea54 Adding mappers for description definitions to PagedDatasetProfile model 2023-12-06 16:14:07 +02:00
amentis dd7007128b small fix 2023-12-06 16:12:30 +02:00
amentis 46dccbfbdb add more sql scripts 2023-12-06 14:23:21 +02:00
amentis 908c530922 add tenant to tables 2023-12-06 14:21:25 +02:00
Efstratios Giannopoulos 85bd0de2d5 statistics changes 2023-12-06 14:18:19 +02:00
amentis bee0e9f152 fix update_notification script 2023-12-06 13:08:49 +02:00
amentis 2dac2326ee rename NTF to ntf scripts 2023-12-06 11:34:24 +02:00
amentis ce0075f30a fix update_notification script 2023-12-06 09:41:20 +02:00
Diamantis Tziotzios 9e13eb4d01 frontend dashboard changes 2023-12-05 22:36:00 +02:00
amentis 9685b323e1 add more sql scripts for fixing 2023-12-05 18:51:44 +02:00
Efstratios Giannopoulos dfb4761276 Merge branch 'dmp-refactoring' of code-repo.d4science.org:MaDgiK-CITE/argos into dmp-refactoring 2023-12-05 18:14:08 +02:00
Efstratios Giannopoulos c286838a30 add DashboardStatistics 2023-12-05 18:13:40 +02:00
amentis d2d6013389 add more sql scripts for Notification service 2023-12-05 16:57:06 +02:00
Efstratios Giannopoulos 2fb99d2fe7 add getMyRecentActivityItems 2023-12-05 16:05:37 +02:00
Efstratios Giannopoulos 2dee73ce1f support iso dates 2023-12-05 12:52:59 +02:00
amentis 5047d3b154 add sql scripts 2023-12-05 11:56:25 +02:00
Efstratios Giannopoulos bc0d39a72f bug fixes 2023-12-05 11:32:17 +02:00
Diamantis Tziotzios 46e56111f0 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2023-12-04 19:38:52 +02:00
Diamantis Tziotzios ad1539af59 dmp overview page refactor 2023-12-04 19:37:52 +02:00
Efstratios Giannopoulos 1a76942b5f add Description PersistStatus 2023-12-04 18:38:23 +02:00
Diamantis Tziotzios a72c7001f9 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2023-12-04 18:26:31 +02:00
Efstratios Giannopoulos e441fc958c bug fix 2023-12-04 18:19:27 +02:00
Efstratios Giannopoulos 418d36dd67 dmp changes 2023-12-04 18:16:57 +02:00
Diamantis Tziotzios 84726a250f Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2023-12-04 17:56:35 +02:00
Diamantis Tziotzios 7c9e36341b more ui changes 2023-12-04 17:56:12 +02:00
Efstratios Giannopoulos df87dbf76c use new subquery 2023-12-04 17:27:47 +02:00
Diamantis Tziotzios 567b09a26b Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2023-12-01 19:18:48 +02:00
Diamantis Tziotzios 6e997b300d refactored DmpListing, DescriptionListing, DescriptionOverview. 2023-12-01 19:18:41 +02:00
amentis 3ea60a4b43 add user roles listing filter 2023-12-01 13:18:20 +02:00
amentis 04d97fc2e2 add reference listing filter 2023-12-01 10:12:09 +02:00
amentis 63e5cde313 fix listing filters 2023-11-30 17:28:05 +02:00
Efstratios Giannopoulos 5965acc4aa migration changes 2023-11-30 14:09:20 +02:00
Efstratios Giannopoulos 3a70b4d700 bug fixes 2023-11-30 13:38:36 +02:00
Efstratios Giannopoulos 2d5c9df855 support xml columns 2023-11-30 13:38:22 +02:00
Efstratios Giannopoulos 2a766dc37f storage file fixes 2023-11-30 13:37:56 +02:00
amentis 4417532935 add checkbox to language editor UI 2023-11-30 10:37:58 +02:00
Diamantis Tziotzios 40ae38e8d9 more ui changes 2023-11-30 10:12:41 +02:00
Efstratios Giannopoulos 17d57dbc7a bug fix 2023-11-29 17:49:00 +02:00
Efstratios Giannopoulos 345c020869 Merge branch 'dmp-refactoring' of code-repo.d4science.org:MaDgiK-CITE/argos into dmp-refactoring 2023-11-29 17:46:19 +02:00
Efstratios Giannopoulos b40134e6a7 user info changes 2023-11-29 17:41:15 +02:00
amentis f1f987a157 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2023-11-29 17:17:23 +02:00
amentis 37349d8fca fix sql script 2023-11-29 17:07:40 +02:00
Thomas Georgios Giannos e3d00fb72e Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2023-11-29 17:01:07 +02:00
Thomas Georgios Giannos 351e2cb78d Updating pom for keycloak 2023-11-29 17:01:03 +02:00
Efstratios Giannopoulos 0decfb1474 migration fixes 2023-11-29 16:56:25 +02:00
amentis 388af4410d add sql script 2023-11-29 16:41:12 +02:00
Thomas Georgios Giannos baaddb6284 Adding keycloak service and dependency 2023-11-29 16:12:56 +02:00
amentis 10923d4d48 add ordinal in Language Entity 2023-11-29 16:06:40 +02:00
amentis cabb35cf19 add ordinal in Language Entity 2023-11-29 16:05:00 +02:00
amentis 8bcc11d9a1 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2023-11-29 15:38:36 +02:00
amentis 63a8820681 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring
# Conflicts:
#	dmp-frontend/src/app/ui/supportive-material-editor/supportive-material-editor.component.html
2023-11-29 15:32:03 +02:00
Diamantis Tziotzios d436fb4b2c script fix 2023-11-29 15:31:51 +02:00
amentis 2c914ead90 add ordinal in Language Entity 2023-11-29 15:27:27 +02:00
Diamantis Tziotzios b7ff88be3a Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2023-11-29 15:26:43 +02:00
Diamantis Tziotzios 7430477903 more frontend changes 2023-11-29 15:26:40 +02:00
Thomas Georgios Giannos bf07fed0f8 Refactoring on Dataset public API 2023-11-29 14:34:37 +02:00
Thomas Georgios Giannos 2fae4f41a7 Dmp on Dataset mapped for public API 2023-11-29 13:45:35 +02:00
Thomas Georgios Giannos f5f5d6345f Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2023-11-29 13:10:00 +02:00
Thomas Georgios Giannos b4d7312751 Dataset references mapped for public API 2023-11-29 13:07:46 +02:00
amentis 3dd7a42224 add query available language endpoint 2023-11-29 12:44:43 +02:00
Thomas Georgios Giannos 5b5f547b27 Dataset listing model mapper implemented for public API 2023-11-29 11:57:49 +02:00
Thomas Georgios Giannos c6642a726e Preparing fetching datasets for public API 2023-11-29 11:30:38 +02:00
amentis 439efbd98a small fix 2023-11-29 10:46:49 +02:00
amentis 126d47f9e4 add language file fallback method 2023-11-28 19:10:04 +02:00
amentis 3d5c718d52 change supportive material editor model 2023-11-28 19:06:15 +02:00
Thomas Georgios Giannos 319e1f0dca Preparing fetching of associated dataset profiles for dmps for public API 2023-11-28 18:04:26 +02:00
Thomas Georgios Giannos b3bc801cd4 Fetching dois for dmps for public API 2023-11-28 17:29:25 +02:00
Efstratios Giannopoulos d3d57e8838 Merge branch 'dmp-refactoring' of code-repo.d4science.org:MaDgiK-CITE/argos into dmp-refactoring 2023-11-28 17:24:47 +02:00
Efstratios Giannopoulos 337556265e add storage 2023-11-28 17:23:56 +02:00
Thomas Georgios Giannos e6cba30e4c Fetching funders on grants for dmps for public API 2023-11-28 16:50:00 +02:00
Thomas Georgios Giannos b00b048632 Fetching and building organizations for dmps for public API 2023-11-28 16:20:31 +02:00
Thomas Georgios Giannos 693f1dba7f Fetching and building grants for dmps for public API 2023-11-28 15:52:17 +02:00
Diamantis Tziotzios eb19b9a7d5 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring
# Conflicts:
#	dmp-frontend/src/app/core/common/enum/permission.enum.ts
2023-11-28 15:16:36 +02:00
Diamantis Tziotzios 00e5c69fac refdactored users listing 2023-11-28 15:15:16 +02:00
Efstratios Giannopoulos 1b92af8762 Merge branch 'dmp-refactoring' of code-repo.d4science.org:MaDgiK-CITE/argos into dmp-refactoring 2023-11-28 15:09:01 +02:00
Efstratios Giannopoulos 75d31cf627 Merge branch 'dmp-refactoring' of code-repo.d4science.org:MaDgiK-CITE/argos into dmp-refactoring
# Conflicts:
#	dmp-backend/core/src/main/java/eu/eudat/audit/AuditableAction.java
2023-11-28 15:07:41 +02:00
Efstratios Giannopoulos c5461dbc62 add storage service 2023-11-28 15:05:58 +02:00
Thomas Georgios Giannos df2086a0a7 Fetching and building researchers for dmps for public API 2023-11-28 15:05:51 +02:00
Thomas Georgios Giannos 92956f6598 Fetching and building users for dmps for public API 2023-11-28 14:25:29 +02:00
Thomas Georgios Giannos 0166bf8ece Refactoring and preparing for dmp and dataset conversion for public API 2023-11-28 12:54:08 +02:00
amentis 61218ed220 add Language entity and UI 2023-11-27 18:22:13 +02:00
Thomas Georgios Giannos 6fb601929a Migrating everything is needed for the public api refactor 2023-11-27 17:33:24 +02:00
amentis 516e639153 small fix 2023-11-27 14:58:29 +02:00
amentis 39802c6e5b add Language.sql 2023-11-27 14:51:44 +02:00
Thomas Georgios Giannos c3bb9b8ffa Entities cleanup 2023-11-27 14:46:30 +02:00
Efstratios Giannopoulos 8dbf275f3a migration changes 2023-11-27 12:20:15 +02:00
amentis 6b4424c634 add reference ui 2023-11-24 19:12:39 +02:00
Diamantis Tziotzios e6b22a5b27 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2023-11-24 18:42:32 +02:00
Diamantis Tziotzios 396c6e5b95 more frontend changes 2023-11-24 18:42:23 +02:00
Efstratios Giannopoulos aa0a86b4d1 migration changes 2023-11-24 18:19:22 +02:00
Diamantis Tziotzios 8a20687491 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2023-11-24 17:58:25 +02:00
Efstratios Giannopoulos c67e4c8c9f Merge branch 'dmp-refactoring' of code-repo.d4science.org:MaDgiK-CITE/argos into dmp-refactoring
# Conflicts:
#	dmp-migration-tool/web/src/main/java/eu/old/eudat/migration/DmpDatasetProfileMigrationService.java
#	dmp-migration-tool/web/src/main/java/eu/old/eudat/publicapi/migration/MigrationController.java
2023-11-24 17:26:18 +02:00
Thomas Georgios Giannos ccd650217b Fix on deleting duplicates from DmpDescriptionTemplates, delete all but one 2023-11-24 17:19:20 +02:00
Efstratios Giannopoulos c6f10b6a29 add user contact migration 2023-11-24 17:18:28 +02:00
Thomas Georgios Giannos 8ee149f094 Fixing duplicate selection from DmpDescriptionTemplates 2023-11-24 16:46:30 +02:00
amentis 3d18ed1fa6 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2023-11-24 15:12:26 +02:00
amentis d554e87093 add tenant config 2023-11-24 15:12:02 +02:00
Thomas Georgios Giannos 0934774b86 Adding UserDMP migration 2023-11-24 15:11:43 +02:00
Diamantis Tziotzios 9d37900a86 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2023-11-24 13:56:15 +02:00
Thomas Georgios Giannos 58d224b739 Small fix 2023-11-24 12:45:29 +02:00
Efstratios Giannopoulos e698b198e7 add description template to description 2023-11-24 12:39:26 +02:00
Thomas Georgios Giannos c60e90d638 Removing possible duplicate records after DmpDatasetProfile migration 2023-11-24 12:15:57 +02:00
Thomas Georgios Giannos a6d175dcb3 Adding migration for reference middle tables 2023-11-24 11:36:43 +02:00
Diamantis Tziotzios 1914444ff8 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2023-11-23 18:33:53 +02:00
Efstratios Giannopoulos e4801f94ed migration service changes 2023-11-23 18:09:17 +02:00
Diamantis Tziotzios 07daf34077 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2023-11-23 16:54:47 +02:00
Thomas Georgios Giannos eae9a5f7d3 Refactor DatasetMigrationService 2023-11-23 15:27:02 +02:00
Thomas Georgios Giannos f38febc22b Refactor DatasetMigrationService 2023-11-23 15:23:49 +02:00
Diamantis Tziotzios 3dbfc18fd6 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2023-11-23 15:06:16 +02:00
Efstratios Giannopoulos 9433beaaa6 dmp migration changes 2023-11-23 14:40:44 +02:00
Efstratios Giannopoulos e47a370088 reference migrate 2023-11-23 12:36:24 +02:00
Thomas Georgios Giannos 1e92d86356 Cleanup 2023-11-23 10:34:44 +02:00
Thomas Georgios Giannos 2936cbbb7a Adding dataset migration service 2023-11-23 10:26:40 +02:00
Diamantis Tziotzios c779bd00f0 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2023-11-23 09:48:21 +02:00
Efstratios Giannopoulos d426711904 Merge branch 'dmp-refactoring' of code-repo.d4science.org:MaDgiK-CITE/argos into dmp-refactoring 2023-11-22 18:35:22 +02:00
Efstratios Giannopoulos be4e723911 detach entities for migration 2023-11-22 18:34:51 +02:00
amentis 18452725bc add Tenant Entity 2023-11-22 18:01:58 +02:00
Efstratios Giannopoulos 93bbde9623 migration changes 2023-11-22 17:52:04 +02:00
Diamantis Tziotzios dbd4e6b549 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2023-11-22 17:00:54 +02:00
amentis f2c03c71cb addTenant.sql script 2023-11-22 16:39:14 +02:00
Diamantis Tziotzios 231efd05ac Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring
# Conflicts:
#	dmp-frontend/src/app/core/services/utilities/enum-utils.service.ts
2023-11-22 15:55:46 +02:00
Diamantis Tziotzios 6b95730280 pull commit 2023-11-22 15:54:14 +02:00
Efstratios Giannopoulos ac91b62d63 Merge branch 'dmp-refactoring' of code-repo.d4science.org:MaDgiK-CITE/argos into dmp-refactoring 2023-11-22 13:32:21 +02:00
Efstratios Giannopoulos 6f2d4f016d fix sql scripts 2023-11-22 13:31:00 +02:00
amentis 4187943654 add reference type auth enabled 2023-11-22 12:56:17 +02:00
amentis 62a5a6fe1d Merge remote-tracking branch 'origin/dmp-refactoring' into dmp-refactoring 2023-11-22 10:36:01 +02:00
amentis c19920afb2 add reference, referenceType, SupportiveMaterial 2023-11-22 10:29:29 +02:00
Thomas Georgios Giannos ad75ee1238 Small fix 2023-11-22 10:25:05 +02:00
Thomas Georgios Giannos 17b0f9bc06 Dmp migration refactored on DmpMigrationService 2023-11-22 10:24:30 +02:00
Efstratios Giannopoulos db6cb44ff8 Merge branch 'dmp-refactoring' of code-repo.d4science.org:MaDgiK-CITE/argos into dmp-refactoring
# Conflicts:
#	dmp-migration-tool/web/src/main/java/eu/old/eudat/publicapi/migration/MigrationController.java
2023-11-21 18:35:41 +02:00
Efstratios Giannopoulos a7f70568bb migrate organization reference 2023-11-21 18:33:26 +02:00
Thomas Georgios Giannos dc381c197d Adding properties to the migrated dmps 2023-11-21 17:33:54 +02:00
Efstratios Giannopoulos 08ea46f79b migration changes 2023-11-21 17:16:32 +02:00
Efstratios Giannopoulos 8536d8d03a dmp changes 2023-11-21 14:26:14 +02:00
Efstratios Giannopoulos f92b0c238a Merge branch 'dmp-refactoring' of code-repo.d4science.org:MaDgiK-CITE/argos into dmp-refactoring 2023-11-21 13:16:50 +02:00
Efstratios Giannopoulos 91af36cdcd config updates 2023-11-21 13:16:33 +02:00
Efstratios Giannopoulos c0e57b363d elastic manage service 2023-11-21 13:15:31 +02:00
amentis e1985368aa add dependencies to reference type source base 2023-11-21 12:51:26 +02:00
Efstratios Giannopoulos e62d765796 code clean up 2023-11-21 12:15:29 +02:00
Efstratios Giannopoulos 64d92e864d user clean up 2023-11-21 11:49:15 +02:00
Thomas Georgios Giannos f6a6bab04d Migration controller refactoring 2023-11-21 11:41:11 +02:00
Diamantis Tziotzios 033492a25c Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2023-11-21 10:07:50 +02:00
Diamantis Tziotzios 8908936ec6 small fix 2023-11-21 10:07:46 +02:00
Thomas Georgios Giannos 99bf7d29f9 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2023-11-21 10:00:25 +02:00
Thomas Georgios Giannos eb9ae3af48 Allignment with core changes 2023-11-21 10:00:18 +02:00
Efstratios Giannopoulos ff93e4e39b user table sql scripts 2023-11-20 17:18:12 +02:00
Thomas Georgios Giannos 4d01463c72 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2023-11-20 17:14:54 +02:00
Thomas Georgios Giannos caf7ec09c4 Adding converter for Instants to Dates 2023-11-20 17:11:57 +02:00
Efstratios Giannopoulos 6de7268465 user changes 2023-11-20 17:09:24 +02:00
Efstratios Giannopoulos 3b3dc6fffd sync db tables for description 2023-11-20 17:08:43 +02:00
Thomas Georgios Giannos 3a033a655b Fixing issues, resolving column naming conflicts between old and new entity classes 2023-11-20 16:44:55 +02:00
Thomas Georgios Giannos ea7fa62922 Migrating packages to resolve conflicts with the refactored project (part 2) 2023-11-20 12:29:24 +02:00
Thomas Georgios Giannos ee4636e508 Migrating packages to resolve conflicts with the refactored project 2023-11-20 12:19:02 +02:00
Thomas Georgios Giannos 75471e5587 Resolving conflicts with database changes relating with DMPs entities and the new refactored code 2023-11-20 11:12:45 +02:00
Efstratios Giannopoulos 91f7dbd785 Merge branch 'dmp-refactoring' of code-repo.d4science.org:MaDgiK-CITE/argos into dmp-refactoring 2023-11-17 19:02:02 +02:00
Efstratios Giannopoulos a97976296b user refactor 2023-11-17 19:01:44 +02:00
Diamantis Tziotzios 63f9fead96 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2023-11-17 09:37:37 +02:00
Thomas Georgios Giannos 765eff356d Removing 'old' migration tool folder 2023-11-16 17:26:41 +02:00
Thomas Georgios Giannos 6e65d22fce Adding new version of dmp-migration-tool to resolve java version issues, moving previous to 'old' folder to delete later 2023-11-16 17:25:22 +02:00
Diamantis Tziotzios df58a254b2 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2023-11-16 15:41:01 +02:00
amentis f2ee851bab reference type persist and editor 2023-11-16 15:40:25 +02:00
Diamantis Tziotzios f1d2b9d8d4 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2023-11-16 15:37:41 +02:00
Diamantis Tziotzios 22bd07451a lang change 2023-11-16 15:37:36 +02:00
Efstratios Giannopoulos dec8f6354c remove old data entities 2023-11-16 14:01:39 +02:00
Efstratios Giannopoulos 7c8b385146 add elastic dev config 2023-11-16 10:43:41 +02:00
Efstratios Giannopoulos 6c49b7e7c2 description persist 2023-11-15 17:06:49 +02:00
amentis e9ae5126f8 fix reference type persist and editor 2023-11-15 16:09:24 +02:00
Thomas Georgios Giannos 9cff8fb762 Adding .gitignore on dmp-migration-tool to ignore build files 2023-11-15 15:35:03 +02:00
Efstratios Giannopoulos 5cfdc4be07 elastic changes 2023-11-15 14:34:48 +02:00
Thomas Georgios Giannos 3aa6cdaf29 Adding new dmp migration tool folder, resolving class conflicts to be able to build the tool 2023-11-15 13:49:00 +02:00
Efstratios Giannopoulos 332ee8c59e add version status to dmp, description template 2023-11-14 18:18:20 +02:00
Efstratios Giannopoulos e103f40763 change queryable dependencies 2023-11-14 16:27:46 +02:00
Efstratios Giannopoulos 0e1408e532 add public description 2023-11-14 16:08:48 +02:00
Efstratios Giannopoulos 1324029804 remove old elastic 2023-11-14 13:41:57 +02:00
Efstratios Giannopoulos f0264eefb9 elastic changes 2023-11-14 12:24:14 +02:00
Thomas Georgios Giannos 34ce4f6928 Adding export on dmp service and controller (existing service not yet wired up) 2023-11-14 11:44:01 +02:00
Thomas Georgios Giannos d50a058296 Small fix 2023-11-13 17:05:25 +02:00
Thomas Georgios Giannos 5edaf1c74e Adding dmp user association, adding finalization status check on persist workflow 2023-11-13 16:46:35 +02:00
Thomas Georgios Giannos ff35ad6aab Renames on 'datas' 2023-11-13 09:39:31 +02:00
Thomas Georgios Giannos 1cee5fb49f Various fixes 2023-11-10 19:11:15 +02:00
Thomas Georgios Giannos 0c4cf467d8 Adding description cloning method on service, adding missing functionality on dmp new-version and cloning, dmp persist fix 2023-11-10 16:13:55 +02:00
amentis c2c1d834cc fix reference type persist and editor 2023-11-10 13:03:08 +02:00
amentis 3ecb1ed982 rename reference type definition fields and fix listing 2023-11-09 18:25:35 +02:00
amentis 33672e5ce8 create UI Reference Type Editor, Listing 2023-11-09 15:43:08 +02:00
Thomas Georgios Giannos 009dad8cba Adding clone dmp persist model, exposing new version and clone methods to the API 2023-11-09 14:10:32 +02:00
Efstratios Giannopoulos 41fc3407eb description refactor 2023-11-09 11:29:42 +02:00
Efstratios Giannopoulos 7ef668eede Merge branch 'dmp-refactoring' of code-repo.d4science.org:MaDgiK-CITE/argos into dmp-refactoring
# Conflicts:
#	dmp-backend/core/src/main/java/eu/eudat/query/DmpUserQuery.java
2023-11-08 18:45:01 +02:00
Efstratios Giannopoulos c1b9e72c2f query authz first implementation 2023-11-08 18:42:52 +02:00
Thomas Georgios Giannos dab5986688 Adding new version dmp persist model, moving associated users and references to new dmp with new version 2023-11-08 17:13:07 +02:00
Efstratios Giannopoulos 0bbad595f5 update logging, db configurations 2023-11-08 13:37:16 +02:00
Thomas Georgios Giannos e22ba13caf Adding user as owner on new dmp persist 2023-11-08 11:45:33 +02:00
Efstratios Giannopoulos e81e6dd89a Merge branch 'dmp-refactoring' of code-repo.d4science.org:MaDgiK-CITE/argos into dmp-refactoring
# Conflicts:
#	dmp-backend/core/src/main/java/eu/eudat/model/builder/DmpBuilder.java
2023-11-07 17:08:44 +02:00
Efstratios Giannopoulos 8cd8da6d98 add public models 2023-11-07 17:07:24 +02:00
Thomas Georgios Giannos 24aba556ef Small fix 2023-11-07 16:34:26 +02:00
Thomas Georgios Giannos 3e15749b56 Added dmp users on dmp builder 2023-11-07 16:18:18 +02:00
Thomas Georgios Giannos 4e99fb08e9 merge 2023-11-07 16:12:54 +02:00
Thomas Georgios Giannos 0e6a59ef3d Added dmp users on dmp builder 2023-11-07 16:05:12 +02:00
Efstratios Giannopoulos 0644e61962 description refactor 2023-11-07 14:53:36 +02:00
Thomas Georgios Giannos 4a8c3640de Added dmp user censor 2023-11-07 14:44:26 +02:00
Thomas Georgios Giannos 001cd0828b Added dmp description template deletions on description template deleter 2023-11-07 14:32:37 +02:00
amentis cfb7da7968 fix referenceTypePersist 2023-11-07 14:02:28 +02:00
amentis 5001968da7 fix issue 2023-11-07 13:18:17 +02:00
amentis 88bf760165 create referenceType entity 2023-11-07 13:15:25 +02:00
Efstratios Giannopoulos df5ae4a278 description refactor 2023-11-07 13:11:21 +02:00
Efstratios Giannopoulos ac8d36d1d5 Merge branch 'dmp-refactoring' of code-repo.d4science.org:MaDgiK-CITE/argos into dmp-refactoring 2023-11-07 12:37:02 +02:00
Efstratios Giannopoulos 1469e22185 description refactor 2023-11-07 12:36:36 +02:00
Thomas Georgios Giannos f878601609 Added missing converter annotations on entity enums 2023-11-07 12:28:40 +02:00
Thomas Georgios Giannos ee68224f58 Added DmpUser table and stack 2023-11-07 12:12:14 +02:00
Thomas Georgios Giannos ea58ed2e44 Fix on entity doi entity id, removed reference on Dmps, fix on dmp reference query 2023-11-07 11:09:54 +02:00
Efstratios Giannopoulos 05f73889be Merge branch 'dmp-refactoring' of code-repo.d4science.org:MaDgiK-CITE/argos into dmp-refactoring 2023-11-07 10:32:02 +02:00
Efstratios Giannopoulos 662c5ad7e8 description refactor 2023-11-07 10:29:27 +02:00
Diamantis Tziotzios a9eb2b4513 fix backend build error 2023-11-07 10:02:09 +02:00
George Kalampokis 1ef613c87e Merge remote-tracking branch 'origin/dmp-refactoring' into dmp-refactoring 2023-11-06 17:43:24 +02:00
George Kalampokis 9e27558df7 Update some of the queries in the new Deposit mapper 2023-11-06 17:43:20 +02:00
Thomas Georgios Giannos d3cd37d57a Fix on dmp persist 2023-11-06 17:43:03 +02:00
Thomas Georgios Giannos a5f46e9328 Adding description templates on dmp persist 2023-11-06 17:42:12 +02:00
George Kalampokis 49e34f9abc Merge remote-tracking branch 'origin/dmp-refactoring' into dmp-refactoring 2023-11-06 17:25:00 +02:00
George Kalampokis 5ceed08b9c Add missing apply filter 2023-11-06 17:22:36 +02:00
Efstratios Giannopoulos 20873ca13e Merge branch 'dmp-refactoring' of code-repo.d4science.org:MaDgiK-CITE/argos into dmp-refactoring
# Conflicts:
#	dmp-backend/web/src/main/java/eu/eudat/controllers/Admin.java
2023-11-06 17:17:34 +02:00
Efstratios Giannopoulos 87e22040c5 description template migration 2023-11-06 17:16:55 +02:00
George Kalampokis e42bdcfc0a Code cleanup 2023-11-06 16:58:01 +02:00
George Kalampokis c6cdcc4b15 Apply requested changes to RepositoryDepositService 2023-11-06 16:56:59 +02:00
Efstratios Giannopoulos d8b1211a12 Merge branch 'dmp-refactoring' of code-repo.d4science.org:MaDgiK-CITE/argos into dmp-refactoring
# Conflicts:
#	dmp-backend/web/src/main/java/eu/eudat/controllers/FileController.java
#	dmp-backend/web/src/main/java/eu/eudat/models/data/listingmodels/DataManagementPlanOverviewModel.java
2023-11-06 16:19:06 +02:00
Efstratios Giannopoulos 81528dfe55 description refactor 2023-11-06 16:17:57 +02:00
amentis 11bb1a3c8c create Supportive Material query public 2023-11-06 15:25:04 +02:00
Thomas Georgios Giannos 9b9cf0de4d Adding dmp-description-template stack 2023-11-06 13:31:01 +02:00
amentis fda8fcef2c create Supportive Material Entity, (persist in progress) 2023-11-03 18:09:19 +02:00
George Kalampokis c636b3e6b4 Minor query optimization 2023-11-03 18:00:06 +02:00
George Kalampokis 7bb8e850e8 Add first implementation of the new Repository Deposit Service 2023-11-03 17:54:26 +02:00
Thomas Georgios Giannos b389ebf160 Fix on dmp references persisting flow 2023-11-03 16:47:54 +02:00
Thomas Georgios Giannos 2f20675348 Adding reference persisting on dmp persist (work in progress), adding separate persist models for dmp properties 2023-11-03 16:02:47 +02:00
Efstratios Giannopoulos 9cf91aab50 DescriptionTemplate refactor 2023-11-03 15:53:18 +02:00
Efstratios Giannopoulos 08caf64d02 DescriptionTemplate refactor 2023-11-03 14:53:10 +02:00
amentis c37530c022 add supportive material editor to UI 2023-11-03 13:30:11 +02:00
Efstratios Giannopoulos b6278ab1ef DescriptionTemplate refactor 2023-11-03 11:55:26 +02:00
Efstratios Giannopoulos d38f22ccbf DescriptionTemplate refactor 2023-11-02 18:37:12 +02:00
Thomas Georgios Giannos e02237e599 Adding new version service method for Dmps 2023-11-02 18:12:36 +02:00
Thomas Georgios Giannos 02d8132f3d Fix on new DmpDescriptionTemplate table 2023-11-02 17:55:34 +02:00
Thomas Georgios Giannos 281475bb85 Adding sql script for new DmpDescriptionTemplate table 2023-11-02 17:11:34 +02:00
Thomas Georgios Giannos 752935f6e5 Updating Dmp properties persist 2023-11-02 15:55:17 +02:00
Efstratios Giannopoulos 732dfd9bfb DmpBlueprint feractor 2023-11-02 14:13:13 +02:00
Thomas Georgios Giannos c3808b5548 Updating Dmp Entity fields to reflect the database changes (migration script not yet updated) 2023-11-02 13:45:32 +02:00
Efstratios Giannopoulos ac15e33a87 DescriptionTemplate refactor 2023-11-01 18:12:59 +02:00
George Kalampokis 3c799063cc Fix Deposit Configuration's Authentication system 2023-11-01 14:10:35 +02:00
Efstratios Giannopoulos 4e08d9f073 DescriptionTemplate refactor 2023-11-01 12:03:23 +02:00
amentis be9761b103 add more fields to reference-type.yml 2023-10-31 17:57:41 +02:00
Efstratios Giannopoulos 7e391582b5 User DescriptionTemplate refactor 2023-10-31 17:24:03 +02:00
Diamantis Tziotzios c08f05bc04 no message 2023-10-31 11:19:52 +02:00
Efstratios Giannopoulos 2b074f268d DescriptionTemplate refactor 2023-10-30 18:02:20 +02:00
amentis 477e4e498e add frontend reference search lookup 2023-10-30 17:53:30 +02:00
amentis f744573f02 add reference search builders, lookup 2023-10-30 17:15:40 +02:00
Diamantis Tziotzios 557c444bc1 frontend description template listing component 2023-10-30 15:30:46 +02:00
Efstratios Giannopoulos c06253bb20 DescriptionTemplate refactor 2023-10-30 15:07:59 +02:00
amentis 49d400662b add reference definition censor 2023-10-30 10:57:24 +02:00
amentis a0ac8df5ba rename sourceType 2023-10-30 10:43:50 +02:00
Diamantis Tziotzios 36c17b5853 frontend: description template model alignment 2023-10-27 20:10:21 +03:00
Diamantis Tziotzios 9201f265d2 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring
# Conflicts:
#	dmp-frontend/src/app/core/model/reference/reference.ts
2023-10-27 18:59:51 +03:00
Diamantis Tziotzios 7214745162 frontend dmp changes 2023-10-27 18:56:19 +03:00
Efstratios Giannopoulos bdcaee004d Merge branch 'dmp-refactoring' of code-repo.d4science.org:MaDgiK-CITE/argos into dmp-refactoring
# Conflicts:
#	dmp-backend/core/src/main/java/eu/eudat/audit/AuditableAction.java
#	dmp-backend/web/src/main/resources/config/permissions.yml
2023-10-27 18:52:34 +03:00
Efstratios Giannopoulos 57facf98e5 DescriptionTemplate refactor 2023-10-27 18:46:34 +03:00
amentis 9d3cc9e3d2 rename sourceType to referenceSourceType 2023-10-27 18:29:06 +03:00
amentis 92c165e904 add references definition xml,builder, persist 2023-10-27 17:35:35 +03:00
Thomas Georgios Giannos 65e8635c2f Removing unused dataset entity classes 2023-10-27 17:32:07 +03:00
Thomas Georgios Giannos 5d882c7e88 Drop old unused dataset related tables, small fix to migration script 2023-10-27 17:29:22 +03:00
Thomas Georgios Giannos e31970c7ea Adding migration scripts for Dmp, DmpReference, Description and DescriptionReference entities, other fixes / clear up dmp entity 2023-10-27 17:05:48 +03:00
Thomas Georgios Giannos 8d1c988135 Adding DescriptionReference lookup and linking on description entity builder 2023-10-27 13:48:17 +03:00
Thomas Georgios Giannos 60ca51fe00 Adding DescriptionReference entity stack (former Dataset*** entities) 2023-10-27 11:59:37 +03:00
amentis 7508cf8698 add created, updated in DmpReference 2023-10-27 11:41:44 +03:00
Diamantis Tziotzios e4203a3bb4 backend fixes 2023-10-27 09:54:49 +03:00
George Kalampokis d983e1e38e Add Deposit Security 2023-10-26 18:04:55 +03:00
amentis aecac1995d rename External Reference to Reference 2023-10-26 14:38:18 +03:00
amentis f006587f4a Merge remote-tracking branch 'origin/dmp-refactoring' into dmp-refactoring 2023-10-26 12:09:36 +03:00
amentis 5a55e5d739 rename External Reference to Reference 2023-10-26 12:08:45 +03:00
amentis bbb21fadba rename External Reference to Reference 2023-10-26 12:07:04 +03:00
Diamantis Tziotzios 4eca9b32c9 various backend fixes 2023-10-26 11:21:33 +03:00
Diamantis Tziotzios 129dbd163a minor fixes dmp blueprints and Dmps. 2023-10-25 20:53:47 +03:00
Diamantis Tziotzios 51cc5f4fd9 dmp blueprint frontend cleanup 2023-10-25 18:15:41 +03:00
Diamantis Tziotzios d1bac40f0f more blueprint editor fixes 2023-10-25 17:47:48 +03:00
amentis 45f8f51288 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2023-10-25 17:38:21 +03:00
amentis 032b30ed04 add DmpExternalReference to DmpBlueprint 2023-10-25 17:37:37 +03:00
Thomas Georgios Giannos 9a78d98751 Updating permissions.yml for dmps, entity_dois and descriptions 2023-10-25 16:55:10 +03:00
Thomas Georgios Giannos c169a103b7 Updating censors for dmp and description entities 2023-10-25 14:49:37 +03:00
amentis 1b66d19bde rename frontend external reference to fetcher external reference 2023-10-25 13:01:09 +03:00
amentis 7df098a010 add more to external reference controller, service 2023-10-25 12:42:34 +03:00
Thomas Georgios Giannos 079382556f Added controller for description entity (former dataset) 2023-10-25 11:48:19 +03:00
Thomas Georgios Giannos 7ab1313b83 Updated the dmp builder to be able to populate the associated descriptions on the dmps 2023-10-25 11:17:56 +03:00
amentis bf8edfad92 add ExternalReference, DmpExternalReference entities 2023-10-24 18:47:13 +03:00
Efstratios Giannopoulos a68ddd42ce Merge branch 'dmp-refactoring' of code-repo.d4science.org:MaDgiK-CITE/argos into dmp-refactoring
# Conflicts:
#	dmp-backend/core/src/main/java/eu/eudat/authorization/Permission.java
2023-10-24 18:01:38 +03:00
Efstratios Giannopoulos de566729f1 DmpBlueprint refactor 2023-10-24 18:00:11 +03:00
Thomas Georgios Giannos e149b61b58 Adding 'dmp' query option on 'description' query 2023-10-24 17:24:51 +03:00
Thomas Georgios Giannos 1e733cf704 Connecting 'dmp' entity with 'description' entity (description builder populating dmp data) 2023-10-24 17:07:28 +03:00
Thomas Georgios Giannos 3e7b9ca90b Optimize imports 2023-10-24 15:39:11 +03:00
Thomas Georgios Giannos e27468b596 Adding basic service for 'description' entity 2023-10-24 15:38:15 +03:00
Thomas Georgios Giannos 485f7311cd Adding builder and query for 'description' entity 2023-10-24 13:50:53 +03:00
Thomas Georgios Giannos e3536285aa Adding 'description' entity (former 'dataset' entity) 2023-10-24 12:47:48 +03:00
Efstratios Giannopoulos a68668f07e DmpBlueprint refactor 2023-10-24 12:13:05 +03:00
Thomas Georgios Giannos dc380cdc01 Small fix on dmp entity id definition 2023-10-24 11:35:19 +03:00
Diamantis Tziotzios 2472f6de42 more dmp blueprint frontend changes 2023-10-24 10:40:26 +03:00
Efstratios Giannopoulos 167d3d4a4b DmpBlueprint refactor 2023-10-23 18:13:34 +03:00
amentis 10615c6fa9 fix front enums 2023-10-23 17:58:56 +03:00
Efstratios Giannopoulos 3b9b348d4d update External Refence 2023-10-23 16:53:32 +03:00
Efstratios Giannopoulos fe7d6f59b1 DmpBlueprint refacto 2023-10-23 15:58:33 +03:00
Thomas Georgios Giannos f4d84aa807 Implemented controller for dmp entity, dmp lookup update 2023-10-23 14:45:05 +03:00
Thomas Georgios Giannos 074ca35970 Implemented service for dmp entity 2023-10-23 12:51:11 +03:00
Thomas Georgios Giannos eeaa35fab5 Added censor, deleter and lookup for Dmp entity 2023-10-23 12:23:51 +03:00
Diamantis Tziotzios 172caabcd2 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2023-10-23 11:58:32 +03:00
Diamantis Tziotzios 6a8cb2c853 more frontend dmp blueprint listing changes 2023-10-23 11:58:15 +03:00
Alexandros Mandilaras 65e80c9877 fix typos in greek and english translations 2023-10-23 11:57:44 +03:00
Thomas Georgios Giannos 61f2810fcc Renamed DMP -> Dmp to be consistent with the other entities 2023-10-23 11:31:07 +03:00
Diamantis Tziotzios 6d6a4e0341 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2023-10-23 11:27:27 +03:00
Diamantis Tziotzios 0c1509a1a1 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring
# Conflicts:
#	dmp-backend/core/src/main/java/eu/eudat/audit/AuditableAction.java
2023-10-23 11:27:03 +03:00
Thomas Georgios Giannos 10df3db7aa Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2023-10-23 11:17:23 +03:00
Thomas Georgios Giannos c338a93d71 Implemented builder and query for DMP entity, refactored services package 2023-10-23 11:16:58 +03:00
Efstratios Giannopoulos 6cde8ae2a9 add cross origin config 2023-10-23 11:15:08 +03:00
Efstratios Giannopoulos 3ad7441bb5 DmpBlueprint refactor 2023-10-23 10:21:25 +03:00
Diamantis Tziotzios 3422b147c8 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2023-10-22 13:34:12 +03:00
Efstratios Giannopoulos 30bff76163 Merge branch 'dmp-refactoring' of code-repo.d4science.org:MaDgiK-CITE/argos into dmp-refactoring
# Conflicts:
#	dmp-backend/core/src/main/java/eu/eudat/commons/enums/ExternalReferencesType.java
2023-10-20 19:17:14 +03:00
Efstratios Giannopoulos 88088d64fd DmpBlueprint refactor 2023-10-20 19:13:57 +03:00
Diamantis Tziotzios 9ed94450bd Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2023-10-20 18:01:15 +03:00
Diamantis Tziotzios 4d3098860d description template type and dmp blueprint frontend changes 2023-10-20 18:01:09 +03:00
amentis 0bd3ff6898 fix external references enums 2023-10-20 17:44:41 +03:00
Thomas Georgios Giannos a94cce47e8 Added DMP Entity (not integrated) 2023-10-20 16:48:55 +03:00
George Kalampokis 7d4b4c171b Apply some minor fixes 2023-10-20 11:57:25 +03:00
Efstratios Giannopoulos 0b3178177a changes for remote fetcher 2023-10-19 17:56:53 +03:00
Thomas Georgios Giannos 2a4e61f08f Added controller for EntityDoi entity 2023-10-19 17:48:41 +03:00
Thomas Georgios Giannos 727702023f Reverting changes on join DMP <-> EntityDoiEntity for now in order for the app to be able to run 2023-10-19 16:52:41 +03:00
Efstratios Giannopoulos 16604a8a50 bug fixes 2023-10-19 13:01:29 +03:00
Thomas Georgios Giannos 07ff58fbd9 Removing joins from DMP <-> EntityDoiEntity 2023-10-19 12:41:47 +03:00
Efstratios Giannopoulos a235eb98f4 task #9088 Authorization model should be changed to be Permission based 2023-10-19 10:44:20 +03:00
Efstratios Giannopoulos ce8ff28955 Merge branch 'dmp-refactoring' of code-repo.d4science.org:MaDgiK-CITE/argos into dmp-refactoring
# Conflicts:
#	dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/EntityDoiDao.java
#	dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/EntityDoiDaoImpl.java
#	dmp-backend/web/src/main/java/eu/eudat/logic/managers/DataManagementPlanManager.java
#	dmp-backend/web/src/main/java/eu/eudat/logic/managers/DepositManager.java
2023-10-18 19:03:35 +03:00
Efstratios Giannopoulos 52e59ac11c task #9088 Authorization model should be changed to be Permission based 2023-10-18 18:52:03 +03:00
George Kalampokis dc752f73ca Partially fix Deposit Logic and add support for upcomming micro-services 2023-10-18 18:15:52 +03:00
George Kalampokis 5885e3ae5c Fix DMP's funder tab 2023-10-18 18:14:02 +03:00
George Kalampokis 093837c395 Fix DMP user ownership error 2023-10-18 18:13:32 +03:00
amentis 7cba7b2346 add external references service 2023-10-18 18:05:39 +03:00
Thomas Georgios Giannos a38342e534 Removed EntityDao logic, added template stack, controller not yet implemented, db script not yet run 2023-10-18 17:58:36 +03:00
Diamantis Tziotzios 8574f33e56 update script 2023-10-18 14:04:43 +03:00
Efstratios Giannopoulos 941f2d69cc Merge branch 'dmp-refactoring' of code-repo.d4science.org:MaDgiK-CITE/argos into dmp-refactoring 2023-10-18 13:54:47 +03:00
Efstratios Giannopoulos 5c17027df2 fix delete user info additional data 2023-10-18 13:54:02 +03:00
amentis 5203ec4b72 fix remote fetcher 2023-10-18 13:53:52 +03:00
amentis b2119abc08 fix issue 2023-10-18 13:48:20 +03:00
Thomas Georgios Giannos b7d22b5b07 Moving existing entities from Data module to Core module 2023-10-18 13:04:53 +03:00
amentis 1cda821d9c fix issue 2023-10-18 13:00:17 +03:00
Diamantis Tziotzios e97479aa03 conf.json cleanup 2023-10-18 12:51:15 +03:00
amentis ad91234fd9 Merge remote-tracking branch 'origin/dmp-refactoring' into dmp-refactoring 2023-10-18 12:28:13 +03:00
amentis 17bb6bd4b0 add Supportive Material 2023-10-18 12:26:57 +03:00
Efstratios Giannopoulos 66c650495f Merge branch 'dmp-refactoring' of code-repo.d4science.org:MaDgiK-CITE/argos into dmp-refactoring 2023-10-18 12:10:50 +03:00
Efstratios Giannopoulos 27bcc31e54 task #9088 Authorization model should be changed to be Permission based 2023-10-18 12:10:24 +03:00
amentis 3dee4857f8 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring
 Conflicts:
	dmp-frontend/src/assets/config/config.json
2023-10-18 10:33:59 +03:00
amentis f67ada842e commit 2023-10-18 10:31:57 +03:00
Thomas Georgios Giannos 651319ac5c Excluded .run files from staging at .gitignore 2023-10-18 10:16:46 +03:00
amentis b8affa3033 change pom 2023-10-18 09:58:05 +03:00
Efstratios Giannopoulos 43f77a4497 add status and inactive 2023-10-17 17:48:02 +03:00
Efstratios Giannopoulos b3a73a50aa task #9088 Authorization model should be changed to be Permission based 2023-10-17 17:13:34 +03:00
Diamantis Tziotzios 9fd30b1198 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring
# Conflicts:
#	dmp-backend/core/pom.xml
2023-10-17 15:56:28 +03:00
Diamantis Tziotzios 3eaf326c50 Description Template Types backend refactored to new format. 2023-10-17 15:55:00 +03:00
Efstratios Giannopoulos 7ed111e936 task #9088 Authorization model should be changed to be Permission based 2023-10-17 15:22:05 +03:00
Efstratios Giannopoulos 419c4d64f8 database enum handle implementation 2023-10-17 13:45:59 +03:00
Efstratios Giannopoulos bd2807fbdf remove zenodo from user info 2023-10-17 12:40:47 +03:00
Efstratios Giannopoulos 925f195f5a database enum handle implementation 2023-10-17 12:39:29 +03:00
Efstratios Giannopoulos 6443654343 Merge branch 'dmp-refactoring' of code-repo.d4science.org:MaDgiK-CITE/argos into dmp-refactoring 2023-10-16 17:39:19 +03:00
Efstratios Giannopoulos 191f887530 database enum handle implementation 2023-10-16 17:38:12 +03:00
Thomas Georgios Giannos b537810406 Removed redundant code that calculated count on queries, already implemented on the data tools package 2023-10-16 12:22:41 +03:00
Thomas Georgios Giannos 234aa359c0 Removed redundant code that calculated count on queries, already implemented on the data tools package 2023-10-16 12:21:58 +03:00
Efstratios Giannopoulos d5c62539c5 task #9086 public urls support 2023-10-13 18:11:46 +03:00
George Kalampokis 5976084473 Fix security on LanguageController 2023-10-13 16:46:38 +03:00
George Kalampokis 959185a6c3 Merge remote-tracking branch 'origin/dmp-refactoring' into dmp-refactoring 2023-10-13 09:53:32 +03:00
George Kalampokis a9a3273f62 Fix compilation errors and fix swagger ui description formatting 2023-10-13 09:50:22 +03:00
Efstratios Giannopoulos 9c8488febb refresh token for api requests (401) 2023-10-12 18:29:27 +03:00
Efstratios Giannopoulos d14107062a task #9045 Refactor authentication mechanism to support using Keycloak 2023-10-12 17:13:04 +03:00
Efstratios Giannopoulos 5009d658ed task #9045 Refactor authentication mechanism to support using Keycloak 2023-10-12 16:16:19 +03:00
Efstratios Giannopoulos 055d29b95f Merge branch 'dmp-refactoring' of code-repo.d4science.org:MaDgiK-CITE/argos into dmp-refactoring
# Conflicts:
#	dmp-backend/web/pom.xml
#	dmp-backend/web/src/main/resources/config/application.yml
2023-10-12 12:04:26 +03:00
Diamantis Tziotzios 958fc468fa Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2023-10-12 10:57:52 +03:00
Diamantis Tziotzios 6b2fae03dd no message 2023-10-12 10:57:38 +03:00
George Kalampokis b845450ebd Update Swagger ui 2023-10-12 10:55:48 +03:00
Efstratios Giannopoulos 968f45d5b3 authn refactor 2023-10-11 17:53:12 +03:00
Efstratios Giannopoulos 8b05ee1d0f add cache yml 2023-10-11 10:09:46 +03:00
George Kalampokis de2f5e67fd Fix profile issue 2023-10-11 09:53:24 +03:00
George Kalampokis 755c79b7af Separate configuration to different files 2023-10-10 16:49:48 +03:00
George Kalampokis d45867585f Add missing files 2023-10-09 17:29:02 +03:00
George Kalampokis 166bea73bf Replace the old .properties configuration files with the .yml 2023-10-09 16:02:14 +03:00
Thomas Georgios Giannos 55aecd9c57 Updating description template type controller with apropriate auditing and logging, added censor, refactored query building to conform with other projects workflows 2023-10-09 11:17:16 +03:00
George Kalampokis cab2f1bc64 Add Environment variables 2023-10-09 10:38:46 +03:00
George Kalampokis b5cbe6a3d8 Merge remote-tracking branch 'origin/dmp-refactoring' into dmp-refactoring 2023-10-06 18:11:11 +03:00
George Kalampokis 70308db668 Add Authentication support for the remote fetcher and rework dataset template's autocomplete sources 2023-10-06 18:07:58 +03:00
Thomas Georgios Giannos 51fbbc933a Fixing detached entity error, entity id is auto generated by hibernate 2023-10-06 16:46:44 +03:00
Thomas Georgios Giannos c7778e80b9 Adding missing auditing configuration property 2023-10-06 15:22:38 +03:00
Thomas Georgios Giannos 39163ed6bc Updating cite validation library to 2.1.0 2023-10-06 15:10:58 +03:00
Thomas Georgios Giannos 0bb4c7ca15 Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring 2023-10-06 12:13:18 +03:00
Thomas Georgios Giannos 0b901205ee Adding auditing, naming convention change in API endpoints for description types 2023-10-06 12:13:09 +03:00
Diamantis Tziotzios 922c2110ac angular update fixes 2023-10-06 11:10:53 +03:00
Diamantis Tziotzios 5a46345f15 angular 16 update 2023-10-05 22:42:47 +03:00
Diamantis Tziotzios 96c2940eb0 angular 15 update 2023-10-05 16:58:45 +03:00
Diamantis Tziotzios 203ee4fb29 update to angular 14 2023-10-05 16:39:17 +03:00
George Kalampokis 05a724d757 Fix type definition issues 2023-10-05 15:23:48 +03:00
George Kalampokis 3d612812b0 Fix compile issue 2023-10-05 14:47:25 +03:00
Diamantis Tziotzios 66052f8af6 sync fixes 2023-10-05 14:12:39 +03:00
Bernaldo Mihasi b7f68f1a7e bug fixes
(cherry picked from commit 846405435c)
2023-10-05 14:04:26 +03:00
Bernaldo Mihasi f841c2a2cc update i18n
(cherry picked from commit dfc9e14003)
2023-10-05 14:04:20 +03:00
Bernaldo Mihasi 03f2bc862e 1) update dmp blueprint listing table view, 2) create clone functionality for dmp blueprints, 3) section description is not required in editor, 4) in the deletion of a dmp blueprint check if any dmps are accosiated with it 2023-10-05 14:04:10 +03:00
Bernaldo Mihasi 4373bf4b00 bug fixes: 1) when creating description template type check only for non deleted types, 2) dmp docx/pdf export: check if system fields exist 3) when creating/updating dmp check if value for extra fields is set, 4) when unchecking the 'Description Templates' checkbox in the blueprint editor, clear any templates selected 2023-10-05 14:02:20 +03:00
Bernaldo Mihasi 09dcf5328d add type attribute in xml import/export of a description template
(cherry picked from commit 3d10e8ad28)
2023-10-05 14:00:30 +03:00
Bernaldo Mihasi c58de51b33 bug fixes
(cherry picked from commit 53b61853e1)
2023-10-05 14:00:23 +03:00
Bernaldo Mihasi 94c0f7ac9c [wip] dmp xml upload changes, including section and extra fields information 2023-10-05 14:00:17 +03:00
Thomas Georgios Giannos 3f14528f16 Fixing UI incompatibilities 2023-10-05 11:41:11 +03:00
Thomas Georgios Giannos 074e374d9a Removing old implementation of DescriptionTemplateType entity, fixing issues with entity scanning and field resolving on new implementation 2023-10-04 12:46:06 +03:00
Thomas Georgios Giannos 7c96078570 Updating Spring to version 6, adding service stack for DescriptionType entity 2023-10-03 17:29:45 +03:00
5830 changed files with 423872 additions and 142346 deletions

5
.env
View File

@ -1,5 +0,0 @@
PROFILE=docker
# Version of Elastic products
ELK_VERSION=7.17.4
STACK_VERSION=7.17.4

62
.gitignore vendored
View File

@ -1,32 +1,32 @@
dmp-frontend/dist.7z
.idea/
*.iml
dmp-backend/src/main/ui-resources/static/vendor.bundle.js.map
dmp-backend/src/main/ui-resources/static/vendor.bundle.js
dmp-backend/src/main/ui-resources/static/unauthorized.module.chunk.js.map
dmp-backend/src/main/ui-resources/static/unauthorized.module.chunk.js
dmp-backend/src/main/ui-resources/static/styles.bundle.js.map
dmp-backend/src/main/ui-resources/static/styles.bundle.js
dmp-backend/src/main/ui-resources/static/polyfills.bundle.js.map
dmp-backend/src/main/ui-resources/static/polyfills.bundle.js
dmp-backend/src/main/ui-resources/static/main.bundle.js.map
dmp-backend/src/main/ui-resources/static/main.bundle.js
dmp-backend/src/main/ui-resources/static/lang/en.json
dmp-backend/src/main/ui-resources/static/inline.bundle.js.map
dmp-backend/src/main/ui-resources/static/inline.bundle.js
dmp-backend/src/main/ui-resources/static/index.html
dmp-backend/src/main/ui-resources/static/favicon.ico
dmp-backend/src/main/ui-resources/static/assets/lang/en.json
backend/src/main/ui-resources/static/vendor.bundle.js.map
backend/src/main/ui-resources/static/vendor.bundle.js
backend/src/main/ui-resources/static/unauthorized.module.chunk.js.map
backend/src/main/ui-resources/static/unauthorized.module.chunk.js
backend/src/main/ui-resources/static/styles.bundle.js.map
backend/src/main/ui-resources/static/styles.bundle.js
backend/src/main/ui-resources/static/polyfills.bundle.js.map
backend/src/main/ui-resources/static/polyfills.bundle.js
backend/src/main/ui-resources/static/main.bundle.js.map
backend/src/main/ui-resources/static/main.bundle.js
backend/src/main/ui-resources/static/lang/en.json
backend/src/main/ui-resources/static/inline.bundle.js.map
backend/src/main/ui-resources/static/inline.bundle.js
backend/src/main/ui-resources/static/index.html
backend/src/main/ui-resources/static/favicon.ico
backend/src/main/ui-resources/static/assets/lang/en.json
dmp-frontend/new 3.xml
dmp-backend/src/main/ui-resources/static/
dmp-backend/web/target/
backend/src/main/ui-resources/static/
backend/web/target/
*.class
dmp-backend/web/src/main/ui-resources/static/
dmp-backend/data/target/data-1.0-SNAPSHOT.jar
dmp-backend/data/target/
dmp-backend/queryable/target/
dmp-backend/elastic/target/
dmp-backend/queryengine/target/
backend/web/src/main/ui-resources/static/
backend/data/target/data-1.0-SNAPSHOT.jar
backend/data/target/
backend/queryable/target/
backend/elastic/target/
backend/queryengine/target/
*.tar
*.gz
final/
@ -38,7 +38,7 @@ dmp-frontend/.vscode/
dmp-frontend/package-lock.json
dmp-backend/logging/target/
backend/logging/target/
ELK.Docker/shared/data-elk/
# Eclipse
@ -46,5 +46,13 @@ ELK.Docker/shared/data-elk/
.settings/
bin/
*.classpath
openDMP/dmp-backend/uploads/
openDMP/dmp-backend/tmp/
.run
openDMP/backend/uploads/
openDMP/backend/tmp/
logs/
backend/web/src/main/resources/certificates/
/storage/
backend/target/classes/
backend/core/target/maven-archiver/
backend/node_modules/.yarn-integrity
dmp-frontend/.nx/

66
Jenkinsfile vendored
View File

@ -1,66 +0,0 @@
def pipelineContext = [:]
pipeline {
agent any
options {
skipDefaultCheckout(true)
}
stages {
stage('Checkout') {
steps {
checkout scm
}
}
stage('Build API') {
steps {
script {
pipelineContext.apiImage = docker.build("open-dmp-api:${env.BUILD_ID}", "-f dmp-backend/Dockerfile.CI dmp-backend/")
}
}
}
stage('Build WebApp') {
steps {
script {
pipelineContext.webappImage = docker.build("open-dmp-webapp:${env.BUILD_ID}", "-f dmp-frontend/Dockerfile.CI dmp-frontend/")
}
}
}
//stage('SonarQube analysis') {
// steps {
// script {
// def scannerHome = tool 'SonarQube Scanner 4.3';
// withSonarQubeEnv('SonarQube') { // If you have configured more than one global server connection, you can specify its name
// sh "${scannerHome}/bin/sonar-scanner"
// }
// }
// }
//}
//// waiting for sonar results based into the configured web hook in Sonar server which push the status back to jenkins
//stage('SonarQube scan result check') {
// steps {
// timeout(time: 2, unit: 'MINUTES') {
// retry(3) {
// script {
// def qg = waitForQualityGate()
// if (qg.status != 'OK') {
// error "Pipeline aborted due to quality gate failure: ${qg.status}"
// }
// }
// }
// }
// }
//}
stage('Pushing to Docker Registry') {
steps {
script {
docker.withRegistry('http://drepo.local.cite.gr', 'b2c651c1-9a3b-4a98-a6da-e1dd7a20f512') {
pipelineContext.apiImage.push()
pipelineContext.webappImage.push()
}
}
}
}
}
}

View File

@ -0,0 +1,38 @@
####################################### Build stage #######################################
FROM maven:3.9-eclipse-temurin-21-alpine AS build-stage
ARG MAVEN_ACCOUNT_USR
ARG MAVEN_ACCOUNT_PSW
ARG REVISION
ARG PROFILE
ENV server_username=$MAVEN_ACCOUNT_USR
ENV server_password=$MAVEN_ACCOUNT_PSW
ARG CITE_MAVEN_REPO_URL
COPY pom.xml /build/
COPY annotation /build/annotation/
COPY annotation-web /build/annotation-web/
COPY settings.xml /root/.m2/settings.xml
RUN rm -f /build/annotation-web/src/main/resources/config/app.env
RUN rm -f /build/annotation-web/src/main/resources/config/*-devel.yml
RUN rm -f /build/annotation-web/src/main/resources/logging/*.xml
RUN rm -f /build/annotation-web/src/main/resources/certificates/*.crt
WORKDIR /build/
RUN mvn -Drevision=${REVISION} -DciteMavenRepoUrl=${CITE_MAVEN_REPO_URL} -P${PROFILE} clean
RUN mvn -Drevision=${REVISION} -DciteMavenRepoUrl=${CITE_MAVEN_REPO_URL} -P${PROFILE} install
# Build project
RUN mvn -Drevision=${REVISION} -DciteMavenRepoUrl=${CITE_MAVEN_REPO_URL} -P${PROFILE} package
######################################## Run Stage ########################################
FROM eclipse-temurin:21-jre-ubi9-minimal
ARG PROFILE
ARG REVISION
ENV SERVER_PORT=8080
EXPOSE ${SERVER_PORT}
COPY --from=build-stage /build/annotation-web/target/annotation-web-${REVISION}.jar /app/annotation-web.jar
ENTRYPOINT ["java","-Dspring.config.additional-location=file:/config/","-Dspring.profiles.active=${PROFILE}","-Djava.security.egd=file:/dev/./urandom","-jar","/app/annotation-web.jar"]

View File

@ -0,0 +1,30 @@
####################################### Build stage #######################################
FROM maven:3.9-eclipse-temurin-21-alpine
ARG MAVEN_ACCOUNT_USR
ARG MAVEN_ACCOUNT_PSW
ARG REVISION
ARG PROFILE
ARG ORACLE_URL
ARG ORACLE_TOKEN
ENV server_username=$MAVEN_ACCOUNT_USR
ENV server_password=$MAVEN_ACCOUNT_PSW
ARG CITE_MAVEN_REPO_URL
COPY pom.xml /build/
COPY annotation /build/annotation/
COPY annotation-web /build/annotation-web/
COPY settings.xml /root/.m2/settings.xml
RUN rm -f /build/annotation-web/src/main/resources/config/app.env
RUN rm -f /build/annotation-web/src/main/resources/config/*-devel.yml
RUN rm -f /build/annotation-web/src/main/resources/logging/*.xml
RUN rm -f /build/annotation-web/src/main/resources/certificates/*.crt
COPY oracle.local.cite.gr.crt $JAVA_HOME/conf/security
RUN cd "$JAVA_HOME"/conf/security && keytool -cacerts -storepass changeit -noprompt -trustcacerts -importcert -alias oraclecert -file oracle.local.cite.gr.crt
WORKDIR /build/
RUN mvn -Drevision=${REVISION} -DciteMavenRepoUrl=${CITE_MAVEN_REPO_URL} -P${PROFILE} clean
RUN mvn -Drevision=${REVISION} -DciteMavenRepoUrl=${CITE_MAVEN_REPO_URL} -P${PROFILE} install
RUN mvn -Drevision=${REVISION} -DciteMavenRepoUrl=${CITE_MAVEN_REPO_URL} -P${PROFILE} package
RUN mvn sonar:sonar -Drevision=${REVISION} -DciteMavenRepoUrl=${CITE_MAVEN_REPO_URL} -P${PROFILE} -Dsonar.projectKey=OpenDMP:annotation-api -Dsonar.login=${ORACLE_TOKEN} -Dsonar.host.url=${ORACLE_URL} -Dsonar.projectName='OpenDMP Annotation API'

View File

@ -0,0 +1,33 @@
HELP.md
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
!**/src/main/**/build/
!**/src/test/**/build/
### VS Code ###
.vscode/

View File

@ -0,0 +1,91 @@
<?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">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>gr.cite</groupId>
<artifactId>annotation-service-parent</artifactId>
<version>${revision}</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>annotation-web</artifactId>
<version>${revision}</version>
<packaging>jar</packaging>
<properties>
<maven.compiler.release>21</maven.compiler.release>
<maven.compiler.source>21</maven.compiler.source>
<maven.compiler.target>21</maven.compiler.target>
<revision>1.0.0-SNAPSHOT</revision>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
</dependency>
<dependency>
<groupId>org.hibernate.orm</groupId>
<artifactId>hibernate-core</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</dependency>
<dependency>
<groupId>gr.cite</groupId>
<artifactId>annotation</artifactId>
<version>${revision}</version>
</dependency>
<dependency>
<groupId>gr.cite</groupId>
<artifactId>oidc-authz</artifactId>
<version>2.1.0</version>
</dependency>
<dependency>
<groupId>gr.cite</groupId>
<artifactId>cache</artifactId>
<version>2.2.0</version>
</dependency>
<dependency>
<groupId>gr.cite</groupId>
<artifactId>exceptions-web</artifactId>
<version>2.1.0</version>
</dependency>
<dependency>
<groupId>gr.cite</groupId>
<artifactId>cors-web</artifactId>
<version>2.1.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>

View File

@ -0,0 +1,26 @@
package gr.cite.annotation.web;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.scheduling.annotation.EnableAsync;
@SpringBootApplication(
scanBasePackages = {
"gr.cite.annotation.*",
"gr.cite",
"gr.cite.queueoutbox",
"gr.cite.queueinbox",
"gr.cite.annotation.integrationevent",
"gr.cite.tools",
"gr.cite.commons"})
@EntityScan({
"gr.cite.annotation.data"})
@EnableAsync
public class AnnotationApplication {
public static void main(String[] args) {
SpringApplication.run(AnnotationApplication.class, args);
}
}

View File

@ -0,0 +1,40 @@
package gr.cite.annotation.web;
import gr.cite.annotation.web.scope.tenant.TenantInterceptor;
import gr.cite.annotation.web.scope.tenant.TenantScopeClaimInterceptor;
import gr.cite.annotation.web.scope.tenant.TenantScopeHeaderInterceptor;
import gr.cite.annotation.web.scope.user.UserInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebConfiguration implements WebMvcConfigurer {
private final TenantInterceptor tenantInterceptor;
private final TenantScopeHeaderInterceptor scopeHeaderInterceptor;
private final TenantScopeClaimInterceptor scopeClaimInterceptor;
private final UserInterceptor userInterceptor;
@Autowired
public WebConfiguration(
TenantInterceptor tenantInterceptor,
TenantScopeHeaderInterceptor scopeHeaderInterceptor,
TenantScopeClaimInterceptor scopeClaimInterceptor,
UserInterceptor userInterceptor
) {
this.tenantInterceptor = tenantInterceptor;
this.scopeHeaderInterceptor = scopeHeaderInterceptor;
this.scopeClaimInterceptor = scopeClaimInterceptor;
this.userInterceptor = userInterceptor;
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
int order = 1;
registry.addWebRequestInterceptor(scopeHeaderInterceptor).order(order++);
registry.addWebRequestInterceptor(scopeClaimInterceptor).order(order++);
registry.addWebRequestInterceptor(userInterceptor).order(order++);
registry.addWebRequestInterceptor(tenantInterceptor).order(order++);
}
}

View File

@ -0,0 +1,56 @@
package gr.cite.annotation.web.authorization;
import gr.cite.annotation.authorization.AffiliatedAuthorizationRequirement;
import gr.cite.annotation.authorization.AffiliatedResource;
import gr.cite.commons.web.authz.handler.AuthorizationHandler;
import gr.cite.commons.web.authz.handler.AuthorizationHandlerContext;
import gr.cite.commons.web.authz.policy.AuthorizationRequirement;
import gr.cite.commons.web.oidc.principal.MyPrincipal;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component("affiliatedAuthorizationHandler")
public class AffiliatedAuthorizationHandler extends AuthorizationHandler<AffiliatedAuthorizationRequirement> {
private final CustomPermissionAttributesConfiguration myConfiguration;
@Autowired
public AffiliatedAuthorizationHandler(CustomPermissionAttributesConfiguration myConfiguration) {
this.myConfiguration = myConfiguration;
}
@Override
public int handleRequirement(AuthorizationHandlerContext context, Object resource, AuthorizationRequirement requirement) {
AffiliatedAuthorizationRequirement req = (AffiliatedAuthorizationRequirement) requirement;
if (req.getRequiredPermissions() == null)
return ACCESS_NOT_DETERMINED;
AffiliatedResource rs = (AffiliatedResource) resource;
boolean isAuthenticated = ((MyPrincipal) context.getPrincipal()).isAuthenticated();
if (!isAuthenticated)
return ACCESS_NOT_DETERMINED;
if (myConfiguration.getMyPolicies() == null)
return ACCESS_NOT_DETERMINED;
int hits = 0;
Boolean entityAffiliated = rs != null && rs.getAffiliated() != null ? rs.getAffiliated() : null;
for (String permission : req.getRequiredPermissions()) {
CustomPermissionAttributesProperties.MyPermission policy = myConfiguration.getMyPolicies().get(permission);
boolean hasPermission = policy != null && policy.getEntityAffiliated() != null && policy.getEntityAffiliated() && entityAffiliated != null && entityAffiliated;
if (hasPermission) hits += 1;
}
if ((req.getMatchAll() && req.getRequiredPermissions().size() == hits) || (!req.getMatchAll() && hits > 0))
return ACCESS_GRANTED;
return ACCESS_NOT_DETERMINED;
}
@Override
public Class<? extends AuthorizationRequirement> supporting() {
return AffiliatedAuthorizationRequirement.class;
}
}

View File

@ -0,0 +1,24 @@
package gr.cite.annotation.web.authorization;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import java.util.HashMap;
@Configuration
@EnableConfigurationProperties(CustomPermissionAttributesProperties.class)
public class CustomPermissionAttributesConfiguration {
private final CustomPermissionAttributesProperties properties;
@Autowired
public CustomPermissionAttributesConfiguration(CustomPermissionAttributesProperties properties) {
this.properties = properties;
}
public HashMap<String, CustomPermissionAttributesProperties.MyPermission> getMyPolicies() {
return properties.getPolicies();
}
}

View File

@ -0,0 +1,38 @@
package gr.cite.annotation.web.authorization;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.bind.ConstructorBinding;
import java.util.HashMap;
@ConfigurationProperties(prefix = "permissions")
@ConditionalOnProperty(prefix = "permissions", name = "enabled", havingValue = "true")
public class CustomPermissionAttributesProperties {
private final HashMap<String, MyPermission> policies;
@ConstructorBinding
public CustomPermissionAttributesProperties(HashMap<String, MyPermission> policies) {
this.policies = policies;
}
public HashMap<String, MyPermission> getPolicies() {
return policies;
}
public static class MyPermission {
private final Boolean entityAffiliated;
@ConstructorBinding
public MyPermission(Boolean entityAffiliated) {
this.entityAffiliated = entityAffiliated;
}
public Boolean getEntityAffiliated() {
return entityAffiliated;
}
}
}

View File

@ -0,0 +1,44 @@
package gr.cite.annotation.web.authorization;
import gr.cite.commons.web.authz.handler.AuthorizationHandler;
import gr.cite.commons.web.authz.handler.AuthorizationHandlerContext;
import gr.cite.commons.web.authz.policy.AuthorizationRequirement;
import gr.cite.commons.web.oidc.principal.MyPrincipal;
import gr.cite.annotation.authorization.OwnedAuthorizationRequirement;
import gr.cite.annotation.authorization.OwnedResource;
import gr.cite.annotation.common.scope.user.UserScope;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component("ownedAuthorizationHandler")
public class OwnedAuthorizationHandler extends AuthorizationHandler<OwnedAuthorizationRequirement> {
private final UserScope userScope;
@Autowired
public OwnedAuthorizationHandler(UserScope userScope) {
this.userScope = userScope;
}
@Override
public int handleRequirement(AuthorizationHandlerContext context, Object resource, AuthorizationRequirement requirement) {
OwnedAuthorizationRequirement req = (OwnedAuthorizationRequirement) requirement;
OwnedResource rs = (OwnedResource) resource;
boolean isAuthenticated = ((MyPrincipal) context.getPrincipal()).isAuthenticated();
if (!isAuthenticated) return ACCESS_NOT_DETERMINED;
if (this.userScope.getUserIdSafe() == null) return ACCESS_NOT_DETERMINED;
if (rs != null && rs.getUserIds() != null && rs.getUserIds().contains(this.userScope.getUserIdSafe())) return ACCESS_GRANTED;
return ACCESS_NOT_DETERMINED;
}
@Override
public Class<? extends AuthorizationRequirement> supporting() {
return OwnedAuthorizationRequirement.class;
}
}

View File

@ -0,0 +1,25 @@
package gr.cite.annotation.web.config;
import org.springframework.context.MessageSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.support.ReloadableResourceBundleMessageSource;
import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean;
@Configuration
public class AppMessageSourceConfiguration {
@Bean
public MessageSource messageSource() {
ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
messageSource.setBasename("classpath:messages/messages");
messageSource.setDefaultEncoding("UTF-8");
return messageSource;
}
@Bean
public LocalValidatorFactoryBean getValidator() {
LocalValidatorFactoryBean bean = new LocalValidatorFactoryBean();
bean.setValidationMessageSource(messageSource());
return bean;
}
}

View File

@ -0,0 +1,152 @@
package gr.cite.annotation.web.config;
import gr.cite.annotation.authorization.AffiliatedAuthorizationRequirement;
import gr.cite.annotation.authorization.AffiliatedResource;
import gr.cite.annotation.web.authorization.AffiliatedAuthorizationHandler;
import gr.cite.commons.web.authz.handler.AuthorizationHandler;
import gr.cite.commons.web.authz.handler.PermissionClientAuthorizationHandler;
import gr.cite.commons.web.authz.policy.AuthorizationRequirement;
import gr.cite.commons.web.authz.policy.AuthorizationRequirementMapper;
import gr.cite.commons.web.authz.policy.AuthorizationResource;
import gr.cite.commons.web.authz.policy.resolver.AuthorizationPolicyConfigurer;
import gr.cite.commons.web.authz.policy.resolver.AuthorizationPolicyResolverStrategy;
import gr.cite.commons.web.oidc.configuration.WebSecurityProperties;
import gr.cite.annotation.authorization.OwnedAuthorizationRequirement;
import gr.cite.annotation.authorization.OwnedResource;
import gr.cite.annotation.web.authorization.OwnedAuthorizationHandler;
import jakarta.servlet.Filter;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.authentication.AuthenticationManagerResolver;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer;
import org.springframework.security.config.annotation.web.configurers.HeadersConfigurer;
import org.springframework.security.config.http.SessionCreationPolicy;
import org.springframework.security.web.SecurityFilterChain;
import org.springframework.security.web.authentication.preauth.AbstractPreAuthenticatedProcessingFilter;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
@Configuration
@EnableWebSecurity
public class SecurityConfiguration {
private final WebSecurityProperties webSecurityProperties;
private final AuthenticationManagerResolver<HttpServletRequest> authenticationManagerResolver;
private final Filter apiKeyFilter;
private final OwnedAuthorizationHandler ownedAuthorizationHandler;
private final AffiliatedAuthorizationHandler affiliatedAuthorizationHandler;
@Autowired
public SecurityConfiguration(WebSecurityProperties webSecurityProperties,
@Qualifier("tokenAuthenticationResolver") AuthenticationManagerResolver<HttpServletRequest> authenticationManagerResolver,
@Qualifier("apiKeyFilter") Filter apiKeyFilter,
@Qualifier("ownedAuthorizationHandler") OwnedAuthorizationHandler ownedAuthorizationHandler,
@Qualifier("affiliatedAuthorizationHandler") AffiliatedAuthorizationHandler affiliatedAuthorizationHandler) {
this.webSecurityProperties = webSecurityProperties;
this.authenticationManagerResolver = authenticationManagerResolver;
this.apiKeyFilter = apiKeyFilter;
this.ownedAuthorizationHandler = ownedAuthorizationHandler;
this.affiliatedAuthorizationHandler = affiliatedAuthorizationHandler;
}
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
HttpSecurity tempHttp = http
.csrf(AbstractHttpConfigurer::disable)
.cors(httpSecurityCorsConfigurer -> {})
.headers(httpSecurityHeadersConfigurer -> httpSecurityHeadersConfigurer.frameOptions(HeadersConfigurer.FrameOptionsConfig::disable))
.addFilterBefore(apiKeyFilter, AbstractPreAuthenticatedProcessingFilter.class)
.authorizeHttpRequests(authRequest ->
authRequest.requestMatchers(buildAntPatterns(webSecurityProperties.getAllowedEndpoints())).anonymous()
.requestMatchers(buildAntPatterns(webSecurityProperties.getAuthorizedEndpoints())).authenticated())
.sessionManagement( sessionManagementConfigurer-> sessionManagementConfigurer.sessionCreationPolicy(SessionCreationPolicy.NEVER))
.oauth2ResourceServer(oauth2 -> oauth2.authenticationManagerResolver(authenticationManagerResolver));
return tempHttp.build();
}
@Bean
AuthorizationPolicyConfigurer authorizationPolicyConfigurer() {
return new AuthorizationPolicyConfigurer() {
@Override
public AuthorizationPolicyResolverStrategy strategy() {
return AuthorizationPolicyResolverStrategy.STRICT_CONSENSUS_BASED;
}
//Here you can register your custom authorization handlers, which will get used as well as the existing ones
//This is optional and can be omitted
//If not set / set to null, only the default authorization handlers will be used
@Override
public List<AuthorizationHandler<? extends AuthorizationRequirement>> addCustomHandlers() {
return List.of(affiliatedAuthorizationHandler, ownedAuthorizationHandler);
}
//Here you can register your custom authorization requirements (if any)
//This is optional and can be omitted
//If not set / set to null, only the default authorization requirements will be used
@Override
public List<? extends AuthorizationRequirement> extendRequirements() {
return List.of(
// new TimeOfDayAuthorizationRequirement(new TimeOfDay("08:00","16:00"), true)
);
}
//Here you can select handlers you want to disable by providing the classes they are implemented by
//You can disable any handler (including any custom one)
//This is optional and can be omitted
//If not set / set to null, all the handlers will be invoked, based on their requirement support
//In the example below, the default client handler will be ignored by the resolver
@Override
public List<Class<? extends AuthorizationHandler<? extends AuthorizationRequirement>>> disableHandlers() {
return new ArrayList<>();
}
};
}
@Bean
AuthorizationRequirementMapper authorizationRequirementMapper() {
return new AuthorizationRequirementMapper() {
@Override
public AuthorizationRequirement map(AuthorizationResource resource, boolean matchAll, String[] permissions) {
Class<?> type = resource.getClass();
if (!AuthorizationResource.class.isAssignableFrom(type)) throw new IllegalArgumentException("resource");
if (OwnedResource.class.equals(type)) {
return new OwnedAuthorizationRequirement();
}
if (AffiliatedResource.class.equals(type)) {
return new AffiliatedAuthorizationRequirement(matchAll, permissions);
}
throw new IllegalArgumentException("resource");
}
};
}
private String[] buildAntPatterns(Set<String> endpoints) {
if (endpoints == null) {
return new String[0];
}
return endpoints.stream()
.filter(endpoint -> endpoint != null && !endpoint.isBlank())
.map(endpoint -> "/" + stripUnnecessaryCharacters(endpoint) + "/**")
.toArray(String[]::new);
}
private String stripUnnecessaryCharacters(String endpoint) {
endpoint = endpoint.strip();
if (endpoint.startsWith("/")) {
endpoint = endpoint.substring(1);
}
if (endpoint.endsWith("/")) {
endpoint = endpoint.substring(0, endpoint.length() - 1);
}
return endpoint;
}
}

View File

@ -0,0 +1,193 @@
package gr.cite.annotation.web.controllerhandler;
import gr.cite.annotation.common.JsonHandlingService;
import gr.cite.tools.exception.*;
import gr.cite.tools.logging.LoggerService;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import org.springframework.web.context.request.WebRequest;
import java.text.MessageFormat;
import java.util.Map;
@RestControllerAdvice
@ControllerAdvice
public class GlobalExceptionHandler {
private static final LoggerService logger = new LoggerService(LoggerFactory.getLogger(GlobalExceptionHandler.class));
private final JsonHandlingService jsonHandlingService;
public GlobalExceptionHandler(JsonHandlingService jsonHandlingService) {
this.jsonHandlingService = jsonHandlingService;
}
@ExceptionHandler(Exception.class)
public ResponseEntity<?> handleUnexpectedErrors(Exception exception, WebRequest request) throws Exception {
HandledException handled = this.handleException(exception, request);
this.log(handled.getLevel(), exception, MessageFormat.format("returning code {0} and payload {1}", handled.getStatusCode(), handled.getMessage()));
return new ResponseEntity<>(handled.getMessage(), handled.getStatusCode());
}
public void log(System.Logger.Level level, Exception e, String message) {
if (level != null) {
switch (level) {
case TRACE:
logger.trace(message, e);
break;
case DEBUG:
logger.debug(message, e);
break;
case INFO:
logger.info(message, e);
break;
case WARNING:
logger.warn(message, e);
break;
case ERROR:
logger.error(message, e);
break;
}
}
}
public HandledException handleException(Exception exception, WebRequest request) throws Exception {
HttpStatus statusCode;
Map<String, Object> result;
System.Logger.Level logLevel;
switch (exception){
case MyNotFoundException myNotFoundException -> {
logLevel = System.Logger.Level.DEBUG;
statusCode = HttpStatus.NOT_FOUND;
int code = myNotFoundException.getCode();
if (code > 0) {
result = Map.ofEntries(
Map.entry("code", code),
Map.entry("error", myNotFoundException.getMessage())
);
}
else {
result = Map.ofEntries(
Map.entry("error", myNotFoundException.getMessage())
);
}
}
case MyUnauthorizedException myUnauthorizedException -> {
logLevel = System.Logger.Level.DEBUG;
statusCode = HttpStatus.UNAUTHORIZED;
int code = myUnauthorizedException.getCode();
if (code > 0) {
result = Map.ofEntries(
Map.entry("code", code),
Map.entry("error", myUnauthorizedException.getMessage())
);
}
else {
result = Map.ofEntries(
Map.entry("error", myUnauthorizedException.getMessage())
);
}
}
case MyForbiddenException myForbiddenException -> {
logLevel = System.Logger.Level.DEBUG;
statusCode = HttpStatus.FORBIDDEN;
int code = myForbiddenException.getCode();
if (code > 0) {
result = Map.ofEntries(
Map.entry("code", code),
Map.entry("error", myForbiddenException.getMessage())
);
}
else {
result = Map.ofEntries(
Map.entry("error", myForbiddenException.getMessage())
);
}
}
case MyValidationException myValidationException -> {
logLevel = System.Logger.Level.DEBUG;
statusCode = HttpStatus.BAD_REQUEST;
int code = myValidationException.getCode();
if (code > 0) {
result = Map.ofEntries(
Map.entry("code", code),
Map.entry("error", myValidationException.getMessage()),
Map.entry("message", myValidationException.getErrors())
);
}
else {
result = Map.ofEntries(
Map.entry("error", myValidationException.getMessage()),
Map.entry("message", myValidationException.getErrors())
);
}
}
case MyApplicationException myApplicationException -> {
logLevel = System.Logger.Level.ERROR;
statusCode = HttpStatus.INTERNAL_SERVER_ERROR;
int code = myApplicationException.getCode();
if (code > 0) {
result = Map.ofEntries(
Map.entry("code", code),
Map.entry("error", myApplicationException.getMessage())
);
}
else {
result = Map.ofEntries(
Map.entry("error", myApplicationException.getMessage())
);
}
}
default -> {
logLevel = System.Logger.Level.ERROR;
statusCode = HttpStatus.INTERNAL_SERVER_ERROR;
result = Map.ofEntries(
Map.entry("error", "System error")
);
}
};
String serialization = this.jsonHandlingService.toJsonSafe(result);
return new HandledException(statusCode, serialization, logLevel);
}
public static class HandledException{
public HttpStatus statusCode;
public String message;
public System.Logger.Level level;
public HandledException(HttpStatus statusCode, String message, System.Logger.Level level) {
this.statusCode = statusCode;
this.message = message;
this.level = level;
}
public HttpStatus getStatusCode() {
return statusCode;
}
public void setStatusCode(HttpStatus statusCode) {
this.statusCode = statusCode;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public System.Logger.Level getLevel() {
return level;
}
public void setLevel(System.Logger.Level level) {
this.level = level;
}
}
}

View File

@ -0,0 +1,132 @@
package gr.cite.annotation.web.controllers;
import com.fasterxml.jackson.core.JsonProcessingException;
import gr.cite.annotation.audit.AuditableAction;
import gr.cite.annotation.authorization.AuthorizationFlags;
import gr.cite.annotation.data.AnnotationEntity;
import gr.cite.annotation.model.Annotation;
import gr.cite.annotation.model.builder.AnnotationBuilder;
import gr.cite.annotation.model.censorship.AnnotationCensor;
import gr.cite.annotation.model.persist.AnnotationPersist;
import gr.cite.annotation.query.AnnotationQuery;
import gr.cite.annotation.query.lookup.AnnotationLookup;
import gr.cite.annotation.service.annotation.AnnotationService;
import gr.cite.annotation.web.model.QueryResult;
import gr.cite.tools.auditing.AuditService;
import gr.cite.tools.data.builder.BuilderFactory;
import gr.cite.tools.data.censor.CensorFactory;
import gr.cite.tools.data.query.QueryFactory;
import gr.cite.tools.exception.MyApplicationException;
import gr.cite.tools.exception.MyForbiddenException;
import gr.cite.tools.exception.MyNotFoundException;
import gr.cite.tools.fieldset.FieldSet;
import gr.cite.tools.logging.LoggerService;
import gr.cite.tools.logging.MapLogEntry;
import gr.cite.tools.validation.ValidationFilterAnnotation;
import jakarta.transaction.Transactional;
import jakarta.xml.bind.JAXBException;
import org.slf4j.LoggerFactory;
import org.springframework.context.MessageSource;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;
import javax.management.InvalidApplicationException;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.TransformerException;
import java.util.AbstractMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
@RestController
@RequestMapping(path = "api/annotation", produces = MediaType.APPLICATION_JSON_VALUE)
public class AnnotationController {
private static final LoggerService logger = new LoggerService(LoggerFactory.getLogger(AnnotationController.class));
private final CensorFactory censorFactory;
private final QueryFactory queryFactory;
private final BuilderFactory builderFactory;
private final AuditService auditService;
private final MessageSource messageSource;
private final AnnotationService annotationService;
public AnnotationController(CensorFactory censorFactory, QueryFactory queryFactory, BuilderFactory builderFactory, AuditService auditService, MessageSource messageSource, AnnotationService annotationService) {
this.censorFactory = censorFactory;
this.queryFactory = queryFactory;
this.builderFactory = builderFactory;
this.auditService = auditService;
this.messageSource = messageSource;
this.annotationService = annotationService;
}
@PostMapping("query")
public QueryResult<Annotation> query(@RequestBody AnnotationLookup lookup) {
logger.debug("querying {}", Annotation.class.getSimpleName());
this.censorFactory.censor(AnnotationCensor.class).censor(lookup.getProject(), null);
AnnotationQuery query = lookup.enrich(this.queryFactory).authorize(AuthorizationFlags.OwnerOrPermissionAssociated);
List<AnnotationEntity> data = query.collect();
List<Annotation> models = this.builderFactory.builder(AnnotationBuilder.class).authorize(AuthorizationFlags.OwnerOrPermissionAssociated).build(lookup.getProject(), data);
long count = (lookup.getMetadata() != null && lookup.getMetadata().getCountAll()) ? query.count() : models.size();
this.auditService.track(AuditableAction.Annotation_Query, "lookup", lookup);
return new QueryResult<>(models, count);
}
@GetMapping("{id}")
public Annotation get(@PathVariable("id") UUID id, FieldSet fieldSet) throws MyApplicationException, MyForbiddenException, MyNotFoundException {
logger.debug(new MapLogEntry("retrieving" + Annotation.class.getSimpleName()).And("id", id).And("fields", fieldSet));
this.censorFactory.censor(AnnotationCensor.class).censor(fieldSet, null);
AnnotationQuery query = this.queryFactory.query(AnnotationQuery.class).authorize(AuthorizationFlags.OwnerOrPermissionAssociated).ids(id);
Annotation model = this.builderFactory.builder(AnnotationBuilder.class).authorize(AuthorizationFlags.OwnerOrPermissionAssociated).build(fieldSet, query.firstAs(fieldSet));
if (model == null)
throw new MyNotFoundException(messageSource.getMessage("General_ItemNotFound", new Object[]{id, Annotation.class.getSimpleName()}, LocaleContextHolder.getLocale()));
this.auditService.track(AuditableAction.Annotation_Lookup, Map.ofEntries(
new AbstractMap.SimpleEntry<String, Object>("id", id),
new AbstractMap.SimpleEntry<String, Object>("fields", fieldSet)
));
return model;
}
@PostMapping("persist")
@Transactional
@ValidationFilterAnnotation(validator = AnnotationPersist.AnnotationPersistValidator.ValidatorName, argumentName = "model")
public Annotation persist(@RequestBody AnnotationPersist model, FieldSet fieldSet) throws MyApplicationException, MyForbiddenException, MyNotFoundException, InvalidApplicationException, JAXBException, ParserConfigurationException, JsonProcessingException, TransformerException {
logger.debug(new MapLogEntry("persisting" + Annotation.class.getSimpleName()).And("model", model).And("fieldSet", fieldSet));
this.censorFactory.censor(AnnotationCensor.class).censor(fieldSet, null);
Annotation persisted = this.annotationService.persist(model, fieldSet);
this.auditService.track(AuditableAction.Annotation_Persist, Map.ofEntries(
new AbstractMap.SimpleEntry<String, Object>("model", model),
new AbstractMap.SimpleEntry<String, Object>("fields", fieldSet)
));
return persisted;
}
@DeleteMapping("{id}")
@Transactional
public void delete(@PathVariable("id") UUID id) throws MyForbiddenException, InvalidApplicationException {
logger.debug(new MapLogEntry("retrieving" + Annotation.class.getSimpleName()).And("id", id));
this.annotationService.deleteAndSave(id);
this.auditService.track(AuditableAction.Annotation_Delete, "id", id);
}
}

View File

@ -0,0 +1,92 @@
package gr.cite.annotation.web.controllers;
import gr.cite.annotation.authorization.ClaimNames;
import gr.cite.commons.web.oidc.principal.CurrentPrincipalResolver;
import gr.cite.commons.web.oidc.principal.MyPrincipal;
import gr.cite.commons.web.oidc.principal.extractor.ClaimExtractor;
import gr.cite.annotation.audit.AuditableAction;
import gr.cite.annotation.common.scope.tenant.TenantScope;
import gr.cite.annotation.web.model.Account;
import gr.cite.annotation.web.model.AccountBuilder;
import gr.cite.tools.auditing.AuditService;
import gr.cite.tools.fieldset.BaseFieldSet;
import gr.cite.tools.fieldset.FieldSet;
import gr.cite.tools.logging.LoggerService;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.stream.Collectors;
@RestController
@RequestMapping(path = "api/annotation/principal", produces = MediaType.APPLICATION_JSON_VALUE)
public class PrincipalController {
private static final LoggerService logger = new LoggerService(LoggerFactory.getLogger(PrincipalController.class));
private final AuditService auditService;
private final CurrentPrincipalResolver currentPrincipalResolver;
private final AccountBuilder accountBuilder;
private final ClaimExtractor claimExtractor;
@Autowired
public PrincipalController(
CurrentPrincipalResolver currentPrincipalResolver,
AccountBuilder accountBuilder,
AuditService auditService,
ClaimExtractor claimExtractor) {
this.currentPrincipalResolver = currentPrincipalResolver;
this.accountBuilder = accountBuilder;
this.auditService = auditService;
this.claimExtractor = claimExtractor;
}
@GetMapping("me")
public Account me(FieldSet fieldSet) {
logger.debug("me");
if (fieldSet == null || fieldSet.isEmpty()) {
fieldSet = new BaseFieldSet(
Account._isAuthenticated,
BaseFieldSet.asIndexer(Account._principal, Account.PrincipalInfo._subject),
BaseFieldSet.asIndexer(Account._principal, Account.PrincipalInfo._userId),
BaseFieldSet.asIndexer(Account._principal, Account.PrincipalInfo._name),
BaseFieldSet.asIndexer(Account._principal, Account.PrincipalInfo._scope),
BaseFieldSet.asIndexer(Account._principal, Account.PrincipalInfo._client),
BaseFieldSet.asIndexer(Account._principal, Account.PrincipalInfo._issuedAt),
BaseFieldSet.asIndexer(Account._principal, Account.PrincipalInfo._notBefore),
BaseFieldSet.asIndexer(Account._principal, Account.PrincipalInfo._authenticatedAt),
BaseFieldSet.asIndexer(Account._principal, Account.PrincipalInfo._expiresAt),
BaseFieldSet.asIndexer(Account._principal, Account.PrincipalInfo._more),
Account._permissions);
}
MyPrincipal principal = this.currentPrincipalResolver.currentPrincipal();
Account me = this.accountBuilder.build(fieldSet, principal);
this.auditService.track(AuditableAction.Principal_Lookup);
//auditService.trackIdentity(AuditableAction.IdentityTracking_Action);
return me;
}
@GetMapping("my-tenants")
public List<String> myTenants() {
logger.debug("my-tenants");
MyPrincipal principal = this.currentPrincipalResolver.currentPrincipal();
List<String> tenants = this.claimExtractor.asStrings(principal, ClaimNames.TenantCodesClaimName);
this.auditService.track(AuditableAction.Tenants_Lookup);
//auditService.trackIdentity(AuditableAction.IdentityTracking_Action);
return tenants == null ? null : tenants.stream().distinct().collect(Collectors.toList());
}
}

View File

@ -0,0 +1,160 @@
package gr.cite.annotation.web.model;
import gr.cite.tools.logging.annotation.LogSensitive;
import java.time.Instant;
import java.util.List;
import java.util.Map;
import java.util.UUID;
public class Account {
public static class PrincipalInfo {
public static final String _userId = "userId";
public UUID userId;
public UUID getUserId() {
return userId;
}
public void setUserId(UUID userId) {
this.userId = userId;
}
public static final String _subject = "subject";
public UUID subject;
public UUID getSubject() {
return subject;
}
public void setSubject(UUID subject) {
this.subject = subject;
}
public static final String _name = "name";
@LogSensitive
public String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public static final String _scope = "scope";
public List<String> scope;
public List<String> getScope() {
return scope;
}
public void setScope(List<String> scope) {
this.scope = scope;
}
public static final String _client = "client";
public String client;
public String getClient() {
return client;
}
public void setClient(String client) {
this.client = client;
}
public static final String _notBefore = "notBefore";
public Instant notBefore;
public Instant getNotBefore() {
return notBefore;
}
public void setNotBefore(Instant notBefore) {
this.notBefore = notBefore;
}
public static final String _issuedAt = "issuedAt";
public Instant issuedAt;
public Instant getIssuedAt() {
return issuedAt;
}
public void setIssuedAt(Instant issuedAt) {
this.issuedAt = issuedAt;
}
public static final String _authenticatedAt = "authenticatedAt";
public Instant authenticatedAt;
public Instant getAuthenticatedAt() {
return authenticatedAt;
}
public void setAuthenticatedAt(Instant authenticatedAt) {
this.authenticatedAt = authenticatedAt;
}
public static final String _expiresAt = "expiresAt";
public Instant expiresAt;
public Instant getExpiresAt() {
return expiresAt;
}
public void setExpiresAt(Instant expiresAt) {
this.expiresAt = expiresAt;
}
public static final String _more = "more";
@LogSensitive
public Map<String, List<String>> more;
public Map<String, List<String>> getMore() {
return more;
}
public void setMore(Map<String, List<String>> more) {
this.more = more;
}
}
public static final String _isAuthenticated = "isAuthenticated";
private Boolean isAuthenticated;
public Boolean getIsAuthenticated() {
return isAuthenticated;
}
public void setIsAuthenticated(Boolean authenticated) {
isAuthenticated = authenticated;
}
public static final String _principal = "principal";
private PrincipalInfo principal;
public PrincipalInfo getPrincipal() {
return principal;
}
public void setPrincipal(PrincipalInfo principal) {
this.principal = principal;
}
public static final String _permissions = "permissions";
private List<String> permissions;
public List<String> getPermissions() {
return permissions;
}
public void setPermissions(List<String> permissions) {
this.permissions = permissions;
}
}

View File

@ -0,0 +1,86 @@
package gr.cite.annotation.web.model;
import gr.cite.commons.web.authz.configuration.AuthorizationConfiguration;
import gr.cite.commons.web.authz.configuration.Permission;
import gr.cite.commons.web.oidc.principal.CurrentPrincipalResolver;
import gr.cite.commons.web.oidc.principal.MyPrincipal;
import gr.cite.commons.web.oidc.principal.extractor.ClaimExtractor;
import gr.cite.commons.web.oidc.principal.extractor.ClaimExtractorKeys;
import gr.cite.annotation.common.scope.user.UserScope;
import gr.cite.tools.fieldset.BaseFieldSet;
import gr.cite.tools.fieldset.FieldSet;
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import java.util.*;
@Component
@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public class AccountBuilder {
private final ClaimExtractor claimExtractor;
private final Set<String> excludeMoreClaim;
private final AuthorizationConfiguration authorizationConfiguration;
private final CurrentPrincipalResolver currentPrincipalResolver;
private final UserScope userScope;
public AccountBuilder(ClaimExtractor claimExtractor, AuthorizationConfiguration authorizationConfiguration, CurrentPrincipalResolver currentPrincipalResolver, UserScope userScope) {
this.claimExtractor = claimExtractor;
this.authorizationConfiguration = authorizationConfiguration;
this.currentPrincipalResolver = currentPrincipalResolver;
this.userScope = userScope;
this.excludeMoreClaim = Set.of(
ClaimExtractorKeys.Subject,
ClaimExtractorKeys.Name,
ClaimExtractorKeys.Scope,
ClaimExtractorKeys.Client,
ClaimExtractorKeys.IssuedAt,
ClaimExtractorKeys.NotBefore,
ClaimExtractorKeys.AuthenticatedAt,
ClaimExtractorKeys.ExpiresAt);
}
public Account build(FieldSet fields, MyPrincipal principal) {
Account model = new Account();
if (principal == null || !principal.isAuthenticated()) {
model.setIsAuthenticated(false);
return model;
}
model.setIsAuthenticated(true);
FieldSet principalFields = fields.extractPrefixed(BaseFieldSet.asIndexerPrefix(Account._principal));
if (!principalFields.isEmpty()) model.setPrincipal(new Account.PrincipalInfo());
if (principalFields.hasField(Account.PrincipalInfo._subject)) model.getPrincipal().setSubject(this.claimExtractor.subjectUUID(principal));
if (principalFields.hasField(Account.PrincipalInfo._userId)) model.getPrincipal().setUserId(this.userScope.getUserIdSafe());
if (principalFields.hasField(Account.PrincipalInfo._name)) model.getPrincipal().setName(this.claimExtractor.name(principal));
if (principalFields.hasField(Account.PrincipalInfo._scope)) model.getPrincipal().setScope(this.claimExtractor.scope(principal));
if (principalFields.hasField(Account.PrincipalInfo._client)) model.getPrincipal().setClient(this.claimExtractor.client(principal));
if (principalFields.hasField(Account.PrincipalInfo._issuedAt)) model.getPrincipal().setIssuedAt(this.claimExtractor.issuedAt(principal));
if (principalFields.hasField(Account.PrincipalInfo._notBefore)) model.getPrincipal().setNotBefore(this.claimExtractor.notBefore(principal));
if (principalFields.hasField(Account.PrincipalInfo._authenticatedAt)) model.getPrincipal().setAuthenticatedAt(this.claimExtractor.authenticatedAt(principal));
if (principalFields.hasField(Account.PrincipalInfo._expiresAt)) model.getPrincipal().setExpiresAt(this.claimExtractor.expiresAt(principal));
if (principalFields.hasField(Account.PrincipalInfo._more)) {
model.getPrincipal().setMore(new HashMap<>());
for (String key : this.claimExtractor.knownPublicKeys()) {
if (this.excludeMoreClaim.contains(key)) continue;
List<String> values = this.claimExtractor.asStrings(principal, key);
if (values == null || values.size() == 0) continue;
if (!model.getPrincipal().getMore().containsKey(key)) model.getPrincipal().getMore().put(key, new ArrayList<>());
model.getPrincipal().getMore().get(key).addAll(values);
}
}
if (fields.hasField(Account._permissions)) {
List<String> roles = claimExtractor.roles(currentPrincipalResolver.currentPrincipal());
Set<String> permissions = authorizationConfiguration.permissionsOfRoles(roles);
for (Map.Entry<String, Permission> permissionEntry : authorizationConfiguration.getRawPolicies().entrySet()){
if (permissionEntry.getValue().getAllowAuthenticated()){
permissions.add(permissionEntry.getKey());
}
}
model.setPermissions(new ArrayList<>(permissions));
}
return model;
}
}

View File

@ -0,0 +1,37 @@
package gr.cite.annotation.web.model;
import java.util.ArrayList;
import java.util.List;
public class QueryResult<M> {
public QueryResult() { }
public QueryResult(List<M> items, long count)
{
this.items = items;
this.count = count;
}
public List<M> items;
public long count;
public List<M> getItems() {
return items;
}
public void setItems(List<M> items) {
this.items = items;
}
public long getCount() {
return count;
}
public void setCount(long count) {
this.count = count;
}
public static QueryResult<?> Empty()
{
return new QueryResult<>(new ArrayList<>(), 0L);
}
}

View File

@ -0,0 +1,10 @@
package gr.cite.annotation.web.scope.tenant;
import gr.cite.tools.cache.CacheOptions;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
@Configuration
@ConfigurationProperties(prefix = "cache.tenant-by-code")
public class TenantByCodeCacheOptions extends CacheOptions {
}

View File

@ -0,0 +1,78 @@
package gr.cite.annotation.web.scope.tenant;
import gr.cite.annotation.convention.ConventionService;
import gr.cite.annotation.event.TenantTouchedEvent;
import gr.cite.tools.cache.CacheService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.UUID;
@Service
public class TenantByCodeCacheService extends CacheService<TenantByCodeCacheService.TenantByCodeCacheValue> {
public static class TenantByCodeCacheValue {
public TenantByCodeCacheValue() {
}
public TenantByCodeCacheValue(String tenantCode, UUID tenantId) {
this.tenantCode = tenantCode;
this.tenantId = tenantId;
}
private String tenantCode;
public String getTenantCode() {
return tenantCode;
}
public void setTenantCode(String tenantCode) {
this.tenantCode = tenantCode;
}
private UUID tenantId;
public UUID getTenantId() {
return tenantId;
}
public void setTenantId(UUID tenantId) {
this.tenantId = tenantId;
}
}
private final ConventionService conventionService;
@Autowired
public TenantByCodeCacheService(TenantByCodeCacheOptions options, ConventionService conventionService) {
super(options);
this.conventionService = conventionService;
}
@EventListener
public void handleTenantTouchedEvent(TenantTouchedEvent event) {
if (!this.conventionService.isNullOrEmpty(event.getTenantCode()))
this.evict(this.buildKey(event.getTenantCode()));
if (!this.conventionService.isNullOrEmpty(event.getPreviousTenantCode()))
this.evict(this.buildKey(event.getPreviousTenantCode()));
}
@Override
protected Class<TenantByCodeCacheValue> valueClass() {
return TenantByCodeCacheValue.class;
}
@Override
public String keyOf(TenantByCodeCacheValue value) {
return this.buildKey(value.getTenantCode());
}
public String buildKey(String code) {
HashMap<String, String> keyParts = new HashMap<>();
keyParts.put("$code$", code);
return this.generateKey(keyParts);
}
}

View File

@ -0,0 +1,10 @@
package gr.cite.annotation.web.scope.tenant;
import gr.cite.tools.cache.CacheOptions;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
@Configuration
@ConfigurationProperties(prefix = "cache.tenant-by-id")
public class TenantByIdCacheOptions extends CacheOptions {
}

View File

@ -0,0 +1,77 @@
package gr.cite.annotation.web.scope.tenant;
import gr.cite.annotation.convention.ConventionService;
import gr.cite.annotation.event.TenantTouchedEvent;
import gr.cite.tools.cache.CacheService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.Locale;
import java.util.UUID;
@Service
public class TenantByIdCacheService extends CacheService<TenantByIdCacheService.TenantByIdCacheValue> {
public static class TenantByIdCacheValue {
public TenantByIdCacheValue() {
}
public TenantByIdCacheValue(String tenantCode, UUID tenantId) {
this.tenantCode = tenantCode;
this.tenantId = tenantId;
}
private String tenantCode;
public String getTenantCode() {
return tenantCode;
}
public void setTenantCode(String tenantCode) {
this.tenantCode = tenantCode;
}
private UUID tenantId;
public UUID getTenantId() {
return tenantId;
}
public void setTenantId(UUID tenantId) {
this.tenantId = tenantId;
}
}
private final ConventionService conventionService;
@Autowired
public TenantByIdCacheService(TenantByIdCacheOptions options, ConventionService conventionService) {
super(options);
this.conventionService = conventionService;
}
@EventListener
public void handleTenantTouchedEvent(TenantTouchedEvent event) {
if (!this.conventionService.isNullOrEmpty(event.getTenantCode()))
this.evict(this.buildKey(event.getTenantId()));
}
@Override
protected Class<TenantByIdCacheValue> valueClass() {
return TenantByIdCacheValue.class;
}
@Override
public String keyOf(TenantByIdCacheValue value) {
return this.buildKey(value.getTenantId());
}
public String buildKey(UUID id) {
HashMap<String, String> keyParts = new HashMap<>();
keyParts.put("$tenantId$", id.toString().toLowerCase(Locale.ROOT));
return this.generateKey(keyParts);
}
}

View File

@ -0,0 +1,189 @@
package gr.cite.annotation.web.scope.tenant;
import gr.cite.annotation.authorization.ClaimNames;
import gr.cite.annotation.authorization.Permission;
import gr.cite.annotation.common.enums.IsActive;
import gr.cite.annotation.common.scope.tenant.TenantScope;
import gr.cite.annotation.common.scope.user.UserScope;
import gr.cite.annotation.data.TenantUserEntity;
import gr.cite.annotation.data.UserEntity;
import gr.cite.annotation.data.tenant.TenantScopedBaseEntity;
import gr.cite.annotation.errorcode.ErrorThesaurusProperties;
import gr.cite.annotation.query.utils.BuildSubQueryInput;
import gr.cite.annotation.query.utils.QueryUtilsService;
import gr.cite.commons.web.authz.service.AuthorizationService;
import gr.cite.commons.web.oidc.principal.CurrentPrincipalResolver;
import gr.cite.commons.web.oidc.principal.extractor.ClaimExtractor;
import gr.cite.tools.exception.MyForbiddenException;
import gr.cite.tools.logging.LoggerService;
import jakarta.persistence.EntityManager;
import jakarta.persistence.PersistenceContext;
import jakarta.persistence.criteria.CriteriaBuilder;
import jakarta.persistence.criteria.CriteriaQuery;
import jakarta.persistence.criteria.Root;
import org.hibernate.Session;
import org.jetbrains.annotations.NotNull;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.lang.NonNull;
import org.springframework.stereotype.Component;
import org.springframework.ui.ModelMap;
import org.springframework.web.context.request.ServletWebRequest;
import org.springframework.web.context.request.WebRequest;
import org.springframework.web.context.request.WebRequestInterceptor;
import javax.management.InvalidApplicationException;
import java.util.List;
import java.util.Locale;
import java.util.UUID;
@Component
public class TenantInterceptor implements WebRequestInterceptor {
private static final LoggerService logger = new LoggerService(LoggerFactory.getLogger(TenantInterceptor.class));
private final TenantScope tenantScope;
private final UserScope userScope;
private final CurrentPrincipalResolver currentPrincipalResolver;
private final ClaimExtractor claimExtractor;
private final ApplicationContext applicationContext;
private final TenantScopeProperties tenantScopeProperties;
private final UserAllowedTenantCacheService userAllowedTenantCacheService;
private final ErrorThesaurusProperties errors;
private final QueryUtilsService queryUtilsService;
@PersistenceContext
public EntityManager entityManager;
@Autowired
public TenantInterceptor(
TenantScope tenantScope,
UserScope userScope,
CurrentPrincipalResolver currentPrincipalResolver,
ClaimExtractor claimExtractor,
ApplicationContext applicationContext,
TenantScopeProperties tenantScopeProperties,
UserAllowedTenantCacheService userAllowedTenantCacheService,
ErrorThesaurusProperties errors, QueryUtilsService queryUtilsService) {
this.tenantScope = tenantScope;
this.userScope = userScope;
this.currentPrincipalResolver = currentPrincipalResolver;
this.claimExtractor = claimExtractor;
this.applicationContext = applicationContext;
this.tenantScopeProperties = tenantScopeProperties;
this.userAllowedTenantCacheService = userAllowedTenantCacheService;
this.errors = errors;
this.queryUtilsService = queryUtilsService;
}
@Override
public void preHandle(@NotNull WebRequest request) throws InvalidApplicationException, InterruptedException {
if (!this.currentPrincipalResolver.currentPrincipal().isAuthenticated()) return;
if (!this.tenantScope.isMultitenant()) return;
boolean isAllowedNoTenant = this.applicationContext.getBean(AuthorizationService.class).authorize(Permission.AllowNoTenant);
if (tenantScope.isSet() && this.entityManager != null) {
List<String> currentPrincipalTenantCodes = this.claimExtractor.asStrings(this.currentPrincipalResolver.currentPrincipal(), ClaimNames.TenantCodesClaimName);
if ((currentPrincipalTenantCodes == null || !currentPrincipalTenantCodes.contains(tenantScope.getTenantCode())) && !isAllowedNoTenant) {
logger.warn("tenant not allowed {}", this.tenantScope.getTenant());
throw new MyForbiddenException(this.errors.getTenantNotAllowed().getCode(), this.errors.getTenantNotAllowed().getMessage());
}
boolean isUserAllowedTenant = false;
if (this.tenantScope.isDefaultTenant()){
isUserAllowedTenant = true;
} else {
UserAllowedTenantCacheService.UserAllowedTenantCacheValue cacheValue = this.userAllowedTenantCacheService.lookup(this.userAllowedTenantCacheService.buildKey(this.userScope.getUserId(), this.tenantScope.getTenant()));
if (cacheValue != null) {
isUserAllowedTenant = cacheValue.isAllowed();
} else {
isUserAllowedTenant = this.isUserAllowedTenant();
this.userAllowedTenantCacheService.put(new UserAllowedTenantCacheService.UserAllowedTenantCacheValue(this.userScope.getUserId(), this.tenantScope.getTenant(), isUserAllowedTenant));
}
}
if (isUserAllowedTenant) {
if(!tenantScope.isDefaultTenant()) {
this.entityManager
.unwrap(Session.class)
.enableFilter(TenantScopedBaseEntity.TENANT_FILTER)
.setParameter(TenantScopedBaseEntity.TENANT_FILTER_TENANT_PARAM, tenantScope.getTenant().toString());
} else {
this.entityManager
.unwrap(Session.class)
.enableFilter(TenantScopedBaseEntity.DEFAULT_TENANT_FILTER);
}
} else {
if (isAllowedNoTenant || this.isWhiteListedEndpoint(request)) {
tenantScope.setTenant(null, null);
} else {
logger.warn("tenant not allowed {}", this.tenantScope.getTenant());
throw new MyForbiddenException(this.errors.getTenantNotAllowed().getCode(), this.errors.getTenantNotAllowed().getMessage());
}
}
} else {
if (!isAllowedNoTenant) {
if (!this.isWhiteListedEndpoint(request)) {
logger.warn("tenant scope not provided");
throw new MyForbiddenException(this.errors.getMissingTenant().getCode(), this.errors.getMissingTenant().getMessage());
}
}
}
}
private boolean isWhiteListedEndpoint(WebRequest request) {
String servletPath = ((ServletWebRequest) request).getRequest().getServletPath();
if (this.tenantScopeProperties.getWhiteListedEndpoints() != null) {
for (String whiteListedEndpoint : this.tenantScopeProperties.getWhiteListedEndpoints()) {
if (servletPath.toLowerCase(Locale.ROOT).startsWith(whiteListedEndpoint.toLowerCase(Locale.ROOT))) {
return true;
}
}
}
return false;
}
private boolean isUserAllowedTenant() throws InvalidApplicationException, InterruptedException {
if (userScope.isSet()) {
CriteriaBuilder criteriaBuilder = this.entityManager.getCriteriaBuilder();
CriteriaQuery<UserEntity> query = criteriaBuilder.createQuery(UserEntity.class);
Root<UserEntity> root = query.from(UserEntity.class);
query.where(criteriaBuilder.and(
criteriaBuilder.equal(root.get(UserEntity._isActive), IsActive.Active),
criteriaBuilder.in(root.get(UserEntity._id)).value(queryUtilsService.buildSubQuery(new BuildSubQueryInput<>(new BuildSubQueryInput.Builder<>(TenantUserEntity.class, UUID.class)
.query(query)
.criteriaBuilder(criteriaBuilder)
.keyPathFunc((subQueryRoot) -> subQueryRoot.get(TenantUserEntity._userId))
.filterFunc((subQueryRoot, cb) ->
{
try {
return cb.and(
criteriaBuilder.equal(subQueryRoot.get(TenantUserEntity._tenantId), this.tenantScope.getTenant()),
criteriaBuilder.equal(subQueryRoot.get(TenantUserEntity._userId), this.userScope.getUserId()),
criteriaBuilder.equal(subQueryRoot.get(TenantUserEntity._isActive), IsActive.Active)
);
} catch (InvalidApplicationException e) {
throw new RuntimeException(e);
}
}
)
))
)
));
query.multiselect(root.get(UserEntity._id).alias(UserEntity._id));
List<UserEntity> results = this.entityManager.createQuery(query).getResultList();
return !results.isEmpty();
}
return false;
}
@Override
public void postHandle(@NonNull WebRequest request, ModelMap model) {
this.tenantScope.setTenant(null, null);
}
@Override
public void afterCompletion(@NonNull WebRequest request, Exception ex) {
}
}

View File

@ -0,0 +1,184 @@
package gr.cite.annotation.web.scope.tenant;
import gr.cite.annotation.authorization.ClaimNames;
import gr.cite.annotation.common.enums.IsActive;
import gr.cite.annotation.common.scope.tenant.TenantScope;
import gr.cite.annotation.convention.ConventionService;
import gr.cite.annotation.data.TenantEntity;
import gr.cite.annotation.errorcode.ErrorThesaurusProperties;
import gr.cite.commons.web.oidc.principal.CurrentPrincipalResolver;
import gr.cite.commons.web.oidc.principal.MyPrincipal;
import gr.cite.commons.web.oidc.principal.extractor.ClaimExtractor;
import gr.cite.commons.web.oidc.principal.extractor.ClaimExtractorContext;
import gr.cite.tools.exception.MyForbiddenException;
import gr.cite.tools.logging.LoggerService;
import jakarta.persistence.EntityManager;
import jakarta.persistence.PersistenceContext;
import jakarta.persistence.criteria.CriteriaBuilder;
import jakarta.persistence.criteria.CriteriaQuery;
import jakarta.persistence.criteria.Root;
import org.jetbrains.annotations.NotNull;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.lang.NonNull;
import org.springframework.stereotype.Component;
import org.springframework.ui.ModelMap;
import org.springframework.web.context.request.WebRequest;
import org.springframework.web.context.request.WebRequestInterceptor;
import javax.management.InvalidApplicationException;
import java.util.List;
import java.util.UUID;
@Component
public class TenantScopeClaimInterceptor implements WebRequestInterceptor {
private static final LoggerService logger = new LoggerService(LoggerFactory.getLogger(TenantScopeClaimInterceptor.class));
private final TenantScope tenantScope;
private final ConventionService conventionService;
private final TenantScopeProperties tenantScopeProperties;
private final ErrorThesaurusProperties errorThesaurusProperties;
private final ClaimExtractor claimExtractor;
private final CurrentPrincipalResolver currentPrincipalResolver;
private final String clientTenantClaimName;
private final ClaimExtractorContext claimExtractorContext;
private final TenantByCodeCacheService tenantByCodeCacheService;
private final TenantByIdCacheService tenantByIdCacheService;
@PersistenceContext
public EntityManager entityManager;
@Autowired
public TenantScopeClaimInterceptor(
TenantScope tenantScope,
ConventionService conventionService,
ClaimExtractor claimExtractor,
CurrentPrincipalResolver currentPrincipalResolver,
ErrorThesaurusProperties errorThesaurusProperties,
TenantScopeProperties tenantScopeProperties,
ClaimExtractorContext claimExtractorContext,
TenantByCodeCacheService tenantByCodeCacheService,
TenantByIdCacheService tenantByIdCacheService
) {
this.tenantScope = tenantScope;
this.conventionService = conventionService;
this.currentPrincipalResolver = currentPrincipalResolver;
this.claimExtractor = claimExtractor;
this.errorThesaurusProperties = errorThesaurusProperties;
this.tenantScopeProperties = tenantScopeProperties;
this.claimExtractorContext = claimExtractorContext;
this.tenantByCodeCacheService = tenantByCodeCacheService;
this.tenantByIdCacheService = tenantByIdCacheService;
this.clientTenantClaimName = this.tenantScopeProperties.getClientClaimsPrefix() + ClaimNames.TenantClaimName;
}
@Override
public void preHandle(@NotNull WebRequest request) throws InvalidApplicationException {
if (!this.currentPrincipalResolver.currentPrincipal().isAuthenticated()) return;
if (!this.tenantScope.isMultitenant()) return;
MyPrincipal principal = this.currentPrincipalResolver.currentPrincipal();
if (principal != null && principal.isAuthenticated() /* principal.Claims.Any() */) {
boolean scoped = this.scopeByPrincipal(principal);
if (!scoped) scoped = this.scopeByClient(principal);
if (!scoped && this.tenantScope.isSet() && this.tenantScopeProperties.getEnforceTrustedTenant())
throw new MyForbiddenException(this.errorThesaurusProperties.getMissingTenant().getCode(), this.errorThesaurusProperties.getMissingTenant().getMessage());
}
}
private boolean scopeByPrincipal(MyPrincipal principal) {
String tenantCode = this.claimExtractor.tenantString(principal);
if (this.conventionService.isNullOrEmpty(tenantCode)) tenantCode = this.claimExtractor.asString(principal, this.clientTenantClaimName);
if (tenantCode == null || this.conventionService.isNullOrEmpty(tenantCode)) return false;
if (tenantCode.equalsIgnoreCase(this.tenantScope.getDefaultTenantCode())){
logger.debug("parsed tenant header and set tenant to default tenant");
this.tenantScope.setTenant(null, tenantCode);
this.claimExtractorContext.putReplaceParameter(TenantScope.TenantReplaceParameter, tenantCode);
return true;
}
UUID tenantId = this.conventionService.parseUUIDSafe(tenantCode);
if (tenantId == null) {
TenantByCodeCacheService.TenantByCodeCacheValue cacheValue = this.tenantByCodeCacheService.lookup(this.tenantByCodeCacheService.buildKey(tenantCode));
if (cacheValue != null) {
tenantId = cacheValue.getTenantId();
} else {
tenantId = this.getTenantIdFromDatabase(tenantCode);
this.tenantByCodeCacheService.put(new TenantByCodeCacheService.TenantByCodeCacheValue(tenantCode, tenantId));
this.tenantByIdCacheService.put(new TenantByIdCacheService.TenantByIdCacheValue(tenantCode, tenantId));
}
} else {
logger.debug("tenant claim was set to {}", tenantId);
TenantByIdCacheService.TenantByIdCacheValue cacheValue = this.tenantByIdCacheService.lookup(this.tenantByIdCacheService.buildKey(tenantId));
if (cacheValue != null) {
tenantCode = cacheValue.getTenantCode();
} else {
tenantCode = this.getTenantCodeFromDatabase(tenantId);
this.tenantByCodeCacheService.put(new TenantByCodeCacheService.TenantByCodeCacheValue(tenantCode, tenantId));
this.tenantByIdCacheService.put(new TenantByIdCacheService.TenantByIdCacheValue(tenantCode, tenantId));
}
}
if (tenantId != null) {
logger.debug("parsed tenant header and set tenant id to {}", tenantId);
this.tenantScope.setTenant(tenantId, tenantCode);
this.claimExtractorContext.putReplaceParameter(TenantScope.TenantReplaceParameter, tenantCode);
return true;
}
return false;
}
private boolean scopeByClient(MyPrincipal principal) throws InvalidApplicationException {
String client = this.claimExtractor.client(principal);
Boolean isWhiteListed = this.tenantScopeProperties.getWhiteListedClients() != null && !this.conventionService.isNullOrEmpty(client) && this.tenantScopeProperties.getWhiteListedClients().contains(client);
logger.debug("client is whitelisted : {}, scope is set: {}, with value {}", isWhiteListed, this.tenantScope.isSet(), (this.tenantScope.isSet() ? this.tenantScope.getTenant() : null));
return isWhiteListed && this.tenantScope.isSet();
}
private UUID getTenantIdFromDatabase(String tenantCode) {
CriteriaBuilder criteriaBuilder = this.entityManager.getCriteriaBuilder();
CriteriaQuery<TenantEntity> query = criteriaBuilder.createQuery(TenantEntity.class);
Root<TenantEntity> root = query.from(TenantEntity.class);
query = query.where(
criteriaBuilder.and(
criteriaBuilder.equal(root.get(TenantEntity._code), tenantCode),
criteriaBuilder.equal(root.get(TenantEntity._isActive), IsActive.Active)
)
).multiselect(root.get(TenantEntity._id).alias(TenantEntity._id));
List<TenantEntity> results = this.entityManager.createQuery(query).getResultList();
if (results.size() == 1) {
return results.getFirst().getId();
}
return null;
}
private String getTenantCodeFromDatabase(UUID tenantId) {
CriteriaBuilder criteriaBuilder = this.entityManager.getCriteriaBuilder();
CriteriaQuery<TenantEntity> query = criteriaBuilder.createQuery(TenantEntity.class);
Root<TenantEntity> root = query.from(TenantEntity.class);
query = query.where(
criteriaBuilder.and(
criteriaBuilder.equal(root.get(TenantEntity._id), tenantId),
criteriaBuilder.equal(root.get(TenantEntity._isActive), IsActive.Active)
)
).multiselect(root.get(TenantEntity._code).alias(TenantEntity._code));
List<TenantEntity> results = this.entityManager.createQuery(query).getResultList();
if (results.size() == 1) {
return results.getFirst().getCode();
}
return null;
}
@Override
public void postHandle(@NonNull WebRequest request, ModelMap model) {
this.tenantScope.setTenant(null, null);
this.claimExtractorContext.removeReplaceParameter(TenantScope.TenantReplaceParameter);
}
@Override
public void afterCompletion(@NonNull WebRequest request, Exception ex) {
}
}

View File

@ -0,0 +1,9 @@
package gr.cite.annotation.web.scope.tenant;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Configuration;
@Configuration
@EnableConfigurationProperties(TenantScopeProperties.class)
public class TenantScopeConfiguration {
}

View File

@ -0,0 +1,146 @@
package gr.cite.annotation.web.scope.tenant;
import gr.cite.annotation.authorization.ClaimNames;
import gr.cite.annotation.common.enums.IsActive;
import gr.cite.annotation.common.scope.tenant.TenantScope;
import gr.cite.annotation.convention.ConventionService;
import gr.cite.annotation.data.TenantEntity;
import gr.cite.commons.web.oidc.principal.CurrentPrincipalResolver;
import gr.cite.commons.web.oidc.principal.extractor.ClaimExtractorContext;
import gr.cite.tools.logging.LoggerService;
import jakarta.persistence.EntityManager;
import jakarta.persistence.PersistenceContext;
import jakarta.persistence.criteria.CriteriaBuilder;
import jakarta.persistence.criteria.CriteriaQuery;
import jakarta.persistence.criteria.Root;
import org.jetbrains.annotations.NotNull;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.lang.NonNull;
import org.springframework.stereotype.Component;
import org.springframework.ui.ModelMap;
import org.springframework.web.context.request.WebRequest;
import org.springframework.web.context.request.WebRequestInterceptor;
import java.util.List;
import java.util.UUID;
@Component
public class TenantScopeHeaderInterceptor implements WebRequestInterceptor {
private static final LoggerService logger = new LoggerService(LoggerFactory.getLogger(TenantScopeHeaderInterceptor.class));
private final TenantScope tenantScope;
private final ConventionService conventionService;
private final TenantByCodeCacheService tenantByCodeCacheService;
private final TenantByIdCacheService tenantByIdCacheService;
private final ClaimExtractorContext claimExtractorContext;
private final CurrentPrincipalResolver currentPrincipalResolver;
@PersistenceContext
public EntityManager entityManager;
@Autowired
public TenantScopeHeaderInterceptor(
TenantScope tenantScope,
ConventionService conventionService,
TenantByCodeCacheService tenantByCodeCacheService,
TenantByIdCacheService tenantByIdCacheService,
ClaimExtractorContext claimExtractorContext,
CurrentPrincipalResolver currentPrincipalResolver
) {
this.tenantScope = tenantScope;
this.conventionService = conventionService;
this.tenantByCodeCacheService = tenantByCodeCacheService;
this.tenantByIdCacheService = tenantByIdCacheService;
this.claimExtractorContext = claimExtractorContext;
this.currentPrincipalResolver = currentPrincipalResolver;
}
@Override
public void preHandle(@NotNull WebRequest request) {
if (!this.currentPrincipalResolver.currentPrincipal().isAuthenticated()) return;
if (!this.tenantScope.isMultitenant()) return;
String tenantCode = request.getHeader(ClaimNames.TenantClaimName);
logger.debug("retrieved request tenant header is: {}", tenantCode);
if (tenantCode == null || this.conventionService.isNullOrEmpty(tenantCode)) return;
if (tenantCode.equalsIgnoreCase(this.tenantScope.getDefaultTenantCode())){
logger.debug("parsed tenant header and set tenant to default tenant");
this.tenantScope.setTenant(null, tenantCode);
this.claimExtractorContext.putReplaceParameter(TenantScope.TenantReplaceParameter, tenantCode);
return;
}
UUID tenantId = this.conventionService.parseUUIDSafe(tenantCode);
if (tenantId == null) {
TenantByCodeCacheService.TenantByCodeCacheValue cacheValue = this.tenantByCodeCacheService.lookup(this.tenantByCodeCacheService.buildKey(tenantCode));
if (cacheValue != null) {
tenantId = cacheValue.getTenantId();
} else {
tenantId = this.getTenantIdFromDatabase(tenantCode);
this.tenantByCodeCacheService.put(new TenantByCodeCacheService.TenantByCodeCacheValue(tenantCode, tenantId));
this.tenantByIdCacheService.put(new TenantByIdCacheService.TenantByIdCacheValue(tenantCode, tenantId));
}
} else {
TenantByIdCacheService.TenantByIdCacheValue cacheValue = this.tenantByIdCacheService.lookup(this.tenantByIdCacheService.buildKey(tenantId));
if (cacheValue != null) {
tenantCode = cacheValue.getTenantCode();
} else {
tenantCode = this.getTenantCodeFromDatabase(tenantId);
this.tenantByCodeCacheService.put(new TenantByCodeCacheService.TenantByCodeCacheValue(tenantCode, tenantId));
this.tenantByIdCacheService.put(new TenantByIdCacheService.TenantByIdCacheValue(tenantCode, tenantId));
}
}
if (tenantId != null) {
logger.debug("parsed tenant header and set tenant id to {}", tenantId);
this.tenantScope.setTenant(tenantId, tenantCode);
this.claimExtractorContext.putReplaceParameter(TenantScope.TenantReplaceParameter, tenantCode);
}
}
private UUID getTenantIdFromDatabase(String tenantCode) {
CriteriaBuilder criteriaBuilder = this.entityManager.getCriteriaBuilder();
CriteriaQuery<TenantEntity> query = criteriaBuilder.createQuery(TenantEntity.class);
Root<TenantEntity> root = query.from(TenantEntity.class);
query = query.where(
criteriaBuilder.and(
criteriaBuilder.equal(root.get(TenantEntity._code), tenantCode),
criteriaBuilder.equal(root.get(TenantEntity._isActive), IsActive.Active)
)
).multiselect(root.get(TenantEntity._id).alias(TenantEntity._id));
List<TenantEntity> results = this.entityManager.createQuery(query).getResultList();
if (results.size() == 1) {
return results.getFirst().getId();
}
return null;
}
private String getTenantCodeFromDatabase(UUID tenantId) {
CriteriaBuilder criteriaBuilder = this.entityManager.getCriteriaBuilder();
CriteriaQuery<TenantEntity> query = criteriaBuilder.createQuery(TenantEntity.class);
Root<TenantEntity> root = query.from(TenantEntity.class);
query = query.where(
criteriaBuilder.and(
criteriaBuilder.equal(root.get(TenantEntity._id), tenantId),
criteriaBuilder.equal(root.get(TenantEntity._isActive), IsActive.Active)
)
).multiselect(root.get(TenantEntity._code).alias(TenantEntity._code));
List<TenantEntity> results = this.entityManager.createQuery(query).getResultList();
if (results.size() == 1) {
return results.getFirst().getCode();
}
return null;
}
@Override
public void postHandle(@NonNull WebRequest request, ModelMap model) {
this.tenantScope.setTenant(null, null);
this.claimExtractorContext.removeReplaceParameter(TenantScope.TenantReplaceParameter);
}
@Override
public void afterCompletion(@NonNull WebRequest request, Exception ex) {
}
}

View File

@ -0,0 +1,44 @@
package gr.cite.annotation.web.scope.tenant;
import org.springframework.boot.context.properties.ConfigurationProperties;
import java.util.HashSet;
import java.util.List;
@ConfigurationProperties(prefix = "tenant.interceptor")
public class TenantScopeProperties {
private String clientClaimsPrefix;
public String getClientClaimsPrefix() {
return clientClaimsPrefix;
}
public void setClientClaimsPrefix(String clientClaimsPrefix) {
this.clientClaimsPrefix = clientClaimsPrefix;
}
private HashSet<String> whiteListedClients;
public HashSet<String> getWhiteListedClients() {
return whiteListedClients;
}
public void setWhiteListedClients(HashSet<String> whiteListedClients) {
this.whiteListedClients = whiteListedClients;
}
private List<String> whiteListedEndpoints;
public List<String> getWhiteListedEndpoints() {
return whiteListedEndpoints;
}
public void setWhiteListedEndpoints(List<String> whiteListedEndpoints) {
this.whiteListedEndpoints = whiteListedEndpoints;
}
private Boolean enforceTrustedTenant;
public Boolean getEnforceTrustedTenant() {
return enforceTrustedTenant;
}
public void setEnforceTrustedTenant(Boolean enforceTrustedTenant) {
this.enforceTrustedTenant = enforceTrustedTenant;
}
}

View File

@ -0,0 +1,12 @@
package gr.cite.annotation.web.scope.tenant;
import gr.cite.tools.cache.CacheOptions;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
@Configuration
@ConfigurationProperties(prefix = "cache.user-allowed-tenant")
public class UserAllowedTenantCacheOptions extends CacheOptions {
}

View File

@ -0,0 +1,91 @@
package gr.cite.annotation.web.scope.tenant;
import gr.cite.annotation.event.UserAddedToTenantEvent;
import gr.cite.annotation.event.UserRemovedFromTenantEvent;
import gr.cite.tools.cache.CacheService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.Locale;
import java.util.UUID;
@Service
public class UserAllowedTenantCacheService extends CacheService<UserAllowedTenantCacheService.UserAllowedTenantCacheValue> {
public static class UserAllowedTenantCacheValue {
public UserAllowedTenantCacheValue() {
}
public UserAllowedTenantCacheValue(UUID userId, UUID tenantId, boolean isAllowed) {
this.userId = userId;
this.tenantId = tenantId;
this.isAllowed = isAllowed;
}
private UUID userId;
public UUID getUserId() {
return userId;
}
public void setUserId(UUID userId) {
this.userId = userId;
}
private UUID tenantId;
public UUID getTenantId() {
return tenantId;
}
public void setTenantId(UUID tenantId) {
this.tenantId = tenantId;
}
private boolean isAllowed;
public boolean isAllowed() {
return isAllowed;
}
public void setAllowed(boolean allowed) {
isAllowed = allowed;
}
}
@Autowired
public UserAllowedTenantCacheService(UserAllowedTenantCacheOptions options) {
super(options);
}
@EventListener
public void handleUserRemovedFromTenantEvent(UserRemovedFromTenantEvent event) {
this.evict(this.buildKey(event.getUserId(), event.getTenantId()));
}
@EventListener
public void handleUserAddedToTenantEvent(UserAddedToTenantEvent event) {
this.evict(this.buildKey(event.getUserId(), event.getTenantId()));
}
@Override
protected Class<UserAllowedTenantCacheValue> valueClass() {
return UserAllowedTenantCacheValue.class;
}
@Override
public String keyOf(UserAllowedTenantCacheValue value) {
return this.buildKey(value.getUserId(), value.getTenantId());
}
public String buildKey(UUID userId, UUID tenantId) {
HashMap<String, String> keyParts = new HashMap<>();
keyParts.put("$user_id$", userId.toString().toLowerCase(Locale.ROOT));
keyParts.put("$tenant_id$", tenantId.toString().toLowerCase(Locale.ROOT));
return this.generateKey(keyParts);
}
}

View File

@ -0,0 +1,81 @@
package gr.cite.annotation.web.scope.user;
import gr.cite.annotation.common.scope.user.UserScope;
import gr.cite.annotation.data.UserCredentialEntity;
import gr.cite.annotation.model.UserCredential;
import gr.cite.annotation.query.UserCredentialQuery;
import gr.cite.commons.web.oidc.principal.CurrentPrincipalResolver;
import gr.cite.commons.web.oidc.principal.extractor.ClaimExtractor;
import gr.cite.tools.data.query.QueryFactory;
import gr.cite.tools.exception.MyForbiddenException;
import gr.cite.tools.fieldset.BaseFieldSet;
import org.jetbrains.annotations.NotNull;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.lang.NonNull;
import org.springframework.stereotype.Component;
import org.springframework.ui.ModelMap;
import org.springframework.web.context.request.WebRequest;
import org.springframework.web.context.request.WebRequestInterceptor;
import java.util.UUID;
@Component
public class UserInterceptor implements WebRequestInterceptor {
private final UserScope userScope;
private final ClaimExtractor claimExtractor;
private final CurrentPrincipalResolver currentPrincipalResolver;
private final UserInterceptorCacheService userInterceptorCacheService;
private final QueryFactory queryFactory;
@Autowired
public UserInterceptor(
UserScope userScope,
ClaimExtractor claimExtractor,
CurrentPrincipalResolver currentPrincipalResolver,
UserInterceptorCacheService userInterceptorCacheService,
QueryFactory queryFactory) {
this.userScope = userScope;
this.currentPrincipalResolver = currentPrincipalResolver;
this.claimExtractor = claimExtractor;
this.userInterceptorCacheService = userInterceptorCacheService;
this.queryFactory = queryFactory;
}
@Override
public void preHandle(@NotNull WebRequest request) {
UUID userId = null;
if (this.currentPrincipalResolver.currentPrincipal().isAuthenticated()) {
String subjectId = this.claimExtractor.subjectString(this.currentPrincipalResolver.currentPrincipal());
if (subjectId == null || subjectId.isBlank()) throw new MyForbiddenException("Empty subjects not allowed");
UserInterceptorCacheService.UserInterceptorCacheValue cacheValue = this.userInterceptorCacheService.lookup(this.userInterceptorCacheService.buildKey(subjectId));
if (cacheValue != null) {
userId = cacheValue.getUserId();
} else {
userId = this.findExistingUserFromDb(subjectId);
if (userId != null) {
cacheValue = new UserInterceptorCacheService.UserInterceptorCacheValue(subjectId, userId);
this.userInterceptorCacheService.put(cacheValue);
}
}
}
this.userScope.setUserId(userId);
}
private UUID findExistingUserFromDb(String subjectId) {
UserCredentialEntity userCredential = this.queryFactory.query(UserCredentialQuery.class).externalIds(subjectId).firstAs(new BaseFieldSet().ensure(UserCredential._user));
if (userCredential != null) {
return userCredential.getUserId();
}
return null;
}
@Override
public void postHandle(@NonNull WebRequest request, ModelMap model) {
this.userScope.setUserId(null);
}
@Override
public void afterCompletion(@NonNull WebRequest request, Exception ex) {
}
}

View File

@ -0,0 +1,10 @@
package gr.cite.annotation.web.scope.user;
import gr.cite.tools.cache.CacheOptions;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
@Configuration
@ConfigurationProperties(prefix = "cache.user-by-subject-id")
public class UserInterceptorCacheOptions extends CacheOptions {
}

View File

@ -0,0 +1,67 @@
package gr.cite.annotation.web.scope.user;
import gr.cite.annotation.convention.ConventionService;
import gr.cite.tools.cache.CacheService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.UUID;
@Service
public class UserInterceptorCacheService extends CacheService<UserInterceptorCacheService.UserInterceptorCacheValue> {
public static class UserInterceptorCacheValue {
public UserInterceptorCacheValue() {
}
public UserInterceptorCacheValue(String subjectId, UUID userId) {
this.subjectId = subjectId;
this.userId = userId;
}
public String getSubjectId() {
return subjectId;
}
public void setSubjectId(String subjectId) {
this.subjectId = subjectId;
}
private String subjectId;
private UUID userId;
public UUID getUserId() {
return userId;
}
public void setUserId(UUID userId) {
this.userId = userId;
}
}
@Autowired
public UserInterceptorCacheService(UserInterceptorCacheOptions options, ConventionService conventionService) {
super(options);
}
@Override
protected Class<UserInterceptorCacheValue> valueClass() {
return UserInterceptorCacheValue.class;
}
@Override
public String keyOf(UserInterceptorCacheValue value) {
return this.buildKey(value.getSubjectId());
}
public String buildKey(String subject) {
HashMap<String, String> keyParts = new HashMap<>();
keyParts.put("$subject$", subject);
return this.generateKey(keyParts);
}
}

View File

@ -0,0 +1,18 @@
spring:
jackson:
default-property-inclusion: non_null
config:
import: optional:classpath:config/app.env[.properties], optional:file:../config/app.env[.properties],
optional:classpath:config/db.yml[.yml], optional:classpath:config/db-${spring.profiles.active}.yml[.yml], optional:file:../config/db-${spring.profiles.active}.yml[.yml],
optional:classpath:config/permissions.yml[.yml], optional:classpath:config/permissions-${spring.profiles.active}.yml[.yml], optional:file:../config/permissions-${spring.profiles.active}.yml[.yml],
optional:classpath:config/errors.yml[.yml], optional:classpath:config/errors-${spring.profiles.active}.yml[.yml], optional:file:../config/errors-${spring.profiles.active}.yml[.yml],
optional:classpath:config/security.yml[.yml], optional:classpath:config/security-${spring.profiles.active}.yml[.yml], optional:file:../config/security-${spring.profiles.active}.yml[.yml],
optional:classpath:config/server.yml[.yml], optional:classpath:config/server-${spring.profiles.active}.yml[.yml], optional:file:../config/server-${spring.profiles.active}.yml[.yml],
optional:classpath:config/logging.yml[.yml], optional:classpath:config/logging-${spring.profiles.active}.yml[.yml], optional:file:../config/logging-${spring.profiles.active}.yml[.yml],
optional:classpath:config/idpclaims.yml[.yml], optional:classpath:config/idpclaims-${spring.profiles.active}.yml[.yml], optional:file:../config/idpclaims-${spring.profiles.active}.yml[.yml],
optional:classpath:config/cache.yml[.yml], optional:classpath:config/cache-${spring.profiles.active}.yml[.yml], optional:file:../config/cache-${spring.profiles.active}.yml[.yml],
optional:classpath:config/tenant.yml[.yml], optional:classpath:config/tenant-${spring.profiles.active}.yml[.yml], optional:file:../config/tenant-${spring.profiles.active}.yml[.yml],
optional:classpath:config/locale.yml[.yml], optional:classpath:config/locale-${spring.profiles.active}.yml[.yml], optional:file:../config/locale-${spring.profiles.active}.yml[.yml],
optional:classpath:config/cors.yml[.yml], optional:classpath:config/cors-${spring.profiles.active}.yml[.yml], optional:file:../config/cors-${spring.profiles.active}.yml[.yml],
optional:classpath:config/queue.yml[.yml], optional:classpath:config/queue-${spring.profiles.active}.yml[.yml], optional:file:../config/queue-${spring.profiles.active}.yml[.yml],
optional:classpath:config/cipher.yml[.yml], optional:classpath:config/cipher-${spring.profiles.active}.yml[.yml], optional:file:../config/cipher-${spring.profiles.active}.yml[.yml]

View File

@ -0,0 +1,59 @@
cache:
manager:
fallbackToNoOpCache: true
caffeineCaches:
- names: [ apikey ]
allowNullValues: true
initialCapacity: 100
maximumSize: 500
enableRecordStats: false
expireAfterWriteSeconds: 600
- names: [ tenantByCode ]
allowNullValues: true
initialCapacity: 100
maximumSize: 500
enableRecordStats: false
expireAfterWriteSeconds: 600
- names: [ tenantById ]
allowNullValues: true
initialCapacity: 100
maximumSize: 500
enableRecordStats: false
expireAfterWriteSeconds: 600
- names: [ userBySubjectId ]
allowNullValues: true
initialCapacity: 100
maximumSize: 500
enableRecordStats: false
expireAfterWriteSeconds: 320
- names: [ userAccessTenant ]
allowNullValues: true
initialCapacity: 100
maximumSize: 500
enableRecordStats: false
expireAfterWriteSeconds: 320
- names: [ "affiliation" ]
allowNullValues: true
initialCapacity: 100
maximumSize: 5000
enableRecordStats: false
expireAfterWriteSeconds: 20
mapCaches:
apiKey:
name: apikey
keyPattern: ant_resolve_$keyhash$:v0
userBySubjectId:
name: userBySubjectId
keyPattern: ant_user_by_subject_$subject$:v0
tenantByCode:
name: tenantByCode
keyPattern: ant_tenant_by_code_$code$:v0
tenantById:
name: tenantById
keyPattern: ant_tenant_by_id_$tenantId$:v0
userAllowedTenant:
name: userAccessTenant
keyPattern: ant_user_access_tenant_$user_id$_$tenant_id$:v0
affiliation:
name: affiliation
keyPattern: ant_affiliation_$entity$_$user$_$type$:v0

View File

@ -0,0 +1,35 @@
cipher-profiles:
profile-map:
configuration-profile-name: "configuration"
queue-profile-name: "queue"
notification-profile-name: "queue"
cipher:
# salted-hash:
# default-o: null
# options: null
symetric-encryption:
default-o: null
options:
configuration:
aes:
key: ${CIPHER_SYMETRIC_ENCRYPTION_CONFIGURATION_AES_KEY:}
iv: ${CIPHER_SYMETRIC_ENCRYPTION_CONFIGURATION_AES_IV:}
queue:
aes:
key: ${CIPHER_SYMETRIC_ENCRYPTION_QUEUE_AES_KEY:}
iv: ${CIPHER_SYMETRIC_ENCRYPTION_QUEUE_AES_IV:}
masking:
default: null
options:
configuration:
character: "*"
clear-begining: 2
clear-ending: 4
at-least-percentage: 70
digital-signature:
default: null
options:
configuration:
certificate-path: null
certificate-password: null

View File

@ -0,0 +1,3 @@
web:
cors:
allowed-origins: [ http://localhost, http://localhost:4200 ]

View File

@ -0,0 +1,7 @@
web:
cors:
enabled: true
allowed-methods: [ HEAD, GET, POST, PUT, DELETE, PATCH ]
allowed-headers: [ Authorization, Cache-Control, Content-Type, Content-Disposition, x-tenant ]
exposed-headers: [ Authorization, Cache-Control, Content-Type, Content-Disposition ]
allow-credentials: false

View File

@ -0,0 +1,10 @@
spring:
datasource:
maxIdle: 10
minIdle: 5
maxActive: 10
jpa:
show-sql: true
properties:
hibernate:
format_sql: false

View File

@ -0,0 +1,28 @@
spring:
jpa:
properties:
org:
hibernate:
flushMode: MANUAL
hibernate:
globally_quoted_identifiers: true
ddl-auto: validate
dialect: org.hibernate.dialect.PostgreSQLDialect
hibernate:
naming:
physical-strategy: gr.cite.annotation.data.namingstrategy.PrefixPhysicalNamingStrategy
implicit-strategy: org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy
datasource:
url: ${DB_CONNECTION_STRING}
username: ${DB_USER}
password: ${DB_PASSWORD}
driver-class-name: org.postgresql.Driver
hikari:
connection-timeout: 30000
minimum-idle: 3
maximum-pool-size: 10
idle-timeout: 600000
max-lifetime: 1800000
naming-strategy:
prefix: ant_

View File

@ -0,0 +1,49 @@
error-thesaurus:
hash-conflict:
code: 100
message: there is a hash conflict for the item modified. please reload to get the latest changes
forbidden:
code: 101
message: insufficient rights
system-error:
code: 102
message: an unexpected system error occurred
missing-tenant:
code: 103
message: tenant scope not provided
invalid-api-key:
code: 104
message: provided APIKey not valid
stale-api-key:
code: 105
message: there was a problem authorizing you with your API key. Please try again. Contact the system administrator if the problem persists
model-validation:
code: 106
message: validation error
sensitive-info:
code: 107
message: you are attempting to access sensitive information. please don't do that
non-person-principal:
code: 108
message: the operation is available only to person users
blocking-consent:
code: 113
message: user consents are not sufficient to complete the operation
single-tenant-configuration-per-type-supported:
code: 116
message: a single tenant configuration entry per config type is supported
incompatible-tenant-configuration-types:
code: 117
message: the provided tenant configuration type is incompatible
missing-totp-token:
code: 118
message: totp token not provided
overlapping-tenant-configuration-notifier-list:
code: 119
message: Overlapping Tenant Configuration Notifier List
tenant-not-allowed:
code: 113
message: tenant not allowed
tenant-tampering:
code: 123
message: Tenant tampering

View File

@ -0,0 +1,58 @@
idpclient:
claims:
mapping:
Subject:
- type: sub
Name:
- type: name
Client:
- type: client_id
AuthenticationMethod:
- type: amr
NotBefore:
- type: nbf
AuthenticatedAt:
- type: auth_time
ExpiresAt:
- type: exp
Email:
- type: email
Roles:
- type: resource_access
path: dmp_web.roles
- type: tenant_roles
filterBy: "(.*):::TenantCode::"
extractByExpression: "(.*):(.*)"
extractExpressionValue: "[[g1]]"
GlobalRoles:
- type: resource_access
path: dmp_web.roles
TenantRoles:
- type: tenant_roles
filterBy: "(.*):::TenantCode::"
extractByExpression: "(.*):(.*)"
extractExpressionValue: "[[g1]]"
Scope:
- type: scope
AccessToken:
- type: x-access-token
visibility: SENSITIVE
Tenant:
- type: x-tenant
IssuedAt:
- type: iat
Issuer:
- type: iss
Audience:
- type: aud
TokenType:
- type: typ
AuthorizedParty:
- type: azp
Authorities:
- type: authorities
TenantCodes:
- type: tenant_roles
filterBy: "(.*):(.*)"
extractByExpression: "(.*):(.*)"
extractExpressionValue: "[[g2]]"

View File

@ -0,0 +1,4 @@
locale:
timezone: UTC
language: en
culture: en-US

View File

@ -0,0 +1,2 @@
logging:
config: classpath:logging/logback-dev.xml

View File

@ -0,0 +1,35 @@
logging:
context:
request:
requestIdKey: req.id
requestRemoteHostKey: req.remoteHost
requestUriKey: req.requestURI
requestQueryStringKey: req.queryString
requestUrlKey : req.requestURL
requestMethodKey: req.method
requestUserAgentKey: req.userAgent
requestForwardedForKey: req.xForwardedFor
requestSchemeKey: req.scheme
requestRemoteAddressKey: req.remoteAddr
requestRemotePortKey: req.remotePort
requestRemoteUserKey: req.remoteUser
principal:
subjectKey: usr.subject
nameKey: usr.name
clientKey: usr.client
audit:
enable: true
requestRemoteHostKey: req.remoteHost
requestUriKey: req.requestURI
requestQueryStringKey: req.queryString
requestUrlKey : req.requestURL
requestMethodKey: req.method
requestUserAgentKey: req.userAgent
requestForwardedForKey: req.xForwardedFor
requestSchemeKey: req.scheme
requestRemoteAddressKey: req.remoteAddr
requestRemotePortKey: req.remotePort
requestRemoteUserKey: req.remoteUser
principalSubjectKey: usr.subject
principalNameKey: usr.name
principalClientKey: usr.client

View File

@ -0,0 +1,99 @@
permissions:
policies:
DeferredAffiliation:
roles:
- TenantAdmin
- TenantUser
- TenantManager
- TenantDescriptionTemplateEditor
clients: [ ]
allowAnonymous: false
allowAuthenticated: false
# Tenants
BrowseTenant:
roles:
- Admin
clients: [ ]
allowAnonymous: false
allowAuthenticated: false
EditTenant:
roles:
- Admin
clients: [ "opencdmp-api-dev" ]
allowAnonymous: false
allowAuthenticated: false
DeleteTenant:
roles:
- Admin
claims: [ ]
clients: [ "opencdmp-api-dev" ]
allowAnonymous: false
allowAuthenticated: false
AllowNoTenant:
roles:
- Admin
claims: [ ]
clients: [ ]
allowAnonymous: false
allowAuthenticated: false
# Users
BrowseUser:
roles:
- TenantAdmin
clients: [ ]
allowAnonymous: true
allowAuthenticated: false
EditUser:
roles:
- TenantAdmin
clients: [ "opencdmp-api-dev" ]
allowAnonymous: false
allowAuthenticated: false
DeleteUser:
roles:
- TenantAdmin
claims: [ ]
clients: [ "opencdmp-api-dev" ]
allowAnonymous: false
allowAuthenticated: false
#Annotation
BrowseAnnotation:
roles:
- TenantAdmin
entityAffiliated: true
clients: [ ]
allowAnonymous: true
allowAuthenticated: false
NewAnnotation:
roles:
- TenantAdmin
entityAffiliated: true
clients: [ ]
allowAnonymous: true
allowAuthenticated: false
EditAnnotation:
roles:
- TenantAdmin
clients: [ ]
allowAnonymous: true
allowAuthenticated: false
DeleteAnnotation:
roles:
- TenantAdmin
entityAffiliated: false
clients: [ ]
allowAnonymous: false
allowAuthenticated: false
#Tenant Configuration
BrowseTenantConfiguration:
roles:
- TenantAdmin
clients: [ ]
allowAnonymous: false
allowAuthenticated: false
EditTenantConfiguration:
roles:
- TenantAdmin
clients: [ ]
allowAnonymous: false
allowAuthenticated: false

View File

@ -0,0 +1,21 @@
queue:
rabbitmq:
enable: true
durable: true
queue: cite_dmp_devel_annotation_inbox_queue
exchange: cite_dmp_devel_queue
listenerEnabled: true
publisherEnabled: true
task:
publisher:
enable: true
options:
exchange: cite_dmp_devel_queue
rabbitmq:
enable: true
listener:
enable: true
options:
exchange: cite_dmp_devel_queue
rabbitmq:
enable: true

View File

@ -0,0 +1,54 @@
spring:
rabbitmq:
host: ${RABBIT_HOST}
port: ${RABBIT_PORT}
username: ${RABBIT_USER}
password: ${RABBIT_PASS}
ssl:
enabled: false
queue:
rabbitmq:
enable: false
appId: ${QUEUE_APP_ID}
durable: null
queue: null
exchange: null
listenerEnabled: true
publisherEnabled: true
#TODO
connection-recovery:
enable: true
network-recovery-interval: 5000
unreachable-recovery-interval: 5000
task:
publisher:
enable: false
options:
exchange: null
rabbitmq:
enable: false
interval-seconds: 3
options:
retry-threashold: 100
retry-delay-step-seconds: 300
max-retry-delay-seconds: 10800
too-old-to-send-seconds: 604800
confirm-timeout-seconds: 30
listener:
enable: false
options:
exchange: null
tenant-removal-topic: tenant.remove
tenant-touch-topic: tenant.touch
user-removal-topic: user.remove
user-touch-topic: user.touch
annotation-entities-touch-topic: annotation.entities.touch
annotation-entities-removal-topic: annotation.entities.remove
rabbitmq:
enable: false
interval-seconds: 3
options:
retry-threashold: 100
retry-delay-step-seconds: 300
max-retry-delay-seconds: 10800
too-old-to-send-seconds: 604800

View File

@ -0,0 +1,6 @@
web:
security:
idp:
resource:
jwt:
audiences: [ "dmp_annotation" ]

View File

@ -0,0 +1,14 @@
web:
security:
enabled: true
authorized-endpoints: [ api ]
allowed-endpoints: [ public ]
idp:
api-key:
enabled: false
resource:
token-type: JWT #| opaque
jwt:
claims: [ role, x-role ]
issuer-uri: ${IDP_ISSUER_URI}
validIssuer: ${IDP_ISSUER_URI}

View File

@ -0,0 +1,2 @@
server:
forward-headers-strategy: FRAMEWORK

View File

@ -0,0 +1,13 @@
server:
port: ${WEB_PORT}
forward-headers-strategy: NONE
tomcat:
threads:
max: 20
max-connections: 10000
spring:
servlet:
multipart:
max-file-size: 10MB
max-request-size: 10MB

View File

@ -0,0 +1,7 @@
tenant:
multitenancy:
is-multitenant: true
default-tenant-code: default
interceptor:
client-claims-prefix: client_
enforce-trusted-tenant: false

View File

@ -0,0 +1,7 @@
tenant:
multitenancy:
is-multitenant: false
interceptor:
white-listed-clients: [ ]
enforce-trusted-tenant: false
white-listed-endpoints: [ '/api/annotation/principal/me' ]

View File

@ -0,0 +1,61 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="true">
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<Pattern>%date{ISO8601} [%thread] %-5level %logger{36} [%X{req.id}] - %message%n</Pattern>
</encoder>
</appender>
<appender name="TROUBLESHOOTING" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logs/logging.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>logs/logging.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<maxHistory>15</maxHistory>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<Pattern>%date{ISO8601} [%thread] %-5level %logger{36} [%X{req.id}] - %message%n</Pattern>
</encoder>
</appender>
<appender name="AUDITING" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logs/auditing.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>logs/auditing.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<maxHistory>15</maxHistory>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<Pattern>%date{ISO8601} - %X{req.id} - %message%n</Pattern>
</encoder>
</appender>
<logger name="org.springframework.web" level="INFO" additivity="false">
<appender-ref ref="TROUBLESHOOTING"/>
<appender-ref ref="STDOUT"/>
</logger>
<logger name="org.hibernate" level="INFO" additivity="false">
<appender-ref ref="TROUBLESHOOTING"/>
<appender-ref ref="STDOUT"/>
</logger>
<logger name="gr.cite" level="DEBUG" additivity="false">
<appender-ref ref="TROUBLESHOOTING"/>
<appender-ref ref="STDOUT"/>
</logger>
<logger name="org.springframework.data.elasticsearch.client.WIRE" level="TRACE" additivity="false">
<appender-ref ref="TROUBLESHOOTING"/>
<appender-ref ref="STDOUT"/>
</logger>
<logger name="audit" level="INFO" additivity="false">
<appender-ref ref="AUDITING"/>
<appender-ref ref="STDOUT"/>
</logger>
<root level="info">
<appender-ref ref="TROUBLESHOOTING"/>
<appender-ref ref="STDOUT"/>
</root>
</configuration>

View File

@ -0,0 +1,10 @@
validation.empty=Value cannot be empty
validation.hashempty=Hash must be set
validation.lowerthanmin=Value must be larger than {value}
validation.largerthanmax=Value must be less than {value}
validation.invalidid=Not valid id
General_ItemNotFound=Item {0} of type {1} not found
Validation_Required={0} is required
Validation_OverPosting=Too much info
Validation_MaxLength={0} too long
Validation_UnexpectedValue=Unexpected value in field {0}

View File

@ -0,0 +1,6 @@
validation.empty=el-Value cannot be empty
validation.hashempty=el-Hash must be set
validation.lowerthanmin=el-Value must be larger than {value}
validation.largerthanmax=el-Value must be less than {value}
validation.invalidid=el-Not valid id
General_ItemNotFound=el-Item {0} of type {1} not found

View File

@ -0,0 +1,33 @@
HELP.md
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
!**/src/main/**/build/
!**/src/test/**/build/
### VS Code ###
.vscode/

View File

@ -0,0 +1,101 @@
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>gr.cite</groupId>
<artifactId>annotation-service-parent</artifactId>
<version>${revision}</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>annotation</artifactId>
<version>${revision}</version>
<properties>
<java.version>21</java.version>
<maven.compiler.source>21</maven.compiler.source>
<maven.compiler.target>21</maven.compiler.target>
<revision>1.0.0-SNAPSHOT</revision>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>5.2.2</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.2.2</version>
</dependency>
<dependency>
<groupId>gr.cite</groupId>
<artifactId>data-tools</artifactId>
<version>2.1.2</version>
</dependency>
<dependency>
<groupId>gr.cite</groupId>
<artifactId>field-set</artifactId>
<version>2.1.0</version>
</dependency>
<dependency>
<groupId>gr.cite</groupId>
<artifactId>oidc-authn</artifactId>
<version>2.2.2</version>
</dependency>
<dependency>
<groupId>gr.cite</groupId>
<artifactId>logging</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>gr.cite</groupId>
<artifactId>oidc-authz</artifactId>
<version>2.1.0</version>
</dependency>
<dependency>
<groupId>gr.cite</groupId>
<artifactId>exceptions</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>gr.cite</groupId>
<artifactId>validation</artifactId>
<version>3.0.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
</dependency>
<dependency>
<groupId>gr.cite</groupId>
<artifactId>cipher</artifactId>
<version>1.0.0</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project>

View File

@ -0,0 +1,59 @@
package gr.cite.annotation.audit;
import gr.cite.tools.logging.EventId;
public class AuditableAction {
// public static final EventId Tenant_Available_Notifiers_Query = new EventId(2006, "Tenant_Available_Notifiers_Query");
public static final EventId Principal_Lookup = new EventId(6000, "Principal_Lookup");
public static final EventId Tenants_Lookup = new EventId(6001, "Tenants_Lookup");
// public static final EventId User_Available_Notifiers_Query = new EventId(10004, "User_Available_Notifiers_Query");
public static final EventId User_Query = new EventId(11000, "User_Query");
public static final EventId User_Lookup = new EventId(11001, "User_Lookup");
public static final EventId User_Persist = new EventId(11002, "User_Persist");
public static final EventId User_Delete = new EventId(11003, "User_Delete");
public static final EventId Tenant_Query = new EventId(12000, "Tenant_Query");
public static final EventId Tenant_Lookup = new EventId(12001, "Tenant_Lookup");
public static final EventId Tenant_Persist = new EventId(12002, "Tenant_Persist");
public static final EventId Tenant_Delete = new EventId(12003, "Tenant_Delete");
// public static final EventId Notification_Query = new EventId(19000, "Notification_Query");
// public static final EventId Notification_Lookup = new EventId(19001, "Notification_Lookup");
// public static final EventId Notification_Persist = new EventId(19002, "Notification_Persist");
// public static final EventId Notification_Delete = new EventId(19003, "Notification_Delete");
// public static final EventId InApp_Notification_Query = new EventId(20000, "InApp_Notification_Query");
// public static final EventId InApp_Notification_Lookup = new EventId(20001, "InApp_Notification_Lookup");
// public static final EventId InApp_Notification_Persist = new EventId(20002, "InApp_Notification_Persist");
// public static final EventId InApp_Notification_Delete = new EventId(20003, "InApp_Notification_Delete");
// public static final EventId InApp_Notification_Read = new EventId(20003, "InApp_Notification_Read");
// public static final EventId InApp_Notification_Read_All = new EventId(20003, "InApp_Notification_Read_All");
public static final EventId Tenant_Configuration_Query = new EventId(21000, "Tenant_Configuration_Query");
public static final EventId Tenant_Configuration_Lookup = new EventId(21001, "Tenant_Configuration_Lookup");
public static final EventId Tenant_Configuration_Persist = new EventId(21002, "Tenant_Configuration_Persist");
public static final EventId Tenant_Configuration_Delete = new EventId(21003, "Tenant_Configuration_Delete");
// public static final EventId User_Notification_Preference_Query = new EventId(22000, "User_Notification_Preference_Query");
// public static final EventId User_Notification_Preference_Lookup = new EventId(22001, "User_Notification_Preference_Lookup");
// public static final EventId User_Notification_Preference_Persist = new EventId(22002, "User_Notification_Preference_Persist");
// public static final EventId User_Notification_Preference_Delete = new EventId(22003, "User_Notification_Preference_Delete");
//
// public static final EventId Notification_Template_Query = new EventId(23000, "Notification_Template_Query");
// public static final EventId Notification_Template_Lookup = new EventId(23001, "Notification_Template_Lookup");
// public static final EventId Notification_Template_Persist = new EventId(23002, "Notification_Template_Persist");
// public static final EventId Notification_Template_Delete = new EventId(23003, "Notification_Template_Delete");
public static final EventId Annotation_Query = new EventId(24000, "Annotation_Query");
public static final EventId Annotation_Lookup = new EventId(24001, "Annotation_Lookup");
public static final EventId Annotation_Persist = new EventId(24002, "Annotation_Persist");
public static final EventId Annotation_Delete = new EventId(24003, "Annotation_Delete");
public static final EventId Entity_User_Query = new EventId(25000, "Entity_User_Query");
public static final EventId Entity_User_Lookup = new EventId(25001, "Entity_User_Lookup");
public static final EventId Entity_User_Persist = new EventId(25002, "Entity_User_Persist");
public static final EventId Entity_User_Delete = new EventId(25003, "Entity_User_Delete");
}

View File

@ -0,0 +1,40 @@
package gr.cite.annotation.authorization;
import gr.cite.commons.web.authz.policy.AuthorizationRequirement;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
public class AffiliatedAuthorizationRequirement implements AuthorizationRequirement {
private final Set<String> requiredPermissions;
private final boolean matchAll;
public AffiliatedAuthorizationRequirement(Set<String> requiredPermissions) {
this(false, requiredPermissions);
}
public AffiliatedAuthorizationRequirement(String... requiredPermissions) {
this(false, requiredPermissions);
}
public AffiliatedAuthorizationRequirement(boolean matchAll, Set<String> requiredPermissions) {
this.matchAll = matchAll;
this.requiredPermissions = requiredPermissions;
}
public AffiliatedAuthorizationRequirement(boolean matchAll, String... requiredPermissions) {
this.requiredPermissions = new HashSet<>();
this.matchAll = matchAll;
this.requiredPermissions.addAll(Arrays.stream(requiredPermissions).distinct().toList());
}
public Set<String> getRequiredPermissions() {
return requiredPermissions;
}
public boolean getMatchAll() {
return matchAll;
}
}

View File

@ -0,0 +1,22 @@
package gr.cite.annotation.authorization;
import gr.cite.commons.web.authz.policy.AuthorizationResource;
public class AffiliatedResource extends AuthorizationResource {
private Boolean isAffiliated;
public AffiliatedResource() {
}
public AffiliatedResource(Boolean isAffiliated) {
this.isAffiliated = isAffiliated;
}
public Boolean getAffiliated() {
return isAffiliated;
}
public void setAffiliated(Boolean affiliated) {
isAffiliated = affiliated;
}
}

View File

@ -0,0 +1,8 @@
package gr.cite.annotation.authorization;
import java.util.EnumSet;
public enum AuthorizationFlags {
None, Permission, Associated, Owner;
public static final EnumSet<AuthorizationFlags> OwnerOrPermissionAssociated = EnumSet.of(Owner, Permission, Associated);
}

View File

@ -0,0 +1,9 @@
package gr.cite.annotation.authorization;
public class ClaimNames {
public static final String ExternalProviderName = "ExternalProviderName";
public static final String TenantCodesClaimName = "TenantCodes";
public static final String TenantClaimName = "x-tenant";
public static final String GlobalRolesClaimName = "GlobalRoles";
public static final String TenantRolesClaimName = "TenantRoles";
}

View File

@ -0,0 +1,6 @@
package gr.cite.annotation.authorization;
import gr.cite.commons.web.authz.policy.AuthorizationRequirement;
public class OwnedAuthorizationRequirement implements AuthorizationRequirement {
}

View File

@ -0,0 +1,26 @@
package gr.cite.annotation.authorization;
import gr.cite.commons.web.authz.policy.AuthorizationResource;
import java.util.List;
import java.util.UUID;
public class OwnedResource extends AuthorizationResource {
private List<UUID> userIds;
public OwnedResource(UUID userId) {
this(List.of(userId));
}
public OwnedResource(List<UUID> userIds) {
this.userIds = userIds;
}
public List<UUID> getUserIds() {
return userIds;
}
public void setUserIds(List<UUID> userIds) {
this.userIds = userIds;
}
}

View File

@ -0,0 +1,27 @@
package gr.cite.annotation.authorization;
public final class Permission {
public static String DeferredAffiliation = "DeferredAffiliation";
//User
public static String BrowseUser = "BrowseUser";
public static String EditUser = "EditUser";
public static String DeleteUser = "DeleteUser";
//Tenant
public static String BrowseTenant = "BrowseTenant";
public static String EditTenant = "EditTenant";
public static String DeleteTenant = "DeleteTenant";
public static String AllowNoTenant = "AllowNoTenant";
//Annotation
public static final String BrowseAnnotation = "BrowseAnnotation";
public static String NewAnnotation = "NewAnnotation";
public static String EditAnnotation = "EditAnnotation";
public static String DeleteAnnotation = "DeleteAnnotation";
public static final String BrowseTenantConfiguration = "BrowseTenantConfiguration";
public static final String EditTenantConfiguration = "EditTenantConfiguration";
}

View File

@ -0,0 +1,39 @@
package gr.cite.annotation.authorization;
import gr.cite.annotation.convention.ConventionService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.List;
@Service
@Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON)
public class PermissionNameProvider {
private static final Logger logger = LoggerFactory.getLogger(PermissionNameProvider.class);
private final List<String> permissions;
public PermissionNameProvider(ConventionService conventionService) {
this.permissions = new ArrayList<>();
Class<Permission> clazz = Permission.class;
for (Field f : clazz.getDeclaredFields()) {
if (Modifier.isStatic(f.getModifiers())) {
try {
Object value = f.get(null);
if (value != null && !conventionService.isNullOrEmpty((String)value)) this.permissions.add((String)value);
} catch (Exception e) {
logger.error("Can not load permission " + f.getName() + " " + e.getMessage());
}
}
}
}
public List<String> getPermissions() {
return permissions;
}
}

View File

@ -0,0 +1,10 @@
package gr.cite.annotation.authorization.authorizationcontentresolver;
import gr.cite.tools.cache.CacheOptions;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
@Configuration
@ConfigurationProperties(prefix = "cache.affiliation")
public class AffiliationCacheOptions extends CacheOptions {
}

View File

@ -0,0 +1,95 @@
package gr.cite.annotation.authorization.authorizationcontentresolver;
import gr.cite.annotation.authorization.AffiliatedResource;
import gr.cite.annotation.convention.ConventionService;
import gr.cite.tools.cache.CacheService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.Locale;
import java.util.UUID;
@Service
public class AffiliationCacheService extends CacheService<AffiliationCacheService.AffiliationCacheValue> {
public static class AffiliationCacheValue {
public AffiliationCacheValue() {
}
public AffiliationCacheValue(UUID userId, UUID entityId, String entityType, AffiliatedResource affiliatedResource) {
this.userId = userId;
this.entityId = entityId;
this.entityType = entityType;
this.affiliatedResource = affiliatedResource;
}
private UUID userId;
private UUID entityId;
private String entityType;
private AffiliatedResource affiliatedResource;
public UUID getUserId() {
return userId;
}
public void setUserId(UUID userId) {
this.userId = userId;
}
public UUID getEntityId() {
return entityId;
}
public void setEntityId(UUID entityId) {
this.entityId = entityId;
}
public String getEntityType() {
return entityType;
}
public void setEntityType(String entityType) {
this.entityType = entityType;
}
public AffiliatedResource getAffiliatedResource() {
return affiliatedResource;
}
public void setAffiliatedResource(AffiliatedResource affiliatedResource) {
this.affiliatedResource = affiliatedResource;
}
}
private final ConventionService conventionService;
@Autowired
public AffiliationCacheService(AffiliationCacheOptions options, ConventionService conventionService) {
super(options);
this.conventionService = conventionService;
}
@Override
protected Class<AffiliationCacheValue> valueClass() {
return AffiliationCacheValue.class;
}
@Override
public String keyOf(AffiliationCacheValue value) {
return this.buildKey(value.getUserId(), value.getEntityId(), value.getEntityType());
}
public String buildKey(UUID userId, UUID entityId, String entityType) {
if (userId == null) throw new IllegalArgumentException("userId id is required");
if (entityId == null) throw new IllegalArgumentException("entityId id is required");
if (this.conventionService.isNullOrEmpty(entityType)) throw new IllegalArgumentException("entityType id is required");
HashMap<String, String> keyParts = new HashMap<>();
keyParts.put("$user$", userId.toString().replace("-", "").toLowerCase(Locale.ROOT));
keyParts.put("$entity$", entityId.toString().replace("-", "").toLowerCase(Locale.ROOT));
keyParts.put("$type$", entityType);
return this.generateKey(keyParts);
}
}

View File

@ -0,0 +1,20 @@
package gr.cite.annotation.authorization.authorizationcontentresolver;
import gr.cite.annotation.authorization.AffiliatedResource;
import java.util.List;
import java.util.Map;
import java.util.UUID;
public interface AuthorizationContentResolver {
AffiliatedResource entityAffiliation(UUID id);
Map<UUID, AffiliatedResource> entitiesAffiliation(List<UUID> ids);
List<String> getPermissionNames();
AffiliatedResource annotationAffiliation(UUID id);
Map<UUID, AffiliatedResource> annotationsAffiliation(List<UUID> ids);
}

View File

@ -0,0 +1,118 @@
package gr.cite.annotation.authorization.authorizationcontentresolver;
import gr.cite.annotation.authorization.AffiliatedResource;
import gr.cite.annotation.authorization.PermissionNameProvider;
import gr.cite.annotation.common.enums.IsActive;
import gr.cite.annotation.common.scope.user.UserScope;
import gr.cite.annotation.data.AnnotationEntity;
import gr.cite.annotation.data.EntityUserEntity;
import gr.cite.annotation.model.Annotation;
import gr.cite.annotation.model.EntityUser;
import gr.cite.annotation.query.AnnotationQuery;
import gr.cite.annotation.query.EntityUserQuery;
import gr.cite.tools.data.query.QueryFactory;
import gr.cite.tools.fieldset.BaseFieldSet;
import org.springframework.stereotype.Service;
import org.springframework.web.context.annotation.RequestScope;
import java.util.*;
import java.util.stream.Collectors;
@Service
@RequestScope
public class AuthorizationContentResolverImpl implements AuthorizationContentResolver {
private final QueryFactory queryFactory;
private final UserScope userScope;
private final AffiliationCacheService affiliationCacheService;
private final PermissionNameProvider permissionNameProvider;
public AuthorizationContentResolverImpl(QueryFactory queryFactory, UserScope userScope, AffiliationCacheService affiliationCacheService, PermissionNameProvider permissionNameProvider) {
this.queryFactory = queryFactory;
this.userScope = userScope;
this.affiliationCacheService = affiliationCacheService;
this.permissionNameProvider = permissionNameProvider;
}
@Override
public AffiliatedResource entityAffiliation(UUID id) {
return this.entitiesAffiliation(List.of(id)).getOrDefault(id, new AffiliatedResource());
}
@Override
public Map<UUID, AffiliatedResource> entitiesAffiliation(List<UUID> ids){
UUID userId = this.userScope.getUserIdSafe();
Map<UUID, AffiliatedResource> affiliatedResources = new HashMap<>();
for (UUID id : ids){
affiliatedResources.put(id, new AffiliatedResource());
}
if (userId == null || !userScope.isSet()) return affiliatedResources;
List<UUID> idsToResolve = this.getAffiliatedFromCache(ids, userId, affiliatedResources, AnnotationEntity._entityId);
if (idsToResolve.isEmpty()) return affiliatedResources;
List<EntityUserEntity> entityUsers = this.queryFactory.query(EntityUserQuery.class).entityIds(ids).userIds(userId).isActive(IsActive.Active).collectAs(new BaseFieldSet().ensure(EntityUser._id).ensure(EntityUser._entityId));
for (UUID entityId : entityUsers.stream().map(EntityUserEntity::getEntityId).distinct().toList()){
affiliatedResources.get(entityId).setAffiliated(true);
}
this.ensureAffiliatedInCache(idsToResolve, userId, affiliatedResources, AnnotationEntity._entityId);
return affiliatedResources;
}
@Override
public List<String> getPermissionNames() {
return permissionNameProvider.getPermissions();
}
@Override
public AffiliatedResource annotationAffiliation(UUID id) {
return this.annotationsAffiliation(List.of(id)).getOrDefault(id, new AffiliatedResource());
}
@Override
public Map<UUID, AffiliatedResource> annotationsAffiliation(List<UUID> ids){
UUID userId = this.userScope.getUserIdSafe();
Map<UUID, AffiliatedResource> affiliatedResources = new HashMap<>();
for (UUID id : ids){
affiliatedResources.put(id, new AffiliatedResource());
}
if (userId == null || !userScope.isSet()) return affiliatedResources;
List<UUID> idsToResolve = this.getAffiliatedFromCache(ids, userId, affiliatedResources, AnnotationEntity.class.getSimpleName());
if (idsToResolve.isEmpty()) return affiliatedResources;
List<AnnotationEntity> annotationEntities = this.queryFactory.query(AnnotationQuery.class).ids(ids).collectAs(new BaseFieldSet().ensure(Annotation._id).ensure(Annotation._entityId).ensure(Annotation._id));
List<EntityUserEntity> entityUsers = this.queryFactory.query(EntityUserQuery.class).entityIds(annotationEntities.stream().map(AnnotationEntity::getEntityId).distinct().toList()).userIds(userId).isActive(IsActive.Active).collectAs(new BaseFieldSet().ensure(EntityUser._id).ensure(EntityUser._entityId));
Map<UUID, List<EntityUserEntity>> dmpUsersMap = entityUsers.stream().collect(Collectors.groupingBy(EntityUserEntity::getEntityId));
for (AnnotationEntity annotation : annotationEntities){
List<EntityUserEntity> dmpDescriptionUsers = dmpUsersMap.getOrDefault(annotation.getEntityId(), new ArrayList<>());
if (!dmpDescriptionUsers.isEmpty()) {
affiliatedResources.get(annotation.getId()).setAffiliated(true);
}
}
this.ensureAffiliatedInCache(idsToResolve, userId, affiliatedResources, AnnotationEntity.class.getSimpleName());
return affiliatedResources;
}
private List<UUID> getAffiliatedFromCache(List<UUID> ids, UUID userId, Map<UUID, AffiliatedResource> affiliatedResources, String entityType){
List<UUID> idsToResolve = new ArrayList<>();
for (UUID id : ids){
AffiliationCacheService.AffiliationCacheValue cacheValue = this.affiliationCacheService.lookup(this.affiliationCacheService.buildKey(userId, id, entityType));
if (cacheValue != null) affiliatedResources.put(id, cacheValue.getAffiliatedResource());
else idsToResolve.add(id);
}
return idsToResolve;
}
private void ensureAffiliatedInCache(List<UUID> idsToResolve, UUID userId, Map<UUID, AffiliatedResource> affiliatedResources, String entityType){
for (UUID id : idsToResolve){
AffiliatedResource affiliatedResource = affiliatedResources.getOrDefault(id, null);
if (affiliatedResource != null) {
AffiliationCacheService.AffiliationCacheValue cacheValue = new AffiliationCacheService.AffiliationCacheValue(userId, id, entityType, affiliatedResource);
this.affiliationCacheService.put(cacheValue);
}
}
}
}

View File

@ -0,0 +1,43 @@
package gr.cite.annotation.common;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import gr.cite.tools.logging.LoggerService;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
@Component
public class JsonHandlingService {
private static final LoggerService logger = new LoggerService(LoggerFactory.getLogger(JsonHandlingService.class));
private final ObjectMapper objectMapper = new ObjectMapper();
public String toJson(Object item) throws JsonProcessingException {
if (item == null) return null;
return objectMapper.writeValueAsString(item);
}
public String toJsonSafe(Object item) {
if (item == null) return null;
try {
return objectMapper.writeValueAsString(item);
} catch (Exception ex) {
logger.error("Json Parsing Error: " + ex.getLocalizedMessage(), ex);
return null;
}
}
public <T> T fromJson(Class<T> type, String json) throws JsonProcessingException {
if (json == null) return null;
return objectMapper.readValue(json, type);
}
public <T> T fromJsonSafe(Class<T> type, String json) {
if (json == null) return null;
try {
return objectMapper.readValue(json, type);
} catch (Exception ex) {
logger.error("Json Parsing Error: " + ex.getLocalizedMessage(), ex);
return null;
}
}
}

View File

@ -0,0 +1,8 @@
package gr.cite.annotation.common;
public class StringUtils {
public static Boolean isNullOrEmpty(String string) {
return string == null || string.isEmpty();
}
}

View File

@ -0,0 +1,117 @@
package gr.cite.annotation.common;
import com.fasterxml.jackson.core.JsonProcessingException;
import gr.cite.annotation.common.types.xml.XmlSerializable;
import jakarta.xml.bind.JAXBContext;
import jakarta.xml.bind.JAXBException;
import jakarta.xml.bind.Marshaller;
import jakarta.xml.bind.Unmarshaller;
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import org.w3c.dom.Document;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import javax.management.InvalidApplicationException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import java.io.IOException;
import java.io.StringReader;
import java.io.StringWriter;
@Component
@Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON)
public class XmlHandlingService {
public String generateXml(Document doc) throws TransformerException {
TransformerFactory tFact = TransformerFactory.newInstance();
Transformer trans = tFact.newTransformer();
StringWriter writer = new StringWriter();
StreamResult result = new StreamResult(writer);
DOMSource source = new DOMSource(doc);
trans.setOutputProperty(OutputKeys.INDENT, "yes");
trans.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
trans.transform(source, result);
return writer.toString();
}
public String toXml(Object item) throws JsonProcessingException, JAXBException, ParserConfigurationException, InvalidApplicationException, TransformerException {
if (XmlSerializable.class.isAssignableFrom(item.getClass())){
Document document = this.getDocument();
if (document == null) throw new InvalidApplicationException("Can not create document");
document.appendChild(((XmlSerializable)item).toXml(document));
return this.generateXml(document);
}
JAXBContext context = JAXBContext.newInstance(item.getClass());
Marshaller marshaller = context.createMarshaller();
StringWriter out = new StringWriter();
marshaller.marshal(item, out);
return out.toString();
}
public String toXmlSafe(Object item) {
if (item == null) return null;
try {
return this.toXml(item);
} catch (Exception ex) {
return null;
}
}
public <T> T fromXml(Class<T> type, String xmlString) throws JAXBException, InstantiationException, IllegalAccessException, ParserConfigurationException, IOException, SAXException {
if (XmlSerializable.class.isAssignableFrom(type)){
XmlSerializable<T> object = (XmlSerializable<T>)type.newInstance();
return (T) object.fromXml(this.getDocument(xmlString).getDocumentElement());
} else {
JAXBContext jaxbContext = JAXBContext.newInstance(type);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
return (T) jaxbUnmarshaller.unmarshal(new StringReader(xmlString));
}
}
public <T> T fromXmlSafe(Class<T> type, String xmlString) {
if (xmlString == null) return null;
try {
return this.fromXml(type, xmlString);
} catch (Exception ex) {
return null;
}
}
// public <T extends XmlSerializable<T>> T xmlSerializableFromXml(Class<T> type, String xmlString) throws JAXBException, InstantiationException, IllegalAccessException, ParserConfigurationException, IOException, SAXException {
// T object = type.newInstance();
// return (T) object.fromXml(this.getDocument(xmlString).getDocumentElement());
// }
//
// public <T extends XmlSerializable<T>> T xmlSerializableFromXmlSafe(Class<T> type, String xmlString) {
// if (xmlString == null) return null;
// try {
// return this.xmlSerializableFromXml(type, xmlString);
// } catch (Exception ex) {
// return null;
// }
// }
public Document getDocument(String xml) throws ParserConfigurationException, IOException, SAXException {
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
InputSource inputStream = new InputSource(new StringReader(xml));
return docBuilder.parse(inputStream);
}
public Document getDocument() throws ParserConfigurationException {
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
return docBuilder.newDocument();
}
}

View File

@ -0,0 +1,30 @@
package gr.cite.annotation.common.enums;
import com.fasterxml.jackson.annotation.JsonValue;
import gr.cite.annotation.data.conventers.DatabaseEnum;
import java.util.Map;
public enum AnnotationProtectionType implements DatabaseEnum<Short> {
Private((short) 0),
EntityAccessors((short) 1);
private final Short value;
AnnotationProtectionType(Short value) {
this.value = value;
}
@JsonValue
public Short getValue() {
return value;
}
private static final Map<Short, AnnotationProtectionType> map = EnumUtils.getEnumValueMap(AnnotationProtectionType.class);
public static AnnotationProtectionType of(Short i) {
return map.get(i);
}
}

View File

@ -0,0 +1,29 @@
package gr.cite.annotation.common.enums;
import com.fasterxml.jackson.annotation.JsonValue;
import gr.cite.annotation.data.conventers.DatabaseEnum;
import java.util.Map;
public enum ContactInfoType implements DatabaseEnum<Short> {
Email((short) 0),
MobilePhone((short) 1),
LandLinePhone((short) 2);
private final Short value;
ContactInfoType(Short value) {
this.value = value;
}
@Override
@JsonValue
public Short getValue() {
return value;
}
private static final Map<Short, ContactInfoType> map = EnumUtils.getEnumValueMap(ContactInfoType.class);
public static ContactInfoType of(Short i) {
return map.get(i);
}
}

View File

@ -0,0 +1,16 @@
package gr.cite.annotation.common.enums;
import gr.cite.annotation.data.conventers.DatabaseEnum;
import java.util.HashMap;
import java.util.Map;
public class EnumUtils {
public static <EnumType extends Enum<EnumType> & DatabaseEnum<EnumValue>, EnumValue> Map<EnumValue, EnumType> getEnumValueMap(Class<EnumType> enumType){
HashMap<EnumValue, EnumType> map = new HashMap<>();
for (EnumType v : enumType.getEnumConstants()) {
map.put(v.getValue(), v);
}
return map;
}
}

View File

@ -0,0 +1,28 @@
package gr.cite.annotation.common.enums;
import com.fasterxml.jackson.annotation.JsonValue;
import gr.cite.annotation.data.conventers.DatabaseEnum;
import java.util.Map;
public enum IsActive implements DatabaseEnum<Short> {
Inactive((short) 0),
Active((short) 1);
private final Short value;
IsActive(Short value) {
this.value = value;
}
@JsonValue
public Short getValue() {
return value;
}
private static final Map<Short, IsActive> map = EnumUtils.getEnumValueMap(IsActive.class);
public static IsActive of(Short i) {
return map.get(i);
}
}

View File

@ -0,0 +1,29 @@
package gr.cite.annotation.common.enums;
import com.fasterxml.jackson.annotation.JsonValue;
import gr.cite.annotation.data.conventers.DatabaseEnum;
import java.util.Map;
public enum TenantConfigurationType implements DatabaseEnum<Short> {
EMAIL_CLIENT_CONFIGURATION((short)1),
DEFAULT_USER_LOCALE((short)3),
NOTIFIER_LIST((short)4);
private final Short value;
TenantConfigurationType(Short value) {
this.value = value;
}
@JsonValue
public Short getValue() {
return value;
}
private static final Map<Short, TenantConfigurationType> map = EnumUtils.getEnumValueMap(TenantConfigurationType.class);
public static TenantConfigurationType of(Short i) {
return map.get(i);
}
}

View File

@ -0,0 +1,58 @@
package gr.cite.annotation.common.lock;
import org.springframework.stereotype.Service;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.locks.ReentrantLock;
@Service
public class LockByKeyManager {
private static class LockWrapper {
private final ReentrantLock lock = new ReentrantLock();
private final AtomicInteger numberOfThreadsInQueue = new AtomicInteger(1);
private LockWrapper addThreadInQueue() {
numberOfThreadsInQueue.incrementAndGet();
return this;
}
private int removeThreadFromQueue() {
return numberOfThreadsInQueue.decrementAndGet();
}
}
private static ConcurrentHashMap<String, LockWrapper> locks = new ConcurrentHashMap<String, LockWrapper>();
public void lock(String key) {
LockWrapper lockWrapper = locks.compute(key, (k, v) -> v == null ? new LockWrapper() : v.addThreadInQueue());
lockWrapper.lock.lock();
}
public boolean tryLock(String key, long timeout, TimeUnit unit) throws InterruptedException {
LockWrapper lockWrapper = null;
try {
lockWrapper = locks.compute(key, (k, v) -> v == null ? new LockWrapper() : v.addThreadInQueue());
return lockWrapper.lock.tryLock(timeout, unit);
} catch (Exception ex){
if (lockWrapper != null && lockWrapper.removeThreadFromQueue() == 0) {
// NB : We pass in the specific value to remove to handle the case where another thread would queue right before the removal
locks.remove(key, lockWrapper);
}
throw ex;
}
}
public void unlock(String key) {
LockWrapper lockWrapper = locks.get(key);
lockWrapper.lock.unlock();
if (lockWrapper.removeThreadFromQueue() == 0) {
// NB : We pass in the specific value to remove to handle the case where another thread would queue right before the removal
locks.remove(key, lockWrapper);
}
}
}

View File

@ -0,0 +1,125 @@
package gr.cite.annotation.common.scope.fake;
import org.springframework.util.Assert;
import org.springframework.web.context.request.RequestAttributes;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
public class FakeRequestAttributes implements RequestAttributes {
private Map<String, Object> requestAttributeMap = new HashMap<>();
private final Map<String, Runnable> requestDestructionCallbacks = new LinkedHashMap<>(8);
private volatile boolean requestActive = true;
@Override
public Object getAttribute(String name, int scope) {
if (scope == RequestAttributes.SCOPE_REQUEST) {
if (!isRequestActive()) {
throw new IllegalStateException("Cannot ask for request attribute - request is not active anymore!");
}
return this.requestAttributeMap.get(name);
} else {
throw new IllegalStateException("Only " + RequestAttributes.SCOPE_REQUEST + " allowed for " + FakeRequestAttributes.class.getSimpleName());
}
}
@Override
public void setAttribute(String name, Object value, int scope) {
if (scope == RequestAttributes.SCOPE_REQUEST) {
if (!isRequestActive()) {
throw new IllegalStateException("Cannot set request attribute - request is not active anymore!");
}
this.requestAttributeMap.put(name, value);
} else {
throw new IllegalStateException("Only " + RequestAttributes.SCOPE_REQUEST + " allowed for " + FakeRequestAttributes.class.getSimpleName());
}
}
@Override
public void removeAttribute(String name, int scope) {
if (scope == RequestAttributes.SCOPE_REQUEST) {
if (isRequestActive()) {
removeRequestDestructionCallback(name);
this.requestAttributeMap.remove(name);
}
} else {
throw new IllegalStateException("Only " + RequestAttributes.SCOPE_REQUEST + " allowed for " + FakeRequestAttributes.class.getSimpleName());
}
}
@Override
public String[] getAttributeNames(int scope) {
if (scope == RequestAttributes.SCOPE_REQUEST) {
if (!isRequestActive()) {
throw new IllegalStateException("Cannot ask for request attributes - request is not active anymore!");
}
return this.requestAttributeMap.keySet().toArray(new String[0]);
} else {
throw new IllegalStateException("Only " + RequestAttributes.SCOPE_REQUEST + " allowed for " + FakeRequestAttributes.class.getSimpleName());
}
//return new String[0];
}
@Override
public void registerDestructionCallback(String name, Runnable callback, int scope) {
if (scope == SCOPE_REQUEST) {
registerRequestDestructionCallback(name, callback);
} else {
throw new IllegalStateException("Only " + RequestAttributes.SCOPE_REQUEST + " allowed for " + FakeRequestAttributes.class.getSimpleName());
}
}
protected final void registerRequestDestructionCallback(String name, Runnable callback) {
Assert.notNull(name, "Name must not be null");
Assert.notNull(callback, "Callback must not be null");
synchronized (this.requestDestructionCallbacks) {
this.requestDestructionCallbacks.put(name, callback);
}
}
@Override
public Object resolveReference(String key) {
// Not supported
return null;
}
@Override
public String getSessionId() {
return null;
}
@Override
public Object getSessionMutex() {
return null;
}
public void requestCompleted() {
executeRequestDestructionCallbacks();
for (String name : getAttributeNames(RequestAttributes.SCOPE_REQUEST)) {
this.removeAttribute(name, RequestAttributes.SCOPE_REQUEST);
}
this.requestActive = false;
}
private final boolean isRequestActive() {
return this.requestActive;
}
private final void removeRequestDestructionCallback(String name) {
Assert.notNull(name, "Name must not be null");
synchronized (this.requestDestructionCallbacks) {
this.requestDestructionCallbacks.remove(name);
}
}
private void executeRequestDestructionCallbacks() {
synchronized (this.requestDestructionCallbacks) {
for (Runnable runnable : this.requestDestructionCallbacks.values()) {
runnable.run();
}
this.requestDestructionCallbacks.clear();
}
}
}

View File

@ -0,0 +1,40 @@
package gr.cite.annotation.common.scope.fake;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.RequestContextHolder;
import java.io.Closeable;
public class FakeRequestScope implements Closeable {
private RequestAttributes initialRequestAttributes = null;
private FakeRequestAttributes currentRequestAttributes = null;
boolean isInUse = false;
public FakeRequestScope() {
this.reset();
}
public void reset() {
this.close();
this.isInUse = true;
this.initialRequestAttributes = RequestContextHolder.getRequestAttributes();
this.currentRequestAttributes = new FakeRequestAttributes();
RequestContextHolder.setRequestAttributes(this.currentRequestAttributes);
}
@Override
public void close() {
if (!this.isInUse) return;
this.isInUse = false;
if (initialRequestAttributes != null) RequestContextHolder.setRequestAttributes(initialRequestAttributes);
else RequestContextHolder.resetRequestAttributes();
if (currentRequestAttributes != null) currentRequestAttributes.requestCompleted();
this.initialRequestAttributes = null;
this.currentRequestAttributes = null;
}
}

View File

@ -0,0 +1,9 @@
package gr.cite.annotation.common.scope.tenant;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Configuration;
@Configuration
@EnableConfigurationProperties(MultitenancyProperties.class)
public class MultitenancyConfiguration {
}

View File

@ -0,0 +1,29 @@
package gr.cite.annotation.common.scope.tenant;
import org.springframework.boot.context.properties.ConfigurationProperties;
@ConfigurationProperties(prefix = "tenant.multitenancy")
public class MultitenancyProperties {
private boolean isMultitenant;
private String defaultTenantCode;
public boolean isMultitenant() {
return isMultitenant;
}
public void setIsMultitenant(boolean multitenant) {
isMultitenant = multitenant;
}
public void setMultitenant(boolean multitenant) {
isMultitenant = multitenant;
}
public String getDefaultTenantCode() {
return defaultTenantCode;
}
public void setDefaultTenantCode(String defaultTenantCode) {
this.defaultTenantCode = defaultTenantCode;
}
}

View File

@ -0,0 +1,127 @@
package gr.cite.annotation.common.scope.tenant;
import gr.cite.annotation.data.tenant.TenantScopedBaseEntity;
import jakarta.persistence.EntityManager;
import org.hibernate.Session;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.context.annotation.RequestScope;
import javax.management.InvalidApplicationException;
import java.util.UUID;
import java.util.concurrent.atomic.AtomicReference;
@Component
@RequestScope
public class TenantScope {
public static final String TenantReplaceParameter = "::TenantCode::";
private final MultitenancyProperties multitenancy;
private final AtomicReference<UUID> tenant = new AtomicReference<>();
private final AtomicReference<String> tenantCode = new AtomicReference<>();
private final AtomicReference<UUID> initialTenant = new AtomicReference<>();
private final AtomicReference<String> initialTenantCode = new AtomicReference<>();
@Autowired
public TenantScope(MultitenancyProperties multitenancy) {
this.multitenancy = multitenancy;
}
public Boolean isMultitenant() {
return multitenancy.isMultitenant();
}
public String getDefaultTenantCode() {
return multitenancy.getDefaultTenantCode();
}
public Boolean isSet() {
if (!this.isMultitenant())
return Boolean.TRUE;
return this.tenant.get() != null || this.isDefaultTenant();
}
public Boolean isDefaultTenant() {
if (!this.isMultitenant())
return Boolean.TRUE;
return this.multitenancy.getDefaultTenantCode().equalsIgnoreCase(this.tenantCode.get());
}
public UUID getTenant() throws InvalidApplicationException {
if (!this.isMultitenant())
return null;
if (this.tenant.get() == null && !this.isDefaultTenant())
throw new InvalidApplicationException("tenant not set");
return this.isDefaultTenant() ? null : this.tenant.get();
}
public String getTenantCode() throws InvalidApplicationException {
if (!this.isMultitenant())
return null;
if (this.tenantCode.get() == null)
throw new InvalidApplicationException("tenant not set");
return this.tenantCode.get();
}
public void setTempTenant(EntityManager entityManager, UUID tenant, String tenantCode) {
this.tenant.set(tenant);
this.tenantCode.set(tenantCode);
entityManager
.unwrap(Session.class)
.disableFilter(TenantScopedBaseEntity.TENANT_FILTER);
entityManager
.unwrap(Session.class)
.disableFilter(TenantScopedBaseEntity.DEFAULT_TENANT_FILTER);
if (this.tenant.get() != null || this.isDefaultTenant()) {
if(!this.isDefaultTenant()) {
entityManager
.unwrap(Session.class)
.enableFilter(TenantScopedBaseEntity.TENANT_FILTER)
.setParameter(TenantScopedBaseEntity.TENANT_FILTER_TENANT_PARAM, this.tenant.get().toString());
} else {
entityManager
.unwrap(Session.class)
.enableFilter(TenantScopedBaseEntity.DEFAULT_TENANT_FILTER);
}
}
}
public void removeTempTenant(EntityManager entityManager) {
this.tenant.set(this.initialTenant.get());
this.tenantCode.set(this.initialTenantCode.get());
entityManager
.unwrap(Session.class)
.disableFilter(TenantScopedBaseEntity.TENANT_FILTER);
entityManager
.unwrap(Session.class)
.disableFilter(TenantScopedBaseEntity.DEFAULT_TENANT_FILTER);
if (this.initialTenant.get() != null || this.isDefaultTenant()) {
if(!this.isDefaultTenant()) {
entityManager
.unwrap(Session.class)
.enableFilter(TenantScopedBaseEntity.TENANT_FILTER)
.setParameter(TenantScopedBaseEntity.TENANT_FILTER_TENANT_PARAM, this.tenant.get().toString());
} else {
entityManager
.unwrap(Session.class)
.enableFilter(TenantScopedBaseEntity.DEFAULT_TENANT_FILTER);
}
}
}
public void setTenant(UUID tenant, String tenantCode) {
if (this.isMultitenant()) {
this.tenant.set(tenant);
this.initialTenant.set(tenant);
this.tenantCode.set(tenantCode);
this.initialTenantCode.set(tenantCode);
}
}
}

View File

@ -0,0 +1,8 @@
package gr.cite.annotation.common.scope.tenant;
import java.util.UUID;
public interface TenantScoped {
void setTenantId(UUID tenantId);
UUID getTenantId();
}

View File

@ -0,0 +1,34 @@
package gr.cite.annotation.common.scope.user;
import gr.cite.tools.logging.LoggerService;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.context.annotation.RequestScope;
import javax.management.InvalidApplicationException;
import java.util.UUID;
@Component
@RequestScope
public class UserScope {
private static final LoggerService logger = new LoggerService(LoggerFactory.getLogger(UserScope.class));
private UUID userId = null;
public Boolean isSet(){
return this.userId != null;
}
public UUID getUserId() throws InvalidApplicationException {
if (this.userId == null) throw new InvalidApplicationException("user not set");
return this.userId;
}
public UUID getUserIdSafe() {
return this.userId;
}
public void setUserId(UUID userId) {
this.userId = userId;
}
}

View File

@ -0,0 +1,60 @@
package gr.cite.annotation.common.types.user;
import java.util.UUID;
public class AdditionalInfoEntity {
private String avatarUrl;
private String timezone;
private String culture;
private String language;
private String roleOrganization;
private UUID organizationId;
public String getAvatarUrl() {
return avatarUrl;
}
public void setAvatarUrl(String avatarUrl) {
this.avatarUrl = avatarUrl;
}
public String getTimezone() {
return timezone;
}
public void setTimezone(String timezone) {
this.timezone = timezone;
}
public String getCulture() {
return culture;
}
public void setCulture(String culture) {
this.culture = culture;
}
public String getLanguage() {
return language;
}
public void setLanguage(String language) {
this.language = language;
}
public UUID getOrganizationId() {
return organizationId;
}
public void setOrganizationId(UUID organizationId) {
this.organizationId = organizationId;
}
public String getRoleOrganization() {
return roleOrganization;
}
public void setRoleOrganization(String roleOrganization) {
this.roleOrganization = roleOrganization;
}
}

View File

@ -0,0 +1,87 @@
package gr.cite.annotation.common.types.xml;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import java.io.IOException;
import java.io.StringReader;
import java.io.StringWriter;
public class XmlBuilder {
private static final Logger logger = LoggerFactory.getLogger(XmlBuilder.class);
public static Document getDocument() {
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder;
try {
docBuilder = docFactory.newDocumentBuilder();
Document doc = docBuilder.newDocument();
return doc;
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
logger.error(e.getMessage(), e);
return null;
}
}
public static String generateXml(Document doc) {
TransformerFactory tFact = TransformerFactory.newInstance();
Transformer trans;
try {
trans = tFact.newTransformer();
StringWriter writer = new StringWriter();
StreamResult result = new StreamResult(writer);
DOMSource source = new DOMSource(doc);
trans.setOutputProperty(OutputKeys.INDENT, "yes");
trans.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
trans.transform(source, result);
return writer.toString();
} catch (TransformerException e) {
// TODO Auto-generated catch block
logger.error(e.getMessage(), e);
return null;
}
}
public static Document fromXml(String xml) {
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder;
try {
docBuilder = docFactory.newDocumentBuilder();
InputSource inputStream = new InputSource(new StringReader(xml));
Document doc = docBuilder.parse(inputStream);
return doc;
} catch (ParserConfigurationException | SAXException | IOException e) {
// TODO Auto-generated catch block
logger.error(e.getMessage(), e);
return null;
}
}
public static Element getNodeFromListByTagName(NodeList list, String tagName) {
for (int temp = 0; temp < list.getLength(); temp++) {
Node element = list.item(temp);
if (element.getNodeType() == Node.ELEMENT_NODE) {
if (element.getNodeName().equals(tagName)) return (Element) element;
}
}
return null;
}
}

View File

@ -0,0 +1,11 @@
package gr.cite.annotation.common.types.xml;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
public interface XmlSerializable<T> {
Element toXml(Document doc);
T fromXml(Element item);
}

View File

@ -0,0 +1,63 @@
package gr.cite.annotation.common.validation;
import gr.cite.annotation.convention.ConventionService;
import gr.cite.annotation.errorcode.ErrorThesaurusProperties;
import gr.cite.tools.exception.MyValidationException;
import gr.cite.tools.validation.AbstractValidator;
import gr.cite.tools.validation.ValidationResult;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.UUID;
public abstract class BaseValidator<T> extends AbstractValidator<T> {
protected final ConventionService conventionService;
protected final ErrorThesaurusProperties errors;
protected BaseValidator(ConventionService conventionService, ErrorThesaurusProperties errors) {
this.conventionService = conventionService;
this.errors = errors;
}
@Override
public void validateForce(Object target) {
this.validate(target);
ValidationResult result = result();
if (!result.isValid()) {
List<Map.Entry<String, List<String>>> errorsMap = this.flattenValidationResult();
throw new MyValidationException(this.errors.getModelValidation().getCode(), errorsMap);
}
}
protected Boolean isValidGuid(UUID guid) {
return this.conventionService.isValidGuid(guid);
}
protected Boolean isValidHash(String hash) {
return this.conventionService.isValidHash(hash);
}
protected Boolean isEmpty(String value) {
return this.conventionService.isNullOrEmpty(value);
}
protected Boolean isListNullOrEmpty(List<?> value) {
return this.conventionService.isListNullOrEmpty(value);
}
protected Boolean isNull(Object value) {
return value == null;
}
protected Boolean isNull(Collection<?> value) {
return value == null;
}
protected Boolean lessEqualLength(String value, int size) {
return value.length() <= size;
}
protected Boolean lessEqual(Integer value, int target) {
return value <= target;
}
}

View File

@ -0,0 +1,42 @@
package gr.cite.annotation.common.validation;
import gr.cite.annotation.convention.ConventionService;
import gr.cite.annotation.errorcode.ErrorThesaurusProperties;
import gr.cite.tools.validation.specification.Specification;
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
import org.springframework.context.MessageSource;
import org.springframework.context.annotation.Scope;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.stereotype.Component;
import java.util.Arrays;
import java.util.List;
import java.util.UUID;
@Component(UuidValidator.ValidatorName)
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public class UuidValidator extends BaseValidator<UUID> {
public static final String ValidatorName = "UuidValidator";
private final MessageSource messageSource;
protected UuidValidator(ConventionService conventionService, ErrorThesaurusProperties errors, MessageSource messageSource) {
super(conventionService, errors);
this.messageSource = messageSource;
}
@Override
protected Class<UUID> modelClass() {
return UUID.class;
}
@Override
protected List<Specification> specifications(UUID item) {
return Arrays.asList(
this.spec()
.must(() -> this.isValidGuid(item))
.failOn("uuid").failWith(messageSource.getMessage("Validation_Required", new Object[]{"uuid"}, LocaleContextHolder.getLocale()))
);
}
}

View File

@ -0,0 +1,41 @@
package gr.cite.annotation.convention;
import gr.cite.tools.exception.MyApplicationException;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.function.Function;
public interface ConventionService {
Boolean isValidId(Integer id);
Boolean isValidGuid(UUID guid);
Boolean isValidUUID(String str);
UUID parseUUIDSafe(String str);
Boolean isValidHash(String hash);
String hashValue(Object value) throws MyApplicationException;
String limit(String text, int maxLength);
String truncate(String text, int maxLength);
UUID getEmptyUUID();
boolean isNullOrEmpty(String value);
boolean isListNullOrEmpty(List value);
String stringEmpty();
String asPrefix(String name);
String asIndexerPrefix(String part);
String asIndexer(String... names);
<K, V> Map<K, List<V>> toDictionaryOfList(List<V> items, Function<V, K> keySelector);
}

View File

@ -0,0 +1,150 @@
package gr.cite.annotation.convention;
import gr.cite.annotation.errorcode.ErrorThesaurusProperties;
import gr.cite.tools.exception.MyApplicationException;
import gr.cite.tools.logging.LoggerService;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import java.time.Instant;
import java.util.*;
import java.util.function.Function;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
@Component
@Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON)
public class ConventionServiceImpl implements ConventionService {
private final static Pattern UUID_REGEX_PATTERN = Pattern.compile("^[{]?[0-9a-fA-F]{8}-([0-9a-fA-F]{4}-){3}[0-9a-fA-F]{12}[}]?$");
private static final LoggerService logger = new LoggerService(LoggerFactory.getLogger(ConventionServiceImpl.class));
private final ErrorThesaurusProperties errors;
@Autowired
public ConventionServiceImpl(ErrorThesaurusProperties errors) {
this.errors = errors;
}
@Override
public Boolean isValidId(Integer id) {
return id != null && id > 0;
}
@Override
public Boolean isValidGuid(UUID guid) {
return guid != null && !guid.equals(this.getEmptyUUID());
}
@Override
public Boolean isValidUUID(String str) {
if (this.isNullOrEmpty(str)) {
return false;
}
return UUID_REGEX_PATTERN.matcher(str).matches();
}
@Override
public UUID parseUUIDSafe(String str) {
if (!this.isValidUUID(str)) {
return null;
}
try {
return UUID.fromString(str);
} catch (Exception ex){
logger.warn("invalid uuid" + str, ex);
return null;
}
}
@Override
public Boolean isValidHash(String hash) {
return !this.isNullOrEmpty(hash);
}
@Override
public String hashValue(Object value) throws MyApplicationException {
if (value == null) return this.stringEmpty();
if (value instanceof Instant) return String.format("%ts", (Instant) value);
throw new MyApplicationException(this.errors.getSystemError().getCode(), this.errors.getSystemError().getMessage());
}
@Override
public String limit(String text, int maxLength) {
if (this.isNullOrEmpty(text)) return text;
if (text.length() > maxLength) return String.format("%s...", text.substring(0, maxLength));
else return text;
}
@Override
public String truncate(String text, int maxLength) {
String truncated = text;
if (text.length() < maxLength) return text;
truncated = truncated.trim();
truncated = truncated.replaceAll("\\s+", " ");//remove multiple spaces
if (truncated.length() < maxLength) return truncated;
truncated = truncated.replaceAll("([.!@#$%^&-=':;,<>?*\\\"/|])+", "");//remove multiple spaces
if (truncated.length() < maxLength) return truncated;
truncated = truncated.replaceAll("([aeiou])+", "");//remove multiple spaces
if (truncated.length() < maxLength) return truncated;
truncated = truncated.replaceAll("([AEIOU])+", "");//remove multiple spaces
if (truncated.length() < maxLength) return truncated;
if (text.length() > maxLength) return String.format("%s...", text.substring(0, maxLength));
return text;
}
@Override
public UUID getEmptyUUID() {
return new UUID(0L, 0L);
}
@Override
public boolean isNullOrEmpty(String value) {
return value == null || value.isBlank();
}
@Override
public boolean isListNullOrEmpty(List value) {
if(value == null) return true;
return value.size() <= 0;
}
@Override
public String stringEmpty() {
return "";
}
@Override
public String asPrefix(String name) {
if (name == null) return null;
return name + ".";
}
@Override
public String asIndexer(String... names) {
if (names == null) return null;
return String.join(".", Arrays.stream(names).filter(x -> !this.isNullOrEmpty(x)).collect(Collectors.toList()));
}
@Override
public String asIndexerPrefix(String part) {
if (part == null) return null;
return part + ".";
}
@Override
public <K, V> Map<K, List<V>> toDictionaryOfList(List<V> items, Function<V, K> keySelector) {
Map<K, List<V>> map = new HashMap<>();
for (V model : items) {
K key = keySelector.apply(model);
if (!map.containsKey(key)) map.put(key, new ArrayList<V>());
map.get(key).add(model);
}
return map;
}
}

View File

@ -0,0 +1,188 @@
package gr.cite.annotation.data;
import gr.cite.annotation.common.enums.AnnotationProtectionType;
import gr.cite.annotation.common.enums.IsActive;
import gr.cite.annotation.data.conventers.AnnotationProtectionTypeConverter;
import gr.cite.annotation.data.conventers.IsActiveConverter;
import gr.cite.annotation.data.tenant.TenantScopedBaseEntity;
import jakarta.persistence.*;
import java.time.Instant;
import java.util.UUID;
@Entity
@Table(name = "\"Annotation\"")
public class AnnotationEntity extends TenantScopedBaseEntity {
@Id
@Column(name = "id", columnDefinition = "uuid", updatable = false, nullable = false)
private UUID id;
public static final String _id = "id";
@Column(name = "entity_id", columnDefinition = "uuid", nullable = false)
private UUID entityId;
public static final String _entityId = "entityId";
@Column(name = "entity_type", nullable = false)
private String entityType;
public static final String _entityType = "entityType";
@Column(name = "anchor")
private String anchor;
public static final String _anchor = "anchor";
@Column(name = "payload", nullable = false)
private String payload;
public static final String _payload = "payload";
@Column(name = "subject_id", columnDefinition = "uuid", nullable = false)
private UUID subjectId;
public static final String _subjectId = "subjectId";
@Column(name = "thread_id", columnDefinition = "uuid")
private UUID threadId;
public static final String _threadId = "threadId";
@Column(name = "parent_id", columnDefinition = "uuid")
private UUID parentId;
public static final String _parentId = "parentId";
@Column(name = "protection_type", nullable = false)
@Convert(converter = AnnotationProtectionTypeConverter.class)
private AnnotationProtectionType protectionType;
public static final String _protectionType = "protectionType";
@Column(name = "time_stamp", nullable = false)
private Instant timeStamp;
public static final String _timeStamp = "timeStamp";
@Column(name = "\"created_at\"", nullable = false)
private Instant createdAt;
public static final String _createdAt = "createdAt";
@Column(name = "\"updated_at\"", nullable = false)
private Instant updatedAt;
public static final String _updatedAt = "updatedAt";
@Column(name = "is_active", nullable = false)
@Convert(converter = IsActiveConverter.class)
private IsActive isActive;
public static final String _isActive = "isActive";
public UUID getId() {
return id;
}
public void setId(UUID id) {
this.id = id;
}
public UUID getEntityId() {
return entityId;
}
public void setEntityId(UUID entityId) {
this.entityId = entityId;
}
public String getEntityType() {
return entityType;
}
public void setEntityType(String entityType) {
this.entityType = entityType;
}
public String getAnchor() {
return anchor;
}
public void setAnchor(String anchor) {
this.anchor = anchor;
}
public String getPayload() {
return payload;
}
public void setPayload(String payload) {
this.payload = payload;
}
public UUID getSubjectId() {
return subjectId;
}
public void setSubjectId(UUID subjectId) {
this.subjectId = subjectId;
}
public UUID getThreadId() {
return threadId;
}
public void setThreadId(UUID threadId) {
this.threadId = threadId;
}
public UUID getParentId() {
return parentId;
}
public void setParentId(UUID parentId) {
this.parentId = parentId;
}
public Instant getTimeStamp() {
return timeStamp;
}
public void setTimeStamp(Instant timeStamp) {
this.timeStamp = timeStamp;
}
public AnnotationProtectionType getProtectionType() {
return protectionType;
}
public void setProtectionType(AnnotationProtectionType protectionType) {
this.protectionType = protectionType;
}
public Instant getCreatedAt() {
return createdAt;
}
public void setCreatedAt(Instant createdAt) {
this.createdAt = createdAt;
}
public Instant getUpdatedAt() {
return updatedAt;
}
public void setUpdatedAt(Instant updatedAt) {
this.updatedAt = updatedAt;
}
public IsActive getIsActive() {
return isActive;
}
public void setIsActive(IsActive isActive) {
this.isActive = isActive;
}
}

View File

@ -0,0 +1,94 @@
package gr.cite.annotation.data;
import gr.cite.annotation.common.enums.IsActive;
import gr.cite.annotation.data.conventers.IsActiveConverter;
import gr.cite.annotation.data.tenant.TenantScopedBaseEntity;
import jakarta.persistence.*;
import java.time.Instant;
import java.util.UUID;
@Entity
@Table(name = "\"EntityUser\"")
public class EntityUserEntity extends TenantScopedBaseEntity {
@Id
@Column(name = "\"id\"", columnDefinition = "uuid", updatable = false, nullable = false)
private UUID id;
public static final String _id = "id";
@Column(name = "\"entity_id\"", columnDefinition = "uuid", nullable = false)
private UUID entityId;
public static final String _entityId = "entityId";
@Column(name = "\"user_id\"", columnDefinition = "uuid", nullable = false)
private UUID userId;
public static final String _userId = "userId";
@Column(name = "\"created_at\"", nullable = false)
private Instant createdAt;
public static final String _createdAt = "createdAt";
@Column(name = "\"updated_at\"", nullable = false)
private Instant updatedAt;
public static final String _updatedAt = "updatedAt";
@Column(name = "is_active", nullable = false)
@Convert(converter = IsActiveConverter.class)
private IsActive isActive;
public static final String _isActive = "isActive";
public UUID getId() {
return id;
}
public void setId(UUID id) {
this.id = id;
}
public UUID getEntityId() {
return entityId;
}
public void setEntityId(UUID entityId) {
this.entityId = entityId;
}
public UUID getUserId() {
return userId;
}
public void setUserId(UUID userId) {
this.userId = userId;
}
public Instant getCreatedAt() {
return createdAt;
}
public void setCreatedAt(Instant createdAt) {
this.createdAt = createdAt;
}
public Instant getUpdatedAt() {
return updatedAt;
}
public void setUpdatedAt(Instant updatedAt) {
this.updatedAt = updatedAt;
}
public IsActive getIsActive() {
return isActive;
}
public void setIsActive(IsActive isActive) {
this.isActive = isActive;
}
}

View File

@ -0,0 +1,195 @@
package gr.cite.annotation.data;
import gr.cite.annotation.common.enums.IsActive;
import gr.cite.annotation.data.conventers.IsActiveConverter;
import gr.cite.annotation.data.conventers.QueueInboxStatusConverter;
import gr.cite.annotation.data.types.JsonSQLType;
import gr.cite.queueinbox.entity.QueueInbox;
import gr.cite.queueinbox.entity.QueueInboxStatus;
import jakarta.persistence.*;
import org.hibernate.annotations.Type;
import java.time.Instant;
import java.util.UUID;
@Entity
@Table(name = "\"QueueInbox\"")
public class QueueInboxEntity implements QueueInbox {
@Id
@Column(name = "\"id\"", columnDefinition = "uuid", updatable = false, nullable = false)
private UUID id;
public static final String _id = "id";
@Column(name = "\"queue\"", nullable = false, length = 200)
private String queue;
public static final String _queue = "queue";
@Column(name = "\"exchange\"", nullable = false, length = 200)
private String exchange;
public static final String _exchange = "exchange";
@Column(name = "\"route\"", nullable = false, length = 200)
private String route;
public static final String _route = "route";
@Column(name = "\"application_id\"", nullable = false, length = 100)
private String applicationId;
public static final String _applicationId = "applicationId";
@Column(name = "\"message_id\"", columnDefinition = "uuid", nullable = false)
private UUID messageId;
public static final String _messageId = "messageId";
@Type(JsonSQLType.class)
@Column(name = "\"message\"", columnDefinition = "json", nullable = false)
private String message;
public static final String _message = "message";
@Column(name = "\"retry_count\"")
private Integer retryCount;
public static final String _retryCount = "retryCount";
@Column(name = "\"tenant\"", columnDefinition = "uuid")
private UUID tenantId;
public static final String _tenantId = "tenantId";
@Column(name = "\"status\"", nullable = false)
@Convert(converter = QueueInboxStatusConverter.class)
private QueueInboxStatus status;
public final static String _status = "status";
@Column(name = "\"created_at\"", nullable = false)
private Instant createdAt;
public static final String _createdAt = "createdAt";
@Column(name = "\"updated_at\"", nullable = false)
@Version
private Instant updatedAt;
public static final String _updatedAt = "updatedAt";
@Column(name = "\"is_active\"", nullable = false)
@Convert(converter = IsActiveConverter.class)
private IsActive isActive;
public static final String _isActive = "isActive";
public UUID getId() {
return id;
}
public void setId(UUID id) {
this.id = id;
}
public String getQueue() {
return queue;
}
public void setQueue(String queue) {
this.queue = queue;
}
public String getExchange() {
return exchange;
}
public void setExchange(String exchange) {
this.exchange = exchange;
}
public String getRoute() {
return route;
}
public void setRoute(String route) {
this.route = route;
}
public String getApplicationId() {
return applicationId;
}
public void setApplicationId(String applicationId) {
this.applicationId = applicationId;
}
public UUID getMessageId() {
return messageId;
}
public void setMessageId(UUID messageId) {
this.messageId = messageId;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
@Override
public Integer getRetryCount() {
return retryCount;
}
public void setRetryCount(Integer retryCount) {
this.retryCount = retryCount;
}
public UUID getTenantId() {
return tenantId;
}
public void setTenantId(UUID tenantId) {
this.tenantId = tenantId;
}
public QueueInboxStatus getStatus() {
return status;
}
public void setStatus(QueueInboxStatus status) {
this.status = status;
}
@Override
public Instant getCreatedAt() {
return createdAt;
}
public void setCreatedAt(Instant createdAt) {
this.createdAt = createdAt;
}
public Instant getUpdatedAt() {
return updatedAt;
}
public void setUpdatedAt(Instant updatedAt) {
this.updatedAt = updatedAt;
}
public IsActive getIsActive() {
return isActive;
}
public void setIsActive(IsActive isActive) {
this.isActive = isActive;
}
}

Some files were not shown because too many files have changed in this diff Show More