Compare commits

...

1021 Commits

Author SHA1 Message Date
Diamantis Tziotzios e8aef281d4 Merge branch 'Development' 2024-02-22 11:09:31 +02:00
Diamantis Tziotzios 00c6978594 no message 2024-02-22 11:07:51 +02:00
Diamantis Tziotzios 3adb518e61 fixes 2024-02-14 22:10:15 +02:00
Konstantina Galouni eb74ef86b9 rich-text-editor.component.ts: Removed "backgroundColor" from toolbarHiddenButtons & added in customClasses "Highlight" option with custom "highlight" class | _type.scss: Added rules for "blockquote" and ".highlight" (added by rich text editor). 2024-02-13 13:23:13 +02:00
Diamantis Tziotzios a1ee9c82bc fixes 2024-01-31 17:55:08 +02:00
Diamantis Tziotzios 5e5bd39313 no message 2024-01-30 13:26:31 +02:00
Diamantis Tziotzios 5e99cef60e default blueprint update 2024-01-24 16:25:46 +02:00
Diamantis Tziotzios cc7edc2f49 final fixes for #9384 #9153 #9409 #9420 2024-01-24 16:17:06 +02:00
Diamantis Tziotzios a1849c64ca Merge branch 'Development' of https://code-repo.d4science.org/MaDgiK-CITE/argos into Development
# Conflicts:
#	dmp-frontend/src/app/ui/dmp/dmp-editor-blueprint/dmp-editor-blueprint.component.ts
2024-01-24 14:48:38 +02:00
Diamantis Tziotzios 192220161b fixes 2024-01-24 14:47:37 +02:00
George Kalampokis 87758c3e9a Fix various issues with adding/removing Dataset Templates 2024-01-24 14:31:46 +02:00
Diamantis Tziotzios 83342f5afa docx template update 2024-01-17 17:49:52 +02:00
Diamantis Tziotzios 65cdb3b6ea fixes for #9384 #9153 #9162 #9265 2024-01-17 16:50:12 +02:00
Diamantis Tziotzios 536ba9b900 Fixes for #9152 #9153 #9162 #9265 #9266 #9311 #9312 2024-01-09 09:42:58 +02:00
Alexandros Mandilaras 6bd3302788 sql script fix 2023-11-23 15:16:11 +02:00
Diamantis Tziotzios 4970f5812f fix issues #9152 #9153 #9204 #9208 2023-11-23 13:15:50 +02:00
Diamantis Tziotzios 9fed92dbcb fixes for #9109 #9146 #9148 #9149 #9152 #9153 #9156 #9157 #9158 #9160 #9162 #9163 #9164 #9166 2023-11-03 13:24:01 +02:00
Diamantis Tziotzios 44dab9c19a gitignore changes 2023-11-01 09:41:22 +02:00
Alexandros Mandilaras 54f911d826 typo fixes in greek and english translations 2023-10-23 10:12:17 +03:00
Diamantis Tziotzios 9879050eab cleanup 2023-10-19 17:28:36 +03:00
Diamantis Tziotzios 8a41a7dcd9 Fixes for #9033 #9107 #9105 #9105 2023-10-19 17:27:37 +03:00
Diamantis Tziotzios d60cc144d5 #9033 Description Templates - change "Other" API label to "Custom" 2023-10-18 16:10:12 +03:00
Georgios Kakaletris 9c37e5a073 Update 'README.md' 2023-10-18 12:31:03 +02:00
Georgios Kakaletris 444c1aacb1 Update 'README.md' 2023-10-18 12:27:40 +02:00
Diamantis Tziotzios 59d7383947 added basque contributors at static pages 2023-10-17 13:48:50 +03:00
Diamantis Tziotzios 6caa1af134 Added Basque language 2023-10-16 18:21:22 +03:00
George Kalampokis 74a6019a72 Fix some styling and compilation errors 2023-10-10 12:10:52 +03:00
George Kalampokis 5c903c0f48 Add missing files 2023-10-10 12:04:06 +03:00
George Kalampokis ec8f6a6d48 Add Authentication support for the remote fetcher and rework dataset template's autocomplete sources 2023-10-10 12:03:59 +03:00
Bernaldo Mihasi ecd86f413a show prefilling pop up if only at least one dataset profile has enabled prefilling property 2023-10-06 11:22:23 +03:00
Bernaldo Mihasi c238615b50 add enable prefilling property in description templates 2023-10-06 09:36:35 +03:00
Bernaldo Mihasi 10d0f1fb0e make word list labels and delete icons in finalized description templates disabled 2023-10-05 17:47:00 +03:00
Bernaldo Mihasi 846405435c bug fixes 2023-10-05 09:33:28 +03:00
Bernaldo Mihasi dfc9e14003 update i18n 2023-10-04 17:03:50 +03:00
Bernaldo Mihasi bc1894586b 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-04 09:43:16 +03:00
Bernaldo Mihasi 2bf0a857bc 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-02 13:57:00 +03:00
Bernaldo Mihasi 3d10e8ad28 add type attribute in xml import/export of a description template 2023-10-02 10:14:14 +03:00
Bernaldo Mihasi 53b61853e1 bug fixes 2023-10-02 09:34:58 +03:00
Bernaldo Mihasi d644b1dc91 [wip] dmp xml upload changes, including section and extra fields information 2023-10-02 09:34:21 +03:00
Bernaldo Mihasi 6b544e4702 bug fixes 2023-09-27 16:57:25 +03:00
Bernaldo Mihasi 0bd3422903 check if blueprint is valid when finalizing in editor 2023-09-27 16:20:54 +03:00
Bernaldo Mihasi 2f4e123ac9 bug fixes 2023-09-27 12:54:18 +03:00
Bernaldo Mihasi c99267d6cc #8998 - implement import/export functionality for dmp blueprints 2023-09-26 09:35:59 +03:00
Bernaldo Mihasi 32c45520b4 make router link for add description buttons pointing to dmp editor 2023-09-25 10:36:04 +03:00
Bernaldo Mihasi 4cef17e999 fix routing in save-and-add-new button in dataset editor 2023-09-22 13:15:32 +03:00
Bernaldo Mihasi 34580f917f check if grant exists in word/pdf export 2023-09-22 12:57:47 +03:00
Bernaldo Mihasi 56a70636c3 min multiplicity check for descriptions in dmp finalization 2023-09-22 11:10:08 +03:00
Bernaldo Mihasi 0c9601d6f0 fix argument passed in getSingleBlueprint 2023-09-22 11:09:04 +03:00
Bernaldo Mihasi 5f3ab00009 [wip] add control in dataset creation/prefilling dialog for max multiplicity of a description template in a dmp section, add control in dmp finalization for min multiplicity of a description template in a dmp section 2023-09-22 09:34:12 +03:00
Bernaldo Mihasi beac6be706 add missing grant checks 2023-09-22 09:31:12 +03:00
Bernaldo Mihasi fbad63ee76 use dmp label in export file names if grant does not exist 2023-09-22 09:29:51 +03:00
Bernaldo Mihasi 9cc42c57e9 comment out download/import xml of a blueprint 2023-09-21 10:21:00 +03:00
Bernaldo Mihasi 79aaf23bb6 add missing grant checks 2023-09-21 10:20:32 +03:00
Bernaldo Mihasi b68070aa01 [wip] add control for the min/max multiplicity of a description template used in a section of a dmp 2023-09-21 09:35:04 +03:00
Bernaldo Mihasi db08662cac fix bug when creating new version or clone a dmp 2023-09-21 09:33:27 +03:00
Bernaldo Mihasi 3c0dce93a8 disable system fields/description templates multiple select input and prefill them if any values exist when blueprint is finalized 2023-09-21 09:31:30 +03:00
Bernaldo Mihasi 69548e5a8b check if grant exists in dmp/dataset elastic entities 2023-09-21 09:29:18 +03:00
Bernaldo Mihasi 367861c050 fix bugs: saving extra fields in dmp, showing draft blueprints when min or max of a description template are not set 2023-09-20 09:34:39 +03:00
Bernaldo Mihasi 93c5918251 make grant funder not mandatory for the creation/new version/clone of dmp 2023-09-18 17:48:54 +03:00
Bernaldo Mihasi bfa310a074 show available profiles of dataset in edit page 2023-09-13 16:04:44 +03:00
Bernaldo Mihasi ec952820b1 update i18n 2023-09-13 15:56:40 +03:00
Bernaldo Mihasi b1a832074d small fixes, (wip) remove description template chip from dmp editor 2023-09-13 15:55:38 +03:00
Diamantis Tziotzios cf6e041154 Merge remote-tracking branch 'origin/refactorArgosModel' into Development
# Conflicts:
#	dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/DatasetRDAMapper.java
#	dmp-frontend/src/app/ui/dashboard/drafts/drafts.component.html
2023-09-13 10:01:57 +03:00
Bernaldo Mihasi c1858d582c no message 2023-09-12 15:39:08 +03:00
Bernaldo Mihasi 29f5b6a6cc fix editing dmp page, add section templates to new dataset page 2023-09-12 15:38:23 +03:00
Bernaldo Mihasi 6154a5fa51 fix associated dmps bugs in DMP table, new/existing DmpDatasetProfile entries were not saved/updated 2023-09-12 15:36:06 +03:00
Bernaldo Mihasi 6f5fcabc79 add db scripts: inserting default blueprint, attach that blueprint as profile of each dmp, make each dataset section index correspond to the default blueprint last section 2023-09-12 15:24:25 +03:00
Bernaldo Mihasi bbe4975176 add hasTemplates property to sections, it indicates if descriptions templates can be added in a section 2023-09-11 08:59:47 +03:00
Bernaldo Mihasi 4219d90039 add "DmpSectionIndex" column to descriptions in order to know in which section of a dmp the description belongs, add "data" column in DmpDatasetProfile table, data stores in which sections a description template is saved 2023-09-11 08:57:09 +03:00
Bernaldo Mihasi 6073c4cd85 [WIP] refactor dmp export following the blueprint schema 2023-09-11 08:42:30 +03:00
Bernaldo Mihasi cd80e78e40 add status to description template types, fix bugs in editor/listing 2023-09-11 08:40:03 +03:00
George Kalampokis 5019bc4271 Add manual addition of total users in prometheus 2023-08-04 11:55:46 +03:00
Bernaldo Mihasi 3564cc16ff update i18n - link new 2023-08-03 17:07:35 +03:00
Diamantis Tziotzios 3b76397c24 conf cleanup 2023-08-03 13:27:01 +03:00
Bernaldo Mihasi 78946de1b5 change images source in emails to base64
(cherry picked from commit b94aa51489)
2023-08-03 13:26:27 +03:00
Diamantis Tziotzios c39c162979 Merge branch 'Development' of https://code-repo.d4science.org/MaDgiK-CITE/argos into Development 2023-08-03 13:17:59 +03:00
Konstantinos Triantafyllou 655483b8e2 Dateset Edtitor: Scroll to top in Main info. Add checkVisibility in recursion of progress bar status calculation. Increase time of selected entry in tableofcontents 2023-08-03 13:11:19 +03:00
Bernaldo Mihasi 17dbd198ad fix dmp blueprint editor screen 2023-08-03 13:10:36 +03:00
Bernaldo Mihasi b94aa51489 change images source in emails to base64 2023-08-03 11:19:33 +03:00
Diamantis Tziotzios b6cade6e88 metrics change
(cherry picked from commit 903026e2c2)
2023-08-03 10:28:56 +03:00
Diamantis Tziotzios 903026e2c2 metrics change 2023-08-03 10:28:18 +03:00
Bernaldo Mihasi 59cba483b6 Merge branch 'Development' of https://code-repo.d4science.org/MaDgiK-CITE/argos into Development 2023-08-01 11:24:27 +03:00
Bernaldo Mihasi 30abe4d4c9 #8952 - fix bug when merging two accounts did not have consistent behaviour. 2023-08-01 11:23:06 +03:00
Konstantinos Triantafyllou a4555f7303 Fix progress-bar for dmp editor. Fix table of contents in creation of DMP. On save of new dmp, change location instead of route. 2023-07-31 16:38:20 +03:00
Bernaldo Mihasi 634d49ea35 #8916 - when merging acoounts, save the main profile user as collaborator to elastic dmps/datasets 2023-07-27 10:07:40 +03:00
Bernaldo Mihasi e01709f886 #8936 - fix bug when pid of object fetched was integer(PIC typed) instead of string 2023-07-27 10:06:04 +03:00
Bernaldo Mihasi 09d6528f8f #8855 - #8856 - #8901 - #8902 [wip] implementing dmp blueprints 2023-07-25 15:51:29 +03:00
Bernaldo Mihasi 128b47d9c3 #8845 - #8846: adding description template types, creation of description template type field in the dataset template editor, [wip] creation of admin page for creation/editing/deleting of description template types 2023-07-25 15:27:15 +03:00
Bernaldo Mihasi bc279b1610 #8843 - 1. refactor the DatasetProfile Table to DescriptionTemplate name 2. add scripts for the new DescriptionTemplateType table 3. update english localization + frontend 2023-07-25 15:04:39 +03:00
Konstantinos Triantafyllou a737fec19d Progress Bar: Add condition for visibillity if a field has id. 2023-07-25 14:48:13 +03:00
Bernaldo Mihasi 3fc307c831 #8912: adding new metadata/registries api in the configs 2023-07-21 17:04:41 +03:00
Bernaldo Mihasi ee90ac37b6 no message 2023-07-20 13:34:56 +03:00
Bernaldo Mihasi 0918e55ac9 fix bug in dataset template editor when a field is an admin-input api and couldn't fetch results 2023-07-20 13:07:05 +03:00
Bernaldo Mihasi 2db9ea613f catch error in prefilling when source mapping does not exist in the api's response 2023-07-20 13:00:24 +03:00
Konstantina Galouni e878310b72 #8834: Home page: Drafts query for both Datasets and DMPs.
1. RecentActivityCriteria.java: Added in RecentActivityCriteria field "private Integer status;", to be able to get only drafts.
2. DashBoardManager.java: In method "getNewRecentActivity()", add in Dataset and DMP requests status in criteria.
2023-07-17 18:10:49 +03:00
Konstantina Galouni e4af3bcbe9 Merge branch 'Development' of code-repo.d4science.org:MaDgiK-CITE/argos into Development 2023-07-17 18:06:05 +03:00
Konstantina Galouni 77f40570ac #8834: Home page: Drafts query for both Datasets and DMPs.
1. recent-activity-criteria.ts: Added in RecentActivityCriteria optional field "public status?: Number;" (to get only drafts).
2. drafts.component.ts & drafts.component.html: Updated calls and display to query for both Datasets and DMPs (same as recent-edited-activity, but include only drafts).
4. recent-edited-activity.component.ts: Removed old unnecessary logs.
2023-07-17 18:04:39 +03:00
Konstantinos Triantafyllou 7bc4f4055c Fix progress indicator in prifilled dataset form. #8764 2023-07-17 17:38:25 +03:00
Konstantinos Triantafyllou aec7126fd3 Add valid condition in progress calculatiion of a form 2023-07-17 16:34:43 +03:00
Bernaldo Mihasi dd6a2a0df7 adding key property in the prefilling model as the identifier of the prefilling repository 2023-07-17 10:29:06 +03:00
Bernaldo Mihasi 1715463422 fix bugs in rda json export when rda semantics don't correspond to valid dataset field input type 2023-07-14 13:56:08 +03:00
Bernaldo Mihasi a8ce14af70 #8726 - adding openaire prefilling 2023-07-14 13:47:01 +03:00
Bernaldo Mihasi 1a15e1ddde add missing logger to Prefilling Mapper 2023-07-03 17:09:15 +03:00
Bernaldo Mihasi 000882cbdb 1) fix bug when tags don't show after saving the dataset
2) save the email when user logs in with orcid
3) refactor unlink, delete credential of user to be unlinked
2023-07-03 11:40:35 +03:00
Bernaldo Mihasi 1c0562d7e7 catch error when a field's external api is not available and interrupts prefilling process 2023-06-26 14:16:41 +03:00
Bernaldo Mihasi 8fbc20c823 no message 2023-06-23 10:43:03 +03:00
Bernaldo Mihasi 469a8b4def add config properties to zenodo.json 2023-06-23 10:33:58 +03:00
Bernaldo Mihasi cb972c394c change maDmpTarget type in prefilling to semanticTarget 2023-06-22 13:47:01 +03:00
Bernaldo Mihasi d996acdcc4 #8842 - add notification templates html files to application properties 2023-06-21 13:09:20 +03:00
Bernaldo Mihasi 741179a53f #8740 - multiple configuration for a deposit repository 2023-06-21 12:46:37 +03:00
Bernaldo Mihasi 3630727fed dmp profile bug fixes: 1) dmp profile was not saved 2) if you select external autocomplete field and change it to another type, the external field was saved 2023-06-21 12:20:30 +03:00
Bernaldo Mihasi 34e4761811 bug fixes regarding tickets: #8739, #8763, #8833 2023-06-21 12:17:22 +03:00
Bernaldo Mihasi dfa2f0cd38 #8737 - make elastic fetch 100 inner hits instead of the default 3. 2023-06-21 12:05:51 +03:00
Bernaldo Mihasi 3d367b0589 #8765 - make pids coming from apis as hypelinks in export 2023-06-21 12:00:20 +03:00
Bernaldo Mihasi b6505cda4e refactor signing of saml2 authentication request 2023-06-21 11:51:26 +03:00
Diamantis Tziotzios 50c96ef821 Merge branch 'Development' 2023-06-20 09:39:15 +03:00
Konstantina Galouni 1a2a93a95f #8738 - Disable input fields in finalised DMPs/datasets.
1. dataset-editor.component.html & form-composite-field.component.html & form-field.component.html & form-section.component.html: Added [editable] parameter input in <rich-text-editor-component> or [disabled] attribute in inputs, buttons, <ngx-dropzone> and <mat-select> to disable then when form is disabled & do not add "pointer" class when form is disabled.
2. form-field.component.ts: For DatasetIdentifier and Validation view styles, when removing and re-adding control, check if form was disabled and disable it again.
3. form-section.component.ts: In method "addMultipleField()", return without doing anything when form is disabled.
2023-06-16 14:36:24 +03:00
Konstantina Galouni eb4f1d23e1 dataset-description.component.html: [Bug fix] Removed forgotten log {{form | json}} from html. 2023-06-16 14:19:07 +03:00
Konstantina Galouni 985b3de385 rich-text-editor.component.ts: Removed "backgroundColor" from toolbarHiddenButtons | Do not show (x) close to clear the input when editable is false. 2023-06-16 14:10:52 +03:00
Bernaldo Mihasi 2aa1f76aab use sha256 with rsa keys for saml2, fix bug for authentication request's id 2023-06-13 15:47:18 +03:00
Bernaldo Mihasi 5cd1803e3a fix bug where empty input was saved in multiple auto complete fields 2023-06-13 11:52:50 +03:00
Bernaldo Mihasi 1f666a5bf9 create saml2 authentication request in backend 2023-06-13 09:48:54 +03:00
Bernaldo Mihasi 4c9652abc3 saml2 metadata creation for sp 2023-06-12 15:05:51 +03:00
Bernaldo Mihasi ce50a72ac1 seperate tags in dataset editor using enter or comma 2023-06-07 13:54:31 +03:00
Bernaldo Mihasi f20b420c2c disable unlink action in profile section when email is the as the main profile's mail 2023-06-06 11:16:19 +03:00
Bernaldo Mihasi 730b60598a fix bug when dmp has been deposited in a repository and that repository does not exist any more. 2023-06-01 12:15:22 +03:00
Konstantina Galouni 4bac942059 co-branding.html & styles.css & section.css: #8333 - Updated splash page - added section "Accessing to ARGOS / OpenDMP source code". 2023-05-30 13:21:30 +03:00
Bernaldo Mihasi 22dc9647f3 remove unused variable 2023-05-23 17:18:06 +03:00
Bernaldo Mihasi b2f2a79a5d add unlink functionality in profile section, when an email is unlinked that account is starting from scratch resulting in an empty dashboard. 2023-05-23 17:15:11 +03:00
Bernaldo Mihasi 5e764559cf fix typo (semantics) 2023-05-19 12:34:08 +03:00
Bernaldo Mihasi a3ee9dccda update deposit base repository version 2023-05-18 15:48:12 +03:00
Bernaldo Mihasi 758539eaa0 add zenodo related identifiers for schematics 2023-05-17 13:51:21 +03:00
Bernaldo Mihasi af8fddb89c #7911 - read pid and pid type from external api respones so as to save those values in the dataset field 2023-05-17 13:45:12 +03:00
Konstantina Galouni b435994c51 #8148 - [Bug fix] drafts.component.ts & recent-edited-activity.component.ts & recent-edited-dataset-activity.component.ts & recent-edited-dmp-activity.component.ts: Updated check to redirect to first page, if page parameter is bigger than the latest page. 2023-05-15 00:43:45 +03:00
Konstantina Galouni 0adc7044ab h2020.docx: [Bug fix] Updated image of Argos in h2020.docx DMP template | DataManagementPlanManager.java & DatasetManager.java: Added parameter "isDataset" in fillFirstPage() | WordBuilder.java: [Bug fix] Added parameter isDataset in fillFirstPage() and added some checks in description.
(cherry picked from commit c9b4b35e39)
2023-05-09 10:33:44 +03:00
Konstantinos Triantafyllou 0d9b6f9622 Fix bug where on long click, blur value was added in the list of chips. 2023-05-03 12:34:17 +03:00
Bernaldo Mihasi 5d5ebe7a55 update about, glossary, terms pages when language changes. 2023-05-02 13:48:07 +03:00
Bernaldo Mihasi 7c347569fd update user guide when language changes. 2023-05-02 12:56:09 +03:00
Konstantinos Triantafyllou 50169222c7 Fix infinite loop in home page when total number of results is less than the page size 2023-04-28 16:10:32 +03:00
Konstantinos Triantafyllou e84398f667 Close autocomplete panel if a blur value is added. 2023-04-28 12:56:01 +03:00
Bernaldo Mihasi a1fd03a444 fix out of memory error in management endpoints. 2023-04-26 17:27:21 +03:00
Bernaldo Mihasi 8c30c558b2 User Guide, ToS, FAQ, Glossary, About html pages can now be dynamically updated so that they can be changed per installation. 2023-04-26 17:25:59 +03:00
Konstantina Galouni 2715db7365 #8148 - Added paging functionality with load more/ less buttons in home page, for the existing 4 tabs - ordering and keyword are also added in the url and they are resolved on page reload.
1. i18n/: Added properties "GENERAL.ACTIONS.LOAD-LESS" and "GENERAL.ACTIONS.NO-MORE-AVAILABLE".
2. dashboard.component.html: Added aria-label on each <mat-tab> | Added on <mat-tab-group> bindings for [selectedIndex] and (selectedTabChange), to define the active tab.
3. dashboard.component.ts: Added field currentType: string = "recent"; | Set currentType by url params | Added method get indexFromCurrentType(), to return the active tab index.
4. drafts.component.html & recent-edited-activity.component.html & recent-edited-dataset-activity.component.html & recent-edited-dmp-activity.component.html: Added button "LOAD-LESS" and message "NO-MORE-AVAILABLE" to the end of the list.
5. drafts.component.ts & recent-edited-activity.component.ts & recent-edited-dataset-activity.component.ts & recent-edited-dmp-activity.component.ts:
   a. Added fields @ViewChild("...") resultsContainer, offsetLess: number = 0, hasMoreResults:boolean = true, page: number = 1 and @Input() isActive: boolean = false.
   b. Read url params, set offsets and query filters and update url.
   c. Renamed "loadMore()" to "loadNextOrPrevious()" and added parameter more: boolean = true.
2023-04-25 17:55:31 +03:00
Diamantis Tziotzios eb1abb1f24 more css changes 2023-04-25 11:26:20 +03:00
Diamantis Tziotzios 92f56c073c more css changes 2023-04-25 11:10:45 +03:00
Diamantis Tziotzios 6585fcf391 update lang files to make app name configurable. 2023-04-24 16:11:38 +03:00
Bernaldo Mihasi 5d7e2cb307 add seperator keycodes for schematics field 2023-04-20 16:43:15 +03:00
Konstantinos Triantafyllou 681f73b865 Dataset template editor: On multiplicity changed, reset multiplicity values including table view and placeholder. 2023-04-20 16:01:21 +03:00
Konstantinos Triantafyllou ef0816524f Merge branch 'Development' of code-repo.d4science.org:MaDgiK-CITE/argos into Development 2023-04-20 15:27:53 +03:00
Konstantinos Triantafyllou b6709bac3c Increase debounce time in multi auto complete in order to avoid addition of search value and first option from dropdown in chips'list. 2023-04-20 15:27:38 +03:00
Bernaldo Mihasi 7b12d7b46d temporarily endpoint for appending "rda." in schematic values of dataset profiles 2023-04-20 10:12:55 +03:00
Bernaldo Mihasi 5733796674 update i18n 2023-04-18 11:50:21 +03:00
Diamantis Tziotzios 89922eaecc Merge remote-tracking branch 'origin/semantics' into Development 2023-04-18 11:19:48 +03:00
Bernaldo Mihasi 11a9abae42 version change in base deposit repository 2023-04-18 10:51:13 +03:00
Bernaldo Mihasi 8293535bb0 add zenodo properties in schematics 2023-04-18 09:41:01 +03:00
Bernaldo Mihasi f822e06881 upload new version for dataset template from xml file 2023-04-09 13:21:08 +03:00
Konstantina Galouni c9b4b35e39 h2020.docx: [Bug fix] Updated image of Argos in h2020.docx DMP template | DataManagementPlanManager.java & DatasetManager.java: Added parameter "isDataset" in fillFirstPage() | WordBuilder.java: [Bug fix] Added parameter isDataset in fillFirstPage() and added some checks in description. 2023-04-05 11:13:26 +03:00
Konstantinos Triantafyllou fbaa175436 Finilize from dataset overview will redirect the editor and then trigger Finalize button. 2023-03-30 12:19:09 +03:00
Bernaldo Mihasi 63c866d74f set creator in new/cloned/newVersioned dmp 2023-03-30 11:44:50 +03:00
Bernaldo Mihasi b6b7a2444c add xml attributes in dmp xml export 2023-03-30 11:44:00 +03:00
Bernaldo Mihasi 18a200f099 no message 2023-03-27 15:25:19 +03:00
Bernaldo Mihasi 18ccb3ca0c changes in dmp deposit model 2023-03-27 15:24:50 +03:00
Bernaldo Mihasi a90f21b6aa fix issues in dmp xml export 2023-03-27 15:21:12 +03:00
Bernaldo Mihasi 376bb2ca53 changes in dmp deposit model 2023-03-27 14:59:47 +03:00
Bernaldo Mihasi 969df0357a migrate rda properties in dataset profiles definitions in db to schematics 2023-03-27 14:58:45 +03:00
Bernaldo Mihasi c35bc2efed remove rda property from models 2023-03-27 14:52:37 +03:00
Konstantinos Triantafyllou 8c708f470d Merge branch 'Development' of code-repo.d4science.org:MaDgiK-CITE/argos into Development 2023-03-15 15:56:50 +02:00
Konstantinos Triantafyllou 6ca77c2df2 Ticket 8391: DMP Editor: Add dialog before Discard. Dataset Editor: On Discard reset the form instead of go back in dmp editor. 2023-03-15 15:55:57 +02:00
Konstantina Galouni 13e62fd409 h2020.docx & WordBuilder.java: Updated h2020.docx DMP template and added export of DMP description.
(cherry picked from commit 28c1c9b71d)
2023-03-14 10:23:35 +02:00
Bernaldo Mihasi 519cb260c6 fix issue with users returned as empty array, add researchers in response 2023-03-07 09:44:16 +02:00
Diamantis Tziotzios 34176bcb70 hr lang update 2023-03-03 13:01:38 +02:00
Bernaldo Mihasi 759c80420f Merge branch 'Development' of https://code-repo.d4science.org/MaDgiK-CITE/argos into Development 2023-03-03 11:45:54 +02:00
Bernaldo Mihasi 87c9730524 puplic api return total count in response 2023-03-03 11:44:21 +02:00
Diamantis Tziotzios 35f9bbcf56 logo change 2023-03-03 11:41:28 +02:00
Diamantis Tziotzios 7af27c73cf Merge branch 'css-config-changes' into Development 2023-03-03 10:24:34 +02:00
Diamantis Tziotzios 9ebefa8369 Merge branch 'public_api_update' into Development 2023-03-03 10:23:52 +02:00
Diamantis Tziotzios 7185b5d117 Merge commit '180e02c829a8fb35056124d5afdbec3835a94b62' 2023-02-28 16:08:32 +02:00
Konstantina Galouni 28c1c9b71d h2020.docx & WordBuilder.java: Updated h2020.docx DMP template and added export of DMP description. 2023-02-28 11:01:44 +02:00
Konstantinos Triantafyllou 180e02c829 Ticket 8389: Fix undo finalazation appears even finalized wasn't successful. Also fix issue where the buttons are remaining disabled when user press No in the dialog of finalization. On undo finalization do a save in order to be sync with the backend. 2023-02-23 15:51:46 +02:00
Konstantinos Triantafyllou 4c7dee3ece Ticket 8390: Remove separator key codes in the default multiple auto complete input and added in invitation-dialog. 2023-02-23 13:01:56 +02:00
Diamantis Tziotzios 806ce4f584 hr lang update 2023-02-22 18:21:28 +02:00
Konstantinos Triantafyllou 3219132e86 Merge branch 'Development' of code-repo.d4science.org:MaDgiK-CITE/argos into Development 2023-02-21 15:30:36 +02:00
Konstantinos Triantafyllou c2aba649af CHange condition of depositRepos in dmp-overview in order to chech also the length of the array. 2023-02-21 15:30:26 +02:00
Bernaldo Mihasi e2505039df cleanup unused code 2023-02-21 14:09:33 +02:00
Bernaldo Mihasi b273ca4ed7 search for schematics fields in prefilling 2023-02-21 12:44:48 +02:00
Bernaldo Mihasi 0c57bba0b4 rda json dmp import/export 2023-02-21 11:57:34 +02:00
Bernaldo Mihasi 9a8fc5e92e schematics implementation, xml import export of dataset profiles 2023-02-21 11:46:44 +02:00
Bernaldo Mihasi e22e348330 cleanup unused code 2023-02-21 11:41:07 +02:00
Diamantis Tziotzios 6c5cb97050 hr lang update 2023-02-14 21:04:30 +02:00
Bernaldo Mihasi ab124e87ea add new filters(grantLike, funderLike, collaboratorsLike) 2023-02-14 12:16:11 +02:00
Diamantis Tziotzios 72daadee7e configurable list of languages 2023-02-11 14:38:13 +02:00
Diamantis Tziotzios 554eb96824 css update 2023-02-10 18:05:11 +02:00
Diamantis Tziotzios 34d63438e0 css changes to add configurability 2023-02-10 15:08:23 +02:00
Konstantinos Triantafyllou 8b34d55706 Fix repositories list update after deposit 2023-01-31 17:39:17 +02:00
Konstantinos Triantafyllou 6924d82c80 Change selected DOI from the first element to the selected one 2023-01-24 12:20:05 +02:00
Konstantinos Triantafyllou 34f8e4f96d Fix after deposit action in dmp overwiew. 2023-01-24 12:13:58 +02:00
Bernaldo Mihasi 8f74c36205 no message 2023-01-23 15:30:39 +02:00
Konstantina Galouni 1d45bddeca #8350 - Added tracking of download Dataset & DMP exports in Matomo.
1. matomo-service.ts: Added method "trackDownload()".
2. drafts.component.ts & recent-edited-activity.component.ts & recent-edited-dataset-activity.component.ts & recent-edited-dmp-activity.component.ts & dataset-wizard.component.ts & dataset-listing-item.component.ts & dataset-overview.component.ts & dmp-editor.component.ts & dmp-listing-item.component.ts & dmp-overview.component.ts: Added calls to this.matomoService.trackDownload() for "datasets/" or "dmps/" with the file type (/docx, /xml, /pdf, /json) and the id.
2023-01-20 19:02:12 +02:00
Konstantina Galouni a1dbd72bce #8337 - Added export button in dataset and dmp editors
1. dataset-profile-editor.component.html: Updated how save button appears (save separated from arrow).
2. dataset-profile-editor.component.scss: Commented paddings from .template_action_btn.
3. dataset-wizard.component.html: Added export button | Updated how save button appears (save separated from arrow).
4. dataset-wizard.component.scss: Added class .dataset-export-btn.
5. dmp-editor.component.html: Added export button.
6. dmp-editor.component.scss: Added class .dmp-export-btn.
7. i18n/: Added in language files properties for disabled export button inside editors (DMP-EDITOR.ACTIONS.DISABLED-EXPORT, DATASET-EDITOR.ACTIONS.DISABLED-EXPORT).
2023-01-20 18:53:54 +02:00
Konstantinos Triantafyllou 455e3c8fe0 Revert condition in deposit button, that deleted by mistake in last commit. 2023-01-20 17:29:48 +02:00
Konstantinos Triantafyllou 13d03e4459 Change deposit in DMPs: Modal changed to dropdown in deposit action and change DOI display 2023-01-20 14:56:29 +02:00
Bernaldo Mihasi 57a400f817 update repository base version 2023-01-18 09:37:34 +02:00
Bernaldo Mihasi 030f1ccf8e add repository logo 2023-01-17 14:41:04 +02:00
Diamantis Tziotzios 95c9d599e1 pom update 2023-01-17 10:31:34 +02:00
Diamantis Tziotzios 26bd59de21 repojar conf 2023-01-17 09:54:16 +02:00
Diamantis Tziotzios 4dccaa93b8 Merge branch 'multipleRepos' into Development 2023-01-16 14:11:43 +02:00
Konstantinos Triantafyllou 3e5dc85e04 Fix visibility dependencies for table view. Add missing question titles if a field is table. 2023-01-10 13:08:56 +02:00
Bernaldo Mihasi 66b2596036 delete files used for deposit in tmp storage 2022-12-27 09:44:43 +02:00
Konstantinos Triantafyllou 2f5f34948e Add all fields in field-value pipe. 2022-12-19 18:02:53 +02:00
Bernaldo Mihasi 749dbefc38 1. return bad request when deposition failed and returned null
2. close modal with repositories after a successful deposition
2022-12-19 16:07:03 +02:00
Bernaldo Mihasi 976d0221ce no message 2022-12-19 11:37:49 +02:00
Bernaldo Mihasi 80fba7c655 Merge branch 'multipleRepos' of https://code-repo.d4science.org/MaDgiK-CITE/argos into multipleRepos 2022-12-13 11:00:27 +02:00
Bernaldo Mihasi fbc274282c fix deposit base dependancy in web 2022-12-13 10:55:32 +02:00
Diamantis Tziotzios ec985bf271 Dockerfile update 2022-12-13 10:46:36 +02:00
Bernaldo Mihasi d0cde3c4c4 cleanup deposit since they are moved in another git repository 2022-12-13 10:12:12 +02:00
Bernaldo Mihasi 39d709f41d no message 2022-12-13 09:46:00 +02:00
Bernaldo Mihasi c6d37806c8 drop column doi from dmp and refactor code(replace single doi with list of dois) 2022-12-08 13:12:54 +02:00
Bernaldo Mihasi 8c95b16164 add temp storage in zenodo repository 2022-12-08 13:06:52 +02:00
Bernaldo Mihasi ad00695d4e fix bug allowing invalid characters in pdf name 2022-12-08 13:04:55 +02:00
Bernaldo Mihasi 572be373e5 don't deposit empty supportingFiles.zip when no files are uploaded in datasets 2022-12-08 13:02:08 +02:00
Konstantina Galouni 1171a38ad1 hr.json: #8296 - Updated Croatian localization file. 2022-12-07 17:32:27 +02:00
George Kalampokis 5f131b9823 Remove thread sleeps when trying to load config files and removed principal from Exception Handling Controller 2022-12-06 14:34:11 +02:00
Diamantis Tziotzios e1a3e9b7bc Dockerfile update 2022-12-06 11:55:06 +02:00
Bernaldo Mihasi b7e69d5fdf repo config using enviroment variables instead of static strings 2022-12-06 11:50:54 +02:00
George Kalampokis 6caef3e890 Remove thread sleeps when trying to load config files and removed principal from Exception Handling Controller 2022-11-30 18:19:40 +02:00
Bernaldo Mihasi 679354f699 deposit datasets' attached files in zip format 2022-11-30 09:43:03 +02:00
Konstantinos Triantafyllou c9c99be603 Merge branch 'table-field' into Development 2022-11-29 10:19:15 +02:00
Konstantinos Triantafyllou a2d07c93c8 Table View: Change columns text from truncate to wrap 2022-11-29 09:55:47 +02:00
Diamantis Tziotzios 75007286fc elasticsearch cert change 2022-11-25 17:03:25 +02:00
Diamantis Tziotzios ccc102a52d add more elastic logs 2022-11-25 16:03:59 +02:00
Bernaldo Mihasi ed79d27cdc when making a new version in dataverse delete previous files 2022-11-25 11:20:45 +02:00
Konstantinos Triantafyllou 9fd963a480 Add table view in preview of datataset profile editor and dataset editor. 2022-11-24 21:28:18 +02:00
Bernaldo Mihasi da211ca756 update dockerfile to include directory with repository jars 2022-11-24 17:31:16 +02:00
Bernaldo Mihasi 7a0e1c89f2 when finalizing a dmp and its access rights are open, make it publicly available in Argos 2022-11-24 16:29:11 +02:00
Diamantis Tziotzios 93320f7c94 Merge branch 'Development' 2022-11-22 15:03:08 +02:00
Bernaldo Mihasi 573aab059b remove redundant parameter in deposit interface 2022-11-22 09:58:47 +02:00
Bernaldo Mihasi 5e2639848b dmps are deposited in dataverse as datasets under a parent predefined dataverse collenction
when a new dmp version is created and deposited, the corresponding dataset in dataverse/collection in zenodo create a new version too
deposit dmps as published not drafts
2022-11-22 09:40:05 +02:00
George Kalampokis 0888b7cd74 Enable health and metrics built-in endpoints 2022-11-21 14:06:59 +02:00
Bernaldo Mihasi 6c13d3b68f when new version is deposited, create dataset in existing dataverse 2022-11-14 09:34:49 +02:00
Konstantinos Triantafyllou 925fc3ce4a Merge branch 'Development' into table-field 2022-11-10 17:54:28 +02:00
Bernaldo Mihasi b4490cb0f3 [WIP] implement dataverse repository deposit 2022-11-10 10:12:11 +02:00
Konstantina Galouni 2bbf89e779 HtmlToWorldBuilder.java & WordBuilder.java: Added methods for exporting inputs of a question as table. 2022-11-08 14:39:23 +02:00
Diamantis Tziotzios 876d99ce38 Merge commit '18dcabbac2599d35246f91204efbb25238106565' 2022-11-03 14:20:16 +02:00
Diamantis Tziotzios 0cd20605f0 user guide image update 2022-11-02 15:39:42 +02:00
Bernaldo Mihasi 6b2bc3c1e0 cleanup code, add authorizationUrl and recordUrl in repositories config 2022-11-02 13:31:42 +02:00
Bernaldo Mihasi 59e26dbb8d [WIP] EntityDoi table 2022-11-02 09:41:40 +02:00
Konstantina Galouni 37724380e9 #7276 - Added tableView true/false option in multiplicity 2022-11-01 16:24:28 +02:00
Bernaldo Mihasi 7d624a2daa [WIP] system deposit authentication, using default repo token 2022-10-27 09:32:26 +03:00
Bernaldo Mihasi ab66a5f1da [WIP] implement zenodo repository deposit, add authentication for depositions 2022-10-26 13:50:01 +03:00
Bernaldo Mihasi 18dcabbac2 #7892 - prefill rda field only when a new dataset is created or a new version is made 2022-10-25 09:36:11 +03:00
Bernaldo Mihasi 7dd2030eb3 [WIP] create deposit interface and implement multiple deposit repositories 2022-10-24 09:35:49 +03:00
Diamantis Tziotzios 49ce0efb40 user guide images added 2022-10-19 11:06:54 +03:00
Konstantinos Triantafyllou 9f1c0352ea Merge branch 'Development' of code-repo.d4science.org:MaDgiK-CITE/argos into Development 2022-10-19 01:48:57 +03:00
Konstantinos Triantafyllou 4a54915a8e Fix some bugs in dataset editor while navigating with buttons and scroll in the table of contents 2022-10-19 01:48:48 +03:00
Konstantina Galouni 4dd338d08e #8149 - [Bug fix] Updated condition to check if current user is owner of DMP/ Dataset (drafts.component.ts & recent-edited-activity.component.ts & recent-edited-dataset-activity.component.ts & recent-edited-dmp-activity.component.ts & dataset-listing-item.component.ts & dmp-clone.component.ts & dmp-listing-item.component.ts). 2022-10-18 14:01:26 +03:00
Bernaldo Mihasi 20f618a5d7 fix request body examples in publicapi 2022-10-18 09:39:46 +03:00
Konstantinos Triantafyllou 3361b6aff6 Redesign steps in dataset editor #7545 2022-10-17 15:32:05 +03:00
Konstantina Galouni dc197a5abc #8143 - form-field.component.html: [Bug fix] Updated check to set disabled attribute or not in the button. 2022-10-12 16:22:58 +03:00
Diamantis Tziotzios b018dd42db fixed default language support 2022-10-11 18:52:08 +03:00
Bernaldo Mihasi 2b692fa579 fix public api paths 2022-10-10 11:56:48 +03:00
Konstantinos Triantafyllou 6720504b7b Merge branch 'Development' of code-repo.d4science.org:MaDgiK-CITE/argos into Development 2022-10-05 16:23:02 +03:00
Konstantinos Triantafyllou fd2ec314a0 Add next-previous buttons in dataset editot in order to navigate through chapters 2022-10-05 16:22:47 +03:00
Bernaldo Mihasi ef327a0a57 expose public api 2022-10-04 13:06:49 +03:00
Konstantina Galouni 4cab6ca160 dmp-editor.component.ts: [Bug fix - #8073] Set value of "status" field of formGroup to DmpStatus.Draft, after reset() is called. 2022-09-16 10:32:29 +03:00
Bernaldo Mihasi 5087a37e15 dockerization 2022-09-13 10:35:56 +03:00
Konstantina Galouni 6a4d67de0c faqs.html & faq-content.component.html: #7972 - Updated faqs according to document. 2022-09-05 14:19:15 +03:00
argirok 0d5f6de7c7 update language to Polski 2022-07-29 10:40:45 +03:00
argirok 19d8218dea Added pl.json and update localization files 2022-07-29 10:39:39 +03:00
Konstantina Galouni 49e42e9cba h2020_dataset.docx & WordBuilder.java & DataManagementPlanManager.java & DatasetManager.java: Updated footer of Dataset template to set title of DMP and Dataset. 2022-07-28 17:30:44 +03:00
George Kalampokis 7a71110033 Fix critical issue with open file handle leak on user guide folder
(cherry picked from commit fa723c07ae)
2022-07-28 17:14:13 +03:00
George Kalampokis fa723c07ae Fix critical issue with open file handle leak on user guide folder 2022-07-28 11:23:39 +03:00
Konstantina Galouni a2228a5fb6 #7597, #7893, #7895, #7898: Updated DMP template file (h2020.docx) for export | Added Dataset template file (h2020_dataset.docx) for export | Updated indentation on exported docs.
1. h2020.docx, h2020_dataset.docx: Updated DMP template & Added Dataset template.
2. application.properties, application-devel.properties, application-production.properties, application-staging.properties: Added property for dataset template file path configuration.h2020datasettemplate=documents/h2020_dataset.docx
3. ConfigLoader.java: Added method XWPFDocument getDatasetDocument();
4. DefaultConfigLoader.java: Added fiedls and methods for loading Dataset template (h2020_dataset.docx).
5. DataManagementPlanManager.java, DatasetManager.java, , HtmlToWorldBuilder.java, WordBuilder.java: Updated header/footer/first page in exports for DMPs and Datasets  | Updated indentation in exports.
2022-07-26 17:00:54 +03:00
Konstantina Galouni 9b4c7aeb6f DataManagementPlanManager.java: #7893 - Added description of Datasets on DMP exported word file. 2022-07-12 12:52:04 +03:00
Konstantinos Triantafyllou b21693bff1 Change all buttons width: 101px to min-width: 101px 2022-07-11 16:49:09 +03:00
Konstantinos Triantafyllou 989f07787c Fix autocomplete in multiplicity items by using parent field id. 2022-07-11 16:34:06 +03:00
Konstantina Galouni e329ef763a form-section.component.html: Updated classes of comment field parent and wrapperClasses so that it looks full width in all views. 2022-06-23 15:51:28 +03:00
Konstantinos Triantafyllou 304a6cfdb3 Backend: Fix a bug with compareTo of a field throwing an error because ordinal is not exists. FrontEnd: Initialize visibility rules for multiple fields coming from service according to their parents. 2022-06-23 15:38:48 +03:00
Konstantina Galouni 18e98938d5 WordBuilder.java: #7869 - In exported file fix hidden question title and a. /b. /c for empty answers.
a. fix hidden question title when more than 1 multiplicity answers,
b. fix hidden question title when  no value in the last multiplicity answer,
c. Do not show a. / b. / c.... for empty multiplicity answers,
d. Do not show a. / b. / c.... when more than 1 multiplicity answers, but only one with value.
2022-06-23 15:32:05 +03:00
argirok b1788c2dc2 update croatian language file hr.json 2022-06-21 12:51:51 +03:00
Diamantis Tziotzios 2ecce0acb0 elastic conf changes 2022-06-14 14:22:59 +03:00
Bernaldo Mihasi 8b26ff19b6 Merge branch 'Development' of https://code-repo.d4science.org/MaDgiK-CITE/argos into Development 2022-06-14 10:25:53 +03:00
Bernaldo Mihasi 9c4d246ef5 heading changes on export template 2022-06-14 10:24:35 +03:00
Konstantina Galouni 772a041851 WordBuilder.java: #7837 - In exported file add comment filed as ParagraphStyle.HTML instead of ParagraphStyle.COMMENT. 2022-06-14 10:14:48 +03:00
Bernaldo Mihasi 0ac5902bfd 1. export redesign based on new word template
2. orcid researchers in export are clickable
2022-06-13 15:16:48 +03:00
Konstantina Galouni 941cca8103 form-section-inner.component.html & form-section.component.html: Updated comment field to use <rich-text-editor> instead of <input> and <mat-hint>. 2022-06-10 17:00:36 +03:00
Bernaldo Mihasi 73be5d9a98 1. export redesign: multiplicity #ref 7834, multiple select #ref 7836
2. fix bug in license api export
2022-06-08 16:27:47 +03:00
Bernaldo Mihasi 3433f58506 Add ssl support for elasticsearch 2022-06-08 16:23:49 +03:00
George Kalampokis 0235406246 Improve image caption styling 2022-06-07 14:52:48 +03:00
George Kalampokis 7985b13cca Add image caption on Word/Pdf export 2022-06-07 13:10:06 +03:00
George Kalampokis 54c5017609 Add Export attribute on Dataset Profile's Field. By Default is set to true. The attribute determines if the field value will be included in the word/pdf export 2022-06-07 11:00:13 +03:00
George Kalampokis 5cd79a6368 When Exporting DMP to word/pdf sort it's Datasets based on creation date 2022-06-07 10:56:44 +03:00
George Kalampokis ea8407eece Fix critical issue when uploading Dataset Template 2022-06-07 10:33:37 +03:00
Diamantis Tziotzios 91566c9710 Merge branch 'saml2' into Development 2022-06-01 10:45:19 +03:00
Konstantina Galouni 79bc95b099 [Bug fix] DatasetProfileManager.java: In method "createNewVersionDatasetProfile()", do not set label and language from oldDatasetProfile. 2022-05-31 16:51:59 +03:00
Konstantina Galouni d7ee7b8d93 Question titles in dataset template with <textarea> | Bug fix in "Save & Continue" functionality of dataset templates | Added "Update & Continue" functionality in dataset templates | Changed placeholder text in the prefilling search box.
1. dataset-profile-editor-composite-field.component.html: #7792 - use <textarea> instead of <input> for question titles.
2. dataset-profile-editor-field.component.ts: #7790 - Set default value "unchecked" for checkbox.
3. dataset-profile.service.ts: In methods "createForm()" and "newVersion" updated response type from DatasetProfileEditorModel to string (id is returned only) and use httpClient instead of http.
4. dataset-profile-editor.component.html:
   a. [Bug fix] Fix conditions in action buttons (Save/Update/Finalize)
   b. On "Update" action button, added update dropdown options "Update & Continue", "Update & Close" and set default behavior "Update & Continue".
   c. On save dropdown options, used DATASET-PROFILE-EDITOR.ACTIONS instead of DATASET-WIZARD.ACTIONS.
5. dataset-profile-editor.component.ts:
   a. [Bug fix] #7791 - Created method "afterSave()" to be called in "onSubmit()" method when api calls return
   b. Added optional parameter "close: boolean = false" in method "updateAndFinalize".
6. i18n/:
   a. Added DATASET-WIZARD.ACTIONS.SAVE-AND-CONTINUE, DATASET-WIZARD.ACTIONS.SAVE-AND-CLOSE, DATASET-WIZARD.ACTIONS.UPDATE-AND-CONTINUE, DATASET-WIZARD.ACTIONS.UPDATE-AND-CLOSE.
   b. #7750 - Changed placeholder text in the prefilling search box (DATASET-CREATE-WIZARD.PREFIL-STEP.SEARCH).
2022-05-31 16:49:15 +03:00
George Kalampokis e8a87765ee Fix authorization issue with Dataset Templates not showing to their original creators (that are not Admins) 2022-05-31 16:14:25 +03:00
argirok 03f7afede8 update openaire publication API to accept DOI query 2022-05-30 16:15:16 +03:00
George Kalampokis 11b0db21ac Reconfigure Zenodo prefilling query in order to query doi and conceptdoi alongside the title (ref #7802) 2022-05-30 11:59:49 +03:00
George Kalampokis 757b1f70e8 Change default filterType to remote (ref #7799 & #7800) 2022-05-26 15:03:45 +03:00
George Kalampokis 66511d2ed6 Further stability improvement over external urls query 2022-05-25 18:06:54 +03:00
George Kalampokis 0f4b209427 Add {query} field for external urls with configurable queries and make ORCID query more strict (similar to orcid's website) (ref #7798) 2022-05-25 17:37:20 +03:00
George Kalampokis 3aff6ac90e Allow to update Dataset Templates by uploading dataset Template .xml files (ref #7793) 2022-05-25 14:50:00 +03:00
Bernaldo Mihasi ff6d068ddd sign artifact resolve-code + post binding 2022-05-25 10:30:59 +03:00
Diamantis Tziotzios 14c267c97e Merge branch 'Development'
# Conflicts:
#	dmp-backend/web/src/main/resources/config/application-production.properties
2022-05-13 11:58:34 +03:00
George Kalampokis 912a3cc095 Order datasets on DMP listing (ref #7746) 2022-05-11 18:13:35 +03:00
Bernaldo Mihasi 6c36253f09 artifact binding + decryption of assertion 2022-05-11 10:38:10 +03:00
Bernaldo Mihasi 3c3b9ef398 Merge branch 'Development' of https://code-repo.d4science.org/MaDgiK-CITE/argos into Development 2022-05-04 11:13:47 +03:00
Bernaldo Mihasi cfd0707f2a bug fix: license api-fields didnt get prefilled 2022-05-04 11:11:25 +03:00
George Kalampokis 78bceeb8ae Reorganize and Rename (english only) DMP Editor Fields (ref #7700) 2022-05-04 11:10:06 +03:00
George Kalampokis b891907724 Merge remote-tracking branch 'origin/Development' into Development 2022-05-04 10:25:31 +03:00
George Kalampokis afa602bf39 Fix issue with Dataset Editor when trying to save an incomplete or invalid form, the save buttons stay locked (ref #7725) 2022-05-04 10:25:13 +03:00
Konstantina Galouni 579bb58afc #7699: rich-text-editor.component.ts: Clear any formatting on paste and add plain text | Added h1-h6 tags in customClasses | Enable "removeFormat" button (clear formatting added from editor options). 2022-05-03 18:06:32 +03:00
Bernaldo Mihasi 8ac8f9588c #7680: Support SAML Authentication 2022-04-28 12:03:01 +03:00
Konstantina Galouni a5061759b8 #7665: Save and Previous buttons updated on the Dataset Template (Admin).
1. dmp-editor.component.html & dmp-clone.component.html & dataset-wizard.component.html: On next button, moved chevron_right icon to the right side of the text.
2. dataset-profile-editor.component.scss:
   a. Removed margin-top from .dataset-profile-editor.
   b. Updated position and styling of .scroll-on-top.
   c. Added .floating-btn and .progress-min-height.
3. dataset-profile-editor.component.ts:
   a. Set showScrollOnTopButton default value to true and comment intersection stepperNavigationObserver (because title is sticky now and always visible).
   b. In method "onSubmit()" added parameter close:boolean=false, to check if the router will navigate to "/dataset-profiles" or not (button "save and continue" added).
4. dataset-profile-editor.component.html:
   a. Renamed "Back" button to "Close" and use DATASET-WIZARD.ACTIONS.CLOSE.
   b. Moved "Close", "Save"/"Update" and "Finalize" buttons aligned with title on the top right.
   c. Made title with aligned buttons sticky to top with stepper.
   d. Moved buttons "Previous"/"Next" on the down right of viewport (floating buttons).
   e. Moved scroll button and update it.
   f. Updated alignment of main content when there is no sidebar on the left.
5. i18n/: In language files added "DATASET-WIZARD.ACTIONS.CLOSE" and updated "USER-PROFILE.MERGING-EMAILS-DIALOG.TITLE" (#7662).
2022-04-20 18:25:55 +03:00
Konstantina Galouni 943f84384c #7662: Popup message when merging email accounts from the user profile | [Bug fix] Truncate title of dataset and show tooltip in dmp clone popup.
1. user-profile.component.ts: Added PopupNotificationDialogComponent when email for validating account has been sent.
2. login.component.ts: Added @Input() redirect: boolean = true; - if this is false do not redirect to home page.
3. add-account-dialog.component.html: Add parameter redirect="false" in <app-login>.
4. clone-dialog.component.html: [Bug fix] Truncate title of dataset and show tooltip in dmp clone popup.
5. i18n/: In language files added "USER-PROFILE.MERGING-EMAILS-DIALOG.TITLE" and "USER-PROFILE.MERGING-EMAILS-DIALOG.MESSAGE".
2022-04-19 10:28:35 +03:00
George Kalampokis 7c933d9f32 Refactor Zenodo deposit creation. Add model for mapping instead of relying on stringBuilder 2022-04-07 17:31:45 +03:00
George Kalampokis e373baee7e Fix critical issue when importing from xml with researchers 2022-04-07 17:31:44 +03:00
George Kalampokis 2a12f1b5be Change Dataset sorting on DMP overview and editor from last modified to last created 2022-04-05 15:29:36 +03:00
argirok b9f8d2e162 #7602 Contributors: add Croation institution title 2022-04-04 11:32:18 +03:00
George Kalampokis ae7988aa13 Make DMP Editor more safe when saving and make save pop messages more consistent 2022-04-01 18:15:07 +03:00
George Kalampokis a9199ab8f0 Make Dataset Editor more safe when saving and make save pop messages more consistent 2022-04-01 18:15:07 +03:00
George Kalampokis 5faa44c015 On a new Dataset when save is pressed it will reload the editor in order to reflect better the state of the Dataset 2022-04-01 13:54:14 +03:00
George Kalampokis 4b879eb339 On DMP Overview change the color of the finalized Datasets 2022-04-01 13:54:13 +03:00
George Kalampokis ef6e3b8d7c Sort Datasets by Modified date on DMP Overview and DMP Editor 2022-04-01 13:54:13 +03:00
Bernaldo Mihasi 7cfedf24a2 add missing enums to render styles 2022-03-31 17:49:33 +03:00
Bernaldo Mihasi db8f10ac1e fix issue with upload field in xml export 2022-03-31 17:02:27 +03:00
Diamantis Tziotzios 07f499707e pt user guide update 2022-03-29 18:39:49 +03:00
Konstantinos Triantafyllou 0bb98a4009 Merge branch 'Development' of code-repo.d4science.org:MaDgiK-CITE/argos into Development 2022-03-29 15:14:43 +03:00
Konstantinos Triantafyllou a58e926c3d Prefilling: Alphabetical order in the returning list. Autocomplete of prefilling: no search with empty value. 2022-03-29 15:14:34 +03:00
George Kalampokis afb0be5b18 Make DMP export to be more consistent with the DMP shown on the front end UI 2022-03-29 15:13:58 +03:00
George Kalampokis c41c89774b Make Dataset Validation checker to no longer be exception depedant 2022-03-29 15:13:58 +03:00
George Kalampokis 3eb27c04f6 Fix critical issue with xml import 2022-03-29 11:32:52 +03:00
George Kalampokis 72507dd1b8 Fix issue with DMP json export if it have been imported from json 2022-03-29 10:57:06 +03:00
argirok 35ea0b5d6c Merge branch 'Development' of code-repo.d4science.org:MaDgiK-CITE/argos into Development 2022-03-29 10:32:39 +03:00
argirok f1746e49ff Add Croatia in contributors 2022-03-29 10:25:04 +03:00
Konstantina Galouni 5ceea10c49 #7638: [Bug fix] dmp-finalize-dialog.component.html: Truncate text and show tooltip with full dataset title. 2022-03-28 18:00:14 +03:00
Konstantina Galouni 650e0ceb06 #7636: [Bug fix] Copy dataset from latest activity or dataset listing: Reverting some changes from commit:b6c28be3b3
1. DatasetListingModel.java: Added  field DatasetProfileOverviewModel profile, getter/setter and set profile in methods "fromDataModel()" and "toDataModel()".
2. RecentActivityModel.java: Added field DatasetProfileOverviewModel profile and getter/setter.
3. RecentDatasetModel.java: Set profile in methods "fromEntity()" and "fromDmpEntity()".
2022-03-28 17:02:57 +03:00
Bernaldo Mihasi 78895a1df1 no message 2022-03-24 09:43:13 +02:00
argirok 1f71681fa2 add link to RDA specifications - pop up and user guide 2022-03-23 16:21:14 +02:00
argirok 62b60b93a8 URLConfiguration add FilterType. When filterType is "local" the filtering is applied in argos backend - not throught the API 2022-03-23 16:03:42 +02:00
George Kalampokis 864b4bfec8 Make rda mapping more lax 2022-03-22 16:40:51 +02:00
Bernaldo Mihasi 116f9b99ea fix tags - distribution_format word export 2022-03-22 14:03:22 +02:00
Konstantina Galouni 8734d7c1ba #7528: Fixes in exporting images to document.
WordBuilder.java: Use media types instead of file extension for IMAGE_TYPE_MAP | Calculate image dimensions inside document according to its initial ratio and remove from page size the top, bottom, left, right margins.
2022-03-21 18:19:51 +02:00
Bernaldo Mihasi 835ccaab89 Merge branch 'Development' of https://code-repo.d4science.org/MaDgiK-CITE/argos into Development 2022-03-18 16:58:27 +02:00
Bernaldo Mihasi ba55881830 image export: pixels to points 2022-03-18 16:55:41 +02:00
argirok d2ac550478 add croatian language in other language files 2022-03-18 15:54:37 +02:00
argirok 0393951abe add latest changes in the croatian language file 2022-03-18 15:54:37 +02:00
argirok de5d8a9553 add croatian language file 2022-03-18 15:37:11 +02:00
George Kalampokis 3101cf0e42 Optimize image export 2022-03-17 17:08:45 +02:00
George Kalampokis 3c00d47407 Fix critical issue with dataset saving 2022-03-17 17:07:18 +02:00
Bernaldo Mihasi 65b4e58aad attach images in word export 2022-03-17 10:47:50 +02:00
Konstantina Galouni 7f9e12c731 Tiff image type added in file upload types | Language files updated.
1. dataset-profile-editor-upload-field.component.ts: Added image/tiff media type in available types for Upload.
2. en.json: Updated literals for "Upload" file field type and removed literals for "Table" field type, because the field is not ready yet.
3. de.json, es.json, gr.json, pt.json, sk.json, sr.json, tr.json: Added literals for "Upload" file field type.
2022-03-16 17:54:06 +02:00
Konstantina Galouni 9671a827df Added empty folder uploads 2022-03-16 13:14:36 +02:00
Konstantina Galouni 63e27b1d4a Remove .gitkeep file 2022-03-16 13:11:06 +02:00
Konstantina Galouni 5f89c26844 Added empty folder uploads 2022-03-16 13:06:31 +02:00
Konstantina Galouni 9ab9e6abc9 #7528: [NEW] Upload files field type - frontend.
1. dataset-profile-field-view-style.ts: Include "upload" field type.
2. field-data.ts: Export interface UploadFieldData.
3. config.json: Added new property "maxFileSizeInMB":10.
4. configuration.service.ts: Added _maxFileSizeInMB field and getter for it.
5. enum-utils.service.ts: Added cases for upload and table (not ready, to be added) field types.
6. rich-text-editor.module.ts: [Bug fix] Removed import of HttpClientModule (this is imported only once in order to work with interceptor).
7. field-editor-model.ts & dataset-profile-editor.component.ts: Added case and validators for "upload" field type.
8. dataset-profile.module.ts: Imports for upload.
9.dataset-profile-editor-composite-field.component & dataset-profile-editor-field.component: Added button for upload.
10. form-field.component: Added functionality for uploading and downloading files.
11. dataset-description-form.module.ts: Added "FileService" provider and import of "NgxDropzoneModule".
12. en.json: New literals for upload and table (to be added in other language files too).
13. New files for upload field type: file.service.ts, upload-field-data-editor-model.ts, dataset-profile-editor-upload-field.component.html, dataset-profile-editor-upload-field.component.ts, dataset-profile-editor-upload-field.component.scss
2022-03-16 13:00:03 +02:00
Konstantina Galouni 2a9d8b8296 #7528: [NEW] Upload files field type.
1. Datasets.java: In "delete()" method, call also fileManager.markAllFilesOfEntityIdAsDeleted.
2. DatasetManager.java: Added method "deleteOldFilesAndAddNew()" which is called by "createOrUpdate()", to mark as deleted files that are not used any more and save the new ones.
3. DatabaseRepository.java & DatabaseRepositoryImpl.java: Include in DAOs FileUploadDAO.
4. ModelBuilder.java & ViewStyle.java: Incluse "upload" field type.
5. field-data.ts:
	a. In "getOrdinal()" method return Integer instead of int.
	b. In "getValidations()" method added null check.
	c. In methods "fromJsonObject()" and "toMap()" added special if clauses for "upload" field type.
6. application.properties:
   a. Added property "file.storage", to set the folder where the files will be permanently saved.
   b. Changed default spring.servlet.multipart.max-file-size and pring.servlet.multipart.max-request-size to 10 MB.
7. UserInvitationController.java: Deleted a print in System.out.
8. New files for upload field type: FileUploadDao.java, FileUploadDaoImpl.java, FileUpload.java, PostgreSQLEnumType.java (necessary for the enum EntityType), FileController.java, FileManager.java, UploadData.java.
2022-03-16 12:14:08 +02:00
Konstantina Galouni 744160c84a Add in DB table UploadFile 2022-03-16 11:32:06 +02:00
George Kalampokis dc06ba9201 Allow to return DMP with no Datasets for the Dataset Editor 2022-03-15 17:58:01 +02:00
George Kalampokis 4e0402df95 Fix issue with prefilling Mapper and empty array values 2022-03-15 17:55:40 +02:00
George Kalampokis 563711eae4 Fix issue saving tags from template when the field is a textField 2022-03-15 17:52:58 +02:00
George Kalampokis d3a1e85ba9 Fix issue with keeping non Admin users on Dataset Templates 2022-03-08 13:37:26 +02:00
George Kalampokis 56499223cf Fix issue with Grant authentication 2022-03-02 17:51:41 +02:00
George Kalampokis 75fc8a1d13 Update some entities based on the Db configuration 2022-03-02 17:51:17 +02:00
George Kalampokis 608c4f3fc0 Add get Parent values on json Searcher 2022-03-02 10:56:28 +02:00
George Kalampokis 5ea8b9b964 Minor fix for visibility Rules Service 2022-03-01 17:14:02 +02:00
George Kalampokis 1e572b3214 Fix issue with prefilling mapping 2022-03-01 17:11:14 +02:00
Konstantina Galouni 1dfcad7e88 dataset-profile-editor.component.html: #7519 (Additional commit) On "viewOnly" mode - finalized dataset template, change the "Save" button (left) to "Update", make it clickable and work as the "Update" button (top right on the last step) already does. 2022-03-01 15:25:14 +02:00
George Kalampokis f373c9016e Merge remote-tracking branch 'origin/Development' into Development 2022-03-01 14:40:09 +02:00
George Kalampokis ea72f64ed4 Replace DB DOIFunder with a json config file 2022-03-01 14:37:49 +02:00
Konstantina Galouni b68ede8cd7 #7518 & #7519: [Bug fix] in Required indication in Rich Text Area fields & editable general info on dataset template new version & date with time shown in dataset templates.
1. rich-text-editor.component.scss: Css for .editor-wrapper .disabled added.
2. rich-text-editor.component.ts: New "editable" Input() field added, to allow rich text area to be disabled and not editable.
3. dataset-profile-editor.component.html:
   a. In <rich-text-editor-component> set [editable]="form.controls['description'].status !== 'DISABLED'"
   b. #7518 Show required message and css  in rich text area when there is error "required" and description is touched (not dirty)
4. dataset-profile-editor.component.ts: #7519 comment disable of form controls label (title), description and language.
5. dataset-profile-listing.component.html: #7519 Time added in created column of dataset templates.
6. dataset-editor.component.html & form-field.component.html: #7518 Show required message and css  in rich text area when there is error "required" and description is touched (not dirty).
7. clone-dialog.component.html: Replaced <textarea> with <rich-text-editor-component> for description field.
8. clone-dialog.module.ts: Import RichTextEditorModule.
9. clone-dialog.component.ts: #7519 comment disable of form group label (title)
10. styles.scss: Css for class .form-field-subscript-wrapper updated.
2022-02-28 18:08:38 +02:00
George Kalampokis c3aff92cd4 Don't include Funder if it's not in the Doi Funder Table 2022-02-28 16:28:31 +02:00
George Kalampokis 5a3f871c58 Remove various unnecessary info messages 2022-02-28 15:24:10 +02:00
Diamantis Tziotzios b04b35d62b Merge branch 'Development'
# Conflicts:
#	dmp-backend/web/src/main/resources/RDACommonStandards.txt
2022-02-25 12:19:29 +02:00
George Kalampokis 9f88bdae69 Possible fix for twitter login (part 2) 2022-02-24 15:45:19 +02:00
George Kalampokis 8d1c73deba Possible fix for twitter login 2022-02-24 15:42:36 +02:00
George Kalampokis 93aa2d36e5 Fix another issue with login 2022-02-24 10:47:12 +02:00
George Kalampokis 69a94fa236 Make email nullable field 2022-02-23 12:02:03 +02:00
George Kalampokis 94a225cf9f Add Description on Dataset Export 2022-02-22 16:39:35 +02:00
Bernaldo Mihasi 494ee47620 zenodo prefilling customizations 2022-02-22 15:53:25 +02:00
George Kalampokis 3c42ee3531 Improve tags pre-filling mapping 2022-02-22 14:15:51 +02:00
Bernaldo Mihasi 0bd08c2fac fixed tag prefilling 2022-02-22 14:00:22 +02:00
George Kalampokis 817ee9b44d Fixed ParsedTags 2022-02-22 13:39:52 +02:00
George Kalampokis f6cb4a40d2 Generalized (again) dataset prefilling 2022-02-22 11:58:39 +02:00
George Kalampokis d1eab0d019 Fix issue with not showing datasets on all version listing 2022-02-22 11:30:22 +02:00
George Kalampokis 4bdb27fcef Merge remote-tracking branch 'origin/Development' into Development 2022-02-21 17:48:52 +02:00
George Kalampokis ad8239ca5e Improve if statement on Prefilling Mapping 2022-02-21 17:48:40 +02:00
Bernaldo Mihasi 1a43c28496 add more prefilled fields 2022-02-21 17:38:16 +02:00
George Kalampokis b6c28be3b3 Optimize Dashboard's recent activity logic, removed various unused fields from Listing Models and implement toDataModel conversion logic in some models 2022-02-21 17:16:32 +02:00
George Kalampokis 71b1010ea1 Merge remote-tracking branch 'origin/Development' into Development 2022-02-18 17:52:04 +02:00
George Kalampokis d16e130dc6 Optimize general metric counter 2022-02-18 17:51:57 +02:00
George Kalampokis 11ff99fd77 Improve and generalize prefilling logic 2022-02-18 17:51:32 +02:00
argirok 3aa1c1ae59 fix issue with pub api #7326#note-5 the value was a number instaed of search 2022-02-18 17:41:33 +02:00
argirok cc926970ca Merge branch 'Development' of code-repo.d4science.org:MaDgiK-CITE/argos into Development
 Conflicts:
	dmp-frontend/src/app/ui/admin/dataset-profile/editor/components/field/dataset-profile-editor-field.component.ts
2022-02-18 17:09:34 +02:00
Konstantinos Triantafyllou e4e009f5b1 Fix after prefill datase editor behaviour - 7545 2022-02-18 15:57:17 +02:00
Bernaldo Mihasi da5ba952e1 rda export import tag bug, format preffiling fixed 2022-02-17 10:11:34 +02:00
Bernaldo Mihasi bf77a85acb Merge branch 'Development' of https://code-repo.d4science.org/MaDgiK-CITE/argos into Development 2022-02-11 13:11:40 +02:00
Bernaldo Mihasi eedcf0dfb0 fix freetext-format bug in prefilling temporarily 2022-02-11 13:09:29 +02:00
George Kalampokis fac6a93c0a Fix minor worldBuilder issue and a minor refactor 2022-02-10 13:21:21 +02:00
George Kalampokis 4740fbe8e0 Refactor visibilityRuleService 2022-02-09 15:23:16 +02:00
Konstantinos Triantafyllou 6cdf560713 Add clear input in rich text editor 2022-02-08 20:51:40 +02:00
Konstantinos Triantafyllou 26e10b1299 Add URL Validator type in validators. Free Text can have URL validator. 2022-02-08 14:31:36 +02:00
Bernaldo Mihasi 80e5e12f29 fix export-import dataset missing rda mappings 2022-02-08 14:04:26 +02:00
Bernaldo Mihasi 815fc05af6 fix missing section titles from word export 2022-02-08 09:44:55 +02:00
Diamantis Tziotzios 14550e0536 visibility rule fix on word builder 2022-02-04 18:17:51 +02:00
Diamantis Tziotzios 2b71cddc39 Fix for word generator not merging multiple visibility rule results 2022-02-04 16:38:05 +02:00
Diamantis Tziotzios e9b0bcf102 dataset description section id fix 2022-02-04 16:08:22 +02:00
argirok 93cb1fd1a7 Merge branch 'Development' of code-repo.d4science.org:MaDgiK-CITE/argos into Development 2022-02-04 15:33:31 +02:00
Diamantis Tziotzios df609fd359 #501 bug fix 2022-02-04 15:31:19 +02:00
argirok 938f98100f Merge branch 'Development' of code-repo.d4science.org:MaDgiK-CITE/argos into Development 2022-02-04 10:05:32 +02:00
Diamantis Tziotzios 85859ce078 visibiliity service performance improvements 2022-02-03 20:06:27 +02:00
Bernaldo Mihasi 048189952c format prefilling fixes 2022-02-02 14:15:33 +02:00
Konstantina Galouni bd5041e4e3 user-guide.html: Removed explanatory text next to user factsheet link. 2022-02-01 10:04:26 +02:00
George Kalampokis eaa0c67177 Add multiplicity field on Sections 2022-01-31 11:15:23 +02:00
Diamantis Tziotzios 1c318ddff5 dataset templates metric renamed 2022-01-28 16:02:07 +02:00
Bernaldo Mihasi 1967e96702 Merge branch 'Development' of https://code-repo.d4science.org/MaDgiK-CITE/argos into Development 2022-01-28 15:01:28 +02:00
Bernaldo Mihasi 125a97baed keyword-tags exported-imported fixes, prefilling more mapping 2022-01-28 14:55:52 +02:00
Konstantina Galouni 0478484d5e #7390: Admin factsheet and handbook added in user guide page - factsheet for users moved in user guide page from media-kit page.
1. media-kit.html: Deleted factsheet (moved it to user-guide.html).
2. user-guide.html: Added Admin sections with factsheet and handbook and factsheet for users.
3. assets/media-kit: Argos-Admin-Handbook_14_01_2022.pdf (handbook) & OpenAIRE_ARGOS_Administrators.pdf (factsheet) files added.
2022-01-27 17:08:20 +02:00
George Kalampokis 229555f42c Fix critical issue with prefilling mapping 2022-01-27 11:43:58 +02:00
George Kalampokis 70d37cead1 Fix wrong metrics count for Dataset Template 2022-01-27 11:05:40 +02:00
argirok 90b49194ac Merge branch 'Development' of code-repo.d4science.org:MaDgiK-CITE/argos into Development 2022-01-24 12:11:39 +02:00
George Kalampokis 01d32427c3 Add additional checks when generating world documents 2022-01-24 11:30:03 +02:00
George Kalampokis f95a704787 Make remote fetcher's value normalization more type safe 2022-01-24 11:29:06 +02:00
argirok a3c4b3c143 Merge branch 'Development' of code-repo.d4science.org:MaDgiK-CITE/argos into Development
 Conflicts:
	dmp-backend/web/src/main/java/eu/eudat/logic/proxy/fetching/RemoteFetcherUtils.java
2022-01-24 11:12:56 +02:00
argirok 858fa3ee71 #7326 - static APIs
1. Rename of "Registries" to "Metadata"
2. add apis for taxonomy, licenses, publications
3. change data repositories: from querying all registered to all of type data repository
4. add separate APIs for journals and pub repositories
2022-01-21 15:44:51 +02:00
George Kalampokis 8f56b1874b Add extra prefilling mapping fields and add better support for prefilling tags 2022-01-19 17:51:30 +02:00
George Kalampokis ce386ac047 Refactor Remote Fetcher's json parser 2022-01-19 12:12:20 +02:00
Bernaldo Mihasi 61de8c4df0 dmp import fixes 2022-01-18 11:38:24 +02:00
Konstantinos Triantafyllou 99cecbc4fb Merge branch 'Development' of code-repo.d4science.org:MaDgiK-CITE/argos into Development 2022-01-14 17:50:45 +02:00
Konstantinos Triantafyllou 6460d4087a Change gitlab links to gitea 2022-01-14 17:50:02 +02:00
George Kalampokis 64ec74363b Merge remote-tracking branch 'origin/Development' into Development 2022-01-13 13:33:13 +02:00
George Kalampokis 5a70ce7602 Fix issue of not keeping dataset template users after version update 2022-01-13 13:26:30 +02:00
Bernaldo Mihasi 641088e289 Remove local configs, commited by mistake 2022-01-12 16:31:07 +02:00
DESKTOP-4ES9U2E\aldom dc1f59d8b5 Merge branch 'Development' of https://code-repo.d4science.org/MaDgiK-CITE/argos into Development 2022-01-12 14:11:18 +02:00
DESKTOP-4ES9U2E\aldom 9d5d685ad6 ethical_issues added to DatasetRDAMapper, minor fixes to dmp docx export 2022-01-12 14:10:00 +02:00
George Kalampokis 91f98a8759 Rename sample tag 2022-01-12 11:45:57 +02:00
George Kalampokis db01f2d119 Add fixedMappings for prefilling 2022-01-12 11:43:32 +02:00
George Kalampokis 1d68b2a379 Minor improvement for dataset prefilling 2022-01-07 18:06:19 +02:00
Konstantinos Triantafyllou e1a4a64d81 Add hint text for prefilling. Change Empty to Manually 2022-01-04 14:53:49 +02:00
DESKTOP-4ES9U2E\aldom 16c124cc3d Merge branch 'Development' of https://code-repo.d4science.org/MaDgiK-CITE/argos into Development
# Conflicts:
#	dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/DatasetIdRDAMapper.java
#	dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/DatasetRDAMapper.java
#	dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/DistributionRDAMapper.java
#	dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/HostRDAMapper.java
#	dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/KeywordRDAMapper.java
#	dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/LicenseRDAMapper.java
#	dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/SecurityAndPrivacyRDAMapper.java
#	dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/TechnicalResourceRDAMapper.java
2021-12-30 11:28:15 +02:00
DESKTOP-4ES9U2E\aldom e675ad7c9d madmp changes 2021-12-29 15:24:46 +02:00
Konstantinos Triantafyllou 7962c6a587 Merge remote-tracking branch 'origin/Development' into Development 2021-12-22 16:00:07 +02:00
Konstantinos Triantafyllou c8b388b546 1. Change configuration of Zenodo to production.
2. Add default multiplicity placeholder and remove tooltip
3. Disable reordering of fields if template is finalized.
4. Create Dataset Wizard: Add prefilling functionality
2021-12-22 15:59:58 +02:00
Kristian Ntavidi 4c2e17e987 defect #7325 fix
*Fix on enterkey pressed  form submission issue in dmp editor
2021-12-22 15:29:03 +02:00
George Kalampokis 814a9b2fee Fix bad RDA Common Standard name and minor RDA mapper improvement 2021-12-20 14:19:17 +02:00
George Kalampokis 209b180158 Add missing file 2021-12-17 16:36:47 +02:00
George Kalampokis 22d3d131cc Even more improvements to RDA mapping (partial contribution by M.Aldo) and fixed issue with RDA Additional Options 2021-12-17 16:21:32 +02:00
George Kalampokis eb7d0d04fc Even more improvements to RDA mapping (partial contribution by M.Aldo) 2021-12-17 12:59:10 +02:00
George Kalampokis cff9af75c6 Merge remote-tracking branch 'origin/Development' into Development 2021-12-16 11:44:57 +02:00
George Kalampokis 316d0903c8 Improve RDA mapping (contributed by M.Aldo) 2021-12-16 11:44:34 +02:00
Konstantinos Triantafyllou feecac994d Merge remote-tracking branch 'origin/Development' into Development 2021-12-15 16:26:21 +02:00
Konstantinos Triantafyllou ade9b42d12 Add a placeholder field in multiplicity. (BackEnd)
Add a placeholder input in editor for multiplicity add new field button.
2021-12-15 16:26:06 +02:00
George Kalampokis 42c5dbb3b2 Make distribiution to parse as list 2021-12-14 18:05:10 +02:00
George Kalampokis 6964aa1d47 Fix minor typo 2021-12-14 17:07:00 +02:00
George Kalampokis ba8bae1a88 Update some maven dependencies 2021-12-14 12:09:15 +02:00
George Kalampokis a9e7ef1798 Rename prefilling get endpoint to generate 2021-12-10 16:07:00 +02:00
George Kalampokis 728ea9a24f Add prefilling backend endpoints 2021-12-10 15:37:39 +02:00
Konstantinos Triantafyllou 4425a0bb5d Merge branch 'Development' of code-repo.d4science.org:MaDgiK-CITE/argos into Development 2021-12-09 16:18:48 +02:00
Konstantinos Triantafyllou 7b00d14a70 Rename Discard button to Back in Dataset Template Editor (Admin). #7262 2021-12-09 16:18:38 +02:00
George Kalampokis 78688420d2 Fix minor issue with elastic date parsing 2021-12-09 15:11:07 +02:00
Diamantis Tziotzios 7a8375b988 Merge commit '2cb985c23c4ceda99efc78bcc8e77b3eceeb0bcf'
# Conflicts:
#	dmp-backend/elastic/src/main/java/eu/eudat/elastic/criteria/DatasetCriteria.java
#	dmp-backend/elastic/src/main/java/eu/eudat/elastic/entities/Dataset.java
#	dmp-backend/elastic/src/main/java/eu/eudat/elastic/entities/Dmp.java
#	dmp-backend/elastic/src/main/java/eu/eudat/elastic/repository/DatasetRepository.java
#	dmp-backend/elastic/src/main/java/eu/eudat/elastic/repository/DmpRepository.java
#	dmp-backend/web/src/main/java/eu/eudat/logic/managers/DataManagementPlanManager.java
#	dmp-backend/web/src/main/java/eu/eudat/logic/mapper/elastic/criteria/DmpCriteriaMapper.java
#	dmp-backend/web/src/main/java/eu/eudat/logic/utilities/documents/word/WordBuilder.java
#	dmp-backend/web/src/main/java/eu/eudat/models/data/listingmodels/DataManagementPlanListingModel.java
2021-12-09 12:18:39 +02:00
George Kalampokis 17b72cde60 Fix issue with time parsing 2021-12-08 16:42:16 +02:00
George Kalampokis 0a39e64f9a Merge remote-tracking branch 'origin/Development' into Development 2021-12-07 17:16:41 +02:00
George Kalampokis 33784f3ee2 Add missing null check up 2021-12-07 17:16:22 +02:00
Diamantis Tziotzios 2cb985c23c bug fix 2021-12-07 16:52:49 +02:00
Diamantis Tziotzios 197de17aa5 no message 2021-12-06 15:32:38 +02:00
George Kalampokis de4c430d91 Fix issue with related datasets on dashboard 2021-12-03 16:49:23 +02:00
George Kalampokis b2825c8369 Fix issue with parsing some custom auto complete sources 2021-12-02 18:03:31 +02:00
Konstantina Galouni b7d622e330 #7225: In dataset template, rename "users" to "editors" and add hint | #7226: In dataset templates, default descending sorting by "created".
1.  dataset-profile-listing.component.html: #7226: In <mat-table> added matSortActive="created" matSortDirection="desc".
2. dataset-profile-editor.component.html: #7225: Added hint in section 1.4 to make prominent when the new editors will receive an informative email.
3. assets/i18n/: #7225: In every language file, renamed "users" to "editors" (DATASET-TEMPLATE-USERS, DATASET-TEMPLATE-REMOVE-USER, DATASET-TEMPLATE-NO-USERS-YET, DATASET-TEMPLATE-VALIDATE-AND-ADD-USER) and added DATASET-TEMPLATE-USERS-HINT.
2021-11-30 12:21:03 +02:00
George Kalampokis e165259c81 Fix and improve remote fetcher caching 2021-11-29 17:26:29 +02:00
George Kalampokis 6ce7fec059 Fix critical issue with multiAutoComplete on autocomplete field types 2021-11-29 11:27:59 +02:00
George Kalampokis 19aa2bd411 Fix critical issue with public datasets 2021-11-25 16:45:29 +02:00
George Kalampokis aed23a655b When exporting DMP to xml or json get only the active/finalized datasets and not the deleted ones 2021-11-24 18:14:24 +02:00
George Kalampokis 8524bce2e0 Add support for the exported date format on wordBuilder 2021-11-24 16:41:01 +02:00
George Kalampokis fc71e95cf3 Make dataset queries to return distinct results (avoid duplicate Id issues) 2021-11-24 16:23:02 +02:00
George Kalampokis e546362f58 Fix issue with elasticsearch inconsistencies 2021-11-23 14:05:57 +02:00
George Kalampokis e8d71a8f66 Add additional null check 2021-11-23 11:44:50 +02:00
George Kalampokis 53e298f66a Fix issue with Dataset copy not working on the dataset listing 2021-11-23 11:30:08 +02:00
George Kalampokis 9dc4d52f91 Fix issue with Dataset copy status 2021-11-23 11:24:42 +02:00
Konstantina Galouni bb0c398120 #7183: In DMP invitation, return authors whose name/ email contains the query string given by user (case insensitive).
1. InvitationsManager.java:  Added method "getUsersWithCriteria()" to filter results according to "userInfoRequestItem.getCriteria().getLike()".
2. UserInvitationController.java: In method "getUsers()" added parameter "@RequestBody UserInfoRequestItem userInfoRequestItem" and call new method "invitationsManager.getUsersWithCriteria()" (instead of getUsers()).
2021-11-22 13:44:41 +02:00
Konstantina Galouni 52c7796e8e #7183: Do not query for authors (DMP invitation) until 3 letters have been typed.
1. multiple-auto-complete.component.ts:
   a. Added @Input field minLength (default 0)
   b. In method "_onInputFocus()" filter results, only if query >= minLength.
2. dmp-invitation-dialog.component.html: In <app-multiple-auto-complete>, added property [minLength]="3" (invite users to a DMP).
2021-11-22 13:36:02 +02:00
George Kalampokis c0599d5fed Fix issue of reloading externalUrls 2021-11-19 11:20:47 +02:00
George Kalampokis 38cd336bc9 Add transactional to makeFinalize on DMP and remove jackson parsing when depositing to zenodo 2021-11-18 18:27:20 +02:00
George Kalampokis 4eb15da95a Trim out hours from date picker export on xml and json(ref #7185) 2021-11-17 11:12:34 +02:00
George Kalampokis 4da99d6d83 Trim out hours from date picker export (ref #7185) 2021-11-17 10:30:31 +02:00
George Kalampokis cecc59eba6 Fix issue with file imports (ref #7184) 2021-11-16 15:55:32 +02:00
Konstantina Galouni 7a7f12b83a Fixed #7182: Required field names appearing in the warning modal.
dataset-wizard.component.ts & dmp-editor.component.ts & form-validation-errors-dialog.component.ts:
a. For 'mat-select', use placeholder instead of aria-label.
b. [Bug fix] For 'app-multiple-auto-complete' dig into 2 more levels (formControl.nativeElement.firstChild.firstChild.firstChild.children) --> reason: commit de99784b5e: moved <input> inside <mat-chip-list>.
2021-11-16 11:47:24 +02:00
George Kalampokis 7820235258 Improve html type field exports 2021-11-09 17:44:47 +02:00
Diamantis Tziotzios adeca327a2 ES lang update 2021-11-09 16:30:59 +02:00
Diamantis Tziotzios 1ec46b6840 es lang update 2021-11-09 16:23:57 +02:00
George Kalampokis 54b142000c Merge remote-tracking branch 'origin/Development' into Development 2021-11-09 14:23:30 +02:00
George Kalampokis 1a373bc6f8 Add email notification when a user is added to a Dataset Template (ref #7148) 2021-11-09 14:23:22 +02:00
Konstantina Galouni 71b8742b0f LicenseManager.java & LocalFetchManager.java & TagController.java: #7135: No case sensitivilty for licenses, managers and tags. 2021-11-09 14:17:46 +02:00
Konstantina Galouni de99784b5e In multiple and single autocomplete do not show "no results found" when user is typing | in multiple auto complete added parameter to check if "no results found" will be displayed | in multiple auto complete show full width for input & wrap title into multiple lines.
1. multiple-auto-complete.component.html:
   a. #7137: show full width for input ([matAutocompleteConnectedTo]="origin") | wrap title into multiple lines (added classes "title-subtitle-fn", "subtitle-fn", "subtitle-fn-inner" and updated classes "title-fn", "title-fn-inner").
   b. single-auto-complete.component.html: #7136: Show "No results found" when user is not typing and there are no results.
   c. added check to show this label according to "showNoResultsLabel" input parameter.
2. multiple-auto-complete.component.ts & single-auto-complete.component.ts:
   a. Added field "queryValue", input "showNoResultsLabel".
   b. increase "requestDelay" from 400 to 600ms.
3. multiple-auto-complete.component.scss: wrap title into multiple lines (added classes "title-subtitle-fn", "subtitle-fn", "subtitle-fn-inner" and updated classes "title-fn", "title-fn-inner").
4. dmp-invitation-dialog.component.html: In <app-multiple-auto-complete> added parameter [showNoResultsLabel]="false".
2021-11-09 14:14:19 +02:00
George Kalampokis a7badfd9d5 Add nexus prometheus metrics 2021-11-09 13:05:38 +02:00
George Kalampokis 58ecadd79b Fix issue with project creation 2021-11-09 10:19:20 +02:00
George Kalampokis 8899e1ba65 Merge remote-tracking branch 'origin/Development' into Development 2021-11-02 18:13:42 +02:00
George Kalampokis db4d1006c6 Fix various issues with word/PDF export 2021-11-02 18:06:00 +02:00
Konstantina Galouni ca5883724a In Dataset Template selection cut description when templates are displayed in list and show description (instead of DMP-EDITOR.DATASET-DESCRIPTION.INTRO) in template preview.
1. multiple-auto-complete.component.html: Added class "title-fn-inner" to cut the displayed description of dataset templates.
2. multiple-auto-complete.component.scss: Css for class "title-fn" updated and for class "title-fn-inner" added to cut the displayed description of dataset templates.
3. available-profiles.component.html: Added class "list-option-inner" to cut the displayed description of dataset templates.
4. available-profiles.component.scss: Css for class "list-option" updated and for class "list-option-inner" added to cut the displayed description of dataset templates.
5. dataset-preview-dialog.component.html: Added [datasetDescription]="data?.template?.description" in <app-dataset-description>
6. dataset-description.component.ts: Added in class, field "datasetDescription".
7. dataset-description.component.html: Show template datasetDescription (as html) instead of DMP-EDITOR.DATASET-DESCRIPTION.INTRO.
2021-11-02 16:50:43 +02:00
George Kalampokis 39795f177f Fix critical issue with file exports on chromium based web browsers 2021-11-02 14:50:20 +02:00
Kristian Ntavidi e46de79ec2 #7133 Multiplicity visibility rule fix
* Inherit visibility value from clone reference
2021-11-02 12:28:55 +02:00
Konstantina Galouni 7fefdd6aad Added rich text area field type for response in dataset > chapter > section > questions.
1. RichTextAreaData.java: [NEW] file to extend FieldData.
2. ModelBuilder.java: Added case for richTextarea type.
3. ExportXmlBuilderDatasetProfile.java: Added case for RICH_TEXT_AREA.
4. ViewStyle.java: Define RICH_TEXT_AREA("richTextarea").
2021-11-01 15:38:16 +02:00
Konstantina Galouni 193e7410a8 Added rich text area field type for response in dataset > chapter > section > questions.
1. dataset-profile.module.ts: Added in declarations "DatasetProfileEditorRichTextAreaFieldComponent".
2. dataset-profile-editor-composite-field.component.html: Added RichTextArea as input field type for response to a question.
3. dataset-profile-editor-composite-field.component.ts: In method "addNewInput()" added case for RichTextArea.
4. dataset-profile-field-view-style.ts & view-style-enum.ts: Added RichTextArea.
5. field-data.ts: Added interface RichTextAreaFieldData.
6. enum-utils.service.ts: In methods "toDatasetProfileFieldViewStyleString()" and "toDatasetProfileViewTypeString()" added cases for RichTextArea
7. field-editor-model.ts: Added richTextarea.
8. component-profile-editor-default-value.component.html: Added <mat-form-field> for RichTextArea (how rich text area is initialized when this type is selected as response).
9. dataset-profile-editor-field.component.html: Added <mat-option> for RichTextArea (to select it) and <app-dataset-profile-editor-rich-text-area-field-component> (to show it).
10. dataset-profile-editor-field.component.ts: Added RichTextArea case everywhere.
11. dataset-wizard.component.ts & dmp-editor.component.ts: In method "_getPlaceHolder()" added case for richTextarea.
12. dataset-description-form.module.ts: Imported RichTextEditorModule.
13. form-field.component.html: Added RichTextArea case with <rich-text-editor-component>.
14. assets/i18n/: Added DATASET-PROFILE-EDITOR.STEPS.FORM.FIELD.FIELDS.FIELD-RICH-TEXT-AREA-TITLE, DATASET-PROFILE-EDITOR.STEPS.FORM.FIELD.FIELDS.FIELD-RICH-TEXT-AREA-PLACEHOLDER and DMP-EDITOR.TYPES.DATASET-PROFILE-FIELD-VIEW-STYLE.RICH-TEXT-AREA.
15. field-data/rich-text-area-field-data-editor-model.ts & field-type/rich-textarea/: [NEW] Files for Rich Text Area field type.
2021-11-01 15:30:21 +02:00
Konstantina Galouni 03009edaa3 Use <rich-text-editor-component> when html editor is needed - replace in dataset template descriprion, section & question descriptions.
1. dataset-profile-editor-section.component.html & dataset-profile-editor.component.html & dataset-profile-editor-composite-field.component.html: Replace <angular-editor> with <rich-text-editor-component> (custom common component when rich text editor is set).
2. dataset-profile-editor-section.component.ts & dataset-profile-editor.component.ts & dataset-profile-editor-composite-field.component.ts: Remove AngularEditorConfig (this is set in RichTextEditorComponent).
3. dataset-profile.module.ts: Instead of AngularEditorModule, import RichTextEditorModule (common component where rich text editor is set).
4. styles.scss: Moved css for angular editor to dedicated css file (src/app/library/rich-text-editor/rich-text-editor.component.scss) and keep here only "form-field-subscript-wrapper" class.
2021-11-01 15:10:00 +02:00
Konstantina Galouni 7bdfcb70af Created common component for rich text editor configuration & added rich text for dmp and dataset description.
1. library/rich-text-editor: [NEW] Common component which configures a rich text editor.
2. dataset-editor.component.html & main-info.component.html: Use <rich-text-editor-component> to allow rich text in dataset and dmp description.
3. dataset-overview.component.html & dmp-overview.component.html: Show dataset and dmp description as innerHTML.
4. dataset.module.ts & dmp.module.ts: Imported RichTextEditorModule.
2021-11-01 14:45:02 +02:00
George Kalampokis 6ff9ea2d05 When exporting to word/PDF HTML styled text, make <br> tag to be parsed once 2021-11-01 11:49:20 +02:00
George Kalampokis 0010ad846a When exporting to word/PDF HTML styled text, it will be preperly indented and it can read the change line character 2021-11-01 11:39:43 +02:00
George Kalampokis 5a66754cbd Make DMP language Mandatory and set default language to English 2021-10-29 15:08:58 +03:00
George Kalampokis fd26e2a742 Fix issue with DMP index not updating after a new user is invited 2021-10-27 18:16:44 +03:00
George Kalampokis 900a377d5f Fix critical issue with RDA Comoon Standard text load 2021-10-26 17:54:58 +03:00
George Kalampokis 93baa4a281 Add support for more html tags on the Document/PDF exporter 2021-10-26 16:21:28 +03:00
George Kalampokis 2c29469590 Allow to configure the path of the email templates (ref #7122) 2021-10-25 16:06:08 +03:00
Kristian Ntavidi ae0618d5be Fix multiplicty bug on Admin Template Editor. 2021-10-20 13:41:04 +03:00
George Kalampokis 8e2fea2ea0 Merge remote-tracking branch 'origin/Development' into Development 2021-10-20 12:42:21 +03:00
George Kalampokis e66362ec38 Add prometheus metric for the number of grants used based on DMP status (ref #6462) 2021-10-20 12:42:08 +03:00
George Kalampokis 35c4ec821e Add a special query logic with group by and count 2021-10-20 12:40:44 +03:00
Konstantinos Triantafyllou 81a5964a55 Remove google client id, commited by mistake 2021-10-19 11:50:24 +03:00
Konstantinos Triantafyllou 7a3f3f2fd5 Add reordering for inputs in a dataset template 2021-10-19 11:08:38 +03:00
Konstantina Galouni eeb5479a98 form-composite-title.component.html: [Bug fix] Show "view more/less" functionality only if there is extendedDescription. 2021-10-15 13:56:45 +03:00
Diamantis Tziotzios c3f28936af Dockerfile update 2021-10-13 18:47:41 +03:00
Diamantis Tziotzios 887789d9e5 Dockerfiile update 2021-10-13 18:17:53 +03:00
George Kalampokis e8366aa61a Fix critical issue with dataset pagination 2021-10-13 17:50:15 +03:00
George Kalampokis 942782fe3c Use metrics predifined names instead of plain Strings 2021-10-13 17:49:32 +03:00
George Kalampokis d0d918682b Refactor remote fetcher and made it independent of sun libraries 2021-10-13 17:48:46 +03:00
George Kalampokis 65644c3a35 Add extra sanity checks 2021-10-13 17:47:50 +03:00
George Kalampokis 045dd51014 Prevent the selection of an already selected dataset Templates 2021-10-13 16:10:56 +03:00
George Kalampokis 32e299fc45 Merge remote-tracking branch 'origin/Development' into Development 2021-10-13 11:49:17 +03:00
Konstantina Galouni f9bf688085 dataset-wizard.component.html: Added in dropdown list "Save & Continue" option (same as Save). | assets/i18n/: Added DATASET-WIZARD.ACTIONS.SAVE-AND-CONTINUE in language files. 2021-10-12 18:53:07 +03:00
George Kalampokis a4fef8e462 Refactor PDF conversion 2021-10-12 18:17:16 +03:00
Konstantina Galouni 198061aeaa Description boxes in admin forms replaced with rich text editor <angular-editor>.
1. dataset-profile-editor-composite-field.component.ts & dataset-profile-editor-section.component.ts & dataset-profile-editor.component.ts: Initialize AngularEditorConfig.
2. dataset-profile-editor-composite-field.component.html & dataset-profile-editor-section.component.html & dataset-profile-editor.component.html: Use <angular-editor> in description.
3. multiple-auto-complete.component.html & dataset-profile-listing.component.html & form-section.component.html: Show description as html.
4. dataset-profile.module.ts: Imported HttpClientModule, AngularEditorModule (needed for <angular-editor>).
5. available-profiles.component.html: Show description as html, under the Dataset Template title, not as tooltip (matTooltip does not receive html).
6. available-profiles.component.ts: Added styleUrls: ['available-profiles.component.scss'].
7. available-profiles.component.scss: [NEW] Added css for class "list-option" to cut description if too long.
8. form-composite-title.component.html: Show description and extendedDescription as html | Add view more/less functionality to show/hide extendedDescription.
9. form-composite-title.component.ts: Added "public showExtendedDescription: boolean = false;" field.
10. form-composite-title.component.scss: Added css for "more" class, to make "view more/less" seem like link.
11. assets/i18n/: In language files added DATASET-EDITOR.QUESTION.EXTENDED-DESCRIPTION.VIEW-MORE (-LESS).
12. assets/styles.css: Added css for <angular-editor>, to be similar to the other text areas and forms.
2021-10-12 18:14:22 +03:00
George Kalampokis 1a821179db Even more Fixes over dashboard's sorting 2021-10-12 18:06:14 +03:00
George Kalampokis 6de12fd0e8 Fix issue with RDA Common Standards 2021-10-12 18:05:38 +03:00
George Kalampokis 29919f981a Fix issue with recent activity sorting 2021-10-12 15:41:20 +03:00
George Kalampokis 7fe84d7de5 Eliminate Duplicate user when making a new version 2021-10-08 16:52:01 +03:00
George Kalampokis a3af8ce3a5 Merge branch 'spring-update' into Development
# Conflicts:
#	dmp-backend/web/src/main/java/eu/eudat/controllers/Admin.java
#	dmp-backend/web/src/main/java/eu/eudat/controllers/Login.java
#	dmp-backend/web/src/main/java/eu/eudat/controllers/UserGuideController.java
#	dmp-backend/web/src/main/java/eu/eudat/logic/managers/DataManagementPlanManager.java
#	dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetManager.java
#	dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetProfileManager.java
#	dmp-backend/web/src/main/java/eu/eudat/logic/managers/MetricsManager.java
2021-10-08 16:04:52 +03:00
George Kalampokis 0e97e6c0a8 Fix issues with external sources 2021-10-08 12:14:09 +03:00
George Kalampokis 1d48ee81b9 Add additional null check for Elastic's Dmp Repository 2021-10-08 11:18:22 +03:00
George Kalampokis 9919886c26 Fix issues with dataset sorting on Dashboard with Elasticsearch 2021-10-08 11:02:56 +03:00
George Kalampokis 77d50773b8 Merge branch 'improved_queries' into Development
# Conflicts:
#	dmp-backend/web/src/main/java/eu/eudat/logic/managers/DataManagementPlanManager.java
2021-10-07 11:05:19 +03:00
George Kalampokis 0506f2d3a3 Merge remote-tracking branch 'origin/Development' into Development 2021-10-06 18:17:47 +03:00
George Kalampokis 524cededb6 Fix issue when exporting to docx/pdf 2021-10-06 18:16:39 +03:00
Kristian Ntavidi 74ec2126f0 Visibility Rules fix
* Reduce sourceValue visibility value based on logic.
2021-10-06 16:32:06 +03:00
George Kalampokis cb1d7b5340 Replace altChunk html to docx with direct parsing (manual) 2021-10-06 15:15:41 +03:00
George Kalampokis ef5e6a92e0 Fix critical issue with Dataset Template xml import 2021-10-06 15:02:21 +03:00
George Kalampokis 70538850a2 Merge remote-tracking branch 'origin/Development' into Development 2021-10-06 14:40:39 +03:00
George Kalampokis 407961e137 Fix critical issue with DMP queries without elastic 2021-10-06 14:21:54 +03:00
Kristian Ntavidi 907ad14269 #7028 Text area fields minRows defaults to 3 2021-10-06 12:25:44 +03:00
George Kalampokis 3ec942cfa7 Add support for Html text when exporting to docx (alpha) 2021-10-05 17:58:46 +03:00
George Kalampokis 54c862ecbb Minor metrics refactor 2021-10-05 13:09:02 +03:00
George Kalampokis b66bde871a Fix issue of new DMPs not showing on the user's listing with elasticsearch active (#7010) 2021-10-05 12:56:20 +03:00
George Kalampokis 67b10528e3 Fix db creation scripts for linux 2021-10-01 12:37:20 +03:00
George Kalampokis 0886424b29 Fix db creation scripts for linux 2021-10-01 12:36:43 +03:00
George Kalampokis 91729bab6d Optimize queries 2021-09-30 18:02:53 +03:00
George Kalampokis defac6afcc Fix issue with date formats on RDA import 2021-09-28 14:17:03 +03:00
George Kalampokis fc7c39081a Improve configuration loader 2021-09-28 14:15:50 +03:00
George Kalampokis 99e4d231c2 Possible patch some leaks 2021-09-27 18:14:21 +03:00
George Kalampokis 06364873ca Fix issue with unordered multiplicity fields 2021-09-27 18:11:55 +03:00
Kristian Ntavidi faeb7e0d62 improvement on computing ordinal on mutliplicity fields 2021-09-27 16:25:17 +03:00
Diamantis Tziotzios 9cac208546 upgrade to Angular 12 2021-09-24 21:52:14 +03:00
Kristian Ntavidi d229189783 Visibility rule service refactor.
* Take into account other dependencies
* OR and AND logic support
2021-09-20 21:34:20 +03:00
Kristian Ntavidi b40e30ee60 Fix issue with visibility rules on multiplicity fields.
* Append new visibility rules on creation of multiplicity item
* Compute visibility rules for multiplicityItems on loading data (Researchers page)
2021-09-20 14:34:09 +03:00
Kristian Ntavidi ba865c9708 Dataset Editor (Researchers Page). Incrementing ordinals on multiplicity items. 2021-09-17 12:12:48 +03:00
George Kalampokis 1ae2788453 Fix various issues with spring update 2021-09-14 17:43:02 +03:00
Kristian Ntavidi 52c26cd864 Admin Dataset editor guard fix. 2021-09-09 09:09:27 +03:00
George Kalampokis a805e823e5 Merge branch 'spring-update' of https://gitlab.eudat.eu/dmp/OpenAIRE-EUDAT-DMP-service-pilot into spring-update
# Conflicts:
#	dmp-backend/web/src/main/resources/config/application.properties
2021-09-07 11:05:39 +03:00
George Kalampokis 0257ff713b Remove the actuator from the prometheus path 2021-09-07 10:29:57 +03:00
George Kalampokis 6f92409f1e Update Spring boot framework to version 2.5.2 2021-09-07 09:42:31 +03:00
Kristian Ntavidi 0780c629c9 about how it works text updates 2021-08-30 20:57:21 +03:00
George Kalampokis 93ba59ef5a Fixed word parsing issue with datasetIdentifier and validation fields 2021-08-27 12:58:06 +03:00
George Kalampokis bfbc271b56 Fix elastic dataset consistency (impacts memory) 2021-08-24 17:05:28 +03:00
George Kalampokis c964af25b5 Fix critical issue with public dataset query 2021-08-23 11:48:29 +03:00
Diamantis Tziotzios 6bc5aaed25 pt user guide update 2021-08-16 18:36:10 +03:00
George Kalampokis 5de811a76d Vastly improve and optimize DMP and Dataset Queries (and with elastic) 2021-08-04 18:38:49 +03:00
George Kalampokis ce8b49deb0 Fix issue with DMP disappearing when editing Datasets 2021-08-03 12:15:54 +03:00
George Kalampokis 6ccdeddf65 Merge remote-tracking branch 'origin/Development' into Development 2021-08-02 18:31:21 +03:00
George Kalampokis 4e87bd270e Improve error handling when user has no zenodo access token 2021-08-02 18:31:10 +03:00
Diamantis Tziotzios e185e94684 pt userguide update 2021-07-30 11:15:54 +03:00
George Kalampokis 6a2099c2b9 Add user role check up when it's getting dataset profiles for the manager listing 2021-07-26 10:28:58 +03:00
George Kalampokis f01e89799b Merge remote-tracking branch 'origin/Development' into Development 2021-07-23 18:29:40 +03:00
George Kalampokis 9da0f4e776 Allow to re insert users on Dataset profile 2021-07-23 18:27:49 +03:00
Kristian Ntavidi a7abe6c2d8 minor fix 2021-07-23 17:09:12 +03:00
Kristian Ntavidi 06961c0254 Deactivate Guard on dataset template editor 2021-07-23 17:03:29 +03:00
Kristian Ntavidi 1be8e8e8f9 Fix side actions on template editor z-index issue 2021-07-23 14:27:40 +03:00
Kristian Ntavidi 501a7175e8 Users on template editor 2021-07-23 14:16:59 +03:00
Kristian Ntavidi d8a2ad281c Animations on admin template editor (partial) 2021-07-23 13:16:40 +03:00
Kristian Ntavidi 59e3af2fa0 Fix adding dataset dropdown on datasets listing
* Get timecreated from backend
* Protect front from crashing when creationTime is not provided
2021-07-23 12:05:07 +03:00
Kristian Ntavidi 4c22799f91 Bug fixes on dataset templates editor Admin (partial)
* Make use of observables instead of setTimeouts
* Remove not nessecary calculations
2021-07-23 11:23:35 +03:00
Kristian Ntavidi 1d397d28cf Add ability to scroll on table of contents (dataset templates admin) 2021-07-21 16:41:38 +03:00
Kristian Ntavidi 008b6321ea Error dialog component on dataset wizard (update)
* On single error case, show it indepentently (not as list item)
2021-07-21 12:25:13 +03:00
Kristian Ntavidi a212f4e5a1 Subtle border on invalid emails inputs (in invitation dialog)
* Mutli auto compolete component extended
2021-07-21 12:16:22 +03:00
George Kalampokis 7ab5c56072 Merge remote-tracking branch 'origin/Development' into Development 2021-07-21 11:17:51 +03:00
George Kalampokis 596550d3de Extend user token duration to 10 days 2021-07-21 11:17:32 +03:00
Kristian Ntavidi 1b731fdf20 Changes on multi-auto complete component.
* Give precedence on autocomplete option-selected over onblur.
* Invitation dialog on blur commit given email till that time, on emails list.
2021-07-21 11:09:13 +03:00
Kristian Ntavidi 5ddb7df2b4 Finalize dataset from dataset editor.
* Finalize dataset from dataset editor.
* Finalize dataset on dataset overview redirects you to dataset editor
* Grouping save action buttons
2021-07-20 13:32:40 +03:00
George Kalampokis c91059c854 Get latest available dataset profile instead of the version that is selected on the DMP 2021-07-20 12:55:52 +03:00
George Kalampokis 75d9726bca Fix issue with xml export of autocomplete and multiautocomplete fields 2021-07-20 12:23:55 +03:00
George Kalampokis 15af25e292 Fix issue saving array of data from dataset 2021-07-20 11:37:28 +03:00
George Kalampokis 6fd81a9809 Merge remote-tracking branch 'origin/Development' into Development 2021-07-19 18:35:00 +03:00
George Kalampokis 016acaaa0f When counting organizations for the user count only the active ones 2021-07-19 18:34:29 +03:00
George Kalampokis 4b3468d513 Fix issue when validating dataset for finalization (needs rework) 2021-07-19 18:31:16 +03:00
George Kalampokis 1512d0c424 If BooleanDecision has no value thenm return null when exporting to docx and pdf 2021-07-19 14:08:48 +03:00
Kristian Ntavidi ee0c7df170 Pt translations on dataset-profiles-editor / listing 2021-07-15 17:12:17 +03:00
Kristian Ntavidi c33ffc153b Try translate finalize errors messages on Pt. 2021-07-13 10:42:36 +03:00
Kristian Ntavidi e793f10828 Merge branch 'Development' of https://gitlab.eudat.eu/dmp/OpenAIRE-EUDAT-DMP-service-pilot into Development 2021-07-09 13:03:16 +03:00
Kristian Ntavidi cce9df8eb7 Fixes
* Feedback message on error saving dataset.
* Unsubscribe backend calls on dashboard component destroy.
2021-07-09 13:03:09 +03:00
Diamantis Tziotzios ad245dde5d Merge branch 'Development' of https://gitlab.eudat.eu/dmp/OpenAIRE-EUDAT-DMP-service-pilot into Development 2021-07-07 20:40:24 +03:00
Diamantis Tziotzios b8b78f6653 user guide path fix
(cherry picked from commit bd15b1e2c7)
2021-07-07 20:40:00 +03:00
Diamantis Tziotzios 895dbcf098 Revert "user guide path fix"
This reverts commit bd15b1e2c7.
2021-07-07 20:39:41 +03:00
Diamantis Tziotzios bd15b1e2c7 user guide path fix 2021-07-07 20:39:22 +03:00
Kristian Ntavidi 6e21ad127d Language Pt fix 2021-07-07 08:17:48 +03:00
George Kalampokis d603fed61f When new version is made keep all it's contributors 2021-07-06 16:56:37 +03:00
George Kalampokis 1c22ed2321 Add extraProperties for xml export/import and restore pdf export for zenodo deposit 2021-07-06 16:33:46 +03:00
George Kalampokis faabd343a9 Improve error handling
(cherry picked from commit d5cd90814a)
2021-07-06 13:41:09 +03:00
George Kalampokis e5a929f259 Fix issues with xml import and issues with zenodo deposit
(cherry picked from commit efe177f0b1)
2021-07-06 13:40:15 +03:00
George Kalampokis d5cd90814a Improve error handling 2021-07-06 13:33:58 +03:00
George Kalampokis efe177f0b1 Fix issues with xml import and issues with zenodo deposit 2021-07-06 12:58:38 +03:00
George Kalampokis d1fc10854c Fix issue with zenodo depositions
(cherry picked from commit c57e10a033)
2021-07-06 12:15:49 +03:00
George Kalampokis cfff87b7d0 Merge remote-tracking branch 'origin/Development' into Development 2021-07-06 10:29:33 +03:00
George Kalampokis c57e10a033 Fix issue with zenodo depositions 2021-07-06 10:29:14 +03:00
Kristian Ntavidi 684d784d1a Routing updates.
* Start new dmp Button navigates you to home.
* Login page redirects you to home page if user is already logged in.
2021-07-06 09:46:27 +03:00
Kristian Ntavidi 3e98297da9 Pt language updates. 2021-07-06 09:37:41 +03:00
George Kalampokis 2537923dc0 Fix various critical issues
(cherry picked from commit 244bfa5c54)
2021-07-05 11:10:11 +03:00
George Kalampokis 244bfa5c54 Fix various critical issues 2021-07-02 14:02:32 +03:00
George Kalampokis c1adbe283a Improvements over MS Word Document export
(cherry picked from commit 4e3b98f1ff)
2021-06-30 18:48:20 +03:00
George Kalampokis 1c365a191e Minor Update
(cherry picked from commit 295750684f)
2021-06-30 18:48:13 +03:00
George Kalampokis 4e3b98f1ff Improvements over MS Word Document export 2021-06-30 17:17:17 +03:00
George Kalampokis 295750684f Minor Update 2021-06-30 14:09:29 +03:00
Kristian Ntavidi 82c5586067 Dataset and dmp overview fix.
* Fix edit issue when multiple users have ownership of the same dmp/dataset.

(cherry picked from commit fd9d35aad3)
2021-06-30 13:38:53 +03:00
Kristian Ntavidi 57d1cf89b4 Dataset overview fix. Actions on unlocked dataset. 2021-06-30 13:01:33 +03:00
George Kalampokis 04f230dff1 Fix critical issue with dataset's copy dropdown
(cherry picked from commit d1e3aae36d)
2021-06-30 12:52:32 +03:00
George Kalampokis d1e3aae36d Fix critical issue with dataset's copy dropdown 2021-06-30 12:51:12 +03:00
George Kalampokis f9814d3302 Update Spring boot framework to version 2.5.2 2021-06-29 14:33:57 +03:00
George Kalampokis 72d88d9db4 Fix listing issues and improve elastic query
(cherry picked from commit dcd7f24cac)
2021-06-29 14:25:38 +03:00
George Kalampokis dcd7f24cac Fix listing issues and improve elastic query 2021-06-29 11:45:20 +03:00
George Kalampokis 143a4c0214 Reduce severity
(cherry picked from commit 03b7699973)
2021-06-25 19:31:45 +03:00
George Kalampokis 03b7699973 Reduce severity 2021-06-25 19:29:51 +03:00
George Kalampokis e7e5ed02b3 Add query db fallback for DMPs
(cherry picked from commit d1df83f689)
2021-06-25 19:28:29 +03:00
George Kalampokis d1df83f689 Add query db fallback for DMPs 2021-06-25 19:27:02 +03:00
George Kalampokis b5fcc5971e Fix various library issues with postgres and elastic
(cherry picked from commit 4a4042d621)
2021-06-25 12:46:09 +03:00
George Kalampokis 4a4042d621 Fix various library issues with postgres and elastic 2021-06-25 12:32:58 +03:00
Diamantis Tziotzios c16c35225f Merge branch 'Development' 2021-06-25 08:50:27 +03:00
Kristian Ntavidi d878562d3d Ui fixes on landpage (static pages) 2021-06-24 16:00:21 +03:00
Kristian Ntavidi e486169ae5 EOSC section added in index page (static page)
**Missing one link
2021-06-24 12:46:31 +03:00
George Kalampokis a48ac5fa0f When exporting external dataset fields, export and it's type 2021-06-23 17:29:45 +03:00
Kristian Ntavidi ef7de5efe3 External Dataset type (newly added field). 2021-06-23 11:50:10 +03:00
Kristian Ntavidi 1a6df44eeb Add deactivate guards in dataset editor and dmp editor. 2021-06-23 10:54:05 +03:00
George Kalampokis 25286603c8 Merge remote-tracking branch 'origin/Development' into Development 2021-06-22 18:30:08 +03:00
George Kalampokis 11b4d462cf Add type to External Datasets Data 2021-06-22 18:29:58 +03:00
Kristian Ntavidi d90ab00833 DMP Profile listing. Restyle import dialog 2021-06-22 17:51:00 +03:00
Kristian Ntavidi ad0853dc20 DMP profile editor. Basic restyle 2021-06-22 16:48:46 +03:00
Kristian Ntavidi e2f262b385 Popup dialog on locked DMP/Datasets overview / editors 2021-06-22 14:12:58 +03:00
Kristian Ntavidi c9b376f76c Restyle DMP profile listing (Admin Pages) 2021-06-22 13:00:58 +03:00
Kristian Ntavidi 9cc765e7f5 Merge branch 'Development' of https://gitlab.eudat.eu/dmp/OpenAIRE-EUDAT-DMP-service-pilot into Development 2021-06-17 19:12:57 +03:00
Kristian Ntavidi 72b18b7770 Remove mat select ellipses. Wrap text below. 2021-06-17 19:12:47 +03:00
George Kalampokis 42a22b4a65 Improve external researcher support 2021-06-17 18:48:18 +03:00
George Kalampokis 885f897adc Fix issue when updating researchers from DMP 2021-06-17 18:01:47 +03:00
George Kalampokis e94944abb1 Merge remote-tracking branch 'origin/Development' into Development 2021-06-17 13:58:36 +03:00
George Kalampokis 78186fb96d If the invitation is accepted then send the user to the accepted DMP if the user click again the link from the email 2021-06-17 13:58:28 +03:00
Kristian Ntavidi 92b60c7c90 DMP editor. Show popup dialog when dmp is locked. 2021-06-17 12:52:01 +03:00
Kristian Ntavidi 9161dbda56 UI fixes and bug fixes
* Member of dmp cannot see dmp editor anymore. Redirects to overview
* Hide percentage bar in dmp editor when editor is disabled (when finalized or locked)
* Change font sizes on Resource page (static pages)
* Fix issue of indeterministic disabled on DMP editor.
2021-06-17 12:25:46 +03:00
Kristian Ntavidi 22ddc1311f Admin Template Edtor. UI fix: toolbox scroll till the end of the question card. 2021-06-16 16:10:48 +03:00
Kristian Ntavidi 19bb843fe6 Merge branch 'Development' of https://gitlab.eudat.eu/dmp/OpenAIRE-EUDAT-DMP-service-pilot into Development 2021-06-16 15:52:47 +03:00
Kristian Ntavidi f4591549c2 Admin Dataset Template Editor and Dataset profile editor UI improvemenets.
[Admin Template Editor]:
* Add question underneath each question and in the table of contents
* "Make conditional question" changed position
* Small restyles in required toggler and question preview component
* Input icons update
* Scrolling on top of question

[Dataset Editor]:
* Show asterisk on required fields

Pt language updates
2021-06-16 15:52:39 +03:00
Diamantis Tziotzios 6c6cc061fc Merge branch 'Development' of https://gitlab.eudat.eu/dmp/OpenAIRE-EUDAT-DMP-service-pilot into Development 2021-06-15 15:43:56 +03:00
Diamantis Tziotzios d3d6c4a6aa prometheus fix 2021-06-15 15:43:45 +03:00
George Kalampokis 1eb9aadaea IGNORE ME 2021-06-15 11:25:11 +03:00
Kristian Ntavidi 54b2661ebd Ui fixes.
* Fix issue on table of contents in dataset editor. Invalid fields that are hidden via visibility rules, are not computed in in the validity of the tocEntry.
2021-06-15 09:58:51 +03:00
George Kalampokis c193dd2c09 Fix numbering issue with word and PDF export 2021-06-14 18:01:29 +03:00
George Kalampokis e615c403d3 Final fix over storing array of data from Datasets 2021-06-14 18:01:04 +03:00
George Kalampokis dcf88479bd Allow to store and retrieve combobox multivalues with commas 2021-06-14 14:21:27 +03:00
Kristian Ntavidi add23dab2f Grant search fix.
* Change the way the single auto complete refreshes.
* Remove some unnecessary code.
2021-06-14 01:46:29 +03:00
Kristian Ntavidi d9826095bc Dmp editor. Fix issue on selecting grant after search. 2021-06-11 15:35:47 +03:00
Kristian Ntavidi bb80cfd300 Merge branch 'Development' of https://gitlab.eudat.eu/dmp/OpenAIRE-EUDAT-DMP-service-pilot into Development
# Conflicts:
#	dmp-frontend/src/assets/i18n/tr.json
2021-06-11 12:20:57 +03:00
Kristian Ntavidi a3c9df87df Add validate button on Dataset Wizard. Show in red invalid fieldsets in table of contents 2021-06-11 12:16:50 +03:00
Diamantis Tziotzios ef3c2e4e83 lang update 2021-06-08 20:26:45 +03:00
George Kalampokis be311f238b Add visibility rules checkup on dataset finalize checkup 2021-06-01 12:30:01 +03:00
Diamantis Tziotzios f5d266554b Merge commit 'ca91c14114b8994d41fdf2b97fc6d1a4d82ffa4e' 2021-05-19 14:22:47 +03:00
Diamantis Tziotzios 5483847754 culture service workaround 2021-05-19 14:22:03 +03:00
George Kalampokis 8a5f9d3536 Add support for nested sections 2021-05-18 13:45:41 +03:00
Diamantis Tziotzios ca91c14114 pt lang update 2021-05-12 13:56:14 +03:00
Kristian Ntavidi 29ad55b3f8 Invitation fix.
Fixing  issue when user opens invitation without being logged id.
2021-05-11 11:50:25 +03:00
George Kalampokis b76a787972 Hide grants without any active dmp 2021-05-10 17:17:08 +03:00
George Kalampokis 95f8eb15c9 Even more fixes for imports and exports 2021-05-10 16:55:44 +03:00
George Kalampokis b13f36afe8 Merge remote-tracking branch 'origin/Development' into Development 2021-05-10 16:10:27 +03:00
George Kalampokis 6f658db27f Fix issues with import and export of dataset template 2021-05-10 16:10:18 +03:00
Kristian Ntavidi 9eb1c12afd DMP Overview. Provide user feedback of invalid datasets on finalize. Prevent user from submitting invalid Datasets. 2021-05-10 15:51:10 +03:00
George Kalampokis 1d5befaf6a Add new endpoint in order to validate datasets 2021-05-10 13:40:08 +03:00
George Kalampokis 15c3a6fcb5 Export properly the data for each field type on dataset templates 2021-05-07 14:38:21 +03:00
George Kalampokis af432cf329 Fixed issue with multiplicity fields 2021-05-06 18:58:55 +03:00
Kristian Ntavidi c157ecc4e7 Admin template editor. Fix invalid visibility rules case. 2021-05-05 15:50:20 +03:00
Kristian Ntavidi 9ccae4d2c7 Admin template Editor. Temporary patch. Make value unrequired in visibility rules. 2021-05-05 13:04:30 +03:00
Diamantis Tziotzios ae2168b2d7 bug fix regarding template import 2021-05-05 11:20:43 +03:00
Kristian Ntavidi b825a80e61 DMP Editor patch: Form is not invalid invalid anymore when change from createnew funder to existing 2021-04-30 16:42:59 +03:00
Kristian Ntavidi b82398d97e DMP Editor. Organizations identifier query params patch. 2021-04-30 16:14:13 +03:00
George Kalampokis a155f2cbec Allow to search organizations based on reference 2021-04-30 15:25:31 +03:00
George Kalampokis fe8a0ff109 Fix vaious issues with organizations 2021-04-30 14:45:00 +03:00
Kristian Ntavidi a8f75aafb9 DMP Editor. Prefixing queries on searching existing identifiers. 2021-04-30 14:34:28 +03:00
George Kalampokis 8a7cfab3b8 Fix various issues 2021-04-30 13:10:11 +03:00
George Kalampokis cdae5ae574 Fix minor issues when creating a researcher 2021-04-30 11:08:06 +03:00
Kristian Ntavidi b486a27e48 Unique identifiers(in references) on on researchers, organisations, funders, grants, projects (frontend) ( !! Needs configurationw with backend ). Backend error messages translate to PT. 2021-04-30 10:57:13 +03:00
George Kalampokis a28e26e594 Allow to query using exact reference 2021-04-29 11:58:03 +03:00
George Kalampokis 8f2e0539d5 Merge remote-tracking branch 'origin/Development' into Development 2021-04-29 11:29:00 +03:00
George Kalampokis df5281eeaa Allow to manually add reference 2021-04-29 11:28:46 +03:00
Kristian Ntavidi 57910d8271 Sort languages alphabetically 2021-04-28 12:16:08 +03:00
Kristian Ntavidi e9e953aee3 Bug fixes and language updates.
Admin Templates listing table fix. When a filter is applied, gets you to the first page. Total templates number fix .
Admin Template Editor. Enable editing Description in finalized templates.
Dataset wizard. Fix NaN in total progress when finalized. (remove all edit/save actions).
Portuguese language update.
2021-04-27 23:33:30 +03:00
George Kalampokis 501ca9fcc2 Put elastic search index into the configurations 2021-04-27 16:53:15 +03:00
George Kalampokis 77bcb95ad7 Fix issues when cloning dataset templates 2021-04-27 10:38:20 +03:00
George Kalampokis e5264780c3 When finalize DMP properly finalize it's datasets first 2021-04-21 18:21:52 +03:00
Diamantis Tziotzios ede8bbf48e metrics update 2021-04-15 18:30:16 +03:00
Kristian Ntavidi c6b8ad5639 Adrim template editor. Save and discard buttons on the left side. 2021-04-14 09:57:30 +03:00
Kristian Ntavidi 66d9f41081 Admin template editor. Move save/delete/update buttons on top. Add "Back to top" button. 2021-04-13 16:27:29 +03:00
George Kalampokis 961a4df270 Add total Users metric 2021-04-13 12:19:55 +03:00
Kristian Ntavidi e801bbf2e2 User Dataset Editor. Table of contents loads properly on saved template. Table of contents and tempalte description have the same visibilityRules service. 2021-04-13 11:19:09 +03:00
George Kalampokis 12a1f7da12 Merge remote-tracking branch 'origin/Development' into Development 2021-04-13 10:46:14 +03:00
George Kalampokis 3d9a2b2331 Fix various issues with various template fields 2021-04-13 10:46:06 +03:00
Kristian Ntavidi 198eb838c5 User Dataset Editor. Pages/ Sections/Fieldsets that have all inputs hidden, are hidden as well (Both on template and table of contents). 2021-04-12 19:08:09 +03:00
George Kalampokis 4a1f260849 Merge remote-tracking branch 'origin/Development' into Development 2021-04-12 12:12:36 +03:00
George Kalampokis 48730e7937 Fix issue when accessing dataset profile users when there are no users. 2021-04-12 12:12:21 +03:00
Kristian Ntavidi d038f42021 Users listing component. Fix user roles chips 2021-04-12 12:05:12 +03:00
George Kalampokis c27ff1d446 Add missing metrics counters and made the metrics init task scheduled (per Hour) (ref #294) 2021-04-12 12:00:07 +03:00
George Kalampokis 27bf69268e Fix issue when creating new dataset profile 2021-04-12 10:49:22 +03:00
George Kalampokis aca31dc9da Add prometheus integration (ref #294) 2021-04-09 19:05:04 +03:00
Kristian Ntavidi 23d664a48b Admin Template Editor: table styling. 2021-04-09 17:05:01 +03:00
Kristian Ntavidi 167cae9e59 User guide links update. Placeholders in dataset identifier and validation. Confirmation dialog minor changes. 2021-04-09 11:31:16 +03:00
Kristian Ntavidi 20a92bea9d Dataset Editor scrollspy on Guide Steps.Language text updates. 2021-04-08 18:29:08 +03:00
George Kalampokis c57820d6b1 Remove "External References" from docx generation 2021-04-08 16:48:14 +03:00
Kristian Ntavidi a75f140893 Merge branch 'Development' of https://gitlab.eudat.eu/dmp/OpenAIRE-EUDAT-DMP-service-pilot into Development 2021-04-08 13:00:10 +03:00
Kristian Ntavidi ab9bb3e8cf DMP Editor: remove modal when navigating to dataset. Minor ui fixes. 2021-04-08 12:57:44 +03:00
George Kalampokis dd88167574 Improve names and styling for dataset template users 2021-04-08 12:55:53 +03:00
Kristian Ntavidi 45227cca10 Merge branch 'Development' of https://gitlab.eudat.eu/dmp/OpenAIRE-EUDAT-DMP-service-pilot into Development 2021-04-07 19:20:32 +03:00
Kristian Ntavidi 14c7770ae9 User guide patch. Sorting available profiles in dmp editor. Portuguese on guide tour. 2021-04-07 19:19:22 +03:00
George Kalampokis 4156875bae Refactor and add logic for removing users from Dataset Templates 2021-04-07 19:08:57 +03:00
George Kalampokis bc3c8b44d2 Add option to add or remove users from Dataset Templates 2021-04-07 19:03:22 +03:00
Kristian Ntavidi 037e246262 Admin template editor: reseachers multi auto-complete fix. Discard changes on dataset editor navigates back to dmp editor. 2021-04-07 12:58:45 +03:00
George Kalampokis 959479757a Add The new user role to the user role listing and editor 2021-04-07 10:25:03 +03:00
George Kalampokis 5ff57a6352 Setup the routing permissions for the dataset Profile 2021-04-07 10:22:41 +03:00
George Kalampokis af04e34b6f Add new User Role Dataset Template Editor. 2021-04-06 19:03:00 +03:00
Kristian Ntavidi 49a15d2ccc Merge branch 'WizardDescriptionRefactor' into Development
# Conflicts:
#	dmp-frontend/src/assets/i18n/pt.json
2021-04-06 10:28:25 +03:00
Kristian Ntavidi 560e6100b7 Dataset Profile Editor: when "select" is created it appends as well an empy option. Recent edited activity "LoadMore" fix. Table of contents: selected entry updates. 2021-04-06 09:57:17 +03:00
George Kalampokis c929eb3a2b When uploading to zenodo upload both pdf and the RDA json files 2021-04-05 14:03:14 +03:00
Kristian Ntavidi 6e70071a16 Merge branch 'AdminTemplateRedesign' into WizardDescriptionRefactor 2021-04-05 12:07:33 +03:00
Kristian Ntavidi 450dbb519f Dataset profile editor. Fix: final preview in step does not affect individual previews in step 2. 2021-04-05 12:06:14 +03:00
George Kalampokis 5b930a6870 Export and Import Dataset Template description and language 2021-04-05 11:40:25 +03:00
Kristian Ntavidi 9cab64b65e Dataset Profile Editor. Patch visibility rules for select multiList, Validator and DatasetIdentifier 2021-04-05 11:37:00 +03:00
Kristian Ntavidi dc39cf9fdd Dataset Profile Editor. CheckBox default value preview patch. 2021-04-02 12:59:24 +03:00
Kristian Ntavidi ee1c09149e Merge branch 'AdminTemplateRedesign' into WizardDescriptionRefactor 2021-04-01 18:59:00 +03:00
Kristian Ntavidi b04e2b3482 Dataset profile Editor. Ui fixes. Visibility Rules fix. 2021-04-01 18:57:23 +03:00
Kristian Ntavidi 2df5c6820a Dataset Profile Editor. Drag n drop fix on Import Template. Feedback messages on update/save template. Code cleanups. MultiAutoComplete Preview Fix. 2021-03-31 18:31:57 +03:00
Kristian Ntavidi a3572f92ed Merge branch 'AdminTemplateRedesign' into WizardDescriptionRefactor 2021-03-30 17:56:51 +03:00
Kristian Ntavidi cc8c771ae5 Dataset profile editor. Ignore invalid data(if any) in previews. Fix Fieldset card changes height after the updated preview component is rendered . Update error messages.Now they use chapter-section namespace. 2021-03-30 17:47:35 +03:00
Kristian Ntavidi 7ebf61a28c Merge branch 'AdminTemplateRedesign' into WizardDescriptionRefactor 2021-03-30 12:12:35 +03:00
Kristian Ntavidi 67223bc2f0 Dataset profile editor. Minor Fix not building issue. 2021-03-30 12:11:22 +03:00
Kristian Ntavidi a50040cbef Merge branch 'AdminTemplateRedesign' into WizardDescriptionRefactor 2021-03-30 11:38:20 +03:00
Kristian Ntavidi d667d574af Dataset Profile editor. Create section button on page component. Dataset profile listing: Add Download Option. Minor ui fixes. 2021-03-30 11:36:09 +03:00
Kristian Ntavidi b00e7bbcc0 Merge branch 'AdminTemplateRedesign' into WizardDescriptionRefactor 2021-03-29 18:57:41 +03:00
Kristian Ntavidi c849ea13fe Dataset Profile Editor. Minor ui fix. 2021-03-29 18:56:18 +03:00
Kristian Ntavidi 94ecf92a09 Merge branch 'AdminTemplateRedesign' into WizardDescriptionRefactor 2021-03-29 18:44:14 +03:00
Kristian Ntavidi 7dac466f71 Dataset Profile Editor. Remove validate button. Toolbar next to fieldset.Update icons (most of them). Update texts(Quetions, sections and chapters). Add delete option on template listing. Preview Fieldset instead of each field(Enables multiplicity preview). 2021-03-29 18:42:55 +03:00
Kristian Ntavidi 12f9e9ede9 Dataset Profile Editor. Move validators from tempate to models. (Fixing issue of form classified as valid when not all formcontrols are rendered.) 2021-03-27 19:52:53 +02:00
Kristian Ntavidi fdf316a040 Dataset Profile Editor. VIsibility rules. Hide Sections from options. Language update for visibility rules. 2021-03-24 16:05:21 +02:00
Kristian Ntavidi 7ff2516ddc Merge branch 'AdminTemplateRedesign' into WizardDescriptionRefactor 2021-03-24 13:07:49 +02:00
Kristian Ntavidi 8ba546fef4 Dataset Profile Table of contents drag n drop fix. DIstinct ordinals that are on the same level. 2021-03-24 11:40:48 +02:00
Kristian Ntavidi 8cd467cda8 Merge branch 'AdminTemplateRedesign' into WizardDescriptionRefactor 2021-03-23 16:20:27 +02:00
Kristian Ntavidi b6236b7e0d Dataset Profile editor . Scroll timing Fix 2021-03-23 13:52:33 +02:00
Kristian Ntavidi 5e77f78a1c Dataset Profile Editor. Table of contents numbering drag and drop fix. Fix issues in dragging as well. 2021-03-23 12:39:04 +02:00
Kristian Ntavidi 41a1aeaf1f Merge branch 'AdminTemplateRedesign' into WizardDescriptionRefactor 2021-03-22 19:17:25 +02:00
Kristian Ntavidi 427c04f631 Dataset Profile Editor. Individual preview (needs backend support).
Replace static text with language translation.
Fix scrolling behaviour.
Clean up some code in table of contents.
Patch drag and drop (instant drag) issue.
UI enhancements: validate button and marking on table of contents(Pages when dont have children)
2021-03-22 15:47:45 +02:00
Kristian Ntavidi c8ce77ff81 Dataset Wizard. Fix "Previous" and "Next " steps behaviour. Uncompleted guide steps appear with red when user attempts to save. 2021-03-19 14:32:17 +02:00
Kristian Ntavidi abaf61cf02 DMP Editor. Uncompleted guide steps appear with red color when form is invalid and the user attemps to save. 2021-03-19 13:30:21 +02:00
Kristian Ntavidi 97db10be12 Dataset Wizard. Table Of Contents entries show error state (not visible yet, only implementation). Fix Bug on DMP Editor: "Save & Add" doesn't validate datasets to proceed anymore. 2021-03-19 12:04:01 +02:00
Kristian Ntavidi 6f52f77459 Dataset Wizard bug fix. On save show errors only for the semiform. 2021-03-18 18:02:09 +02:00
Kristian Ntavidi 868de6bf78 Merge branch 'AdminTemplateRedesign' into WizardDescriptionRefactor 2021-03-18 14:53:43 +02:00
Kristian Ntavidi 19ae882af9 Cookies Consent Lax Fix 2021-03-18 14:48:58 +02:00
Kristian Ntavidi 1389b3dbf5 UI Fixes. Panels in wizard expand all the way up to page level (when selected from table of contents). Hide overflown text in table. 2021-03-18 10:52:18 +02:00
Kristian Ntavidi 72d40b0f33 UI Fix. Expansion Panels expand when the selected element is collapsed. 2021-03-17 17:49:42 +02:00
Kristian Ntavidi 9bdc426af1 Merge branch 'AdminTemplateRedesign' into WizardDescriptionRefactor 2021-03-17 17:26:35 +02:00
Kristian Ntavidi f6f5fd15ae Dataset Profile Editor. Ui navigation fix (clip-path instead of translateX) Use backend service to create previewForm. 2021-03-17 16:29:02 +02:00
Kristian Ntavidi ae378899e2 Dataset description and table-of-contents works with tocentries. 2021-03-17 11:08:59 +02:00
Kristian Ntavidi 720fa60f9b Merge branch 'AdminTemplateRedesign' into WizardDescriptionRefactor 2021-03-16 09:12:49 +02:00
Kristian Ntavidi 4d6e4fb2cd Dataset ProfileEditor Validator fixes. More validators added. Table of contents mark invalid entries. Guided tour fix. Fix ng-deep leaks from user listing. 2021-03-12 18:19:51 +02:00
Kristian Ntavidi 615d30b977 About Page (How it works). Polishing UI. When click red dots navigate to more info tab. Sharpening images. 2021-03-10 18:43:49 +02:00
Kristian Ntavidi 1528b91736 About How it works page Redesign . Basic outline.
(cherry picked from commit e26c700cd3)
2021-03-10 13:11:58 +02:00
Kristian Ntavidi 2924db4409 Show the same numbering in wizard and editor. Sorting by ordinal in wizard description 2021-03-09 10:04:50 +02:00
Kristian Ntavidi 51228df7d5 Dataset Profile Editor. UI fixes. Stepper buttons animations. Alignments. RadioBox, Other, Select have emptyList Vaditator(custom). Numbering fix in table of contents when drag and drop. 2021-03-08 11:24:30 +02:00
Kristian Ntavidi 938e3b9554 Dataset Profile Editor. Ui fixes. Minimizing ng-deep leaks. Sidenav service. Side nav folds when create-edit template. 2021-03-05 11:05:09 +02:00
Kristian Ntavidi efc882016b Dataset profile editor. Validators are added to prevent user from proceeding with empty array of options(radio box and select). Polishing UI. 2021-03-04 14:38:46 +02:00
Kristian Ntavidi 87b79c2049 Dataset profile editor. Minor ui visibility fixes. Table of contents can slide. 2021-03-03 12:13:29 +02:00
Diamantis Tziotzios ca0babc6af added property to dataset external autocomplete criteria 2021-03-03 11:14:43 +02:00
Kristian Ntavidi a4efbb7698 Merge branch 'AdminTemplateRedesign' of https://gitlab.eudat.eu/dmp/OpenAIRE-EUDAT-DMP-service-pilot into AdminTemplateRedesign 2021-03-01 18:43:07 +02:00
Kristian Ntavidi 70a99f0d23 Dataset Profile Editor. Error messages before each step 2021-03-01 18:42:18 +02:00
George Kalampokis 535c250bae Fix critical issue when creating comboboxes with the multiple selection untouched
(cherry picked from commit e88f88d97c)
2021-03-01 18:07:04 +02:00
Kristian Ntavidi 081995e243 Dataset Profile editor. Drag and drop navigation table of contents. 2021-03-01 11:28:27 +02:00
Kristian Ntavidi da7f91df96 Dataset Profile Editor. Pipe static text to translation. 2021-02-25 17:53:58 +02:00
Kristian Ntavidi ddd12cbba8 Dataset Profile Editor. Drag and drop with dragula. 2021-02-25 14:17:47 +02:00
Kristian Ntavidi a4db1973d3 Dataset Profile Editor. Fieldsets same level as Section Details. Show all fieldsets in one page collapsed. 2021-02-24 16:56:14 +02:00
George Kalampokis e88f88d97c Fix critical issue when creating comboboxes with the multiple selection untouched 2021-02-23 17:33:55 +02:00
Diamantis Tziotzios 389aa3031c sr lang change 2021-02-23 13:50:54 +02:00
Diamantis Tziotzios 354695f6da sr lang update 2021-02-23 11:28:38 +02:00
Diamantis Tziotzios 3d9c154416 lang update 2021-02-23 11:24:22 +02:00
Kristian Ntavidi 3dde61a379 Dataset Profile Editor. Same level drag n drop on table. UI fixes 2021-02-19 16:35:14 +02:00
Kristian Ntavidi 96ebf7c0d0 Dataset profile editor. Ui fixes. mat-stepper header fix and preview fixes. 2021-02-18 17:13:56 +02:00
Kristian Ntavidi a8074f6239 Dataset profile editor. Minor ui fixes. Languages fixes and visibilities 2021-02-17 19:44:50 +02:00
Kristian Ntavidi dd2db4ce1f Dataset profile editor. Field Preview Fixes. Summary preview supports visibility rules. Minor UI fixes. 2021-02-17 18:39:07 +02:00
Kristian Ntavidi 8579071cf7 Dataset profile editor. Preview step basic implementation. 2021-02-15 19:16:48 +02:00
Kristian Ntavidi 7445ec5042 Dataset profile editor. Dynamic progress bar and confirmation before delete 2021-02-12 16:27:35 +02:00
Kristian Ntavidi 35eb42e631 Redesign dataset profile editor changes. Basic UI outline and functionality. 2021-02-12 13:23:39 +02:00
Diamantis Tziotzios 8a9277f0e6 portuguese language addition
(cherry picked from commit 930ef59936)
2021-02-12 13:06:08 +02:00
Diamantis Tziotzios 930ef59936 portuguese language addition 2021-02-12 13:05:40 +02:00
Diamantis Tziotzios 6470a8e6a6 more dataset profile changes 2021-02-04 12:22:52 +02:00
Kristian Ntavidi 1614945185 More Dataset Profile editor changes 2021-02-04 10:33:03 +02:00
Diamantis Tziotzios 8e93a02019 dataset profile editor redesign - initial commit 2021-02-03 12:21:31 +02:00
Kristian Ntavidi a8bc5d0622 Dataset Template Admin Listing Redesign 2021-02-03 11:06:40 +02:00
Diamantis Tziotzios 3ce5302bac serbian language added 2021-01-26 20:12:37 +02:00
Diamantis Tziotzios 148bba67ce Merge branch 'Development' of https://gitlab.eudat.eu/dmp/OpenAIRE-EUDAT-DMP-service-pilot into Development 2021-01-22 10:32:21 +02:00
Diamantis Tziotzios 3a27f66dc5 ci changes 2021-01-22 10:32:07 +02:00
George Kalampokis c56b7c59ed Fix issue with images not loading on user-guide for local development builds (plus an optional innerHTML alternative (disabled by default)) 2020-12-31 16:34:36 +02:00
George Kalampokis 0367aa0431 Minor improvements 2020-12-31 16:30:35 +02:00
George Kalampokis cf47898007 Improve support of the User guide Editor for the new User Guide htmls 2020-12-30 18:08:10 +02:00
George Kalampokis 8bc3783847 Minor fixes to the user guide htmls 2020-12-29 18:37:58 +02:00
Diamantis Tziotzios f30392864c ci updates 2020-12-16 14:19:58 +02:00
apapachristou 99f780fa4c removes unnecssary cursor pointer from user email 2020-12-15 17:00:33 +02:00
apapachristou 2ed101888d fix syntax on application-devel.properties 2020-12-14 19:37:06 +02:00
apapachristou d8b7161c73 Merge branch 'Development' of https://gitlab.eudat.eu/dmp/OpenAIRE-EUDAT-DMP-service-pilot into Development 2020-12-14 19:31:14 +02:00
apapachristou 558b506643 Add analytics to pages, οverviews, editors etc. 2020-12-14 19:28:13 +02:00
Diamantis Tziotzios af5ab43c2e db pool connection fix 2020-12-14 19:23:10 +02:00
George Kalampokis 4bbcb3d24e Merge branch 'Development' of https://gitlab.eudat.eu/dmp/OpenAIRE-EUDAT-DMP-service-pilot.git into Development 2020-12-14 17:34:27 +02:00
George Kalampokis 3477cf25fd Change sql and sh scripts from CRLF to LF 2020-12-14 17:30:15 +02:00
Diamantis Tziotzios eb153e84bc analytics fix 2020-12-14 16:27:07 +02:00
apapachristou 7257be8629 Merge branch 'Development' of https://gitlab.eudat.eu/dmp/OpenAIRE-EUDAT-DMP-service-pilot into Development 2020-12-11 16:53:28 +02:00
apapachristou 0c60af543a Restyles user guide 2020-12-11 16:53:22 +02:00
Diamantis Tziotzios ef0a40b739 export template updated 2020-12-10 17:29:34 +02:00
apapachristou 3e4a61153f with previous commit 2020-12-10 16:15:03 +02:00
apapachristou f94d4bad2b Merge branch 'Development' of https://gitlab.eudat.eu/dmp/OpenAIRE-EUDAT-DMP-service-pilot into Development
# Conflicts:
#	dmp-frontend/src/app/ui/user-guide/user-guide-content/user-guide-content.component.ts
2020-12-10 15:49:34 +02:00
apapachristou fc689342cb Adds table of contents to user guide 2020-12-10 15:45:55 +02:00
Diamantis Tziotzios 6ea5dfff42 added matomo integration 2020-12-10 15:29:24 +02:00
George Kalampokis ca38f0b0a4 Make user guide multilingual 2020-12-10 11:34:01 +02:00
George Kalampokis 3b00b76f19 Add option to make static dataset profile fields with autocomplete to have multiple values 2020-12-09 17:51:30 +02:00
George Kalampokis b5a9aa9ad3 Fix some styling issues with users listing 2020-12-08 16:25:55 +02:00
apapachristou c62cc1068a Restyles admin page "Users" 2020-12-04 18:26:20 +02:00
George Kalampokis c18e3f8e3c Add null check for additionalInfo to UserListingModel fromDataModel 2020-12-03 14:07:45 +02:00
George Kalampokis d4672f1e60 Merge remote-tracking branch 'origin/Development' into Development 2020-12-02 14:19:57 +02:00
George Kalampokis d6970cc49a Add avatarUrl on UserListingModel 2020-12-02 14:19:43 +02:00
apapachristou f87f8e31af Makes login dialog responsive on add new account 2020-11-27 14:41:27 +02:00
apapachristou 142c9ab5ea Adds dots on all steps of datset editor table of content 2020-11-25 18:45:37 +02:00
apapachristou 2f61e47139 On focus out of autocompletes clear value if not selected option (to be reviewed) 2020-11-25 18:08:51 +02:00
apapachristou 06f156c687 Fix bug on dmp editor that prevented request grants on funder change (change on single autocomplete component to be reviewed) 2020-11-25 14:22:30 +02:00
apapachristou f5d5835edb Style fix on tour guide panel 2020-11-25 13:43:01 +02:00
apapachristou b3d820c892 Merge branch 'Development' of https://gitlab.eudat.eu/dmp/OpenAIRE-EUDAT-DMP-service-pilot into Development 2020-11-24 19:09:15 +02:00
apapachristou 208824f55b Adds guided tour on dashboard for new user 2020-11-24 19:09:10 +02:00
apapachristou c796745c73 Adds language 2020-11-24 19:05:32 +02:00
apapachristou 4c94b48b2b Fix style on confirmation dialog button 2020-11-24 19:04:37 +02:00
George Kalampokis fcd24fd907 Add community when depositing to zenodo (ARGOS). 2020-11-23 18:16:32 +02:00
apapachristou 0542c17aae removes unnecessary console.log and comments 2020-11-20 15:01:57 +02:00
George Kalampokis fc72c014a5 Merge branch 'Development' of https://gitlab.eudat.eu/dmp/OpenAIRE-EUDAT-DMP-service-pilot.git into Development 2020-11-19 18:39:35 +02:00
George Kalampokis 66358acfcf Replace the openDMP Affiliation on Zenodo with either a configurable
affiliation or the related organizations of the DMP
2020-11-19 18:39:25 +02:00
apapachristou 5c8c1a13b2 Fix bug on dmp filters: keep public status selected on reopen filters 2020-11-19 17:14:38 +02:00
apapachristou e3cfd47edb Fix style on filters dialog 2020-11-19 16:16:28 +02:00
apapachristou 4552525e1c On multiple autocomple inputs removes permanent placeholder inside the container, adds overflow 2020-11-19 10:38:43 +02:00
apapachristou 0159baf8ed Fix style on dialog import dmp from file 2020-11-18 16:23:16 +02:00
apapachristou 52317c10f9 Fix style of buttons on finalize dialogs 2020-11-18 10:58:26 +02:00
George Kalampokis 25d408c113 Merge branch 'Development' of https://gitlab.eudat.eu/dmp/OpenAIRE-EUDAT-DMP-service-pilot.git into Development 2020-11-18 09:40:40 +02:00
apapachristou 644d616ef8 Add notification messages on click save of user profile 2020-11-17 19:57:39 +02:00
George Kalampokis 54e0ac6ad4 Fix minor issue with DatePipe Greek culture 2020-11-17 16:37:23 +02:00
apapachristou af849b6c36 Style fixes on user profile 2020-11-17 15:46:17 +02:00
apapachristou 8e074c4ca0 Show more actions on cards of listings (max 4 actions) 2020-11-17 13:16:06 +02:00
apapachristou 36ac02e9f9 Change texts on editors 2020-11-17 09:57:52 +02:00
George Kalampokis 1e0b828a48 Prevent to check deleted Datasets when checking which Dataset Templates are in use 2020-11-16 18:31:41 +02:00
George Kalampokis a3d662aed1 Fix minor spelling mistake 2020-11-13 18:29:16 +02:00
George Kalampokis 510142763e Merge branch 'Development' of https://gitlab.eudat.eu/dmp/OpenAIRE-EUDAT-DMP-service-pilot.git into Development 2020-11-13 18:26:53 +02:00
George Kalampokis cbbfec2ccc Updated RDA Mapper's Cardinality check 2020-11-13 18:26:09 +02:00
apapachristou b2ea14787c Merge branch 'Development' of https://gitlab.eudat.eu/dmp/OpenAIRE-EUDAT-DMP-service-pilot into Development 2020-11-12 18:18:14 +02:00
apapachristou 77b9a84105 Fix bug: discard button should disappear after save on dataset editor 2020-11-12 18:18:09 +02:00
Diamantis Tziotzios 4a82e86769 fixes 2020-11-12 17:59:09 +02:00
apapachristou 50fc4612b7 Fix bug on save dataset profile definition 2020-11-12 17:57:09 +02:00
George Kalampokis 0ad797d033 Revert last commit 2020-11-12 16:39:47 +02:00
George Kalampokis d20b8b459a Merge branch 'Development' of https://gitlab.eudat.eu/dmp/OpenAIRE-EUDAT-DMP-service-pilot.git into Development 2020-11-12 15:50:44 +02:00
George Kalampokis ffc140f84b When creating or updating Datasets return also the
DatasetProfileDefinition
2020-11-12 15:50:34 +02:00
apapachristou 188fcd539f Style fix: add hover on dialog close button 2020-11-12 10:39:41 +02:00
George Kalampokis 7973e04090 Fix minor issue with identifier validation 2020-11-12 10:14:42 +02:00
George Kalampokis fbff31d287 When changing steps on both editors reset the scroll 2020-11-11 12:32:55 +02:00
George Kalampokis d40265544d Add Validators external urls for both staging and production profiles 2020-11-10 17:40:55 +02:00
George Kalampokis f5533e1b95 Prevent user to send merge request email to itself 2020-11-10 17:39:43 +02:00
George Kalampokis 5d01519415 Fixed various styling issues 2020-11-10 16:53:48 +02:00
apapachristou 6fb7c81cd5 Fix open filters animation 2020-11-10 10:13:08 +02:00
apapachristou bfdbce54c2 Adds date pipe to translate date 2020-11-09 17:14:10 +02:00
apapachristou 8d8dce8973 Adds logout option on smaller screen account menu 2020-11-09 11:34:24 +02:00
George Kalampokis 8161d382ad Fixed minor external url issue 2020-11-09 10:32:55 +02:00
George Kalampokis cda31be0bd Allow remote fetcher to retrieve data with POST requests and added a new
OpenAire repository source
2020-11-06 18:45:20 +02:00
George Kalampokis eae7f22f72 Merge branch 'Development' of https://gitlab.eudat.eu/dmp/OpenAIRE-EUDAT-DMP-service-pilot.git into Development 2020-11-06 16:29:50 +02:00
George Kalampokis 2ff9b95fdf Made identifier validation field to work properly 2020-11-06 16:29:33 +02:00
apapachristou 523a551e0a with previous commit 2020-11-06 14:21:32 +02:00
apapachristou 3a8d426d22 Adds hover on all close buttons 2020-11-06 14:21:14 +02:00
apapachristou 0bd5afffe1 Fix: on save of datset, table of contents remains open 2020-11-06 12:42:31 +02:00
apapachristou 2313cd1ca5 Fixes align of icons on listing card items 2020-11-06 11:05:05 +02:00
apapachristou aa35725823 Fixes profile/login menu on mobile mode 2020-11-06 11:00:19 +02:00
apapachristou f8753de83a Styles close button everywhere 2020-11-06 10:57:30 +02:00
George Kalampokis e061448830 Initial commit for the new Dataset Template Field (identifier
validation) part 2
2020-11-05 18:32:19 +02:00
George Kalampokis da9872576e Initial commit for the new Dataset Template Field (identifier validator) 2020-11-05 18:20:37 +02:00
Diamantis Tziotzios 078d472859 db script fix 2020-11-04 18:57:42 +02:00
George Kalampokis 2ed23c4676 Fix various issues and styling of the language editor 2020-11-04 16:58:24 +02:00
George Kalampokis 07e8c51b79 On Dataset Template Editor properly stringify error objects 2020-11-04 16:55:45 +02:00
George Kalampokis 70056bd0a9 Fix issue with login for new users 2020-11-04 16:52:10 +02:00
George Kalampokis 47d5d8cb9e Fix another minor DBVersion issue with the DB creation scripts 2020-11-04 16:38:59 +02:00
George Kalampokis 2d3dfbf919 Fix minor issue with one of the DB update scripts 2020-11-04 16:28:14 +02:00
apapachristou 0e906cb4b9 Fixes compile error 2020-11-02 18:25:51 +02:00
apapachristou b13dab598f After dmp save remain at the same position 2020-11-02 18:18:49 +02:00
apapachristou abfb6342b2 with previous commit 2020-11-02 18:14:10 +02:00
apapachristou d0d98bc520 Merge branch 'Development' of https://gitlab.eudat.eu/dmp/OpenAIRE-EUDAT-DMP-service-pilot into Development
# Conflicts:
#	dmp-frontend/src/app/ui/dataset/dataset-wizard/dataset-wizard.component.ts
2020-11-02 18:11:19 +02:00
apapachristou 0e2d288478 on dataset save remain at the same position 2020-11-02 18:08:25 +02:00
apapachristou 02d79165c4 Fix: search box on listing remain on page if no result 2020-11-02 18:00:42 +02:00
George Kalampokis c391cd5521 Fix issue when saving Datasets 2020-11-02 17:38:19 +02:00
George Kalampokis 86994c73ce Make Section ordinal to be required in the Dataset Template Editor 2020-11-02 17:36:59 +02:00
apapachristou 0c9396bc11 Fix for style layout 2020-10-30 17:56:24 +02:00
apapachristou d043322014 Fix: prevent search from sending asynchronous requests 2020-10-30 17:51:07 +02:00
apapachristou 45979922d5 Fixes style on title of dataset temlate preview and adds margin on expansion panels 2020-10-30 14:15:49 +02:00
apapachristou d27f8301c6 Fixes disappearing search box on dashboard if no results 2020-10-30 13:31:28 +02:00
George Kalampokis df8af6e6cd Trim time on Dataset's modified time in order to match with the Database 2020-10-30 11:29:43 +02:00
George Kalampokis ba5c295187 Merge branch 'Development' of https://gitlab.eudat.eu/dmp/OpenAIRE-EUDAT-DMP-service-pilot.git into Development 2020-10-29 17:13:15 +02:00
George Kalampokis 2354d9bb5c When calling the createOrUpdate endpoint on the Dataset Controller,
return a DatasetWizardModel instead of the dataset's id
2020-10-29 17:12:59 +02:00
apapachristou 992999a596 Fixes zenodo icon align on user profile 2020-10-29 16:54:50 +02:00
apapachristou e661eb3d0b Removes unnecessary scrollbar from editors 2020-10-29 13:46:10 +02:00
apapachristou 638d5ca98c Merge branch 'Development' of https://gitlab.eudat.eu/dmp/OpenAIRE-EUDAT-DMP-service-pilot into Development 2020-10-29 12:10:58 +02:00
apapachristou ce6c0f3b20 Fixes position of arrow on auto complete 2020-10-29 12:10:39 +02:00
George Kalampokis 8677cc85b9 Merge branch 'Development' of https://gitlab.eudat.eu/dmp/OpenAIRE-EUDAT-DMP-service-pilot.git into Development 2020-10-29 12:08:20 +02:00
George Kalampokis 03da1f3f7b When merging users delete the remaining credentials of the user to be
merged
2020-10-29 12:08:09 +02:00
apapachristou 19b751984b Merge branch 'Development' of https://gitlab.eudat.eu/dmp/OpenAIRE-EUDAT-DMP-service-pilot into Development 2020-10-29 12:04:41 +02:00
apapachristou f1cdacbe33 Removes unnecessary padding on listing 2020-10-29 11:57:20 +02:00
George Kalampokis d77fefc7c5 Merge branch 'Development' of https://gitlab.eudat.eu/dmp/OpenAIRE-EUDAT-DMP-service-pilot.git into Development 2020-10-29 11:54:28 +02:00
George Kalampokis c1d473f8d4 When merging users remove the email from the user to be merged 2020-10-29 11:54:15 +02:00
apapachristou a926d933e3 Removes auto open of autocomplete panel on invitation dialog open, replace 'invite collaborators" with "invite 2020-10-29 11:44:17 +02:00
apapachristou 2f28e0c8ac Merge branch 'Development' of https://gitlab.eudat.eu/dmp/OpenAIRE-EUDAT-DMP-service-pilot into Development 2020-10-29 11:35:54 +02:00
apapachristou d889a527e3 Fixes zenodo icon align on profile and adds language 2020-10-29 11:35:48 +02:00
George Kalampokis 35fe6a75fe Merge remote-tracking branch 'origin/Development' into Development 2020-10-27 18:08:35 +02:00
George Kalampokis 4c60b2bb06 When creating a new credential assign the user's email 2020-10-27 18:08:16 +02:00
George Kalampokis ff169ae806 Made User Merge logic functional 2020-10-27 18:06:58 +02:00
apapachristou 7792bed7f6 Fixes invite button clicks on dmp/dataset overview and fixes style on invitation dialog 2020-10-27 14:29:57 +02:00
George Kalampokis eeca52d3ff Prevent login requests to be sent multiple times from the oauth2 dialog 2020-10-27 12:31:45 +02:00
George Kalampokis 22cc8bb3a3 Merge remote-tracking branch 'origin/Development' into Development 2020-10-27 12:06:58 +02:00
George Kalampokis 981eb48d89 Add email for Merge requests 2020-10-27 12:06:32 +02:00
George Kalampokis baf4314a33 Fixed various bugs with the new Login system (prevent to send twice the login request with some providers) 2020-10-27 12:04:57 +02:00
apapachristou 5534f4f4a9 Adds template preview on: clone dialog select template field, dmp upload select template field 2020-10-27 12:04:11 +02:00
George Kalampokis 2b89f646ee Fix emails that are sent with images 2020-10-27 12:01:18 +02:00
apapachristou 7f654cc472 Replace alert box with notification snackbar on dmp overview copy doi 2020-10-27 12:00:02 +02:00
George Kalampokis c8a163f4aa Refactor most login providers in order to work on window popups and add proper login support for the link new user 2020-10-26 18:18:26 +02:00
George Kalampokis df3a5e81a5 Merge remote-tracking branch 'origin/Development' into Development 2020-10-26 18:03:21 +02:00
George Kalampokis 8c2ae8cf46 Add null check on the Organisation fromMap mapper 2020-10-26 18:03:07 +02:00
apapachristou cd618563bf Style changes on buttons 2020-10-26 17:31:39 +02:00
apapachristou 5b78943131 Adds provider icon on listing accounts on profile page 2020-10-26 14:37:34 +02:00
apapachristou 708206c28a Replaces text from "add new account" to "link account" 2020-10-26 13:37:02 +02:00
apapachristou d512ad1389 Fixes bug on closing preview template dialog 2020-10-26 13:34:08 +02:00
apapachristou f0b9b01695 Replace input email dialog with login dialog on add new account 2020-10-26 13:24:39 +02:00
George Kalampokis 96ffbe6670 Updated DB scripts 2020-10-26 13:11:54 +02:00
apapachristou 29c6774558 Adds field "Add account" on profile 2020-10-26 11:57:06 +02:00
George Kalampokis 9674ec2b6b Add user merge related services and updates on existing services on the frontend 2020-10-26 10:36:20 +02:00
George Kalampokis e1212383ff Add expirimental logic for userMerge (+ some updates for DB) 2020-10-23 18:40:17 +03:00
apapachristou d4ca651411 Merge branch 'Development' of https://gitlab.eudat.eu/dmp/OpenAIRE-EUDAT-DMP-service-pilot into Development 2020-10-23 18:00:03 +03:00
apapachristou 8946ea2fb7 Changes style of title on dmp an dataset card 2020-10-23 17:59:59 +03:00
George Kalampokis 56d6b12555 Add Organization and roleOrganization to the User Info. Also allow to
edit the user's name from the updateSettings
2020-10-23 11:48:27 +03:00
apapachristou 8dd728a85d Fixes on profile page 2020-10-23 11:27:44 +03:00
apapachristou 2c5feb5fa9 Restyles profile page 2020-10-23 10:49:09 +03:00
apapachristou 1d0a375453 Adds preview icon on all profile multiple autocomplete fields 2020-10-20 13:23:22 +03:00
apapachristou 32caed9f6f Adds preview of dataset template, adds delete with spacebar on multiple autocomplete 2020-10-20 13:00:02 +03:00
apapachristou b8f3c5af70 with previous commit 2020-10-19 12:58:55 +03:00
apapachristou 9c2f1b12bd Adds progress bar on dataset editor 2020-10-16 16:48:28 +03:00
apapachristou a631594f5f Changes favicon 2020-10-16 10:22:37 +03:00
apapachristou e179d90f12 Adds progress bar on DMP editor 2020-10-15 13:46:59 +03:00
George Kalampokis f08d8e2e01 When checking for Form Validation errors if the control has no nativeElement then pass as name it's formGroup key, also added some additional checkup for the placeholder parser in the FormValidationComponent 2020-10-13 12:55:11 +03:00
George Kalampokis b878bf9d8f Fix issue when importing from RDA and the predefined template(s) inside the json does not exist on the database 2020-10-13 11:05:01 +03:00
George Kalampokis a78044920a Fixed issues with elastic and last public version 2020-10-12 12:45:32 +03:00
apapachristou f71f9b07e0 gr language update 2020-10-09 15:20:34 +03:00
apapachristou 4c3775232a Adds everywhere snackbar on download rda json failure 2020-10-09 13:04:38 +03:00
apapachristou 02c36c1f61 Fixes bug of actions menu on dataset cards on public listings 2020-10-09 11:21:14 +03:00
apapachristou 71a270137a Fixes flag image scale on contributors page (to be tested) 2020-10-08 23:27:47 +03:00
apapachristou 103f89c0b6 Merge branch 'Development' of https://gitlab.eudat.eu/dmp/OpenAIRE-EUDAT-DMP-service-pilot into Development 2020-10-08 22:21:56 +03:00
apapachristou f575c9550b Fixes bug: filters button dissapearing on empty result list, fixes postion if list is empty 2020-10-08 22:21:49 +03:00
Diamantis Tziotzios 2316dd9b40 sk, tr language updates 2020-10-08 14:39:52 +03:00
apapachristou 20c607d88a Fixes style of dataset description form template 2020-10-07 18:28:53 +03:00
George Kalampokis 202ba64d21 Merge branch 'Development' of https://gitlab.eudat.eu/dmp/OpenAIRE-EUDAT-DMP-service-pilot.git into Development 2020-10-07 17:30:00 +03:00
George Kalampokis 78903bf930 Add the backend logic to export all users to .csv 2020-10-07 17:29:53 +03:00
apapachristou 129d5c6dda Rename browser tab prefix from "Open DMP -" to "Argos -" 2020-10-07 17:21:07 +03:00
apapachristou 4479a0df80 with previous commit 2020-10-07 16:40:18 +03:00
apapachristou 7439281c50 Adds button to export all user emails (as admin) 2020-10-07 16:35:23 +03:00
George Kalampokis f4f3099b50 Merge branch 'Development' of https://gitlab.eudat.eu/dmp/OpenAIRE-EUDAT-DMP-service-pilot.git into Development 2020-10-07 14:22:59 +03:00
George Kalampokis 7a3b4a18ca Fixed compile issues 2020-10-07 14:22:37 +03:00
apapachristou 7cc584ac33 Fixes spelling of variable name 2020-10-07 13:14:19 +03:00
apapachristou d856255405 Fixes bug: after discard grant was not set to previous value 2020-10-07 12:42:10 +03:00
apapachristou 166f0f7c37 Fixes grammar of notification "Email was send!"
(cherry picked from commit 2c57e77183)
2020-10-07 11:37:53 +03:00
Diamantis Tziotzios db31597fc0 Merge branch 'Development' 2020-10-07 10:58:45 +03:00
Diamantis Tziotzios e65bce0f5a Merge branch 'ui-redesign' into Development
# Conflicts:
#	dmp-backend/web/src/main/java/eu/eudat/logic/proxy/fetching/RemoteFetcher.java
#	dmp-backend/web/src/main/java/eu/eudat/models/data/external/ResearchersExternalSourcesModel.java
#	dmp-backend/web/src/main/resources/externalUrls/ExternalUrls.xml
2020-10-06 16:43:20 +03:00
George Kalampokis f2613c4c87 When exporting to World and PDF with world list field return it's label instead of it's value (ref #287) 2020-09-03 10:50:28 +03:00
George Kalampokis ac00b01943 Fixed various issues when creating world document and storing data to the elastic 2020-07-23 12:24:49 +03:00
George Kalampokis 8ffdfdba1f If DMP is lacking the visibility option then create a Zenodo DOI with resstricted file access and no license 2020-07-08 16:56:55 +03:00
George Kalampokis 58e22926b1 Merge branch 'advanced_rda' into Development 2020-07-06 18:19:02 +03:00
George Kalampokis 7f56afad5f Add OpenAIRE source for external Datasets 2020-07-06 11:40:00 +03:00
Diamantis Tziotzios 9f5054668e Merge branch 'Development'
* Development: (72 commits)
  splash screen fixes
  splash spell error fix
  Properly remove associate Collaborators from a DMP
  splash changes
  Fixed issue with DMP filter on public datasets
  Fixed issue when using the copy dataset dialog
  Minor styling improvement over DMP Overview
  Code clean up
  Add support for newer versions of java (11) (expirimental)
  Add Zenodo file visibility field for DMP (ref #274)
  Fixed issue not passing DMP Extra Properties on clones and new Versions
  Add DMP Zenodo license field (ref #274)
  more splash screen changes
  Allow splash to send contact emails
  splash screen changes
  Hide Uri field on Dataset Editor (ref #275)
  When logging in remove the cookie consent popup
  Fixed minor issues with RDA Mapping
  Add currency field type for dataset templates
  Add DMP language a placeholder on UI
  ...

# Conflicts:
#	dmp-backend/web/src/main/resources/RDACommonStandards.txt
#	dmp-backend/web/src/main/resources/config/application-production.properties
2020-07-03 11:00:07 +03:00
George Kalampokis 38986ef67b no message 2020-06-16 17:58:31 +03:00
Diamantis Tziotzios bff260b85b config file changes 2020-06-16 17:54:50 +03:00
George Kalampokis 9519300dc4 Removed deprecated configurations and added additional RDA Common Standards for dataset Templates
(cherry picked from commit 5b0a66ce06)
2020-05-29 12:07:59 +03:00
George Kalampokis 9373d3e038 Fixed logback paths
(cherry picked from commit 33ec8b81c0)
2020-05-20 15:39:27 +03:00
dtziotzios d971f02a94 Merge branch 'Development'
# Conflicts:
#	dmp-backend/web/src/main/java/eu/eudat/controllers/DMPs.java
#	dmp-backend/web/src/main/java/eu/eudat/logic/managers/DataManagementPlanManager.java
2020-05-13 17:29:52 +03:00
Georgios Kakaletris d3915e26e7 Update LICENSE 2020-05-09 00:03:50 +02:00
George Kalampokis c028aad615 Fixed and improved file export system
(cherry picked from commit 71ccd76896)
2020-04-02 18:44:40 +03:00
Diamantis Tziotzios 4ee39074a3 Merge commit '8ca2b912d40ece8bf0fbcda5c49f1ef7f5f6fdfd' 2020-04-02 13:33:08 +03:00
Diamantis Tziotzios 1b4952a909 Merge branch 'Development' 2020-01-31 18:26:27 +02:00
Diamantis Tziotzios 3ada5a0d3d Merge branch 'Development' 2019-11-26 11:41:02 +02:00
Diamantis Tziotzios 63ee865dd9 Merge commit 'c8358f22dd5d108b7f270f97724d6bab1582c2c5' 2019-11-22 18:08:55 +02:00
Diamantis Tziotzios 2a52138124 Merge branch 'Development' 2019-09-17 18:47:39 +03:00
Diamantis Tziotzios 7cf64c18f2 Merge branch 'Development' 2019-09-17 11:31:58 +03:00
Diamantis Tziotzios 71d317bab7 license file 2019-06-19 08:59:52 +02:00
Ioannis Kalyvas cd8b3448f5 Merge branch 'Development' of https://gitlab.eudat.eu/dmp/OpenAIRE-EUDAT-DMP-service-pilot 2018-06-28 12:39:39 +03:00
Ioannis Kalyvas c3d4cb6fdd no message 2018-06-28 12:33:43 +03:00
Ioannis Kalyvas b0ccac191f no message 2018-03-06 17:33:55 +02:00
Ioannis Kalyvas 3b1f37ef22 no message 2018-03-06 17:27:24 +02:00
Ioannis Kalyvas b8e040ee94 Merge branch 'master' of https://gitlab.eudat.eu/dmp/OpenAIRE-EUDAT-DMP-service-pilot
# Conflicts:
#	dmp-backend/src/main/java/eu/eudat/helpers/Transformers.java
2018-03-06 17:21:46 +02:00
Ioannis Kalyvas 50444a0b73 Merge branch 'Development' of https://gitlab.eudat.eu/dmp/OpenAIRE-EUDAT-DMP-service-pilot
# Conflicts:
#	dmp-backend/src/main/java/eu/eudat/helpers/Transformers.java
#	dmp-frontend/src/index.html
2018-03-06 17:02:13 +02:00
Diamantis Tziotzios 85bdb7fad1 Merge branch 'Development'
# Conflicts:
#	dmp-backend/src/main/java/eu/eudat/helpers/Transformers.java
2018-02-12 10:23:41 +02:00
annabakouli b2e49fbb8a no message 2018-01-18 12:55:35 +02:00
Diamantis Tziotzios bfc6b63067 Merge branch 'Development'
# Conflicts:
#	dmp-backend/src/main/java/rest/entities/DMPs.java
#	dmp-backend/src/main/java/rest/entities/DataRepositories.java
#	dmp-backend/src/main/java/rest/entities/DatasetProfiles.java
#	dmp-backend/src/main/java/rest/entities/Datasets.java
#	dmp-backend/src/main/java/rest/entities/DmpProfiles.java
#	dmp-backend/src/main/java/rest/entities/Organisations.java
#	dmp-backend/src/main/java/rest/entities/Projects.java
#	dmp-backend/src/main/java/rest/entities/Registries.java
#	dmp-backend/src/main/java/rest/entities/Researchers.java
#	dmp-backend/src/main/java/rest/entities/Services.java
#	dmp-backend/src/main/java/rest/entities/Users.java
#	dmp-frontend/src/app/app.component.ts
#	dmp-frontend/src/app/login/googgle-sign-in/googgle-sign-in.component.ts
#	dmp-frontend/src/assets/custom.js
#	dmp-frontend/src/index.html
2018-01-18 12:45:51 +02:00
Nikolaos Laskaris 9941c96dc2 Minor edits 2017-11-27 16:08:13 +02:00
Nikolaos Laskaris 06272c79da -- 2017-11-23 17:34:35 +02:00
Nikolaos Laskaris a00eec68d8 fixed glitches of google-sign-in component 2017-11-23 13:13:20 +02:00
1254 changed files with 91065 additions and 13847 deletions

11
.env
View File

@ -1,6 +1,5 @@
TAG=6.3.0
ENV=prod
PROFILE=production
AOT=aot
ELASTIC_VERSION=6.3.0
ELASTIC_PASSWORD=changeme
PROFILE=docker
# Version of Elastic products
ELK_VERSION=7.17.4
STACK_VERSION=7.17.4

9
.gitignore vendored
View File

@ -40,3 +40,12 @@ dmp-frontend/.vscode/
dmp-frontend/package-lock.json
dmp-backend/logging/target/
ELK.Docker/shared/data-elk/
# Eclipse
.project
.settings/
bin/
*.classpath
openDMP/dmp-backend/uploads/
openDMP/dmp-backend/tmp/
dmp-frontend/.angular/

69
README.md Normal file
View File

@ -0,0 +1,69 @@
**Important note: The deployment, troubleshooting, maintenance and operation of on-premises / self-served OpenDMP instances for development, testing or production use, shall be the sole responsibility of the adopter. No support is guaranteed by OpenDMP implentation team for issues that may be encountered during deployment, extension or operation of such installations.**
**Documentation is provided on a best-effort basis for the code and processes around the development, deployment and operation of OpenDMP. If you find any misalignment of the actual processes with the related documentation, please let us know so that the misalignment is addressed for the benefit of future adopters.**
# Using Docker Compose with Argos
ARGOS is an open extensible service that simplifies the management, validation, monitoring and maintenance and of Data Management Plans. It allows actors (researchers, managers, supervisors etc) to create actionable DMPs that may be freely exchanged among infrastructures for carrying out specific aspects of the Data management process in accordance with the intentions and commitment of Data owners.
## Before running the docker compose commands, configurations must be set
### Database
First of all, database must be configured
The only file that has to be changed is **/dmp-db-scema/Docker/dmp-db.env**
```bash
ADMIN_USER: Admin username (app)
ADMIN_PASSWORD: Admin password (app)
POSTGRES_DB: database name
POSTGRES_USER: Admin username (database)
POSTGRES_PASSWORD: Admin password (database)
```
### Backend
Secondly, a few more options should be asigned
The file **/dmp-backend/web/src/main/resources/config/application-docker.properties** contains all the necessary properties
Values to be modified:
```bash
database.url: the url that is used to connect to database (JDBC based)
database.username: database admin username
database.password: database admin password
elasticsearch.*(optional): setup elastic, check Elasticsearch(optional) section below
google.login.clientId(optional): google as login provider
```
**NOTE:** if you want to configure and integrate other providers, check this reference [Setup configurable login](https://code-repo.d4science.org/MaDgiK-CITE/argos/wiki/Page-2A:-Setup-configurable-login)
If you provide google.login.clientId, then the same value should be set in the field named **loginProviders.googleConfiguration.clientId** which belongs to **/dmp-frontend/src/assets/config/config.json**
## You are ready to build and run the entire application using Docker-compose
1. Go to the project's root directory
2. Type in the **Terminal** `docker volume create --name=dmpdata`
3. Type in the **Terminal** `docker-compose up -d --build`
4. After it's complete your application is running on [http://localhost:8080](http://localhost:8080)
### Elasticsearch(optional)
If you want to set up elasticsearch, you will need the password for the **elastic** user
After your application is running, type in the **Terminal** `docker exec -it elasticsearch /bin/sh`
Run the command `cat data/passwords.txt` in the shell and save its output
Finally, run `exit` to get back to your terminal
The elastic's password that you get has to be set in the **elasticsearch.password** property in the backend configuration
Rerun the application
1. Type in the **Terminal** `docker-compose down`
2. Type in the **Terminal** `docker-compose up -d --build`

View File

@ -1 +1 @@
PROFILE=staging
PROFILE=docker

View File

@ -1,22 +1,22 @@
FROM maven:3-jdk-8-alpine AS MAVEN_BUILD
FROM maven:3-jdk-11 AS MAVEN_BUILD
COPY pom.xml /build/
COPY data /build/data/
COPY elastic /build/elastic/
COPY logging /build/logging/
#COPY logging /build/logging/
COPY queryable /build/queryable/
COPY web /build/web/
WORKDIR /build/
RUN mvn package
RUN mvn package -q
FROM openjdk:8-jre-alpine
FROM amazoncorretto:11
WORKDIR /app
COPY --from=MAVEN_BUILD /build/web/target/web-1.0-SNAPSHOT.jar /app.jar

View File

@ -1,4 +1,4 @@
FROM maven:3-jdk-8-alpine AS MAVEN_BUILD
FROM maven:3-openjdk-11 AS MAVEN_BUILD
COPY pom.xml /build/
COPY data /build/data/
@ -9,7 +9,7 @@ COPY web /build/web/
WORKDIR /build/
RUN mvn package
FROM openjdk:8-jre-alpine
FROM adoptopenjdk/openjdk11:alpine-jre
WORKDIR /app
COPY --from=MAVEN_BUILD /build/web/target/web-1.0-SNAPSHOT.jar /app/app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom" ,"-Dspring.profiles.active=${PROF}","-jar","/app.jar"]
ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-Dspring.profiles.active=${PROF}", "-Dspring.config.additional-location=/files/config/", "-cp", "/app/app.jar", "-Dloader.path=/files/repo-jars", "org.springframework.boot.loader.PropertiesLauncher"]

View File

@ -25,5 +25,10 @@
<artifactId>elastic</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-annotations</artifactId>
<version>1.5.20</version>
</dependency>
</dependencies>
</project>

View File

@ -1,9 +1,9 @@
package eu.eudat.data.dao.criteria;
import eu.eudat.queryable.queryableentity.DataEntity;
import io.swagger.annotations.ApiModelProperty;
public abstract class Criteria<T> {
@ApiModelProperty(value = "like", name = "like", dataType = "String", allowEmptyValue = true, example = "\"\"")
private String like;
public String getLike() {

View File

@ -0,0 +1,16 @@
package eu.eudat.data.dao.criteria;
import eu.eudat.data.entities.DMPProfile;
public class DataManagementPlanBlueprintCriteria extends Criteria<DMPProfile> {
private Integer status;
public Integer getStatus() {
return status;
}
public void setStatus(Integer status) {
this.status = status;
}
}

View File

@ -1,6 +1,7 @@
package eu.eudat.data.dao.criteria;
import eu.eudat.data.entities.DMP;
import eu.eudat.data.entities.DMPProfile;
import eu.eudat.data.entities.Grant;
import java.util.Date;
@ -10,6 +11,7 @@ import java.util.UUID;
public class DataManagementPlanCriteria extends Criteria<DMP> {
private Date periodStart;
private Date periodEnd;
private DMPProfile profile;
private List<eu.eudat.data.entities.Grant> grants;
private boolean allVersions;
private List<UUID> groupIds;
@ -21,6 +23,7 @@ public class DataManagementPlanCriteria extends Criteria<DMP> {
private boolean isPublic;
private boolean onlyPublic;
private Short grantStatus;
private boolean hasDoi;
public Date getPeriodStart() {
return periodStart;
@ -36,6 +39,13 @@ public class DataManagementPlanCriteria extends Criteria<DMP> {
this.periodEnd = periodEnd;
}
public DMPProfile getProfile() {
return profile;
}
public void setProfile(DMPProfile profile) {
this.profile = profile;
}
public List<Grant> getGrants() {
return grants;
}
@ -114,4 +124,12 @@ public class DataManagementPlanCriteria extends Criteria<DMP> {
public void setGrantStatus(Short grantStatus) {
this.grantStatus = grantStatus;
}
public boolean hasDoi() {
return hasDoi;
}
public void setHasDoi(boolean hasDoi) {
this.hasDoi = hasDoi;
}
}

View File

@ -25,6 +25,7 @@ public class DatasetCriteria extends Criteria<Dataset> {
private List<UUID> groupIds;
private Boolean isPublic;
private Short grantStatus;
private boolean hasDoi;
public boolean getAllVersions() {
return allVersions;
@ -132,4 +133,12 @@ public class DatasetCriteria extends Criteria<Dataset> {
public void setGrantStatus(Short grantStatus) {
this.grantStatus = grantStatus;
}
public boolean hasDoi() {
return hasDoi;
}
public void setHasDoi(boolean hasDoi) {
this.hasDoi = hasDoi;
}
}

View File

@ -1,11 +1,13 @@
package eu.eudat.data.dao.criteria;
import eu.eudat.data.entities.DatasetProfile;
import eu.eudat.data.entities.DescriptionTemplate;
import java.util.Date;
import java.util.List;
import java.util.UUID;
public class DatasetProfileCriteria extends Criteria<DatasetProfile> {
public class DatasetProfileCriteria extends Criteria<DescriptionTemplate> {
public enum DatasetProfileFilter {
DMPs((short) 0), Datasets((short) 1);
@ -23,7 +25,7 @@ public class DatasetProfileCriteria extends Criteria<DatasetProfile> {
case 1:
return Datasets;
default:
throw new RuntimeException("Unsupported DatasetProfile filter");
throw new RuntimeException("Unsupported DescriptionTemplate filter");
}
}
}
@ -34,6 +36,9 @@ public class DatasetProfileCriteria extends Criteria<DatasetProfile> {
private UUID userId;
private boolean finalized;
private Integer status;
private Integer role;
private List<UUID> ids;
private Date periodStart;
public boolean getAllVersions() { return allVersions; }
public void setAllVersions(boolean allVersions) { this.allVersions = allVersions; }
@ -69,4 +74,28 @@ public class DatasetProfileCriteria extends Criteria<DatasetProfile> {
public void setStatus(Integer status) {
this.status = status;
}
public Integer getRole() {
return role;
}
public void setRole(Integer role) {
this.role = role;
}
public List<UUID> getIds() {
return ids;
}
public void setIds(List<UUID> ids) {
this.ids = ids;
}
public Date getPeriodStart() {
return periodStart;
}
public void setPeriodStart(Date periodStart) {
this.periodStart = periodStart;
}
}

View File

@ -1,11 +1,11 @@
package eu.eudat.data.dao.criteria;
import eu.eudat.data.entities.DatasetProfile;
import eu.eudat.data.entities.DescriptionTemplate;
import java.util.UUID;
public class DatasetProfileWizardCriteria extends Criteria<DatasetProfile> {
public class DatasetProfileWizardCriteria extends Criteria<DescriptionTemplate> {
private UUID id;
public UUID getId() {

View File

@ -0,0 +1,6 @@
package eu.eudat.data.dao.criteria;
import eu.eudat.data.entities.EmailConfirmation;
public class EmailConfirmationCriteria extends Criteria<EmailConfirmation>{
}

View File

@ -2,8 +2,12 @@ package eu.eudat.data.dao.criteria;
import eu.eudat.data.entities.Funder;
import java.util.Date;
public class FunderCriteria extends Criteria<Funder> {
private String reference;
private String exactReference;
private Date periodStart;
public String getReference() {
return reference;
@ -11,4 +15,20 @@ public class FunderCriteria extends Criteria<Funder> {
public void setReference(String reference) {
this.reference = reference;
}
public String getExactReference() {
return exactReference;
}
public void setExactReference(String exactReference) {
this.exactReference = exactReference;
}
public Date getPeriodStart() {
return periodStart;
}
public void setPeriodStart(Date periodStart) {
this.periodStart = periodStart;
}
}

View File

@ -13,6 +13,8 @@ public class GrantCriteria extends Criteria<Grant> {
private boolean isPublic;
private String funderId;
private String funderReference;
private String exactReference;
private boolean isActive;
public Date getPeriodStart() {
return periodStart;
@ -62,4 +64,20 @@ public class GrantCriteria extends Criteria<Grant> {
public void setFunderReference(String funderReference) {
this.funderReference = funderReference;
}
public String getExactReference() {
return exactReference;
}
public void setExactReference(String exactReference) {
this.exactReference = exactReference;
}
public boolean isActive() {
return isActive;
}
public void setActive(boolean active) {
isActive = active;
}
}

View File

@ -1,6 +0,0 @@
package eu.eudat.data.dao.criteria;
import eu.eudat.data.entities.LoginConfirmationEmail;
public class LoginConfirmationEmailCriteria extends Criteria<LoginConfirmationEmail>{
}

View File

@ -5,6 +5,7 @@ import eu.eudat.data.entities.Organisation;
public class OrganisationCriteria extends Criteria<Organisation> {
private String labelLike;
private Boolean isPublic;
private boolean isActive;
public String getLabelLike() {
return labelLike;
@ -19,4 +20,12 @@ public class OrganisationCriteria extends Criteria<Organisation> {
public void setPublic(Boolean aPublic) {
isPublic = aPublic;
}
public boolean isActive() {
return isActive;
}
public void setActive(boolean active) {
isActive = active;
}
}

View File

@ -2,8 +2,12 @@ package eu.eudat.data.dao.criteria;
import eu.eudat.data.entities.Project;
import java.util.Date;
public class ProjectCriteria extends Criteria<Project> {
private String reference;
private String exactReference;
private Date periodStart;
public String getReference() {
return reference;
@ -11,4 +15,20 @@ public class ProjectCriteria extends Criteria<Project> {
public void setReference(String reference) {
this.reference = reference;
}
public String getExactReference() {
return exactReference;
}
public void setExactReference(String exactReference) {
this.exactReference = exactReference;
}
public Date getPeriodStart() {
return periodStart;
}
public void setPeriodStart(Date periodStart) {
this.periodStart = periodStart;
}
}

View File

@ -2,8 +2,12 @@ package eu.eudat.data.dao.criteria;
import eu.eudat.data.entities.Researcher;
import java.util.Date;
public class ResearcherCriteria extends Criteria<Researcher> {
private String name;
private String reference;
private Date periodStart;
public String getName() {
return name;
@ -12,4 +16,20 @@ public class ResearcherCriteria extends Criteria<Researcher> {
public void setName(String name) {
this.name = name;
}
public String getReference() {
return reference;
}
public void setReference(String reference) {
this.reference = reference;
}
public Date getPeriodStart() {
return periodStart;
}
public void setPeriodStart(Date periodStart) {
this.periodStart = periodStart;
}
}

View File

@ -7,6 +7,7 @@ import eu.eudat.queryable.queryableentity.DataEntity;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.transaction.Transactional;
import java.util.Set;
@ -28,6 +29,7 @@ public class DatabaseService<T extends DataEntity> {
return this.databaseCtx.getQueryable(tClass);
}
@Transactional
public T createOrUpdate(T item, Class<T> tClass) {
return this.databaseCtx.createOrUpdate(item, tClass);
}

View File

@ -16,6 +16,7 @@ import org.springframework.stereotype.Component;
import javax.persistence.criteria.Join;
import javax.persistence.criteria.JoinType;
import javax.transaction.Transactional;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
@ -41,6 +42,8 @@ public class DMPDaoImpl extends DatabaseAccess<DMP> implements DMPDao {
query.where((builder, root) -> builder.lessThan(root.get("created"), criteria.getPeriodEnd()));
if (criteria.getPeriodStart() != null)
query.where((builder, root) -> builder.greaterThan(root.get("created"), criteria.getPeriodStart()));
if (criteria.getProfile() != null)
query.where((builder, root) -> builder.equal(root.get("profile"), criteria.getProfile()));
if (criteria.getGrants() != null && !criteria.getGrants().isEmpty())
query.where(((builder, root) -> root.get("grant").in(criteria.getGrants())));
if (!criteria.getAllVersions())
@ -57,7 +60,9 @@ public class DMPDaoImpl extends DatabaseAccess<DMP> implements DMPDao {
query.where((builder, root) -> builder.equal(root.get("status"), DMP.DMPStatus.ACTIVE.getValue()));
}
}
query.where(((builder, root) -> builder.equal(root.get("isPublic"), criteria.getIsPublic())));
if (criteria.getIsPublic()) {
query.where(((builder, root) -> builder.equal(root.get("isPublic"), criteria.getIsPublic())));
}
/*if (criteria.getRole() != null) {
if (criteria.getRole().equals(UserDMP.UserDMPRoles.OWNER.getValue())) {
query.where((builder, root) -> builder.equal(root.join("users", JoinType.LEFT).get("role"), UserDMP.UserDMPRoles.OWNER.getValue()));
@ -72,7 +77,7 @@ public class DMPDaoImpl extends DatabaseAccess<DMP> implements DMPDao {
query.where((builder, root) -> root.join("users", JoinType.LEFT).join("user", JoinType.LEFT).get("id").in(criteria.getCollaborators()));
}
if (criteria.getDatasetTemplates() != null && !criteria.getDatasetTemplates().isEmpty()) {
query.where((builder, root) -> root.join("associatedDmps", JoinType.LEFT).get("id").in(criteria.getDatasetTemplates()));
query.where((builder, root) -> root.join("associatedDmps", JoinType.LEFT).get("datasetprofile").get("id").in(criteria.getDatasetTemplates()));
}
if (criteria.getGrantStatus() != null) {
if (criteria.getGrantStatus().equals(GrantStateType.FINISHED.getValue().shortValue()))
@ -82,6 +87,10 @@ public class DMPDaoImpl extends DatabaseAccess<DMP> implements DMPDao {
builder.or(builder.greaterThan(root.get("grant").get("enddate"), new Date())
, builder.isNull(root.get("grant").get("enddate"))));
}
if (criteria.hasDoi()) {
query.where((builder, root) -> builder.not(builder.isNull(root.join("dois").get("id"))));
}
query.where((builder, root) -> builder.notEqual(root.get("status"), DMP.DMPStatus.DELETED.getValue()));
return query;
}
@ -100,6 +109,7 @@ public class DMPDaoImpl extends DatabaseAccess<DMP> implements DMPDao {
}
@Override
@Transactional
public DMP createOrUpdate(DMP item) {
return this.getDatabaseService().createOrUpdate(item, DMP.class);
}

View File

@ -1,6 +1,7 @@
package eu.eudat.data.dao.entities;
import eu.eudat.data.dao.DatabaseAccessLayer;
import eu.eudat.data.dao.criteria.DataManagementPlanBlueprintCriteria;
import eu.eudat.data.dao.criteria.DataManagementPlanProfileCriteria;
import eu.eudat.data.entities.DMP;
import eu.eudat.data.entities.DMPProfile;
@ -15,4 +16,6 @@ public interface DMPProfileDao extends DatabaseAccessLayer<DMPProfile, UUID> {
QueryableList<DMPProfile> getWithCriteria(DataManagementPlanProfileCriteria criteria);
QueryableList<DMPProfile> getWithCriteriaBlueprint(DataManagementPlanBlueprintCriteria criteria);
}

View File

@ -1,6 +1,7 @@
package eu.eudat.data.dao.entities;
import eu.eudat.data.dao.DatabaseAccess;
import eu.eudat.data.dao.criteria.DataManagementPlanBlueprintCriteria;
import eu.eudat.data.dao.criteria.DataManagementPlanProfileCriteria;
import eu.eudat.data.dao.databaselayer.service.DatabaseService;
import eu.eudat.data.entities.DMPProfile;
@ -65,4 +66,20 @@ public class DMPProfileDaoImpl extends DatabaseAccess<DMPProfile> implements DMP
query.where(((builder, root) -> builder.notEqual(root.get("status"), DMPProfile.Status.DELETED.getValue())));
return query;
}
@Override
public QueryableList<DMPProfile> getWithCriteriaBlueprint(DataManagementPlanBlueprintCriteria criteria){
QueryableList<DMPProfile> query = getDatabaseService().getQueryable(DMPProfile.class);
if (criteria.getLike() != null && !criteria.getLike().isEmpty())
query.where((builder, root) -> builder.like(builder.upper(root.get("label")), "%" + criteria.getLike().toUpperCase() + "%"));
if (criteria.getStatus() != null) {
if (criteria.getStatus() == DMPProfile.Status.FINALIZED.getValue()) {
query.where((builder, root) -> builder.equal(root.get("status"), DMPProfile.Status.FINALIZED.getValue()));
} else if (criteria.getStatus() == DMPProfile.Status.SAVED.getValue()) {
query.where((builder, root) -> builder.equal(root.get("status"), DMPProfile.Status.SAVED.getValue()));
}
}
query.where(((builder, root) -> builder.notEqual(root.get("status"), DMPProfile.Status.DELETED.getValue())));
return query;
}
}

View File

@ -13,6 +13,8 @@ public interface DatasetDao extends DatabaseAccessLayer<Dataset, UUID> {
QueryableList<Dataset> getWithCriteria(DatasetCriteria criteria);
QueryableList<Dataset> filterFromElastic(DatasetCriteria criteria, List<UUID> ids);
QueryableList<Dataset> getAuthenticated(QueryableList<Dataset> query, UserInfo principal, List<Integer> roles);
Dataset isPublicDataset(UUID id);

View File

@ -35,9 +35,9 @@ public class DatasetDaoImpl extends DatabaseAccess<Dataset> implements DatasetDa
if (criteria.getIsPublic() != null && criteria.getIsPublic()) {
query.where((builder, root) -> builder.equal(root.get("dmp").get("isPublic"), true));
query.where((builder, root) -> builder.equal(root.get("status"), Dataset.Status.FINALISED.getValue()));
query.initSubQuery(String.class).where((builder, root) -> builder.equal(root.get("dmp").get("version"),
/*query.initSubQuery(String.class).where((builder, root) -> builder.equal(root.get("dmp").get("version"),
query.<String>subQueryMax((builder1, externalRoot, nestedRoot) -> builder1.equal(externalRoot.get("dmp").get("groupId"), nestedRoot.get("dmp").get("groupId")),
Arrays.asList(new SelectionField(FieldSelectionType.COMPOSITE_FIELD, "dmp:version")), String.class)));
Arrays.asList(new SelectionField(FieldSelectionType.COMPOSITE_FIELD, "dmp:version")), String.class)));*/
}
if (criteria.getLike() != null && !criteria.getLike().isEmpty())
query.where((builder, root) -> builder.or(
@ -78,11 +78,25 @@ public class DatasetDaoImpl extends DatabaseAccess<Dataset> implements DatasetDa
query.where((builder, root) -> root.join("dmp", JoinType.LEFT).join("users", JoinType.LEFT).join("user", JoinType.LEFT).get("id").in(criteria.getCollaborators()));
if (criteria.getDatasetTemplates() != null && !criteria.getDatasetTemplates().isEmpty())
query.where((builder, root) -> root.get("profile").get("id").in(criteria.getDatasetTemplates()));
if (criteria.hasDoi()) {
query.where((builder, root) -> builder.not(builder.isNull(root.join("dmp").join("dois").get("id"))));
}
query.where((builder, root) -> builder.notEqual(root.get("status"), Dataset.Status.DELETED.getValue()));
query.where((builder, root) -> builder.notEqual(root.get("status"), Dataset.Status.CANCELED.getValue()));
return query;
}
public QueryableList<Dataset> filterFromElastic(DatasetCriteria criteria, List<UUID> ids) {
QueryableList<Dataset> query = getDatabaseService().getQueryable(Dataset.getHints(), Dataset.class);
query.where(((builder, root) -> root.get("id").in(ids)));
if (!criteria.getAllVersions())
query.initSubQuery(String.class).where((builder, root) -> builder.equal(root.get("dmp").get("version"), query.<String>subQueryMax((builder1, externalRoot, nestedRoot) -> builder1.and(builder1.equal(externalRoot.get("dmp").get("groupId"), nestedRoot.get("dmp").get("groupId")), builder1.notEqual(nestedRoot.get("dmp").get("status"), DMP.DMPStatus.DELETED.getValue())), Arrays.asList(new SelectionField(FieldSelectionType.COMPOSITE_FIELD, "dmp:version")), String.class)));
return query;
}
@Override
public Dataset createOrUpdate(Dataset item) {
return getDatabaseService().createOrUpdate(item, Dataset.class);
@ -117,6 +131,7 @@ public class DatasetDaoImpl extends DatabaseAccess<Dataset> implements DatasetDa
});
} else {
query.where((builder, root) -> builder.equal(root.join("dmp", JoinType.LEFT).join("users", JoinType.LEFT).join("user", JoinType.LEFT).get("id"), principal.getId()));
}
return query;
}

View File

@ -3,7 +3,6 @@ package eu.eudat.data.dao.entities;
import eu.eudat.data.dao.DatabaseAccess;
import eu.eudat.data.dao.databaselayer.service.DatabaseService;
import eu.eudat.data.entities.DatasetExternalDataset;
import eu.eudat.data.entities.DatasetProfile;
import eu.eudat.queryable.QueryableList;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;

View File

@ -2,15 +2,23 @@ package eu.eudat.data.dao.entities;
import eu.eudat.data.dao.DatabaseAccessLayer;
import eu.eudat.data.dao.criteria.DatasetProfileCriteria;
import eu.eudat.data.entities.DatasetProfile;
import eu.eudat.data.entities.DescriptionTemplate;
import eu.eudat.data.entities.DescriptionTemplateType;
import eu.eudat.queryable.QueryableList;
import java.util.List;
import java.util.UUID;
public interface DatasetProfileDao extends DatabaseAccessLayer<DatasetProfile, UUID> {
public interface DatasetProfileDao extends DatabaseAccessLayer<DescriptionTemplate, UUID> {
QueryableList<DatasetProfile> getWithCriteria(DatasetProfileCriteria criteria);
QueryableList<DescriptionTemplate> getWithCriteria(DatasetProfileCriteria criteria);
QueryableList<DatasetProfile> getAll();
QueryableList<DescriptionTemplate> getAll();
QueryableList<DescriptionTemplate> getAuthenticated(QueryableList<DescriptionTemplate> query, UUID principal, List<Integer> roles);
List<DescriptionTemplate> getAllIds();
Long countWithType(DescriptionTemplateType type);
}

View File

@ -3,7 +3,8 @@ package eu.eudat.data.dao.entities;
import eu.eudat.data.dao.DatabaseAccess;
import eu.eudat.data.dao.criteria.DatasetProfileCriteria;
import eu.eudat.data.dao.databaselayer.service.DatabaseService;
import eu.eudat.data.entities.DatasetProfile;
import eu.eudat.data.entities.DescriptionTemplate;
import eu.eudat.data.entities.DescriptionTemplateType;
import eu.eudat.queryable.QueryableList;
import eu.eudat.queryable.types.FieldSelectionType;
import eu.eudat.queryable.types.SelectionField;
@ -11,22 +12,25 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
import javax.persistence.criteria.Join;
import javax.persistence.criteria.JoinType;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.UUID;
import java.util.concurrent.CompletableFuture;
@Component("datasetProfileDao")
public class DatasetProfileDaoImpl extends DatabaseAccess<DatasetProfile> implements DatasetProfileDao {
public class DatasetProfileDaoImpl extends DatabaseAccess<DescriptionTemplate> implements DatasetProfileDao {
@Autowired
public DatasetProfileDaoImpl(DatabaseService<DatasetProfile> databaseService) {
public DatasetProfileDaoImpl(DatabaseService<DescriptionTemplate> databaseService) {
super(databaseService);
}
@Override
public QueryableList<DatasetProfile> getWithCriteria(DatasetProfileCriteria criteria) {
QueryableList<DatasetProfile> query = getDatabaseService().getQueryable(DatasetProfile.class);
public QueryableList<DescriptionTemplate> getWithCriteria(DatasetProfileCriteria criteria) {
QueryableList<DescriptionTemplate> query = getDatabaseService().getQueryable(DescriptionTemplate.class);
if (criteria.getLike() != null && !criteria.getLike().isEmpty())
query.where((builder, root) -> builder.like(builder.upper(root.get("label")), "%" + criteria.getLike().toUpperCase() + "%"));
if (!criteria.getAllVersions())
@ -55,47 +59,76 @@ public class DatasetProfileDaoImpl extends DatabaseAccess<DatasetProfile> implem
if (criteria.getStatus() != null) {
query.where(((builder, root) -> builder.equal(root.get("status"), criteria.getStatus())));
}
if (criteria.getFinalized()) {
query.where(((builder, root) -> builder.equal(root.get("status"), DatasetProfile.Status.FINALIZED.getValue())));
} else {
query.where(((builder, root) -> builder.notEqual(root.get("status"), DatasetProfile.Status.DELETED.getValue())));
if (criteria.getIds() != null) {
query.where(((builder, root) -> root.get("id").in(criteria.getIds())));
}
if (criteria.getFinalized()) {
query.where(((builder, root) -> builder.equal(root.get("status"), DescriptionTemplate.Status.FINALIZED.getValue())));
} else {
query.where(((builder, root) -> builder.notEqual(root.get("status"), DescriptionTemplate.Status.DELETED.getValue())));
}
if (criteria.getPeriodStart() != null)
query.where((builder, root) -> builder.greaterThanOrEqualTo(root.get("created"), criteria.getPeriodStart()));
return query;
}
@Override
public DatasetProfile createOrUpdate(DatasetProfile item) {
return this.getDatabaseService().createOrUpdate(item, DatasetProfile.class);
public DescriptionTemplate createOrUpdate(DescriptionTemplate item) {
return this.getDatabaseService().createOrUpdate(item, DescriptionTemplate.class);
}
@Override
public DatasetProfile find(UUID id) {
return getDatabaseService().getQueryable(DatasetProfile.class).where((builder, root) -> builder.equal(root.get("id"), id)).getSingle();
public DescriptionTemplate find(UUID id) {
return getDatabaseService().getQueryable(DescriptionTemplate.class).where((builder, root) -> builder.equal(root.get("id"), id)).getSingle();
}
@Override
public QueryableList<DatasetProfile> getAll() {
return getDatabaseService().getQueryable(DatasetProfile.class);
public QueryableList<DescriptionTemplate> getAll() {
return getDatabaseService().getQueryable(DescriptionTemplate.class);
}
@Override
public void delete(DatasetProfile item) {
public List<DescriptionTemplate> getAllIds(){
return getDatabaseService().getQueryable(DescriptionTemplate.class).withFields(Collections.singletonList("id")).toList();
}
@Override
public void delete(DescriptionTemplate item) {
this.getDatabaseService().delete(item);
}
@Override
public QueryableList<DatasetProfile> asQueryable() {
return this.getDatabaseService().getQueryable(DatasetProfile.class);
public QueryableList<DescriptionTemplate> asQueryable() {
return this.getDatabaseService().getQueryable(DescriptionTemplate.class);
}
@Async
@Override
public CompletableFuture<DatasetProfile> createOrUpdateAsync(DatasetProfile item) {
public CompletableFuture<DescriptionTemplate> createOrUpdateAsync(DescriptionTemplate item) {
return CompletableFuture.supplyAsync(() -> this.createOrUpdate(item));
}
@Override
public DatasetProfile find(UUID id, String hint) {
public DescriptionTemplate find(UUID id, String hint) {
throw new UnsupportedOperationException();
}
@Override
public QueryableList<DescriptionTemplate> getAuthenticated(QueryableList<DescriptionTemplate> query, UUID principal, List<Integer> roles) {
if (roles != null && !roles.isEmpty()) {
query.where((builder, root) -> {
Join userJoin = root.join("users", JoinType.LEFT);
return builder.and(builder.equal(userJoin.join("user", JoinType.LEFT).get("id"), principal), userJoin.get("role").in(roles));
});
} else {
query.where((builder, root) -> builder.equal(root.join("users", JoinType.LEFT).join("user", JoinType.LEFT).get("id"), principal));
}
return query;
}
@Override
public Long countWithType(DescriptionTemplateType type) {
return this.getDatabaseService().getQueryable(DescriptionTemplate.class).where((builder, root) -> builder.equal(root.get("type"), type)).count();
}
}

View File

@ -1,7 +1,6 @@
package eu.eudat.data.dao.entities;
import eu.eudat.data.dao.DatabaseAccessLayer;
import eu.eudat.data.entities.DatasetProfile;
import eu.eudat.data.entities.DatasetService;
import java.util.UUID;

View File

@ -2,8 +2,6 @@ package eu.eudat.data.dao.entities;
import eu.eudat.data.dao.DatabaseAccess;
import eu.eudat.data.dao.databaselayer.service.DatabaseService;
import eu.eudat.data.entities.DatasetExternalDataset;
import eu.eudat.data.entities.DatasetProfile;
import eu.eudat.data.entities.DatasetService;
import eu.eudat.queryable.QueryableList;
import org.springframework.beans.factory.annotation.Autowired;

View File

@ -0,0 +1,10 @@
package eu.eudat.data.dao.entities;
import eu.eudat.data.dao.DatabaseAccessLayer;
import eu.eudat.data.entities.DescriptionTemplateType;
import java.util.UUID;
public interface DescriptionTemplateTypeDao extends DatabaseAccessLayer<DescriptionTemplateType, UUID> {
DescriptionTemplateType findFromName(String name);
}

View File

@ -0,0 +1,65 @@
package eu.eudat.data.dao.entities;
import eu.eudat.data.dao.DatabaseAccess;
import eu.eudat.data.dao.databaselayer.service.DatabaseService;
import eu.eudat.data.entities.DescriptionTemplateType;
import eu.eudat.queryable.QueryableList;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
import javax.transaction.Transactional;
import java.util.UUID;
import java.util.concurrent.CompletableFuture;
@Component("descriptionTemplateTypeDao")
public class DescriptionTemplateTypeDaoImpl extends DatabaseAccess<DescriptionTemplateType> implements DescriptionTemplateTypeDao {
@Autowired
public DescriptionTemplateTypeDaoImpl(DatabaseService<DescriptionTemplateType> databaseService) {
super(databaseService);
}
@Override
public DescriptionTemplateType findFromName(String name){
try {
return this.getDatabaseService().getQueryable(DescriptionTemplateType.class).where((builder, root) -> builder.and(builder.equal(root.get("name"), name), builder.notEqual(root.get("status"), DescriptionTemplateType.Status.DELETED.getValue()))).getSingle();
}
catch(Exception e){
return null;
}
}
@Override
@Transactional
public DescriptionTemplateType createOrUpdate(DescriptionTemplateType item) {
return this.getDatabaseService().createOrUpdate(item, DescriptionTemplateType.class);
}
@Override
public DescriptionTemplateType find(UUID id) {
return getDatabaseService().getQueryable(DescriptionTemplateType.class).where((builder, root) -> builder.equal((root.get("id")), id)).getSingle();
}
@Override
public void delete(DescriptionTemplateType item) {
this.getDatabaseService().delete(item);
}
@Override
public QueryableList<DescriptionTemplateType> asQueryable() {
return this.getDatabaseService().getQueryable(DescriptionTemplateType.class).where((builder, root) -> builder.notEqual((root.get("status")), DescriptionTemplateType.Status.DELETED.getValue()));
}
@Async
@Override
public CompletableFuture<DescriptionTemplateType> createOrUpdateAsync(DescriptionTemplateType item) {
return CompletableFuture.supplyAsync(() -> this.createOrUpdate(item));
}
@Override
public DescriptionTemplateType find(UUID id, String hint) {
throw new UnsupportedOperationException();
}
}

View File

@ -0,0 +1,9 @@
package eu.eudat.data.dao.entities;
import eu.eudat.data.dao.DatabaseAccessLayer;
import eu.eudat.data.entities.DMPDatasetProfile;
import java.util.UUID;
public interface DmpDatasetProfileDao extends DatabaseAccessLayer<DMPDatasetProfile, UUID> {
}

View File

@ -0,0 +1,52 @@
package eu.eudat.data.dao.entities;
import eu.eudat.data.dao.DatabaseAccess;
import eu.eudat.data.dao.databaselayer.service.DatabaseService;
import eu.eudat.data.entities.Content;
import eu.eudat.data.entities.DMPDatasetProfile;
import eu.eudat.queryable.QueryableList;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import java.util.UUID;
import java.util.concurrent.CompletableFuture;
@Service("dmpDatasetProfileDao")
public class DmpDatasetProfileDaoImpl extends DatabaseAccess<DMPDatasetProfile> implements DmpDatasetProfileDao {
@Autowired
public DmpDatasetProfileDaoImpl(DatabaseService<DMPDatasetProfile> databaseService) {
super(databaseService);
}
@Override
public DMPDatasetProfile createOrUpdate(DMPDatasetProfile item) {
return this.getDatabaseService().createOrUpdate(item, DMPDatasetProfile.class);
}
@Override
@Async
public CompletableFuture<DMPDatasetProfile> createOrUpdateAsync(DMPDatasetProfile item) {
return CompletableFuture.supplyAsync(() -> this.createOrUpdate(item));
}
@Override
public DMPDatasetProfile find(UUID id) {
return this.getDatabaseService().getQueryable(DMPDatasetProfile.class).where((builder, root) -> builder.equal(root.get("id"), id)).getSingle();
}
@Override
public DMPDatasetProfile find(UUID id, String hint) {
throw new UnsupportedOperationException();
}
@Override
public void delete(DMPDatasetProfile item) {
this.getDatabaseService().delete(item);
}
@Override
public QueryableList<DMPDatasetProfile> asQueryable() {
return this.getDatabaseService().getQueryable(DMPDatasetProfile.class);
}
}

View File

@ -1,11 +0,0 @@
package eu.eudat.data.dao.entities;
import eu.eudat.data.dao.DatabaseAccessLayer;
import eu.eudat.data.entities.DoiFunder;
import java.util.UUID;
public interface DoiFunderDao extends DatabaseAccessLayer<DoiFunder, UUID> {
DoiFunder findFunderByName(String name);
}

View File

@ -1,55 +0,0 @@
package eu.eudat.data.dao.entities;
import eu.eudat.data.dao.DatabaseAccess;
import eu.eudat.data.dao.databaselayer.service.DatabaseService;
import eu.eudat.data.entities.DoiFunder;
import eu.eudat.queryable.QueryableList;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.UUID;
import java.util.concurrent.CompletableFuture;
@Component("DoiFunderDao")
public class DoiFunderDaoImpl extends DatabaseAccess<DoiFunder> implements DoiFunderDao {
@Autowired
public DoiFunderDaoImpl(DatabaseService<DoiFunder> databaseService) {
super(databaseService);
}
@Override
public DoiFunder findFunderByName(String name) {
return this.asQueryable().toList().stream().filter(doiFunder -> name.contains(doiFunder.getName()) || doiFunder.getName().contains(name)).findFirst().orElse(null);
}
@Override
public DoiFunder createOrUpdate(DoiFunder item) {
return this.getDatabaseService().createOrUpdate(item, DoiFunder.class);
}
@Override
public CompletableFuture<DoiFunder> createOrUpdateAsync(DoiFunder item) {
return CompletableFuture.supplyAsync(() -> this.createOrUpdate(item));
}
@Override
public DoiFunder find(UUID id) {
return this.getDatabaseService().getQueryable(DoiFunder.class).where(((builder, root) -> builder.equal(root.get("id"), id))).getSingle();
}
@Override
public DoiFunder find(UUID id, String hint) {
throw new UnsupportedOperationException();
}
@Override
public void delete(DoiFunder item) {
this.getDatabaseService().delete(item);
}
@Override
public QueryableList<DoiFunder> asQueryable() {
return this.getDatabaseService().getQueryable(DoiFunder.class);
}
}

View File

@ -0,0 +1,13 @@
package eu.eudat.data.dao.entities;
import eu.eudat.data.dao.DatabaseAccessLayer;
import eu.eudat.data.dao.criteria.EmailConfirmationCriteria;
import eu.eudat.data.entities.EmailConfirmation;
import eu.eudat.queryable.QueryableList;
import java.util.UUID;
public interface EmailConfirmationDao extends DatabaseAccessLayer<EmailConfirmation, UUID> {
QueryableList<EmailConfirmation> getWithCriteria(EmailConfirmationCriteria criteria);
}

View File

@ -0,0 +1,56 @@
package eu.eudat.data.dao.entities;
import eu.eudat.data.dao.DatabaseAccess;
import eu.eudat.data.dao.criteria.EmailConfirmationCriteria;
import eu.eudat.data.dao.databaselayer.service.DatabaseService;
import eu.eudat.data.entities.EmailConfirmation;
import eu.eudat.queryable.QueryableList;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.UUID;
import java.util.concurrent.CompletableFuture;
@Service("LoginConfirmationEmailDao")
public class EmailConfirmationDaoImpl extends DatabaseAccess<EmailConfirmation> implements EmailConfirmationDao {
@Autowired
public EmailConfirmationDaoImpl(DatabaseService<EmailConfirmation> databaseService) {
super(databaseService);
}
@Override
public QueryableList<EmailConfirmation> getWithCriteria(EmailConfirmationCriteria criteria) {
return null;
}
@Override
public EmailConfirmation createOrUpdate(EmailConfirmation item) {
return this.getDatabaseService().createOrUpdate(item, EmailConfirmation.class);
}
@Override
public CompletableFuture<EmailConfirmation> createOrUpdateAsync(EmailConfirmation item) {
return null;
}
@Override
public EmailConfirmation find(UUID id) {
return this.getDatabaseService().getQueryable(EmailConfirmation.class).where((builder, root) -> builder.equal(root.get("id"), id)).getSingle();
}
@Override
public EmailConfirmation find(UUID id, String hint) {
throw new UnsupportedOperationException();
}
@Override
public void delete(EmailConfirmation item) {
throw new UnsupportedOperationException();
}
@Override
public QueryableList<EmailConfirmation> asQueryable() {
return this.getDatabaseService().getQueryable(EmailConfirmation.class);
}
}

View File

@ -0,0 +1,10 @@
package eu.eudat.data.dao.entities;
import eu.eudat.data.dao.DatabaseAccessLayer;
import eu.eudat.data.entities.EntityDoi;
import java.util.UUID;
public interface EntityDoiDao extends DatabaseAccessLayer<EntityDoi, UUID> {
EntityDoi findFromDoi(String doi);
}

View File

@ -0,0 +1,56 @@
package eu.eudat.data.dao.entities;
import eu.eudat.data.dao.DatabaseAccess;
import eu.eudat.data.dao.databaselayer.service.DatabaseService;
import eu.eudat.data.entities.EntityDoi;
import eu.eudat.queryable.QueryableList;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.UUID;
import java.util.concurrent.CompletableFuture;
@Component("EntityDoiDao")
public class EntityDoiDaoImpl extends DatabaseAccess<EntityDoi> implements EntityDoiDao {
@Autowired
public EntityDoiDaoImpl(DatabaseService<EntityDoi> databaseService){
super(databaseService);
}
@Override
public EntityDoi createOrUpdate(EntityDoi item) {
return this.getDatabaseService().createOrUpdate(item, EntityDoi.class);
}
@Override
public CompletableFuture<EntityDoi> createOrUpdateAsync(EntityDoi item) {
return CompletableFuture.supplyAsync(() -> this.createOrUpdate(item));
}
@Override
public EntityDoi find(UUID id) {
return this.getDatabaseService().getQueryable(EntityDoi.class).where((builder, root) -> builder.equal(root.get("id"), id)).getSingle();
}
@Override
public EntityDoi findFromDoi(String doi) {
return this.getDatabaseService().getQueryable(EntityDoi.class).where((builder, root) -> builder.equal(root.get("doi"), doi)).getSingle();
}
@Override
public EntityDoi find(UUID id, String hint) {
return null;
}
@Override
public void delete(EntityDoi item) {
this.getDatabaseService().delete(item);
}
@Override
public QueryableList<EntityDoi> asQueryable() {
return this.getDatabaseService().getQueryable(EntityDoi.class);
}
}

View File

@ -0,0 +1,11 @@
package eu.eudat.data.dao.entities;
import eu.eudat.data.dao.DatabaseAccessLayer;
import eu.eudat.data.entities.FileUpload;
import java.util.List;
import java.util.UUID;
public interface FileUploadDao extends DatabaseAccessLayer<FileUpload, UUID> {
List<FileUpload> getFileUploads(UUID entityId);
}

View File

@ -0,0 +1,56 @@
package eu.eudat.data.dao.entities;
import eu.eudat.data.dao.DatabaseAccess;
import eu.eudat.data.dao.databaselayer.service.DatabaseService;
import eu.eudat.data.entities.FileUpload;
import eu.eudat.queryable.QueryableList;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.UUID;
import java.util.concurrent.CompletableFuture;
@Component("FileUploadDao")
public class FileUploadDaoImpl extends DatabaseAccess<FileUpload> implements FileUploadDao {
@Autowired
public FileUploadDaoImpl(DatabaseService<FileUpload> databaseService) {
super(databaseService);
}
@Override
public FileUpload createOrUpdate(FileUpload item) {
return getDatabaseService().createOrUpdate(item, FileUpload.class);
}
//
@Override
public CompletableFuture<FileUpload> createOrUpdateAsync(FileUpload item) {
return CompletableFuture.supplyAsync(() -> this.createOrUpdate(item));
}
@Override
public FileUpload find(UUID id) {
return getDatabaseService().getQueryable(FileUpload.class).where((builder, root) -> builder.equal(root.get("id"), id)).getSingle();
}
@Override
public List<FileUpload> getFileUploads(UUID entityId) {
return this.getDatabaseService().getQueryable(FileUpload.class).where((builder, root) -> builder.equal(root.get("entityId"), entityId)).toList();
}
@Override
public FileUpload find(UUID id, String hint) {
return null;
}
@Override
public void delete(FileUpload item) {
this.getDatabaseService().delete(item);
}
@Override
public QueryableList<FileUpload> asQueryable() {
return this.getDatabaseService().getQueryable(FileUpload.class);
}
}

View File

@ -29,6 +29,10 @@ public class FunderDaoImpl extends DatabaseAccess<Funder> implements FunderDao {
builder.or(builder.like(builder.upper(root.get("definition")), "%" + criteria.getLike().toUpperCase() + "%"))));
if (criteria.getReference() != null)
query.where((builder, root) -> builder.like(builder.upper(root.get("reference")), "%" + criteria.getReference().toUpperCase() + "%"));
if (criteria.getExactReference() != null)
query.where((builder, root) -> builder.like(builder.upper(root.get("reference")), criteria.getExactReference().toUpperCase()));
if (criteria.getPeriodStart() != null)
query.where((builder, root) -> builder.greaterThanOrEqualTo(root.get("created"), criteria.getPeriodStart()));
query.where((builder, root) -> builder.notEqual(root.get("status"), Funder.Status.DELETED.getValue()));
return query;
}

View File

@ -39,6 +39,8 @@ public class GrantDaoImpl extends DatabaseAccess<Grant> implements GrantDao {
query.where((builder, root) -> builder.greaterThan(root.get("startdate"), criteria.getPeriodStart()));
if (criteria.getReference() != null)
query.where((builder, root) -> builder.like(root.get("reference"), "%" + criteria.getReference() + "%"));
if (criteria.getExactReference() != null)
query.where((builder, root) -> builder.like(root.get("reference"), criteria.getExactReference()));
if (criteria.getGrantStateType() != null) {
if (criteria.getGrantStateType().equals(GrantStateType.FINISHED.getValue()))
query.where((builder, root) -> builder.lessThan(root.get("enddate"), new Date()));
@ -50,6 +52,10 @@ public class GrantDaoImpl extends DatabaseAccess<Grant> implements GrantDao {
if (criteria.isPublic()) {
query.where((builder, root) -> builder.equal(root.join("dmps").get("status"), DMP.DMPStatus.FINALISED.getValue())).distinct();
}
if (criteria.isActive()) {
query.where((builder, root) -> builder.notEqual(root.join("dmps").get("status"), DMP.DMPStatus.DELETED.getValue())).distinct();
}
if (criteria.getFunderId() != null && !criteria.getFunderId().trim().isEmpty())
query.where((builder, root) -> builder.equal(root.get("funder").get("id"), UUID.fromString(criteria.getFunderId())));
if (criteria.getFunderReference() != null && !criteria.getFunderReference().isEmpty())
@ -79,7 +85,7 @@ public class GrantDaoImpl extends DatabaseAccess<Grant> implements GrantDao {
}
public QueryableList<Grant> getAuthenticated(QueryableList<Grant> query, UserInfo principal) {
query.where((builder, root) -> builder.or(builder.equal(root.get("creationUser"), principal), builder.equal(root.join("dmps", JoinType.LEFT).join("users", JoinType.LEFT).join("user", JoinType.LEFT).get("id"), principal.getId()))).distinct();
query.where((builder, root) -> builder.equal(root.get("creationUser").get("id"), principal.getId())).distinct();
return query;
}

View File

@ -1,13 +0,0 @@
package eu.eudat.data.dao.entities;
import eu.eudat.data.dao.DatabaseAccessLayer;
import eu.eudat.data.dao.criteria.LoginConfirmationEmailCriteria;
import eu.eudat.data.entities.LoginConfirmationEmail;
import eu.eudat.queryable.QueryableList;
import java.util.UUID;
public interface LoginConfirmationEmailDao extends DatabaseAccessLayer<LoginConfirmationEmail, UUID> {
QueryableList<LoginConfirmationEmail> getWithCriteria(LoginConfirmationEmailCriteria criteria);
}

View File

@ -1,56 +0,0 @@
package eu.eudat.data.dao.entities;
import eu.eudat.data.dao.DatabaseAccess;
import eu.eudat.data.dao.criteria.LoginConfirmationEmailCriteria;
import eu.eudat.data.dao.databaselayer.service.DatabaseService;
import eu.eudat.data.entities.LoginConfirmationEmail;
import eu.eudat.queryable.QueryableList;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.UUID;
import java.util.concurrent.CompletableFuture;
@Service("LoginConfirmationEmailDao")
public class LoginConfirmationEmailDaoImpl extends DatabaseAccess<LoginConfirmationEmail> implements LoginConfirmationEmailDao {
@Autowired
public LoginConfirmationEmailDaoImpl(DatabaseService<LoginConfirmationEmail> databaseService) {
super(databaseService);
}
@Override
public QueryableList<LoginConfirmationEmail> getWithCriteria(LoginConfirmationEmailCriteria criteria) {
return null;
}
@Override
public LoginConfirmationEmail createOrUpdate(LoginConfirmationEmail item) {
return this.getDatabaseService().createOrUpdate(item, LoginConfirmationEmail.class);
}
@Override
public CompletableFuture<LoginConfirmationEmail> createOrUpdateAsync(LoginConfirmationEmail item) {
return null;
}
@Override
public LoginConfirmationEmail find(UUID id) {
return this.getDatabaseService().getQueryable(LoginConfirmationEmail.class).where((builder, root) -> builder.equal(root.get("id"), id)).getSingle();
}
@Override
public LoginConfirmationEmail find(UUID id, String hint) {
throw new UnsupportedOperationException();
}
@Override
public void delete(LoginConfirmationEmail item) {
throw new UnsupportedOperationException();
}
@Override
public QueryableList<LoginConfirmationEmail> asQueryable() {
return this.getDatabaseService().getQueryable(LoginConfirmationEmail.class);
}
}

View File

@ -26,14 +26,23 @@ public class OrganisationDaoImpl extends DatabaseAccess<Organisation> implements
@Override
public QueryableList<Organisation> getWithCriteria(OrganisationCriteria criteria) {
QueryableList<Organisation> query = this.getDatabaseService().getQueryable(Organisation.class);
if (criteria.getLike() != null)
query.where((builder, root) -> builder.equal(root.get("reference"), criteria.getLike()));
if (criteria.getLabelLike() != null) {
query.where((builder, root) -> builder.like(builder.upper(root.get("label")), "%" + criteria.getLabelLike().toUpperCase() + "%"));
if (criteria.getLabelLike() != null && criteria.getLike() != null) {
query.where((builder, root) -> builder.or(builder.equal(root.get("reference"), criteria.getLike()), builder.like(builder.upper(root.get("label")), "%" + criteria.getLabelLike().toUpperCase() + "%")));
} else {
if (criteria.getLike() != null)
query.where((builder, root) -> builder.equal(root.get("reference"), criteria.getLike()));
if (criteria.getLabelLike() != null) {
query.where((builder, root) -> builder.like(builder.upper(root.get("label")), "%" + criteria.getLabelLike().toUpperCase() + "%"));
}
if (criteria.getPublic() != null && criteria.getPublic()) {
query.where((builder, root) -> builder.equal(root.join("dmps", JoinType.LEFT).get("status"), DMP.DMPStatus.FINALISED.getValue()));
}
}
if (criteria.getPublic() != null && criteria.getPublic()) {
query.where((builder, root) -> builder.equal(root.join("dmps", JoinType.LEFT).get("status"), DMP.DMPStatus.FINALISED.getValue()));
if (criteria.isActive()) {
query.where((builder, root) -> builder.notEqual(root.join("dmps").get("status"), DMP.DMPStatus.DELETED.getValue())).distinct();
}
return query;
}
@ -64,7 +73,7 @@ public class OrganisationDaoImpl extends DatabaseAccess<Organisation> implements
}
public QueryableList<Organisation> getAuthenticated(QueryableList<Organisation> query, UserInfo principal) {
query.where((builder, root) -> builder.equal(root.join("dmps").get("creator"), principal));
query.where((builder, root) -> builder.equal(root.join("dmps").join("users").get("user"), principal));
return query;
}

View File

@ -28,6 +28,10 @@ public class ProjectDaoImpl extends DatabaseAccess<Project> implements ProjectDa
builder.or(builder.like(builder.upper(root.get("description")), "%" + criteria.getLike().toUpperCase() + "%"))));
if (criteria.getReference() != null)
query.where((builder, root) -> builder.like(root.get("reference"), "%" + criteria.getReference() + "%"));
if (criteria.getExactReference() != null)
query.where((builder, root) -> builder.like(root.get("reference"), criteria.getExactReference()));
if (criteria.getPeriodStart() != null)
query.where((builder, root) -> builder.greaterThanOrEqualTo(root.get("startdate"), criteria.getPeriodStart()));
query.where((builder, root) -> builder.notEqual(root.get("status"), Project.Status.DELETED.getValue()));
return query;
}

View File

@ -24,9 +24,13 @@ public class ResearcherDaoImpl extends DatabaseAccess<Researcher> implements Res
public QueryableList<Researcher> getWithCriteria(ResearcherCriteria criteria) {
QueryableList<Researcher> query = asQueryable();
if (criteria.getLike() != null && !criteria.getLike().isEmpty())
query.where((builder, root) ->builder.or(builder.like(builder.upper(root.get("reference")), "%" + criteria.getLike().toUpperCase() + "%")));
query.where((builder, root) ->builder.or(builder.like(builder.lower(root.get("reference")), "%" + criteria.getLike().toLowerCase() + "%")));
if (criteria.getName() != null && !criteria.getName().isEmpty())
query.where((builder, root) ->builder.or(builder.like(builder.upper(root.get("label")), "%" + criteria.getName().toUpperCase() + "%")));
query.where((builder, root) ->builder.or(builder.like(builder.lower(root.get("label")), "%" + criteria.getName().toLowerCase() + "%")));
if (criteria.getReference() != null && !criteria.getReference().isEmpty())
query.where((builder, root) ->builder.or(builder.like(root.get("reference"), criteria.getReference())));
if (criteria.getPeriodStart() != null)
query.where((builder, root) -> builder.greaterThanOrEqualTo(root.get("created"), criteria.getPeriodStart()));
return query;
}

View File

@ -0,0 +1,13 @@
package eu.eudat.data.dao.entities;
import eu.eudat.data.dao.DatabaseAccessLayer;
import eu.eudat.data.entities.UserDMP;
import eu.eudat.data.entities.UserDatasetProfile;
import java.util.UUID;
/**
* Created by ikalyvas on 2/8/2018.
*/
public interface UserDatasetProfileDao extends DatabaseAccessLayer<UserDatasetProfile, UUID> {
}

View File

@ -0,0 +1,53 @@
package eu.eudat.data.dao.entities;
import eu.eudat.data.dao.DatabaseAccess;
import eu.eudat.data.dao.databaselayer.service.DatabaseService;
import eu.eudat.data.entities.UserDMP;
import eu.eudat.data.entities.UserDatasetProfile;
import eu.eudat.queryable.QueryableList;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
import java.util.UUID;
import java.util.concurrent.CompletableFuture;
@Component("userDatasetProfileDao")
public class UserDatasetProfileDaoImpl extends DatabaseAccess<UserDatasetProfile> implements UserDatasetProfileDao {
@Autowired
public UserDatasetProfileDaoImpl(DatabaseService<UserDatasetProfile> databaseService) {
super(databaseService);
}
@Override
public UserDatasetProfile createOrUpdate(UserDatasetProfile item) {
return this.getDatabaseService().createOrUpdate(item, UserDatasetProfile.class);
}
@Override
public UserDatasetProfile find(UUID id) {
return this.getDatabaseService().getQueryable(UserDatasetProfile.class).where((builder, root) -> builder.equal(root.get("id"), id)).getSingleOrDefault();
}
@Override
public void delete(UserDatasetProfile item) {
this.getDatabaseService().delete(item);
}
@Override
public QueryableList<UserDatasetProfile> asQueryable() {
return this.getDatabaseService().getQueryable(UserDatasetProfile.class);
}
@Async
@Override
public CompletableFuture<UserDatasetProfile> createOrUpdateAsync(UserDatasetProfile item) {
return CompletableFuture.supplyAsync(() -> this.createOrUpdate(item));
}
@Override
public UserDatasetProfile find(UUID id, String hint) {
throw new UnsupportedOperationException();
}
}

View File

@ -26,6 +26,7 @@ public class UserInfoDaoImpl extends DatabaseAccess<UserInfo> implements UserInf
@Override
public QueryableList<UserInfo> getWithCriteria(UserInfoCriteria criteria) {
QueryableList<UserInfo> users = this.getDatabaseService().getQueryable(UserInfo.class);
users.where(((builder, root) -> builder.equal(root.get("userStatus"), 0)));
if (criteria.getAppRoles() != null && !criteria.getAppRoles().isEmpty())
users.where((builder, root) -> root.join("userRoles").get("role").in(criteria.getAppRoles()));
if (criteria.getLike() != null)

View File

@ -13,7 +13,7 @@ import java.util.UUID;
*/
@Entity
@Table(name = "\"Content\"")
public class Content implements DataEntity<Content, UUID> {
public class Content implements DataEntity<Content, UUID> { //IGNORE ME
public enum ParentType {
GRANT(0);

View File

@ -34,6 +34,8 @@ public class Credential implements DataEntity<Credential, UUID> {
private Integer provider;
@Column(name = "\"Public\"", nullable = false)
private String publicValue;
@Column(name = "\"Email\"")
private String email;
@Column(name = "\"Secret\"", nullable = false)
private String secret;
@ -88,6 +90,14 @@ public class Credential implements DataEntity<Credential, UUID> {
this.publicValue = publicValue;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getSecret() {
return secret;
}
@ -139,6 +149,7 @@ public class Credential implements DataEntity<Credential, UUID> {
public void update(Credential entity) {
this.status = entity.status;
this.publicValue = entity.getPublicValue();
this.email = entity.getEmail();
this.secret = entity.getSecret();
this.lastUpdateTime = new Date();
}

View File

@ -15,17 +15,22 @@ import java.util.stream.Collectors;
@NamedEntityGraphs({
@NamedEntityGraph(
name = "dataManagementPlanListingModel",
attributeNodes = {@NamedAttributeNode("organisations"), @NamedAttributeNode("researchers"), @NamedAttributeNode("associatedDmps"),
@NamedAttributeNode("grant"), @NamedAttributeNode(value = "users", subgraph = "users"), @NamedAttributeNode("creator"), @NamedAttributeNode("profile"), @NamedAttributeNode("dataset")},
subgraphs = {
attributeNodes = {
@NamedAttributeNode("grant"), @NamedAttributeNode("creator"), @NamedAttributeNode("profile")}/*,*/
/*subgraphs = {
@NamedSubgraph(name = "users", attributeNodes = {@NamedAttributeNode("user")}),
}
}*/
),
@NamedEntityGraph(
name = "fullyDetailed",
attributeNodes = {
@NamedAttributeNode("grant"), @NamedAttributeNode("profile"),
@NamedAttributeNode("users"), @NamedAttributeNode("organisations"), @NamedAttributeNode("researchers")}),
@NamedAttributeNode(value = "users", subgraph = "users"), @NamedAttributeNode("organisations"), @NamedAttributeNode("researchers")
},
subgraphs = {
@NamedSubgraph(name = "users", attributeNodes = {@NamedAttributeNode("user")})
}
),
@NamedEntityGraph(
name = "dmpRecentActivity",
attributeNodes = {
@ -107,12 +112,8 @@ public class DMP implements DataEntity<DMP, UUID> {
/*@Type(type = "eu.eudat.configurations.typedefinition.XMLType")
@Column(name = "\"AssociatedDmps\"", columnDefinition = "xml", nullable = true)
private String associatedDmps;*/
@OneToMany(fetch = FetchType.LAZY)
@JoinTable(name = "\"DMPDatasetProfile\"",
joinColumns = {@JoinColumn(name = "\"dmp\"", referencedColumnName = "\"ID\"")},
inverseJoinColumns = {@JoinColumn(name = "\"datasetprofile\"", referencedColumnName = "\"ID\"")}
)
private Set<DatasetProfile> associatedDmps;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "dmp")
private Set<DMPDatasetProfile> associatedDmps;
@ManyToOne(fetch = FetchType.LAZY)
@ -181,8 +182,8 @@ public class DMP implements DataEntity<DMP, UUID> {
@Convert(converter = DateToUTCConverter.class)
private Date publishedAt;
@Column(name = "\"DOI\"")
private String doi;
@OneToMany(mappedBy = "entityId", fetch = FetchType.LAZY)
private Set<EntityDoi> dois;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "\"Project\"")
@ -269,10 +270,10 @@ public class DMP implements DataEntity<DMP, UUID> {
this.grant = grant;
}
public Set<DatasetProfile> getAssociatedDmps() {
public Set<DMPDatasetProfile> getAssociatedDmps() {
return associatedDmps;
}
public void setAssociatedDmps(Set<DatasetProfile> associatedDmps) {
public void setAssociatedDmps(Set<DMPDatasetProfile> associatedDmps) {
this.associatedDmps = associatedDmps;
}
@ -339,12 +340,12 @@ public class DMP implements DataEntity<DMP, UUID> {
this.publishedAt = publishedAt;
}
public String getDoi() {
return doi;
}
public void setDoi(String doi) {
this.doi = doi;
}
public Set<EntityDoi> getDois() {
return dois;
}
public void setDois(Set<EntityDoi> dois) {
this.dois = dois;
}
public Project getProject() {
return project;
@ -380,7 +381,7 @@ public class DMP implements DataEntity<DMP, UUID> {
if (entity.getStatus().equals(DMPStatus.FINALISED.getValue())) this.setFinalizedAt(new Date());
if (entity.isPublic) this.setPublishedAt(new Date());
if (entity.getUsers() != null) this.users = entity.getUsers();
if (entity.getDoi() != null && entity.getDoi().trim().isEmpty()) this.doi = entity.doi;
this.dois = entity.getDois();
this.extraProperties = entity.getExtraProperties();
}

View File

@ -0,0 +1,76 @@
package eu.eudat.data.entities;
import eu.eudat.queryable.queryableentity.DataEntity;
import org.hibernate.annotations.GenericGenerator;
import javax.persistence.*;
import java.util.List;
import java.util.UUID;
@Entity
@Table(name = "\"DMPDatasetProfile\"")
public class DMPDatasetProfile implements DataEntity<DMPDatasetProfile, UUID> {
@Id
@GeneratedValue
@GenericGenerator(name = "uuid2", strategy = "uuid2")
@Column(name = "\"ID\"", updatable = false, nullable = false, columnDefinition = "BINARY(16)")
private UUID id;
@ManyToOne
@JoinColumn(name = "\"dmp\"")
private DMP dmp;
@ManyToOne
@JoinColumn(name = "\"datasetprofile\"")
private DescriptionTemplate datasetprofile;
@Column(name = "\"data\"")
private String data;
public UUID getId() {
return id;
}
public void setId(UUID id) {
this.id = id;
}
public DMP getDmp() {
return dmp;
}
public void setDmp(DMP dmp) {
this.dmp = dmp;
}
public DescriptionTemplate getDatasetprofile() {
return datasetprofile;
}
public void setDatasetprofile(DescriptionTemplate datasetprofile) {
this.datasetprofile = datasetprofile;
}
public String getData() {
return data;
}
public void setData(String data) {
this.data = data;
}
@Override
public void update(DMPDatasetProfile entity) {
this.dmp = entity.getDmp();
this.datasetprofile = entity.getDatasetprofile();
this.data = entity.getData();
}
@Override
public UUID getKeys() {
return this.id;
}
@Override
public DMPDatasetProfile buildFromTuple(List<Tuple> tuple, List<String> fields, String base) {
this.id = UUID.fromString((String) tuple.get(0).get(base.isEmpty() ? base + "." + "id" : "id"));
return this;
}
}

View File

@ -26,14 +26,14 @@ public class DataRepository implements Serializable, DataEntity<DataRepository,
@Column(name = "\"Abbreviation\"")
private String abbreviation;
@Column(name = "\"Reference\"", nullable = false)
@Column(name = "\"Reference\"")
private String reference;
@Column(name = "\"Uri\"")
private String uri;
@Type(type = "eu.eudat.configurations.typedefinition.XMLType")
@Column(name = "\"Definition\"", columnDefinition = "xml", nullable = true)
@Column(name = "\"Definition\"", columnDefinition = "xml")
private String definition;
@OneToMany(mappedBy = "dataRepository", cascade = CascadeType.ALL, orphanRemoval = true)
@ -42,14 +42,14 @@ public class DataRepository implements Serializable, DataEntity<DataRepository,
@Column(name = "\"Status\"", nullable = false)
private Short status;
@Column(name = "\"Created\"")
@Column(name = "\"Created\"", nullable = false)
private Date created = null;
@Column(name = "\"Modified\"")
@Column(name = "\"Modified\"", nullable = false)
private Date modified = new Date();
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "\"CreationUser\"", nullable = true)
@JoinColumn(name = "\"CreationUser\"")
private UserInfo creationUser;

View File

@ -16,13 +16,14 @@ import java.util.stream.Collectors;
@NamedEntityGraphs({
@NamedEntityGraph(
name = "datasetListingModel",
attributeNodes = {@NamedAttributeNode("services"), @NamedAttributeNode(value = "datasetDataRepositories", subgraph = "datasetDataRepositories"),
@NamedAttributeNode(value = "datasetExternalDatasets", subgraph = "datasetExternalDatasets"), @NamedAttributeNode("registries"),
@NamedAttributeNode(value = "dmp", subgraph = "dmp"), @NamedAttributeNode("profile"), @NamedAttributeNode("creator")},
attributeNodes = {/*@NamedAttributeNode("services"), @NamedAttributeNode(value = "datasetDataRepositories", subgraph = "datasetDataRepositories"),
@NamedAttributeNode(value = "datasetExternalDatasets", subgraph = "datasetExternalDatasets"), @NamedAttributeNode("registries"),*/
@NamedAttributeNode(value = "dmp", subgraph = "dmp"), @NamedAttributeNode(value = "profile", subgraph = "profile"), @NamedAttributeNode("creator")},
subgraphs = {
@NamedSubgraph(name = "dmp", attributeNodes = {@NamedAttributeNode("creator"), @NamedAttributeNode("users"), @NamedAttributeNode("grant"), @NamedAttributeNode("organisations")}),
@NamedSubgraph(name = "datasetDataRepositories", attributeNodes = {@NamedAttributeNode("dataRepository")}),
@NamedSubgraph(name = "datasetExternalDatasets", attributeNodes = {@NamedAttributeNode("externalDataset")})
@NamedSubgraph(name = "datasetExternalDatasets", attributeNodes = {@NamedAttributeNode("externalDataset")}),
@NamedSubgraph(name = "profile", attributeNodes = {@NamedAttributeNode("label")})
}),
@NamedEntityGraph(
@ -91,7 +92,7 @@ public class Dataset implements DataEntity<Dataset, UUID> {
@Column(name = "\"ID\"", updatable = false, nullable = false, columnDefinition = "BINARY(16)")
private UUID id;
@Column(name = "\"Label\"")
@Column(name = "\"Label\"", nullable = false)
private String label;
@ManyToOne(fetch = FetchType.LAZY)
@ -99,20 +100,23 @@ public class Dataset implements DataEntity<Dataset, UUID> {
@JoinColumn(name = "\"DMP\"", nullable = false)
private DMP dmp;
@Column(name = "\"DmpSectionIndex\"")
private Integer dmpSectionIndex;
@Column(name = "\"Uri\"")
private String uri;
@Type(type = "eu.eudat.configurations.typedefinition.XMLType")
@Column(name = "\"Properties\"", columnDefinition = "xml", nullable = true)
@Column(name = "\"Properties\"", columnDefinition = "xml")
private String properties;
@ManyToOne(fetch = FetchType.LAZY)
//@Cascade(value=org.hibernate.annotations.CascadeType.ALL)
@JoinColumn(name = "\"Profile\"", nullable = true)
private DatasetProfile profile;
@JoinColumn(name = "\"Profile\"")
private DescriptionTemplate profile;
@Type(type = "eu.eudat.configurations.typedefinition.XMLType")
@Column(name = "\"Reference\"", columnDefinition = "xml", nullable = true)
@Column(name = "\"Reference\"", columnDefinition = "xml")
private String reference;
@OneToMany(fetch = FetchType.LAZY)
@ -135,16 +139,16 @@ public class Dataset implements DataEntity<Dataset, UUID> {
private Short status;
@Column(name = "\"Created\"")
@Column(name = "\"Created\"", nullable = false)
@Convert(converter = DateToUTCConverter.class)
private Date created = null;
@Column(name = "\"Modified\"")
@Column(name = "\"Modified\"", nullable = false)
@Convert(converter = DateToUTCConverter.class)
private Date modified = new Date();
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "\"Creator\"", nullable = true)
@JoinColumn(name = "\"Creator\"")
private UserInfo creator;
@Column(name = "\"Description\"")
@ -231,6 +235,12 @@ public class Dataset implements DataEntity<Dataset, UUID> {
this.dmp = dmp;
}
public Integer getDmpSectionIndex() {
return dmpSectionIndex;
}
public void setDmpSectionIndex(Integer dmpSectionIndex) {
this.dmpSectionIndex = dmpSectionIndex;
}
public String getUri() {
return uri;
@ -248,10 +258,10 @@ public class Dataset implements DataEntity<Dataset, UUID> {
}
public DatasetProfile getProfile() {
public DescriptionTemplate getProfile() {
return profile;
}
public void setProfile(DatasetProfile profile) {
public void setProfile(DescriptionTemplate profile) {
this.profile = profile;
}
@ -327,6 +337,7 @@ public class Dataset implements DataEntity<Dataset, UUID> {
this.setRegistries(entity.getRegistries());
this.setDmp(entity.getDmp());
this.setDmpSectionIndex(entity.getDmpSectionIndex());
this.setStatus(entity.getStatus());
this.setProfile(entity.getProfile());
this.setModified(new Date());

View File

@ -14,8 +14,8 @@ import java.util.UUID;
@Entity
@Table(name = "\"DatasetProfile\"")
public class DatasetProfile implements DataEntity<DatasetProfile,UUID>{
@Table(name = "\"DescriptionTemplate\"")
public class DescriptionTemplate implements DataEntity<DescriptionTemplate,UUID>{
public enum Status {
SAVED((short) 0), FINALIZED((short) 1), DELETED((short) 99);
@ -49,7 +49,7 @@ public class DatasetProfile implements DataEntity<DatasetProfile,UUID>{
@Column(name = "\"ID\"", updatable = false, nullable = false, columnDefinition = "BINARY(16)")
private UUID id;
@Column(name = "\"Label\"")
@Column(name = "\"Label\"", nullable = false)
private String label;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "profile")
@ -79,16 +79,21 @@ public class DatasetProfile implements DataEntity<DatasetProfile,UUID>{
@Column(name = "\"Version\"", nullable = false)
private Short version;
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name = "\"DMPDatasetProfile\"",
joinColumns = {@JoinColumn(name = "\"datasetprofile\"", referencedColumnName = "\"ID\"")},
inverseJoinColumns = {@JoinColumn(name = "\"dmp\"", referencedColumnName = "\"ID\"")}
)
private List<DMP> dmps;
@OneToMany(fetch = FetchType.LAZY)
private Set<DMP> dmps;
@Column(name = "\"Language\"", nullable = false)
private String language;
@OneToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "\"Type\"", nullable = false)
private DescriptionTemplateType type;
@OneToMany(mappedBy = "descriptionTemplate", fetch = FetchType.LAZY)
private Set<UserDatasetProfile> users;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "datasetprofile")
private Set<DMPDatasetProfile> associatedDmps;
public String getDescription() {
return description;
@ -153,18 +158,31 @@ public class DatasetProfile implements DataEntity<DatasetProfile,UUID>{
public String getLanguage() {
return language;
}
public void setLanguage(String language) {
this.language = language;
}
@Override
public String toString() {
return "DatasetProfileListingModel [id=" + id + ", label=" + label + ", dataset=" + dataset + ", definition=" + definition + ", version=" + version + ", language=" + language + "]";
public DescriptionTemplateType getType() {
return type;
}
public void setType(DescriptionTemplateType type) {
this.type = type;
}
public Set<UserDatasetProfile> getUsers() {
return users;
}
public void setUsers(Set<UserDatasetProfile> users) {
this.users = users;
}
@Override
public void update(DatasetProfile entity) {
public String toString() {
return "DatasetProfileListingModel [id=" + id + ", label=" + label + ", dataset=" + dataset + ", definition=" + definition + ", version=" + version + ", language=" + language + ", type=" + type +"]";
}
@Override
public void update(DescriptionTemplate entity) {
}
@Override
@ -173,7 +191,7 @@ public class DatasetProfile implements DataEntity<DatasetProfile,UUID>{
}
@Override
public DatasetProfile buildFromTuple(List<Tuple> tuple, List<String> fields, String base) {
public DescriptionTemplate buildFromTuple(List<Tuple> tuple, List<String> fields, String base) {
this.id = UUID.fromString((String) tuple.get(0).get(base.isEmpty() ? base + "." + "id" : "id"));
return this;
}

View File

@ -0,0 +1,89 @@
package eu.eudat.data.entities;
import eu.eudat.queryable.queryableentity.DataEntity;
import org.hibernate.annotations.GenericGenerator;
import javax.persistence.*;
import java.util.List;
import java.util.UUID;
@Entity
@Table(name = "\"DescriptionTemplateType\"")
public class DescriptionTemplateType implements DataEntity<DescriptionTemplateType, UUID> {
public enum Status {
SAVED((short) 0), FINALIZED((short) 1), DELETED((short) 99);
private short value;
private Status(short value) {
this.value = value;
}
public short getValue() {
return value;
}
public static Status fromInteger(int value) {
switch (value) {
case 0:
return SAVED;
case 1:
return FINALIZED;
case 99:
return DELETED;
default:
throw new RuntimeException("Unsupported Description Template Type Status");
}
}
}
@Id
@GeneratedValue
@GenericGenerator(name = "uuid2", strategy = "uuid2")
@Column(name = "\"ID\"", updatable = false, nullable = false, columnDefinition = "BINARY(16)")
private UUID id;
@Column(name = "\"Name\"", nullable = false)
private String name;
@Column(name = "\"Status\"", nullable = false)
private Short status;
public UUID getId() {
return id;
}
public void setId(UUID id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Short getStatus() {
return status;
}
public void setStatus(Short status) {
this.status = status;
}
@Override
public void update(DescriptionTemplateType entity) {
this.name = entity.name;
this.status = entity.status;
}
@Override
public UUID getKeys() {
return this.id;
}
@Override
public DescriptionTemplateType buildFromTuple(List<Tuple> tuple, List<String> fields, String base) {
this.id = UUID.fromString((String) tuple.get(0).get(!base.isEmpty() ? base + "." + "id" : "id"));
return this;
}
}

View File

@ -1,61 +0,0 @@
package eu.eudat.data.entities;
import eu.eudat.queryable.queryableentity.DataEntity;
import javax.persistence.*;
import java.util.List;
import java.util.UUID;
@Entity
@Table(name = "\"DoiFunder\"")
public class DoiFunder implements DataEntity<DoiFunder, UUID> {
@Id
private UUID id;
@Column(name = "name")
private String name;
@Column(name = "doi")
private String doi;
public UUID getId() {
return id;
}
public void setId(UUID id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDoi() {
return doi;
}
public void setDoi(String doi) {
this.doi = doi;
}
@Override
public void update(DoiFunder entity) {
this.name = entity.name;
this.doi = entity.doi;
}
@Override
public UUID getKeys() {
return id;
}
@Override
public DoiFunder buildFromTuple(List<Tuple> tuple, List<String> fields, String base) {
return null;
}
}

View File

@ -10,8 +10,8 @@ import java.util.List;
import java.util.UUID;
@Entity
@Table(name = "\"LoginConfirmationEmail\"")
public class LoginConfirmationEmail implements DataEntity<LoginConfirmationEmail, UUID> {
@Table(name = "\"EmailConfirmation\"")
public class EmailConfirmation implements DataEntity<EmailConfirmation, UUID> {
@Id
@GeneratedValue
@ -30,6 +30,9 @@ public class LoginConfirmationEmail implements DataEntity<LoginConfirmationEmail
@Column(name = "\"userId\"", nullable = false)
private UUID userId;
@Column(name = "\"data\"")
private String data;
@Column(name = "\"expiresAt\"", nullable = false)
@Convert(converter = DateToUTCConverter.class)
@ -77,9 +80,14 @@ public class LoginConfirmationEmail implements DataEntity<LoginConfirmationEmail
this.expiresAt = expiresAt;
}
public String getData() {
return data;
}
public void setData(String data) {
this.data = data;
}
@Override
public void update(LoginConfirmationEmail entity) {
public void update(EmailConfirmation entity) {
}
@Override
@ -88,7 +96,7 @@ public class LoginConfirmationEmail implements DataEntity<LoginConfirmationEmail
}
@Override
public LoginConfirmationEmail buildFromTuple(List<Tuple> tuple, List<String> fields, String base) {
public EmailConfirmation buildFromTuple(List<Tuple> tuple, List<String> fields, String base) {
return null;
}
}

View File

@ -0,0 +1,121 @@
package eu.eudat.data.entities;
import eu.eudat.data.converters.DateToUTCConverter;
import eu.eudat.data.entities.helpers.EntityBinder;
import eu.eudat.queryable.queryableentity.DataEntity;
import org.hibernate.annotations.Type;
import javax.persistence.*;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.UUID;
import java.util.stream.Collectors;
@Entity
@Table(name = "\"EntityDoi\"")
public class EntityDoi implements DataEntity<EntityDoi, UUID> {
public enum EntityType {
DMP
}
@Id
@Column(name = "\"ID\"", updatable = false, nullable = false, columnDefinition = "BINARY(16)")
private UUID id;
@Enumerated(EnumType.STRING)
@Type(type = "eu.eudat.configurations.typedefinition.PostgreSQLEnumType")
@Column(name = "\"EntityType\"", nullable = false)
private EntityType entityType;
@Column(name = "\"RepositoryId\"", nullable = false)
private String repositoryId;
@Column(name = "\"Doi\"", nullable = false)
private String doi;
@Column(name = "\"CreatedAt\"", nullable = false)
@Convert(converter = DateToUTCConverter.class)
private Date createdAt;
@Column(name = "\"UpdatedAt\"", nullable = false)
@Convert(converter = DateToUTCConverter.class)
private Date updatedAt;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "\"EntityId\"", nullable = false)
private DMP entityId;
public UUID getId() {
return id;
}
public void setId(UUID id) {
this.id = id;
}
public EntityType getEntityType() {
return entityType;
}
public void setEntityType(EntityType entityType) {
this.entityType = entityType;
}
public String getRepositoryId() {
return repositoryId;
}
public void setRepositoryId(String repositoryId) {
this.repositoryId = repositoryId;
}
public String getDoi() {
return doi;
}
public void setDoi(String doi) {
this.doi = doi;
}
public Date getCreatedAt() {
return createdAt;
}
public void setCreatedAt(Date createdAt) {
this.createdAt = createdAt;
}
public Date getUpdatedAt() {
return updatedAt;
}
public void setUpdatedAt(Date updatedAt) {
this.updatedAt = updatedAt;
}
public DMP getEntityId() {
return entityId;
}
public void setEntityId(DMP entityId) {
this.entityId = entityId;
}
@Override
public void update(EntityDoi doi) {
this.entityType = doi.getEntityType();
this.repositoryId = doi.getRepositoryId();
this.doi = doi.getDoi();
this.createdAt = doi.getCreatedAt();
this.updatedAt = doi.getUpdatedAt();
this.entityId = doi.getEntityId();
}
@Override
public UUID getKeys() {
return this.id;
}
@Override
public EntityDoi buildFromTuple(List<Tuple> tuple, List<String> fields, String base) {
String currentBase = base.isEmpty() ? "" : base + ".";
if (fields.contains(currentBase + "id")) this.id = EntityBinder.fromTuple(tuple, currentBase + "id");
if (fields.contains(currentBase + "entityId"))
this.entityId = tuple.stream().map(x -> new DMP().buildFromTuple(Arrays.asList(x), fields , base.isEmpty() ? "entityId" : base + "." + "entityId")).collect(Collectors.toList()).get(0);
return this;
}
}

View File

@ -0,0 +1,129 @@
package eu.eudat.data.entities;
import eu.eudat.data.converters.DateToUTCConverter;
import eu.eudat.data.entities.helpers.EntityBinder;
import eu.eudat.queryable.queryableentity.DataEntity;
import org.hibernate.annotations.Type;
import javax.persistence.*;
import java.util.Date;
import java.util.List;
import java.util.UUID;
import java.util.stream.Collectors;
@Entity
@Table(name = "\"FileUpload\"")
public class FileUpload implements DataEntity<FileUpload, UUID> {
public enum EntityType {
DATASET, DMP
}
@Id
@Column(name = "\"ID\"", updatable = false, nullable = false, columnDefinition = "BINARY(16)")
private UUID id;
@Column(name = "\"Name\"", nullable = false)
private String name;
@Column(name = "\"FileType\"", nullable = false)
private String fileType;
@Column(name = "\"EntityId\"", nullable = false)
private UUID entityId;
@Enumerated(EnumType.STRING)
@Type(type = "eu.eudat.configurations.typedefinition.PostgreSQLEnumType")
@Column(name = "\"EntityType\"", nullable = false)
private EntityType entityType;
@Column(name = "\"CreatedAt\"", nullable = false)
@Convert(converter = DateToUTCConverter.class)
private Date createdAt;
@Column(name = "\"IsDeleted\"", nullable = false)
private Boolean isDeleted;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "\"Creator\"")
private UserInfo creator;
public UUID getId() {
return id;
}
public void setId(UUID id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getFileType() {
return fileType;
}
public void setFileType(String fileType) {
this.fileType = fileType;
}
public UUID getEntityId() {
return entityId;
}
public void setEntityId(UUID entityId) {
this.entityId = entityId;
}
public EntityType getEntityType() {
return entityType;
}
public void setEntityType(EntityType entityType) {
this.entityType = entityType;
}
public Date getCreatedAt() {
return createdAt;
}
public void setCreatedAt(Date createdAt) {
this.createdAt = createdAt;
}
public Boolean getIsDeleted() {
return isDeleted;
}
public void setIsDeleted(Boolean isDeleted) {
this.isDeleted = isDeleted;
}
public UserInfo getCreator() {
return creator;
}
public void setCreator(UserInfo creator) {
this.creator = creator;
}
@Override
public void update(FileUpload file) {
this.name = file.getName();
this.fileType = file.getFileType();
this.entityId = file.getEntityId();
this.entityType = file.getEntityType();
this.createdAt = file.getCreatedAt();
this.isDeleted = file.getIsDeleted();
this.creator = file.getCreator();
}
@Override
public UUID getKeys() {
return this.id;
}
@Override
public FileUpload buildFromTuple(List<Tuple> tuple, List<String> fields, String base) {
String currentBase = base.isEmpty() ? "" : base + ".";
if (fields.contains(currentBase + "id")) this.id = EntityBinder.fromTuple(tuple, currentBase + "id");
this.creator = tuple.stream().map(x -> new UserInfo().buildFromTuple(tuple, fields , base.isEmpty() ? "creator" : base + "." + "creator")).collect(Collectors.toList()).get(0);
return this;
}
}

View File

@ -106,11 +106,11 @@ public class Grant implements DataEntity<Grant, UUID> {
@Column(name = "\"Definition\"", columnDefinition = "xml", nullable = true)
private String definition;
@Column(name = "\"StartDate\"", nullable = false)
@Column(name = "\"StartDate\"", nullable = true)
@Convert(converter = DateToUTCConverter.class)
private Date startdate = null;
@Column(name = "\"EndDate\"", nullable = false)
@Column(name = "\"EndDate\"", nullable = true)
@Convert(converter = DateToUTCConverter.class)
private Date enddate = null;

View File

@ -24,7 +24,7 @@ public class Researcher implements DataEntity<Researcher, UUID> {
@Column(name = "\"ID\"", updatable = false, nullable = false, columnDefinition = "BINARY(16)")
private UUID id;
@Column(name = "\"Label\"")
@Column(name = "\"Label\"", nullable = false, length = 250)
private String label;
@Column(name = "\"Uri\"")

View File

@ -0,0 +1,79 @@
package eu.eudat.data.entities;
import eu.eudat.data.entities.helpers.EntityBinder;
import eu.eudat.queryable.queryableentity.DataEntity;
import org.hibernate.annotations.GenericGenerator;
import javax.persistence.*;
import java.util.List;
import java.util.UUID;
@Entity
@Table(name = "\"UserDatasetProfile\"")
public class UserDatasetProfile implements DataEntity<UserDatasetProfile, UUID> {
@Id
@GeneratedValue
@GenericGenerator(name = "uuid2", strategy = "uuid2")
@Column(name = "id", updatable = false, nullable = false, columnDefinition = "BINARY(16)")
private UUID id;
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "usr")
private UserInfo user;
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "\"descriptionTemplate\"")
private DescriptionTemplate descriptionTemplate;
@Column(name = "role")
private Integer role;
public UUID getId() {
return id;
}
public void setId(UUID id) {
this.id = id;
}
public UserInfo getUser() {
return user;
}
public void setUser(UserInfo user) {
this.user = user;
}
public DescriptionTemplate getDatasetProfile() {
return descriptionTemplate;
}
public void setDatasetProfile(DescriptionTemplate descriptionTemplate) {
this.descriptionTemplate = descriptionTemplate;
}
public Integer getRole() {
return role;
}
public void setRole(Integer role) {
this.role = role;
}
@Override
public void update(UserDatasetProfile entity) {
this.role = entity.getRole();
}
@Override
public UUID getKeys() {
return this.id;
}
@Override
public UserDatasetProfile buildFromTuple(List<Tuple> tuple, List<String> fields, String base) {
String currentBase = base.isEmpty() ? "" : base + ".";
if (fields.contains(currentBase + "id")) this.id = EntityBinder.fromTuple(tuple, currentBase + "id");
return this;
}
}

View File

@ -15,7 +15,7 @@ import java.util.*;
@NamedEntityGraphs({
@NamedEntityGraph(
name = "userInfo",
attributeNodes = {@NamedAttributeNode("userRoles"), @NamedAttributeNode("credentials")}),
attributeNodes = {@NamedAttributeNode("userRoles"), @NamedAttributeNode("credentials"), @NamedAttributeNode("additionalinfo")}),
})
public class UserInfo implements DataEntity<UserInfo, UUID> {
@ -26,7 +26,7 @@ public class UserInfo implements DataEntity<UserInfo, UUID> {
private UUID id;
@Column(name = "email", nullable = false)
@Column(name = "email")
private String email = null;
@Column(name = "authorization_level", nullable = false)
@ -35,6 +35,9 @@ public class UserInfo implements DataEntity<UserInfo, UUID> {
@Column(name = "usertype", nullable = false)
private Short usertype; // 0 internal, 1 external
@Column(name = "userstatus", nullable = false)
private Short userStatus; // 0 active, 1 inactive
@Column(name = "verified_email", nullable = true)
private Boolean verified_email = null;
@ -187,6 +190,14 @@ public class UserInfo implements DataEntity<UserInfo, UUID> {
this.notifications = notifications;
}
public Short getUserStatus() {
return userStatus;
}
public void setUserStatus(Short userStatus) {
this.userStatus = userStatus;
}
@Override
public void update(UserInfo entity) {
this.name = entity.getName();
@ -194,6 +205,7 @@ public class UserInfo implements DataEntity<UserInfo, UUID> {
this.additionalinfo = entity.getAdditionalinfo();
this.lastloggedin = entity.getLastloggedin();
this.userRoles = entity.getUserRoles();
this.userStatus = entity.getUserStatus();
}
@Override

View File

@ -3,12 +3,14 @@ package eu.eudat.data.query.definition;
import eu.eudat.data.dao.criteria.Criteria;
import eu.eudat.queryable.QueryableList;
import eu.eudat.queryable.queryableentity.DataEntity;
import io.swagger.annotations.ApiModelProperty;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public abstract class Query<C extends Criteria<T>, T extends DataEntity> implements CriteriaQuery<C, T> {
private static final Logger logger = LoggerFactory.getLogger(Query.class);
private C criteria;
@ApiModelProperty(value = "query", name = "query", dataType = "String", hidden = true)
private QueryableList<T> query;
public static class QueryBuilder<C extends Criteria<T>, T extends DataEntity, Q extends Query<C, T>> {

View File

@ -6,12 +6,16 @@ import eu.eudat.data.query.definition.helpers.ColumnOrderings;
import eu.eudat.data.query.definition.helpers.SelectionFields;
import eu.eudat.queryable.QueryableList;
import eu.eudat.queryable.queryableentity.DataEntity;
import io.swagger.annotations.ApiModelProperty;
public abstract class TableQuery<C extends Criteria<T>, T extends DataEntity<T, K>, K> extends Query<C, T> implements TableCriteriaQuery<C, T> {
private ColumnOrderings orderings;
@ApiModelProperty(hidden = true)
private SelectionFields selection;
@ApiModelProperty(value = "length", name = "length", dataType = "Integer", example = "2")
private Integer length;
@ApiModelProperty(value = "offset", name = "offset", dataType = "Integer", example = "0")
private Integer offset;
public Integer getLength() {

View File

@ -1,27 +1,30 @@
package eu.eudat.data.query.definition.helpers;
import io.swagger.annotations.ApiModelProperty;
import java.util.LinkedList;
import java.util.List;
public class ColumnOrderings {
private String[] fields;
@ApiModelProperty(value = "fields", name = "fields", dataType = "List<String>", example = "[]")
private List<String> fields;
public String[] getFields() {
public List<String> getFields() {
return fields;
}
public void setFields(String[] fields) {
public void setFields(List<String> fields) {
this.fields = fields;
}
public Ordering[] getFieldOrderings() {
public List<Ordering> getFieldOrderings() {
List<Ordering> orderings = new LinkedList<>();
for (String field : fields) {
orderings.add(this.orderingFromString(field));
}
return orderings.toArray(new Ordering[orderings.size()]);
return orderings;
}
private Ordering orderingFromString(String field) {
@ -34,6 +37,10 @@ public class ColumnOrderings {
ordering.fieldName(ordering.getFieldName().replace("|count|", "")).columnType(Ordering.ColumnType.COUNT);
else if (ordering.getFieldName().contains("|join|"))
ordering.fieldName(ordering.getFieldName().replace("|join|", "")).columnType(Ordering.ColumnType.JOIN_COLUMN);
else if (ordering.getFieldName().equals("asc"))
ordering.fieldName("label").orderByType(Ordering.OrderByType.ASC);
else if (ordering.getFieldName().equals("desc"))
ordering.fieldName("label").orderByType(Ordering.OrderByType.DESC);
return ordering;
}
}

View File

@ -1,8 +1,11 @@
package eu.eudat.data.query.definition.helpers;
import io.swagger.annotations.ApiModelProperty;
public class SelectionFields {
@ApiModelProperty(value = "fields", name = "fields", dataType = "String[]", example = "[]")
private String[] fields;
public String[] getFields() {

View File

@ -0,0 +1,27 @@
package eu.eudat.data.query.items.dmpblueprint;
import eu.eudat.data.dao.criteria.DataManagementPlanBlueprintCriteria;
import eu.eudat.data.entities.DMPProfile;
import eu.eudat.data.query.PaginationService;
import eu.eudat.data.query.definition.TableQuery;
import eu.eudat.queryable.QueryableList;
import java.util.UUID;
public class DataManagementPlanBlueprintTableRequest extends TableQuery<DataManagementPlanBlueprintCriteria, DMPProfile, UUID> {
@Override
public QueryableList<DMPProfile> applyCriteria() {
QueryableList<DMPProfile> query = this.getQuery();
if (this.getCriteria().getLike() != null && !this.getCriteria().getLike().isEmpty())
query.where((builder, root) -> builder.like(root.get("label"), "%" + this.getCriteria().getLike() + "%"));
if (this.getCriteria().getStatus() != null)
query.where((builder, root) -> builder.equal(root.get("status"), this.getCriteria().getStatus()));
return query;
}
@Override
public QueryableList<DMPProfile> applyPaging(QueryableList<DMPProfile> items) {
return PaginationService.applyPaging(items, this);
}
}

View File

@ -1,25 +1,24 @@
package eu.eudat.data.query.items.item.datasetprofile;
import eu.eudat.data.dao.criteria.DatasetProfileCriteria;
import eu.eudat.data.entities.DatasetProfile;
import eu.eudat.data.entities.DescriptionTemplate;
import eu.eudat.data.query.PaginationService;
import eu.eudat.data.query.definition.Query;
import eu.eudat.data.query.definition.TableQuery;
import eu.eudat.queryable.QueryableList;
import java.util.UUID;
public class DatasetProfileAutocompleteRequest extends TableQuery<DatasetProfileCriteria,DatasetProfile, UUID> {
public class DatasetProfileAutocompleteRequest extends TableQuery<DatasetProfileCriteria, DescriptionTemplate, UUID> {
@Override
public QueryableList<DatasetProfile> applyCriteria() {
QueryableList<DatasetProfile> query = this.getQuery();
public QueryableList<DescriptionTemplate> applyCriteria() {
QueryableList<DescriptionTemplate> query = this.getQuery();
if (this.getCriteria().getLike() != null && !this.getCriteria().getLike().isEmpty())
query.where((builder, root) -> builder.like(builder.upper(root.get("label")), "%" + this.getCriteria().getLike().toUpperCase() + "%"));
return query;
}
@Override
public QueryableList<DatasetProfile> applyPaging(QueryableList<DatasetProfile> items) {
public QueryableList<DescriptionTemplate> applyPaging(QueryableList<DescriptionTemplate> items) {
return PaginationService.applyPaging(items, this);
}
}

View File

@ -1,15 +1,13 @@
package eu.eudat.data.query.items.item.datasetprofile;
import eu.eudat.data.dao.criteria.DatasetProfileWizardCriteria;
import eu.eudat.data.entities.DatasetProfile;
import eu.eudat.data.entities.DescriptionTemplate;
import eu.eudat.data.query.definition.Query;
import eu.eudat.queryable.QueryableList;
import java.util.UUID;
public class DatasetProfileWizardAutocompleteRequest extends Query<DatasetProfileWizardCriteria,DatasetProfile> {
public class DatasetProfileWizardAutocompleteRequest extends Query<DatasetProfileWizardCriteria, DescriptionTemplate> {
@Override
public QueryableList<DatasetProfile> applyCriteria() {
public QueryableList<DescriptionTemplate> applyCriteria() {
return null;
}
}

View File

@ -1,23 +1,23 @@
package eu.eudat.data.query.items.table.datasetprofile;
import eu.eudat.data.dao.criteria.DatasetProfileCriteria;
import eu.eudat.data.entities.DatasetProfile;
import eu.eudat.data.entities.DescriptionTemplate;
import eu.eudat.data.query.definition.TableQuery;
import eu.eudat.queryable.QueryableList;
import java.util.UUID;
public class DatasetProfileTableRequestItem extends TableQuery<DatasetProfileCriteria, DatasetProfile, UUID> {
public class DatasetProfileTableRequestItem extends TableQuery<DatasetProfileCriteria, DescriptionTemplate, UUID> {
@Override
public QueryableList<DatasetProfile> applyCriteria() {
QueryableList<DatasetProfile> query = this.getQuery();
public QueryableList<DescriptionTemplate> applyCriteria() {
QueryableList<DescriptionTemplate> query = this.getQuery();
if (this.getCriteria().getLike() != null && !this.getCriteria().getLike().isEmpty())
query.where((builder, root) -> builder.like(builder.upper(root.get("label")), "%" + this.getCriteria().getLike().toUpperCase() + "%"));
return query;
}
@Override
public QueryableList<DatasetProfile> applyPaging(QueryableList<DatasetProfile> items) {
public QueryableList<DescriptionTemplate> applyPaging(QueryableList<DescriptionTemplate> items) {
return null;
}
}

View File

@ -4,4 +4,13 @@ import java.util.UUID;
public class DatasetProfileQuery {
private UserQuery userQuery;
public UserQuery getUserQuery() {
return userQuery;
}
public void setUserQuery(UserQuery userQuery) {
this.userQuery = userQuery;
}
}

View File

@ -18,9 +18,13 @@ public class DatasetCriteria extends Criteria {
private List<UUID> collaborators;
private Boolean allowAllVersions;
private List<String> organiztions;
private Boolean hasTags;
private List<Tag> tags;
private boolean isPublic;
private Short grantStatus;
private int offset;
private int size;
private List<SortCriteria> sortCriteria;
public String getLike() {
return like;
@ -117,4 +121,36 @@ public class DatasetCriteria extends Criteria {
public void setGrantStatus(Short grantStatus) {
this.grantStatus = grantStatus;
}
public int getOffset() {
return offset;
}
public void setOffset(int offset) {
this.offset = offset;
}
public int getSize() {
return size;
}
public void setSize(int size) {
this.size = size;
}
public List<SortCriteria> getSortCriteria() {
return sortCriteria;
}
public void setSortCriteria(List<SortCriteria> sortCriteria) {
this.sortCriteria = sortCriteria;
}
public Boolean getHasTags() {
return hasTags;
}
public void setHasTags(Boolean hasTags) {
this.hasTags = hasTags;
}
}

View File

@ -9,11 +9,16 @@ public class DmpCriteria extends Criteria {
private List<UUID> templates;
private List<UUID> grants;
private List<UUID> collaborators;
private List<Integer> roles;
private List<UUID> organizations;
private boolean isPublic;
private List<UUID> groupIds;
private boolean allowAllVersions;
private Short grantStatus;
private int offset;
private Integer size;
private List<SortCriteria> sortCriteria;
public String getLike() {
return like;
@ -55,6 +60,14 @@ public class DmpCriteria extends Criteria {
this.collaborators = collaborators;
}
public List<Integer> getRoles() {
return roles;
}
public void setRoles(List<Integer> roles) {
this.roles = roles;
}
public List<UUID> getOrganizations() {
return organizations;
}
@ -94,4 +107,28 @@ public class DmpCriteria extends Criteria {
public void setGrantStatus(Short grantStatus) {
this.grantStatus = grantStatus;
}
public int getOffset() {
return offset;
}
public void setOffset(int offset) {
this.offset = offset;
}
public Integer getSize() {
return size;
}
public void setSize(Integer size) {
this.size = size;
}
public List<SortCriteria> getSortCriteria() {
return sortCriteria;
}
public void setSortCriteria(List<SortCriteria> sortCriteria) {
this.sortCriteria = sortCriteria;
}
}

View File

@ -0,0 +1,39 @@
package eu.eudat.elastic.criteria;
public class SortCriteria {
public enum OrderByType {
ASC, DESC
}
public enum ColumnType {
COUNT, COLUMN, JOIN_COLUMN
}
private String fieldName;
private OrderByType orderByType;
private ColumnType columnType;
public String getFieldName() {
return fieldName;
}
public void setFieldName(String fieldName) {
this.fieldName = fieldName;
}
public OrderByType getOrderByType() {
return orderByType;
}
public void setOrderByType(OrderByType orderByType) {
this.orderByType = orderByType;
}
public ColumnType getColumnType() {
return columnType;
}
public void setColumnType(ColumnType columnType) {
this.columnType = columnType;
}
}

View File

@ -4,11 +4,11 @@ import org.elasticsearch.common.xcontent.XContentBuilder;
import java.io.IOException;
import java.util.Map;
import java.util.UUID;
public class Collaborator implements ElasticEntity<Collaborator> {
private String id;
private String name;
private int role;
public String getId() {
return id;
@ -26,11 +26,20 @@ public class Collaborator implements ElasticEntity<Collaborator> {
this.name = name;
}
public int getRole() {
return role;
}
public void setRole(int role) {
this.role = role;
}
@Override
public XContentBuilder toElasticEntity(XContentBuilder builder) throws IOException {
builder.startObject();
builder.field("id", this.id);
builder.field("name", this.name);
builder.field("role", this.role);
builder.endObject();
return builder;
}
@ -39,6 +48,7 @@ public class Collaborator implements ElasticEntity<Collaborator> {
public Collaborator fromElasticEntity(Map fields) {
this.id = (String) fields.get("id");
this.name = (String) fields.get("name");
this.role = (int) fields.get("role");
return this;
}
}

View File

@ -5,6 +5,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.time.Instant;
import java.util.*;
import java.util.stream.Collectors;
@ -59,6 +60,9 @@ public class Dataset implements ElasticEntity<Dataset> {
private Boolean isPublic;
private Short grantStatus;
private String formData;
private Date created;
private Date modified;
private Date finalizedAt;
public String getId() {
return id;
@ -188,6 +192,30 @@ public class Dataset implements ElasticEntity<Dataset> {
this.formData = formData;
}
public Date getCreated() {
return created;
}
public void setCreated(Date created) {
this.created = created;
}
public Date getModified() {
return modified;
}
public void setModified(Date modified) {
this.modified = modified;
}
public Date getFinalizedAt() {
return finalizedAt;
}
public void setFinalizedAt(Date finalizedAt) {
this.finalizedAt = finalizedAt;
}
@Override
public XContentBuilder toElasticEntity(XContentBuilder builder) throws IOException {
builder.startObject();
@ -197,10 +225,15 @@ public class Dataset implements ElasticEntity<Dataset> {
builder.field("template", this.template.toString());
builder.field("status", this.status.toString());
builder.field("dmp", this.dmp.toString());
builder.field("created", this.created);
builder.field("modified", this.modified);
builder.field("finalizedAt", this.finalizedAt);
if (this.group != null) {
builder.field("group", this.group.toString());
}
builder.field("grant", this.grant.toString());
if (this.grant != null) {
builder.field("grant", this.grant.toString());
}
if (collaborators != null) {
builder.startArray("collaborators");
this.collaborators.forEach(x -> {
@ -252,32 +285,48 @@ public class Dataset implements ElasticEntity<Dataset> {
@Override
public Dataset fromElasticEntity(Map<String, Object> fields) {
if (fields != null) {
this.id = (String) fields.get("id");
if (fields.get("tags") != null) {
this.tags = ((List<HashMap>) fields.get("tags")).stream().map(hashMap -> new Tag().fromElasticEntity(hashMap)).collect(Collectors.toList());
if (fields.size() == 1) {
if (fields.containsKey("id")) {
this.id = (String) fields.get("id");
} else if (fields.containsKey("tags")) {
this.tags = ((List<HashMap>) fields.get("tags")).stream().map(hashMap -> new Tag().fromElasticEntity(hashMap)).collect(Collectors.toList());
}
}else if (fields.size() > 1) {
this.id = (String) fields.get("id");
if (fields.get("tags") != null) {
this.tags = ((List<HashMap>) fields.get("tags")).stream().map(hashMap -> new Tag().fromElasticEntity(hashMap)).collect(Collectors.toList());
}
this.label = (String) fields.get("label");
this.description = (String) fields.get("description");
this.template = UUID.fromString((String) fields.get("template"));
this.status = Short.valueOf((String) fields.get("status"));
this.dmp = UUID.fromString((String) fields.get("dmp"));
this.group = UUID.fromString((String) fields.get("group"));
if (fields.get("grant") != null) {
this.grant = UUID.fromString((String) fields.get("grant"));
}
if (fields.get("created") != null)
this.created = Date.from(Instant.parse((String) fields.get("created")));
if (fields.get("modified") != null)
this.modified = Date.from(Instant.parse((String) fields.get("modified")));
if (fields.get("finalizedAt") != null)
this.finalizedAt = Date.from(Instant.parse((String) fields.get("finalizedAt")));
if (fields.get("collaborators") != null) {
this.collaborators = ((List<HashMap>) fields.get("collaborators")).stream().map(hashMap -> new Collaborator().fromElasticEntity(hashMap)).collect(Collectors.toList());
}
this.lastVersion = Boolean.parseBoolean((String) fields.get("lastVersion"));
this.lastPublicVersion = Boolean.parseBoolean((String) fields.get("lastPublicVersion"));
if (fields.get("organizations") != null) {
this.organizations = ((List<HashMap>) fields.get("organizations")).stream().map(hashMap -> new Organization().fromElasticEntity(hashMap)).collect(Collectors.toList());
}
if (fields.get("public") != null) {
this.isPublic = Boolean.valueOf((String) fields.get("public"));
}
if (fields.get("grantStatus") != null) {
this.grantStatus = Short.valueOf((String) fields.get("grantStatus"));
}
this.formData = (String) fields.get("formData");
}
this.label = (String) fields.get("label");
this.description = (String) fields.get("description");
this.template = UUID.fromString((String) fields.get("template"));
this.status = Short.valueOf((String) fields.get("status"));
this.dmp = UUID.fromString((String) fields.get("dmp"));
this.group = UUID.fromString((String) fields.get("group"));
this.grant = UUID.fromString((String) fields.get("grant"));
if (fields.get("collaborators") != null) {
this.collaborators = ((List<HashMap>) fields.get("collaborators")).stream().map(hashMap -> new Collaborator().fromElasticEntity(hashMap)).collect(Collectors.toList());
}
this.lastVersion = Boolean.parseBoolean((String) fields.get("lastVersion"));
this.lastPublicVersion = Boolean.parseBoolean((String) fields.get("lastPublicVersion"));
if (fields.get("organizations") != null) {
this.organizations = ((List<HashMap>) fields.get("organizations")).stream().map(hashMap -> new Organization().fromElasticEntity(hashMap)).collect(Collectors.toList());
}
if (fields.get("public") != null) {
this.isPublic = Boolean.valueOf((String) fields.get("public"));
}
if (fields.get("grantStatus") != null) {
this.grantStatus = Short.valueOf((String) fields.get("grantStatus"));
}
this.formData = (String) fields.get("formData");
}
return this;
}

View File

@ -1,14 +1,18 @@
package eu.eudat.elastic.entities;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.elasticsearch.common.xcontent.XContentBuilder;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
public class DatasetTempalate implements ElasticEntity<DatasetTempalate> {
private UUID id;
private String name;
private Map<String, Object> data;
public UUID getId() {
return id;
@ -26,11 +30,25 @@ public class DatasetTempalate implements ElasticEntity<DatasetTempalate> {
this.name = name;
}
public Map<String, Object> getData() {
return data;
}
public void setData(Map<String, Object> data) {
this.data = data;
}
@Override
public XContentBuilder toElasticEntity(XContentBuilder builder) throws IOException {
builder.startObject();
builder.field("id", this.id.toString());
builder.field("name", this.name);
if(this.data != null) {
builder.field("data", new ObjectMapper().writeValueAsString(this.data));
}
else{
builder.field("data", "");
}
builder.endObject();
return builder;
}
@ -39,6 +57,12 @@ public class DatasetTempalate implements ElasticEntity<DatasetTempalate> {
public DatasetTempalate fromElasticEntity(Map<String, Object> fields) {
this.id = UUID.fromString((String) fields.get("id"));
this.name = (String) fields.get("name");
try {
this.data = new ObjectMapper().readValue((String) fields.get("data"), new TypeReference<Map<String, Object>>() {});
}
catch (Exception e){
this.data = new HashMap<>();
}
return this;
}
}

View File

@ -5,10 +5,8 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.time.Instant;
import java.util.*;
import java.util.stream.Collectors;
public class Dmp implements ElasticEntity<Dmp> {
@ -55,6 +53,11 @@ public class Dmp implements ElasticEntity<Dmp> {
private List<Dataset> datasets;
private UUID grant;
private Short grantStatus;
private Date created;
private Date modified;
private Date finalizedAt;
private Date publishedAt;
private List<Doi> dois;
public UUID getId() {
return id;
@ -168,6 +171,46 @@ public class Dmp implements ElasticEntity<Dmp> {
this.grantStatus = grantStatus;
}
public Date getCreated() {
return created;
}
public void setCreated(Date created) {
this.created = created;
}
public Date getModified() {
return modified;
}
public void setModified(Date modified) {
this.modified = modified;
}
public Date getFinalizedAt() {
return finalizedAt;
}
public void setFinalizedAt(Date finalizedAt) {
this.finalizedAt = finalizedAt;
}
public Date getPublishedAt() {
return publishedAt;
}
public void setPublishedAt(Date publishedAt) {
this.publishedAt = publishedAt;
}
public List<Doi> getDois() {
return dois;
}
public void setDois(List<Doi> dois) {
this.dois = dois;
}
@Override
public XContentBuilder toElasticEntity(XContentBuilder builder) throws IOException {
builder.startObject();
@ -233,37 +276,74 @@ public class Dmp implements ElasticEntity<Dmp> {
builder.field(MapKey.GRANT.getName(), this.grant.toString());
}
builder.field(MapKey.GRANTSTATUS.getName(), this.grantStatus);
builder.field(MapKey.CREATED.getName(), this.created);
builder.field(MapKey.MODIFIED.getName(), this.modified);
builder.field(MapKey.FINALIZEDAT.getName(), this.finalizedAt);
builder.field(MapKey.PUBLISHEDAT.getName(), this.publishedAt);
if (this.dois != null && !this.dois.isEmpty()) {
builder.startArray(MapKey.DOIS.getName());
this.dois.forEach(doi -> {
try {
doi.toElasticEntity(builder);
} catch (IOException e) {
logger.error(e.getMessage(), e);
}
});
builder.endArray();
}
builder.endObject();
return builder;
}
@Override
public Dmp fromElasticEntity(Map<String, Object> fields) {
if (fields == null || fields.isEmpty()) {
return null;
}
this.id = UUID.fromString((String) fields.get(MapKey.ID.getName()));
this.label = (String) fields.get(MapKey.LABEL.getName());
this.description = (String) fields.get(MapKey.DESCRIPTION.getName());
if (fields.get(MapKey.GROUPID.getName()) != null) {
this.groupId = UUID.fromString((String) fields.get(MapKey.GROUPID.getName()));
}
this.status = Short.valueOf(fields.get(MapKey.STATUS.getName()).toString());
if (fields.get(MapKey.TEMPLATES.getName()) != null) {
this.templates = ((List<HashMap<String, Object>>) fields.get(MapKey.TEMPLATES.getName())).stream().map(hashMap -> new DatasetTempalate().fromElasticEntity(hashMap)).collect(Collectors.toList());
}
if (fields.get(MapKey.COLLABORATORS.getName()) != null) {
this.collaborators = ((List<HashMap<String, Object>>) fields.get(MapKey.COLLABORATORS.getName())).stream().map(map -> new Collaborator().fromElasticEntity(map)).collect(Collectors.toList());
}
if (fields.get(MapKey.ORGANIZATIONS.getName()) != null) {
this.organizations = ((List<HashMap<String, Object>>) fields.get(MapKey.ORGANIZATIONS.getName())).stream().map(map -> new Organization().fromElasticEntity(map)).collect(Collectors.toList());
}
this.lastVersion = (Boolean) fields.get(MapKey.LASTVERSION.getName());
this.lastPublicVersion = (Boolean) fields.get(MapKey.LASTPUBLICVERSION.getName());
this.isPublic = (Boolean) fields.get(MapKey.ISPUBLIC.getName());
if (fields.get(MapKey.DATASETS.getName()) != null) {
this.datasets = ((List<HashMap<String, Object>>) fields.get(MapKey.DATASETS.getName())).stream().map(map -> new Dataset().fromElasticEntity(map)).collect(Collectors.toList());
}
this.grant = UUID.fromString((String) fields.get(MapKey.GRANT.getName()));
if (fields.get(MapKey.GRANTSTATUS.getName()) != null) {
this.grantStatus = Short.valueOf(fields.get(MapKey.GRANTSTATUS.getName()).toString());
if (fields.size() > 1) {
this.label = (String) fields.get(MapKey.LABEL.getName());
this.description = (String) fields.get(MapKey.DESCRIPTION.getName());
if (fields.get(MapKey.GROUPID.getName()) != null) {
this.groupId = UUID.fromString((String) fields.get(MapKey.GROUPID.getName()));
}
this.status = Short.valueOf(fields.get(MapKey.STATUS.getName()).toString());
if (fields.get(MapKey.TEMPLATES.getName()) != null) {
this.templates = ((List<HashMap<String, Object>>) fields.get(MapKey.TEMPLATES.getName())).stream().map(hashMap -> new DatasetTempalate().fromElasticEntity(hashMap)).collect(Collectors.toList());
}
if (fields.get(MapKey.COLLABORATORS.getName()) != null) {
this.collaborators = ((List<HashMap<String, Object>>) fields.get(MapKey.COLLABORATORS.getName())).stream().map(map -> new Collaborator().fromElasticEntity(map)).collect(Collectors.toList());
}
if (fields.get(MapKey.ORGANIZATIONS.getName()) != null) {
this.organizations = ((List<HashMap<String, Object>>) fields.get(MapKey.ORGANIZATIONS.getName())).stream().map(map -> new Organization().fromElasticEntity(map)).collect(Collectors.toList());
}
this.lastVersion = (Boolean) fields.get(MapKey.LASTVERSION.getName());
this.lastPublicVersion = (Boolean) fields.get(MapKey.LASTPUBLICVERSION.getName());
this.isPublic = (Boolean) fields.get(MapKey.ISPUBLIC.getName());
if (fields.get(MapKey.DATASETS.getName()) != null) {
this.datasets = ((List<HashMap<String, Object>>) fields.get(MapKey.DATASETS.getName())).stream().map(map -> new Dataset().fromElasticEntity(map)).collect(Collectors.toList());
}
if (fields.containsKey(MapKey.GRANT.getName()) && fields.get(MapKey.GRANT.getName()) != null) {
this.grant = UUID.fromString((String) fields.get(MapKey.GRANT.getName()));
}
if (fields.get(MapKey.GRANTSTATUS.getName()) != null) {
this.grantStatus = Short.valueOf(fields.get(MapKey.GRANTSTATUS.getName()).toString());
}
if (fields.containsKey(MapKey.CREATED.getName())) {
this.created = Date.from(Instant.parse(fields.get(MapKey.CREATED.getName()).toString()));
}
if (fields.containsKey(MapKey.MODIFIED.getName())) {
this.modified = Date.from(Instant.parse(fields.get(MapKey.MODIFIED.getName()).toString()));
}
if (fields.get(MapKey.FINALIZEDAT.getName()) != null) {
this.finalizedAt = Date.from(Instant.parse(fields.get(MapKey.FINALIZEDAT.getName()).toString()));
}
if (fields.get(MapKey.PUBLISHEDAT.getName()) != null) {
this.publishedAt = Date.from(Instant.parse(fields.get(MapKey.PUBLISHEDAT.getName()).toString()));
}
if (fields.get(MapKey.DOIS.getName()) != null) {
this.dois = ((List<HashMap<String, Object>>) fields.get(MapKey.DOIS.getName())).stream().map(map -> new Doi().fromElasticEntity(map)).collect(Collectors.toList());
}
}
return this;
}
@ -282,7 +362,12 @@ public class Dmp implements ElasticEntity<Dmp> {
ISPUBLIC ("isPublic"),
DATASETS ("datasets"),
GRANT ("grant"),
GRANTSTATUS ("grantStatus");
GRANTSTATUS ("grantStatus"),
CREATED ("created"),
MODIFIED ("modified"),
FINALIZEDAT ("finalizedAt"),
PUBLISHEDAT ("publishedAt"),
DOIS ("dois");
private final String name;

View File

@ -0,0 +1,65 @@
package eu.eudat.elastic.entities;
import org.elasticsearch.common.xcontent.XContentBuilder;
import java.io.IOException;
import java.util.Map;
import java.util.UUID;
public class Doi implements ElasticEntity<Doi>{
private UUID id;
private String repositoryId;
private String doi;
private UUID dmp;
public UUID getId() {
return id;
}
public void setId(UUID id) {
this.id = id;
}
public String getRepositoryId() {
return repositoryId;
}
public void setRepositoryId(String repositoryId) {
this.repositoryId = repositoryId;
}
public String getDoi() {
return doi;
}
public void setDoi(String doi) {
this.doi = doi;
}
public UUID getDmp() {
return dmp;
}
public void setDmp(UUID dmp) {
this.dmp = dmp;
}
@Override
public XContentBuilder toElasticEntity(XContentBuilder builder) throws IOException {
builder.startObject();
builder.field("id", this.id.toString());
builder.field("repositoryId", this.repositoryId);
builder.field("doi", this.doi);
builder.field("dmp", this.dmp.toString());
builder.endObject();
return builder;
}
@Override
public Doi fromElasticEntity(Map<String, Object> fields) {
if (fields == null || fields.isEmpty()) {
return null;
}
this.id = UUID.fromString((String) fields.get("id"));
this.repositoryId = (String) fields.get("repositoryId");
this.doi = (String) fields.get("doi");
this.dmp = UUID.fromString((String) fields.get("dmp"));
return this;
}
}

View File

@ -24,8 +24,13 @@ import org.elasticsearch.search.aggregations.bucket.filter.ParsedFilters;
import org.elasticsearch.search.aggregations.bucket.nested.NestedAggregationBuilder;
import org.elasticsearch.search.aggregations.bucket.nested.ParsedNested;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.fetch.subphase.FetchSourceContext;
import org.elasticsearch.search.sort.SortBuilder;
import org.elasticsearch.search.sort.SortBuilders;
import org.elasticsearch.search.sort.SortOrder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Service;
import java.io.IOException;
@ -37,10 +42,12 @@ import java.util.stream.Stream;
public class DatasetRepository extends ElasticRepository<Dataset, DatasetCriteria> {
private final DmpRepository dmpRepository;
private final Environment environment;
public DatasetRepository(RestHighLevelClient client, DmpRepository dmpRepository) {
public DatasetRepository(RestHighLevelClient client, DmpRepository dmpRepository, Environment environment) {
super(client);
this.dmpRepository = dmpRepository;
this.environment = environment;
}
@Override
@ -48,24 +55,26 @@ public class DatasetRepository extends ElasticRepository<Dataset, DatasetCriteri
if (this.getClient() != null) {
XContentBuilder builder = XContentFactory.jsonBuilder();
Dmp dmp = this.dmpRepository.findDocument(entity.getDmp().toString());
boolean found = false;
if (dmp.getDatasets() != null && !dmp.getDatasets().isEmpty()) {
for (int i = 0; i < dmp.getDatasets().size(); i++) {
if (dmp.getDatasets().get(i).getId().equals(entity.getId())) {
dmp.getDatasets().set(i, entity);
found = true;
break;
if (dmp != null) {
boolean found = false;
if (dmp.getDatasets() != null && !dmp.getDatasets().isEmpty()) {
for (int i = 0; i < dmp.getDatasets().size(); i++) {
if (dmp.getDatasets().get(i).getId().equals(entity.getId())) {
dmp.getDatasets().set(i, entity);
found = true;
break;
}
}
}
}
if (!found) {
if (dmp.getDatasets() == null) {
dmp.setDatasets(new ArrayList<>());
if (!found) {
if (dmp.getDatasets() == null) {
dmp.setDatasets(new ArrayList<>());
}
dmp.getDatasets().add(entity);
}
dmp.getDatasets().add(entity);
IndexRequest request = new IndexRequest(this.environment.getProperty("elasticsearch.index")).id(dmp.getId().toString()).source(dmp.toElasticEntity(builder));//new IndexRequest("datasets", "doc", entity.getId()).source(entity.toElasticEntity(builder));
this.getClient().index(request, RequestOptions.DEFAULT);
}
IndexRequest request = new IndexRequest("dmps").id(dmp.getId().toString()).source(dmp.toElasticEntity(builder));//new IndexRequest("datasets", "doc", entity.getId()).source(entity.toElasticEntity(builder));
this.getClient().index(request, RequestOptions.DEFAULT);
return entity;
}
return null;
@ -74,7 +83,7 @@ public class DatasetRepository extends ElasticRepository<Dataset, DatasetCriteri
@Override
public Dataset findDocument(String id) throws IOException {
if (this.getClient() != null) {
SearchRequest searchRequest = new SearchRequest("dmps");
SearchRequest searchRequest = new SearchRequest(this.environment.getProperty("elasticsearch.index"));
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
BoolQueryBuilder boolQuery = QueryBuilders.boolQuery().should(QueryBuilders.termQuery("datasets.id.keyword", id));
NestedQueryBuilder nestedQueryBuilder = QueryBuilders.nestedQuery( "datasets", boolQuery, ScoreMode.Avg).innerHit(new InnerHitBuilder());
@ -95,7 +104,7 @@ public class DatasetRepository extends ElasticRepository<Dataset, DatasetCriteri
@Override
public List<Dataset> query(DatasetCriteria criteria) throws IOException {
if (this.getClient() != null) {
SearchRequest searchRequest = new SearchRequest("dmps");
SearchRequest searchRequest = new SearchRequest(this.environment.getProperty("elasticsearch.index"));
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
/*CountRequest countRequest = new CountRequest("dmps").routing("datasets").routing("id");
@ -103,7 +112,7 @@ public class DatasetRepository extends ElasticRepository<Dataset, DatasetCriteri
CountResponse countResponse = getClient().count(countRequest, RequestOptions.DEFAULT);
Long count = countResponse.getCount();*/
SearchRequest countRequest = new SearchRequest("dmps");
SearchRequest countRequest = new SearchRequest(this.environment.getProperty("elasticsearch.index"));
NestedAggregationBuilder nestedAggregationBuilder = AggregationBuilders.nested("by_dataset", "datasets");
FiltersAggregationBuilder filtersAggregationBuilder = AggregationBuilders.filters("dataset_query", QueryBuilders.boolQuery().mustNot(QueryBuilders.termsQuery("datasets.status.keyword", Stream.of(Dataset.Status.DELETED.getValue(), Dataset.Status.CANCELED.getValue()).collect(Collectors.toList()))));
nestedAggregationBuilder.subAggregation(filtersAggregationBuilder);
@ -116,70 +125,33 @@ public class DatasetRepository extends ElasticRepository<Dataset, DatasetCriteri
searchSourceBuilder.size(count.intValue());
BoolQueryBuilder boolQuery = QueryBuilders.boolQuery().mustNot(QueryBuilders.termsQuery("datasets.status", Stream.of(Dataset.Status.DELETED.getValue(), Dataset.Status.CANCELED.getValue()).collect(Collectors.toList())));
if (criteria.isPublic()) {
boolQuery = boolQuery.should(QueryBuilders.termQuery("datasets.public", "true"));
boolQuery = boolQuery.should(QueryBuilders.termQuery("datasets.status", Dataset.Status.FINALISED.getValue()));
boolQuery = boolQuery.should(QueryBuilders.termQuery("datasets.lastPublicVersion", "true"));
}
if (criteria.getLike() != null && !criteria.getLike().isEmpty()) {
boolQuery = boolQuery.should(QueryBuilders.queryStringQuery(criteria.getLike()).allowLeadingWildcard(true).fields(Stream.of(new Object[][]{
{"datasets.label", 1.0f},
{"datasets.description", 1.0f},
{"datasets.formData", 1.0f}
}).collect(Collectors.toMap(data -> (String) data[0], data -> (Float) data[1]))));
List<SortBuilder> sortBuilders = new ArrayList<>();
BoolQueryBuilder boolQuery = createBoolQuery(criteria);
if (criteria.getSortCriteria() != null && !criteria.getSortCriteria().isEmpty()) {
criteria.getSortCriteria().forEach(sortCriteria -> {
switch(sortCriteria.getColumnType()) {
case COLUMN:
sortBuilders.add(SortBuilders.fieldSort("datasets." + sortCriteria.getFieldName()).order(SortOrder.fromString(sortCriteria.getOrderByType().name())));
break;
case JOIN_COLUMN:
List<String> fields = Arrays.asList(sortCriteria.getFieldName().split(":"));
fields.stream().filter(name -> !name.startsWith("dmp")).forEach(field -> {
sortBuilders.add(SortBuilders.fieldSort(field).order(SortOrder.fromString(sortCriteria.getOrderByType().name())));
});
break;
}
});
}
if (criteria.getDatasetTemplates() != null && criteria.getDatasetTemplates().size() > 0) {
boolQuery = boolQuery.should(QueryBuilders.termsQuery("datasets.template", criteria.getDatasetTemplates().stream().map(UUID::toString).collect(Collectors.toList())));
}
if (criteria.getStatus() != null) {
boolQuery = boolQuery.should(QueryBuilders.termQuery("datasets.status", criteria.getStatus().toString()));
}
if (criteria.getDmps() != null && criteria.getDmps().size() > 0) {
boolQuery = boolQuery.should(QueryBuilders.termsQuery("datasets.dmp", criteria.getDmps().stream().map(UUID::toString).collect(Collectors.toList())));
}
if (criteria.getGroupIds() != null && criteria.getGroupIds().size() > 0) {
boolQuery = boolQuery.should(QueryBuilders.termsQuery("datasets.group", criteria.getGroupIds().stream().map(UUID::toString).collect(Collectors.toList())));
}
if (criteria.getGrants() != null && criteria.getGrants().size() > 0) {
boolQuery = boolQuery.should(QueryBuilders.termsQuery("datasets.grant", criteria.getGrants().stream().map(UUID::toString).collect(Collectors.toList())));
}
if (criteria.getGrantStatus() != null) {
boolQuery = boolQuery.should(QueryBuilders.termQuery("datasets.grantStatus", criteria.getGrantStatus().toString()));
}
if (criteria.getCollaborators() != null && criteria.getCollaborators().size() > 0) {
boolQuery = boolQuery.should(QueryBuilders.termsQuery("datasets.collaborators.id", criteria.getCollaborators().stream().map(UUID::toString).collect(Collectors.toList())));
}
if (!criteria.isPublic()) {
if (criteria.getAllowAllVersions() != null && !criteria.getAllowAllVersions()) {
boolQuery = boolQuery.should(QueryBuilders.termQuery("datasets.lastVersion", "true"));
}
}
if (criteria.getOrganiztions() != null && criteria.getOrganiztions().size() > 0) {
boolQuery = boolQuery.should(QueryBuilders.termsQuery("datasets.organizations.id", criteria.getOrganiztions()));
}
if (criteria.getTags() != null && criteria.getTags().size() > 0) {
boolQuery = boolQuery.should(QueryBuilders.termsQuery("datasets.tags.name", criteria.getTags().stream().map(Tag::getName).collect(Collectors.toList())));
}
if (boolQuery.should().isEmpty() && boolQuery.mustNot().isEmpty()) {
boolQuery.should(QueryBuilders.matchAllQuery());
} else {
boolQuery.minimumShouldMatch(boolQuery.should().size());
}
NestedQueryBuilder nestedQueryBuilder = QueryBuilders.nestedQuery("datasets", boolQuery, ScoreMode.Avg).innerHit(new InnerHitBuilder());
searchSourceBuilder.query(nestedQueryBuilder);
NestedQueryBuilder nestedQueryBuilder = QueryBuilders.nestedQuery("datasets", boolQuery, ScoreMode.Avg).innerHit(new InnerHitBuilder().setFetchSourceContext(new FetchSourceContext(true, new String[]{"datasets.tags"}, null)).setSize(this.environment.getProperty("elasticsearch.innerHitsSize", Integer.class)));
searchSourceBuilder.query(nestedQueryBuilder)/*.from(criteria.getOffset())*/.fetchSource("datasets.tags", null);
/*if (criteria.getSize() > 0) {
searchSourceBuilder.size(criteria.getSize());
}*/
sortBuilders.forEach(searchSourceBuilder::sort);
searchRequest.source(searchSourceBuilder);
SearchResponse response = this.getClient().search(searchRequest, RequestOptions.DEFAULT);
return ((Stream<Dataset>)Arrays.stream(response.getHits().getHits())
@ -190,10 +162,172 @@ public class DatasetRepository extends ElasticRepository<Dataset, DatasetCriteri
return null;
}
public List<Dataset> queryIds(DatasetCriteria criteria) throws IOException {
if (this.getClient() != null) {
SearchRequest searchRequest = new SearchRequest(this.environment.getProperty("elasticsearch.index"));
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
/*CountRequest countRequest = new CountRequest("dmps").routing("datasets").routing("id");
countRequest.query(QueryBuilders.boolQuery().mustNot(QueryBuilders.termsQuery("datasets.status.keyword", Stream.of(Dataset.Status.DELETED.getValue(), Dataset.Status.CANCELED.getValue()).collect(Collectors.toList()))));
CountResponse countResponse = getClient().count(countRequest, RequestOptions.DEFAULT);
Long count = countResponse.getCount();*/
SearchRequest countRequest = new SearchRequest(this.environment.getProperty("elasticsearch.index"));
NestedAggregationBuilder nestedAggregationBuilder = AggregationBuilders.nested("by_dataset", "datasets");
FiltersAggregationBuilder filtersAggregationBuilder = AggregationBuilders.filters("dataset_query", QueryBuilders.boolQuery().mustNot(QueryBuilders.termsQuery("datasets.status.keyword", Stream.of(Dataset.Status.DELETED.getValue(), Dataset.Status.CANCELED.getValue()).collect(Collectors.toList()))));
nestedAggregationBuilder.subAggregation(filtersAggregationBuilder);
SearchSourceBuilder countSourceBuilder = new SearchSourceBuilder();
countSourceBuilder.aggregation(nestedAggregationBuilder);
countRequest.source(countSourceBuilder);
SearchResponse countResponse = getClient().search(countRequest, RequestOptions.DEFAULT);
Long count = ((ParsedFilters)((ParsedNested)countResponse.getAggregations().asMap().get("by_dataset")).getAggregations().get("dataset_query")).getBuckets().get(0).getDocCount();
searchSourceBuilder.size(count.intValue());
List<SortBuilder> sortBuilders = new ArrayList<>();
BoolQueryBuilder boolQuery = createBoolQuery(criteria);
if (criteria.getSortCriteria() != null && !criteria.getSortCriteria().isEmpty()) {
criteria.getSortCriteria().forEach(sortCriteria -> {
switch(sortCriteria.getColumnType()) {
case COLUMN:
sortBuilders.add(SortBuilders.fieldSort("datasets." + sortCriteria.getFieldName()).order(SortOrder.fromString(sortCriteria.getOrderByType().name())));
break;
case JOIN_COLUMN:
List<String> fields = Arrays.asList(sortCriteria.getFieldName().split(":"));
fields.stream().filter(name -> !name.startsWith("dmp")).forEach(field -> {
sortBuilders.add(SortBuilders.fieldSort(field).order(SortOrder.fromString(sortCriteria.getOrderByType().name())));
});
break;
}
});
}
NestedQueryBuilder nestedQueryBuilder = QueryBuilders.nestedQuery("datasets", boolQuery, ScoreMode.None).innerHit(new InnerHitBuilder().setFetchSourceContext(new FetchSourceContext(true, new String[]{"datasets.id"}, null)).setSize(this.environment.getProperty("elasticsearch.innerHitsSize", Integer.class)));
searchSourceBuilder.query(nestedQueryBuilder)/*.from(criteria.getOffset()).size(criteria.getSize())*/.fetchSource("datasets.id", null);
sortBuilders.forEach(searchSourceBuilder::sort);
searchRequest.source(searchSourceBuilder);
SearchResponse response = this.getClient().search(searchRequest, RequestOptions.DEFAULT);
return ((Stream<Dataset>)Arrays.stream(response.getHits().getHits())
.map(hit -> hit.getInnerHits().values()).flatMap(Collection::stream)
.map(SearchHits::getHits).flatMap(Arrays::stream)
.map(x -> new Dataset().fromElasticEntity(this.transformFromString(x.getSourceAsString(), Map.class)))).collect(Collectors.toList());
}
return null;
}
@Override
public Long count(DatasetCriteria criteria) throws IOException {
if (this.getClient() != null) {
//CountRequest countRequest = new CountRequest(this.environment.getProperty("elasticsearch.index"));
SearchRequest countRequest = new SearchRequest(this.environment.getProperty("elasticsearch.index"));
BoolQueryBuilder boolQuery = createBoolQuery(criteria);
NestedAggregationBuilder nestedAggregationBuilder = AggregationBuilders.nested("by_dataset", "datasets");
FiltersAggregationBuilder filtersAggregationBuilder = AggregationBuilders.filters("dataset_query", boolQuery);
nestedAggregationBuilder.subAggregation(filtersAggregationBuilder);
SearchSourceBuilder countSourceBuilder = new SearchSourceBuilder();
countSourceBuilder.aggregation(nestedAggregationBuilder);
countRequest.source(countSourceBuilder);
SearchResponse countResponse = getClient().search(countRequest, RequestOptions.DEFAULT);
return ((ParsedFilters)((ParsedNested)countResponse.getAggregations().asMap().get("by_dataset")).getAggregations().get("dataset_query")).getBuckets().get(0).getDocCount();
/*NestedQueryBuilder nestedQueryBuilder = QueryBuilders.nestedQuery("datasets", boolQuery, ScoreMode.None).innerHit(new InnerHitBuilder());
countRequest.query(nestedQueryBuilder);
CountResponse response = this.getClient().count(countRequest, RequestOptions.DEFAULT);
return response.getCount();*/
}
return null;
}
private BoolQueryBuilder createBoolQuery(DatasetCriteria criteria) {
BoolQueryBuilder boolQuery = QueryBuilders.boolQuery().mustNot(QueryBuilders.termsQuery("datasets.status", Stream.of(Dataset.Status.DELETED.getValue(), Dataset.Status.CANCELED.getValue()).collect(Collectors.toList())));
if (criteria.isPublic()) {
boolQuery = boolQuery.should(QueryBuilders.termQuery("datasets.public", "true"));
boolQuery = boolQuery.should(QueryBuilders.termQuery("datasets.status", Dataset.Status.FINALISED.getValue()));
boolQuery = boolQuery.should(QueryBuilders.termQuery("datasets.lastPublicVersion", "true"));
}
if (criteria.getLike() != null && !criteria.getLike().isEmpty()) {
boolQuery = boolQuery.should(QueryBuilders.queryStringQuery(criteria.getLike()).allowLeadingWildcard(true).fields(Stream.of(new Object[][]{
{"datasets.label", 1.0f},
{"datasets.description", 1.0f},
{"datasets.formData", 1.0f}
}).collect(Collectors.toMap(data -> (String) data[0], data -> (Float) data[1]))));
}
if (criteria.getDatasetTemplates() != null && criteria.getDatasetTemplates().size() > 0) {
criteria.setDatasetTemplates(criteria.getDatasetTemplates().stream().filter(Objects::nonNull).collect(Collectors.toList()));
boolQuery = boolQuery.should(QueryBuilders.termsQuery("datasets.template", criteria.getDatasetTemplates().stream().map(UUID::toString).collect(Collectors.toList())));
}
if (criteria.getStatus() != null) {
boolQuery = boolQuery.should(QueryBuilders.termQuery("datasets.status", criteria.getStatus().toString()));
}
if (criteria.getDmps() != null && criteria.getDmps().size() > 0) {
criteria.setDmps(criteria.getDmps().stream().filter(Objects::nonNull).collect(Collectors.toList()));
boolQuery = boolQuery.should(QueryBuilders.termsQuery("datasets.dmp", criteria.getDmps().stream().map(UUID::toString).collect(Collectors.toList())));
}
if (criteria.getGroupIds() != null && criteria.getGroupIds().size() > 0) {
criteria.setGroupIds(criteria.getGroupIds().stream().filter(Objects::nonNull).collect(Collectors.toList()));
boolQuery = boolQuery.should(QueryBuilders.termsQuery("datasets.group", criteria.getGroupIds().stream().map(UUID::toString).collect(Collectors.toList())));
}
if (criteria.getGrants() != null && criteria.getGrants().size() > 0) {
criteria.setGrants(criteria.getGrants().stream().filter(Objects::nonNull).collect(Collectors.toList()));
boolQuery = boolQuery.should(QueryBuilders.termsQuery("datasets.grant", criteria.getGrants().stream().map(UUID::toString).collect(Collectors.toList())));
}
if (criteria.getGrantStatus() != null) {
boolQuery = boolQuery.should(QueryBuilders.termQuery("datasets.grantStatus", criteria.getGrantStatus().toString()));
}
if (criteria.getCollaborators() != null && criteria.getCollaborators().size() > 0) {
criteria.setCollaborators(criteria.getCollaborators().stream().filter(Objects::nonNull).collect(Collectors.toList()));
boolQuery = boolQuery.should(QueryBuilders.termsQuery("datasets.collaborators.id.keyword", criteria.getCollaborators().stream().map(UUID::toString).collect(Collectors.toList())));
}
if (!criteria.isPublic()) {
if (criteria.getAllowAllVersions() != null && !criteria.getAllowAllVersions()) {
boolQuery = boolQuery.should(QueryBuilders.termQuery("datasets.lastVersion", "true"));
}
}
if (criteria.getOrganiztions() != null && criteria.getOrganiztions().size() > 0) {
criteria.setOrganiztions(criteria.getOrganiztions().stream().filter(Objects::nonNull).collect(Collectors.toList()));
boolQuery = boolQuery.should(QueryBuilders.termsQuery("datasets.organizations.id", criteria.getOrganiztions()));
}
if (criteria.getTags() != null && criteria.getTags().size() > 0) {
criteria.setTags(criteria.getTags().stream().filter(Objects::nonNull).collect(Collectors.toList()));
boolQuery = boolQuery.should(QueryBuilders.termsQuery("datasets.tags.name", criteria.getTags().stream().map(Tag::getName).collect(Collectors.toList())));
}
if (criteria.getHasTags() != null) {
boolQuery = criteria.getHasTags() == true ? boolQuery.should(QueryBuilders.existsQuery("datasets.tags.id")) : boolQuery.mustNot(QueryBuilders.existsQuery("datasets.tags.id"));
}
if (boolQuery.should().isEmpty() && boolQuery.mustNot().isEmpty()) {
boolQuery.should(QueryBuilders.matchAllQuery());
} else {
boolQuery.minimumShouldMatch(boolQuery.should().size());
}
return boolQuery;
}
@Override
public boolean exists() throws IOException {
if (this.getClient() != null) {
GetIndexRequest request = new GetIndexRequest("dmps");
GetIndexRequest request = new GetIndexRequest(this.environment.getProperty("elasticsearch.index"));
// request.indices("datasets");
return this.getClient().indices().exists(request, RequestOptions.DEFAULT);
}

View File

@ -23,9 +23,13 @@ import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.index.reindex.DeleteByQueryRequest;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.sort.SortBuilder;
import org.elasticsearch.search.sort.SortBuilders;
import org.elasticsearch.search.sort.SortOrder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Service;
import java.io.IOException;
@ -37,9 +41,12 @@ import java.util.stream.Stream;
public class DmpRepository extends ElasticRepository<Dmp, DmpCriteria> {
private static final Logger logger = LoggerFactory.getLogger(DmpRepository.class);
private final Environment environment;
@Autowired
public DmpRepository(RestHighLevelClient client) {
public DmpRepository(RestHighLevelClient client, Environment environment) {
super(client);
this.environment = environment;
}
private void generateMapping() throws IOException {
@ -52,7 +59,7 @@ public class DmpRepository extends ElasticRepository<Dmp, DmpCriteria> {
builder.endObject();
builder.endObject();
builder.endObject();
PutMappingRequest putMappingRequest = new PutMappingRequest("dmps");
PutMappingRequest putMappingRequest = new PutMappingRequest(this.environment.getProperty("elasticsearch.index"));
putMappingRequest.source(builder);
this.getClient().indices().putMapping(putMappingRequest, RequestOptions.DEFAULT);
}
@ -62,7 +69,7 @@ public class DmpRepository extends ElasticRepository<Dmp, DmpCriteria> {
public Dmp createOrUpdate(Dmp entity) throws IOException {
if (this.getClient() != null) {
XContentBuilder builder = XContentFactory.jsonBuilder();
IndexRequest request = new IndexRequest("dmps").id(entity.getId().toString()).source(entity.toElasticEntity(builder));
IndexRequest request = new IndexRequest(this.environment.getProperty("elasticsearch.index")).id(entity.getId().toString()).source(entity.toElasticEntity(builder));
IndexResponse response = this.getClient().index(request, RequestOptions.DEFAULT);
return entity;
}
@ -72,7 +79,7 @@ public class DmpRepository extends ElasticRepository<Dmp, DmpCriteria> {
@Override
public Dmp findDocument(String id) throws IOException {
if (this.getClient() != null) {
GetRequest request = new GetRequest("dmps", id);
GetRequest request = new GetRequest(this.environment.getProperty("elasticsearch.index"), id);
GetResponse response = this.getClient().get(request, RequestOptions.DEFAULT);
return new Dmp().fromElasticEntity(response.getSourceAsMap());
}
@ -82,66 +89,40 @@ public class DmpRepository extends ElasticRepository<Dmp, DmpCriteria> {
@Override
public List<Dmp> query(DmpCriteria criteria) throws IOException {
if (this.getClient() != null) {
SearchRequest searchRequest = new SearchRequest("dmps");
SearchRequest searchRequest = new SearchRequest(this.environment.getProperty("elasticsearch.index"));
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
CountRequest countRequest = new CountRequest("dmps");
CountRequest countRequest = new CountRequest(this.environment.getProperty("elasticsearch.index"));
countRequest.query(QueryBuilders.boolQuery().mustNot(QueryBuilders.termsQuery(Dmp.MapKey.STATUS.getName(), Collections.singletonList(Dmp.DMPStatus.DELETED.getValue()))));
CountResponse countResponse = getClient().count(countRequest, RequestOptions.DEFAULT);
Long count = countResponse.getCount();
searchSourceBuilder.size(count.intValue());
BoolQueryBuilder boolQuery = QueryBuilders.boolQuery().mustNot(QueryBuilders.termsQuery(Dmp.MapKey.STATUS.getName(), Collections.singletonList(Dmp.DMPStatus.DELETED.getValue())));
if (criteria.isPublic()) {
boolQuery = boolQuery.should(QueryBuilders.termQuery(Dmp.MapKey.ISPUBLIC.getName(), true));
boolQuery = boolQuery.should(QueryBuilders.termQuery(Dmp.MapKey.STATUS.getName(), Dmp.DMPStatus.FINALISED.getValue()));
}
if (criteria.getLike() != null && !criteria.getLike().isEmpty()) {
boolQuery = boolQuery.should(QueryBuilders.queryStringQuery(criteria.getLike()).fields(Stream.of(new Object[][]{
{Dmp.MapKey.LABEL.getName(), 1.0f},
{Dmp.MapKey.DESCRIPTION.getName(), 1.0f}
}).collect(Collectors.toMap(data -> (String) data[0], data -> (Float) data[1]))));
}
List<SortBuilder> sortBuilders = new ArrayList<>();
BoolQueryBuilder boolQuery = createBoolQuery(criteria);
if (criteria.getTemplates() != null && criteria.getTemplates().size() > 0) {
boolQuery = boolQuery.should(QueryBuilders.termsQuery(Dmp.MapKey.TEMPLATES.getName() + ".id.keyword", criteria.getTemplates().stream().map(UUID::toString).collect(Collectors.toList())));
}
if (criteria.getSortCriteria() != null && !criteria.getSortCriteria().isEmpty()) {
criteria.getSortCriteria().forEach(sortCriteria -> {
switch(sortCriteria.getColumnType()) {
case COLUMN:
sortBuilders.add(SortBuilders.fieldSort(sortCriteria.getFieldName()).order(SortOrder.fromString(sortCriteria.getOrderByType().name())));
break;
case JOIN_COLUMN:
List<String> fields = Arrays.asList(sortCriteria.getFieldName().split(":"));
fields.forEach(field -> {
sortBuilders.add(SortBuilders.fieldSort(sortCriteria.getFieldName()).order(SortOrder.fromString(sortCriteria.getOrderByType().name())));
});
break;
}
});
if (criteria.getStatus() != null) {
boolQuery = boolQuery.should(QueryBuilders.termQuery(Dmp.MapKey.STATUS.getName(), criteria.getStatus().intValue()));
}
if (criteria.getGroupIds() != null && criteria.getGroupIds().size() > 0) {
boolQuery = boolQuery.should(QueryBuilders.termsQuery(Dmp.MapKey.GROUPID.getName(), criteria.getGroupIds().stream().map(UUID::toString).collect(Collectors.toList())));
searchSourceBuilder.query(boolQuery).from(criteria.getOffset()).fetchSource("id", null);
if (criteria.getSize() != null && criteria.getSize() > 0) {
searchSourceBuilder.size(criteria.getSize());
}
if (criteria.getGrants() != null && criteria.getGrants().size() > 0) {
boolQuery = boolQuery.should(QueryBuilders.termsQuery(Dmp.MapKey.GRANT.getName() + ".keyword", criteria.getGrants().stream().map(UUID::toString).collect(Collectors.toList())));
}
if (criteria.getCollaborators() != null && criteria.getCollaborators().size() > 0) {
boolQuery = boolQuery.should(QueryBuilders.termsQuery(Dmp.MapKey.COLLABORATORS.getName() + ".keyword", criteria.getCollaborators().stream().map(UUID::toString).collect(Collectors.toList())));
}
if (!criteria.isAllowAllVersions()) {
boolQuery = boolQuery.should(QueryBuilders.termQuery(criteria.isPublic() ? Dmp.MapKey.LASTPUBLICVERSION.getName() : Dmp.MapKey.LASTVERSION.getName(), true));
}
if (criteria.getOrganizations() != null && criteria.getOrganizations().size() > 0) {
boolQuery = boolQuery.should(QueryBuilders.termsQuery(Dmp.MapKey.ORGANIZATIONS.getName() + ".id.keyword", criteria.getOrganizations().stream().map(UUID::toString).collect(Collectors.toList())));
}
if (criteria.getGrantStatus() != null) {
boolQuery = boolQuery.should(QueryBuilders.termQuery(Dmp.MapKey.GRANTSTATUS.getName(), criteria.getGrantStatus()));
}
if (boolQuery.should().isEmpty() && boolQuery.mustNot().isEmpty()) {
boolQuery = boolQuery.should(QueryBuilders.matchAllQuery());
} else {
boolQuery.minimumShouldMatch(boolQuery.should().size());
}
searchSourceBuilder.query(boolQuery);
sortBuilders.forEach(searchSourceBuilder::sort);
searchRequest.source(searchSourceBuilder);
SearchResponse response = this.getClient().search(searchRequest, RequestOptions.DEFAULT);
return Arrays.stream(response.getHits().getHits()).map(x -> new Dmp().fromElasticEntity((Map<String, Object>) this.transformFromString(x.getSourceAsString(), Map.class))).collect(Collectors.toList());
@ -149,10 +130,77 @@ public class DmpRepository extends ElasticRepository<Dmp, DmpCriteria> {
return null;
}
@Override
public Long count(DmpCriteria criteria) throws IOException {
if (this.getClient() != null) {
CountRequest countRequest = new CountRequest(this.environment.getProperty("elasticsearch.index"));
BoolQueryBuilder boolQuery = createBoolQuery(criteria);
countRequest.query(boolQuery);
CountResponse response = this.getClient().count(countRequest, RequestOptions.DEFAULT);
return response.getCount();
}
return null;
}
private BoolQueryBuilder createBoolQuery(DmpCriteria criteria) {
BoolQueryBuilder boolQuery = QueryBuilders.boolQuery().mustNot(QueryBuilders.termsQuery(Dmp.MapKey.STATUS.getName(), Collections.singletonList(Dmp.DMPStatus.DELETED.getValue())));
if (criteria.isPublic()) {
boolQuery = boolQuery.should(QueryBuilders.termQuery(Dmp.MapKey.ISPUBLIC.getName(), true));
boolQuery = boolQuery.should(QueryBuilders.termQuery(Dmp.MapKey.STATUS.getName(), Dmp.DMPStatus.FINALISED.getValue()));
}
if (criteria.getLike() != null && !criteria.getLike().isEmpty()) {
boolQuery = boolQuery.should(QueryBuilders.queryStringQuery(criteria.getLike()).fields(Stream.of(new Object[][]{
{Dmp.MapKey.LABEL.getName(), 1.0f},
{Dmp.MapKey.DESCRIPTION.getName(), 1.0f}
}).collect(Collectors.toMap(data -> (String) data[0], data -> (Float) data[1]))));
}
if (criteria.getTemplates() != null && criteria.getTemplates().size() > 0) {
boolQuery = boolQuery.should(QueryBuilders.termsQuery(Dmp.MapKey.TEMPLATES.getName() + ".id.keyword", criteria.getTemplates().stream().map(UUID::toString).collect(Collectors.toList())));
}
if (criteria.getStatus() != null) {
boolQuery = boolQuery.should(QueryBuilders.termQuery(Dmp.MapKey.STATUS.getName(), criteria.getStatus().intValue()));
}
if (criteria.getGroupIds() != null && criteria.getGroupIds().size() > 0) {
boolQuery = boolQuery.should(QueryBuilders.termsQuery(Dmp.MapKey.GROUPID.getName(), criteria.getGroupIds().stream().map(UUID::toString).collect(Collectors.toList())));
}
if (criteria.getGrants() != null && criteria.getGrants().size() > 0) {
boolQuery = boolQuery.should(QueryBuilders.termsQuery(Dmp.MapKey.GRANT.getName() + ".keyword", criteria.getGrants().stream().map(UUID::toString).collect(Collectors.toList())));
}
if (criteria.getCollaborators() != null && criteria.getCollaborators().size() > 0) {
boolQuery = boolQuery.should(QueryBuilders.termsQuery(Dmp.MapKey.COLLABORATORS.getName() + ".id.keyword", criteria.getCollaborators().stream().filter(Objects::nonNull).map(UUID::toString).collect(Collectors.toList())));
}
if (!criteria.isAllowAllVersions()) {
boolQuery = boolQuery.should(QueryBuilders.termQuery(criteria.isPublic() ? Dmp.MapKey.LASTPUBLICVERSION.getName() : Dmp.MapKey.LASTVERSION.getName(), true));
}
if (criteria.getOrganizations() != null && criteria.getOrganizations().size() > 0) {
boolQuery = boolQuery.should(QueryBuilders.termsQuery(Dmp.MapKey.ORGANIZATIONS.getName() + ".id.keyword", criteria.getOrganizations().stream().map(UUID::toString).collect(Collectors.toList())));
}
if (criteria.getGrantStatus() != null) {
boolQuery = boolQuery.should(QueryBuilders.termQuery(Dmp.MapKey.GRANTSTATUS.getName(), criteria.getGrantStatus()));
}
if (boolQuery.should().isEmpty() && boolQuery.mustNot().isEmpty()) {
boolQuery = boolQuery.should(QueryBuilders.matchAllQuery());
} else {
boolQuery.minimumShouldMatch(boolQuery.should().size());
}
return boolQuery;
}
public boolean createIndex() {
try {
if (!this.exists()) {
CreateIndexRequest createIndexRequest = new CreateIndexRequest("dmps");
CreateIndexRequest createIndexRequest = new CreateIndexRequest(this.environment.getProperty("elasticsearch.index"));
this.getClient().indices().create(createIndexRequest, RequestOptions.DEFAULT);
this.generateMapping();
}
@ -166,7 +214,7 @@ public class DmpRepository extends ElasticRepository<Dmp, DmpCriteria> {
@Override
public boolean exists() throws IOException {
if (this.getClient() != null) {
GetIndexRequest request = new GetIndexRequest("dmps");
GetIndexRequest request = new GetIndexRequest(this.environment.getProperty("elasticsearch.index"));
return this.getClient().indices().exists(request, RequestOptions.DEFAULT);
}
return false;
@ -175,10 +223,10 @@ public class DmpRepository extends ElasticRepository<Dmp, DmpCriteria> {
@Override
public void clear() throws IOException {
if (exists()) {
DeleteByQueryRequest delete = new DeleteByQueryRequest("dmps");
DeleteByQueryRequest delete = new DeleteByQueryRequest(this.environment.getProperty("elasticsearch.index"));
delete.setQuery(QueryBuilders.matchAllQuery());
this.getClient().deleteByQuery(delete, RequestOptions.DEFAULT);
DeleteIndexRequest deleteIndexRequest = new DeleteIndexRequest("dmps");
DeleteIndexRequest deleteIndexRequest = new DeleteIndexRequest(this.environment.getProperty("elasticsearch.index"));
this.getClient().indices().delete(deleteIndexRequest, RequestOptions.DEFAULT);
}
}

View File

@ -30,6 +30,7 @@ public abstract class ElasticRepository<T extends ElasticEntity,C extends Criter
}
} catch (IOException e) {
logger.warn("Unable to connect to Elastic Services");
logger.error(e.getMessage(), e);
this.client = null;
}
}

View File

@ -18,6 +18,8 @@ public interface Repository<ET extends ElasticEntity, C extends Criteria> {
List<ET> query(C criteria) throws ExecutionException, InterruptedException, IOException;
Long count(C criteria) throws ExecutionException, InterruptedException, IOException;
boolean exists() throws IOException;
void clear() throws IOException;

View File

@ -10,7 +10,7 @@
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
<version>2.5.2</version>
</parent>
<modules>
@ -27,25 +27,27 @@
<java.version>1.8</java.version>
<dmp-backend-commons.version>0.0.1-SNAPSHOT</dmp-backend-commons.version>
<org.springframework.version>4.3.8.RELEASE</org.springframework.version>
<org.springframework.version>5.3.8</org.springframework.version>
<!-- <org.springframeweu.eudat.logic.securityrity.version>3.2.10.RELEASE</org.springframeweu.eudat.logic.securityrity.version> -->
<org.springframework.security.version>4.2.3.RELEASE</org.springframework.security.version>
<com.sun.jersey.version>1.19.1</com.sun.jersey.version>
<org.springframework.security.version>5.3.10.RELEASE</org.springframework.security.version>
<!--<com.sun.jersey.version>1.19.1</com.sun.jersey.version>-->
<!--
<org.apache.tomcat.tomcat-jdbc.version>7.0.35</org.apache.tomcat.tomcat-jdbc.version>
<com.fasterxml.jackson>2.8.4</com.fasterxml.jackson>
-->
<!--<com.fasterxml.jackson>2.9.0</com.fasterxml.jackson>-->
<hibernate.version>5.2.11.Final</hibernate.version>
<hibernate.version>5.5.3.Final</hibernate.version>
<commons-codec.version>1.9</commons-codec.version>
<org.junit.version>4.11</org.junit.version>
<log4j.version>1.2.17</log4j.version>
<slf4j.version>1.7.12</slf4j.version>
<jetty.version>9.0.7.v20131107
</jetty.version> <!-- Adapt this to a version found on http://repo.maven.apache.org/maven2/org/eclipse/jetty/jetty-maven-plugin/ -->
<log4j2.version>2.15.0</log4j2.version>
<slf4j.version>1.7.15</slf4j.version>
<!--<jetty.version>11.0.5
</jetty.version>--> <!-- Adapt this to a version found on http://repo.maven.apache.org/maven2/org/eclipse/jetty/jetty-maven-plugin/ -->
<logback.version>1.2.3</logback.version>
<javax.inject.version>1</javax.inject.version>
<javax.servlet.servlet-api.version>3.0.1</javax.servlet.servlet-api.version>
<docker.image.prefix>ikalyvas</docker.image.prefix>
<!-- <javax.inject.version>1</javax.inject.version>-->
<!--<javax.servlet.servlet-api.version>3.0.1</javax.servlet.servlet-api.version>-->
</properties>
<dependencies>
@ -58,7 +60,7 @@
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>4.0.0.RELEASE</version>
<version>${org.springframework.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
@ -69,7 +71,39 @@
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>7.6.0</version>
<version>7.7.0</version>
<exclusions>
<exclusion>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
</exclusion>
<exclusion>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcore</artifactId>
</exclusion>
<exclusion>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcore-nio</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.12</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcore-nio</artifactId>
<version>4.4.13</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcore</artifactId>
<version>4.4.13</version>
</dependency>
<dependency>
@ -107,7 +141,7 @@
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
<version>2.9.3</version>
<version>2.12.3</version>
</dependency>
@ -115,13 +149,13 @@
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.4</version>
<version>2.12.3</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackeu.eudat.corecore/jackson-databind -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.4</version>
<version>2.12.3</version>
</dependency>
<!-- g/a spring -->
@ -139,13 +173,13 @@
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.0.0</version>
<version>4.1.1</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.0.0</version>
<version>4.1.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.xmlgraphics/fop -->
@ -154,6 +188,12 @@
<artifactId>fop</artifactId>
<version>2.3</version>
</dependency>
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.14.3</version>
</dependency>
<!-- https://mvnrepository.com/artifact/fr.opensagres.xdocreport/org.apache.poi.xwpf.converter.pdf -->
<dependency>
<groupId>fr.opensagres.xdocreport</groupId>
@ -179,10 +219,10 @@
<version>2.1</version>
</dependency>
<dependency>
<!--<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-jpamodelgen</artifactId>
</dependency>
</dependency>-->
<dependency>
<groupId>org.elasticsearch.client</groupId>
@ -190,11 +230,11 @@
<version>7.6.0</version>
</dependency>
<dependency>
<!--<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-to-slf4j</artifactId>
<version>2.8.2</version>
</dependency>
</dependency>-->
<!-- https://mvnrepository.com/artifact/javax.xml.bind/jaxb-api -->
<dependency>
@ -225,6 +265,55 @@
<version>1.3.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.validation/validation-api -->
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>2.0.1.Final</version>
</dependency>
<!-- The client -->
<dependency>
<groupId>io.prometheus</groupId>
<artifactId>simpleclient</artifactId>
<version>0.11.0</version>
</dependency>
<!-- Hotspot JVM metrics-->
<dependency>
<groupId>io.prometheus</groupId>
<artifactId>simpleclient_hotspot</artifactId>
<version>0.11.0</version>
</dependency>
<!-- Exposition HTTPServer-->
<dependency>
<groupId>io.prometheus</groupId>
<artifactId>simpleclient_httpserver</artifactId>
<version>0.11.0</version>
</dependency>
<!-- Pushgateway exposition-->
<dependency>
<groupId>io.prometheus</groupId>
<artifactId>simpleclient_pushgateway</artifactId>
<version>0.11.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/io.micrometer/micrometer-registry-prometheus -->
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
<version>1.7.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!-- Micormeter core dependecy -->
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-core</artifactId>
</dependency>
</dependencies>
@ -238,6 +327,18 @@
<packaging.type>jar</packaging.type>
</properties>
</profile>
<profile>
<id>intellij-properties-launcher</id>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-loader</artifactId>
<version>2.5.2</version>
</dependency>
</dependencies>
</profile>
<profile>
<id>production</id>
<properties>

View File

@ -4,8 +4,8 @@ import eu.eudat.queryable.jpa.predicates.*;
import eu.eudat.queryable.queryableentity.DataEntity;
import eu.eudat.queryable.types.SelectionField;
import javax.persistence.TypedQuery;
import javax.persistence.criteria.Expression;
import javax.persistence.criteria.Join;
import javax.persistence.criteria.JoinType;
import javax.persistence.criteria.Subquery;
import java.util.List;
import java.util.Map;
@ -44,6 +44,8 @@ public interface QueryableList<T extends DataEntity> {
QueryableList<T> orderBy(OrderByPredicate<T> predicate);
QueryableList<T> groupBy(GroupByPredicate<T> predicate);
QueryableList<T> withHint(String hint);
Long count();
@ -67,4 +69,8 @@ public interface QueryableList<T extends DataEntity> {
<U extends Comparable> Subquery<U> subQueryMax(SinglePredicate<T> predicate, List<SelectionField> fields, Class<U> uClass);
<U extends Comparable> Subquery<U> subQueryMax(NestedQuerySinglePredicate<T> predicate, List<SelectionField> fields, Class<U> uClass);
Join getJoin(String field, JoinType type);
}

View File

@ -1,6 +1,9 @@
package eu.eudat.queryable.collector;
import com.fasterxml.jackson.databind.ObjectMapper;
import javax.persistence.Tuple;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
@ -9,9 +12,13 @@ import java.util.stream.Collectors;
public class Collector {
public List<Map> buildFromTuple(List<Tuple> results, Map<Object, List<Tuple>> groupedResults, List<String> fields, String key) {
return groupedResults.keySet().stream()
return results.stream().map(tuple -> {
Map<String, Object> parsedResult = new HashMap<>();
tuple.getElements().forEach(tupleElement -> parsedResult.put(tupleElement.getAlias(), tuple.get(tupleElement.getAlias())));
return parsedResult;
}).collect(Collectors.toList());/*groupedResults.keySet().stream()
.map(x -> buildOne(groupedResults.get(x), fields, key))
.collect(Collectors.toList());
.collect(Collectors.toList());*/
}
private Map buildOne(List<Tuple> tuples, List<String> fields, String key) {

View File

@ -1,5 +1,6 @@
package eu.eudat.queryable.jpa.hibernatequeryablelist;
import com.fasterxml.jackson.databind.ObjectMapper;
import eu.eudat.queryable.QueryableList;
import eu.eudat.queryable.collector.Collector;
import eu.eudat.queryable.exceptions.NotSingleResultException;
@ -33,6 +34,7 @@ public class QueryableHibernateList<T extends DataEntity> implements QueryableLi
private List<NestedQuerySinglePredicate<T>> nestedPredicates = new LinkedList<>();
private boolean distinct = false;
private List<OrderByPredicate<T>> orderings = new LinkedList<>();
private List<GroupByPredicate<T>> groupings = new LinkedList<>();
private List<String> fields = new LinkedList<>();
private Integer length;
private Integer offset;
@ -62,7 +64,7 @@ public class QueryableHibernateList<T extends DataEntity> implements QueryableLi
}
private QueryableList<T> selectFields() {
List<Selection> rootFields = fields.stream().map(field -> this.convertFieldToPath(field)).filter(x -> x != null).collect(Collectors.toList());
List<Selection> rootFields = fields.stream().map(this::convertFieldToPath).filter(Objects::nonNull).collect(Collectors.toList());
this.query.select(this.manager.getCriteriaBuilder().tuple(rootFields.toArray(new Selection[rootFields.size()])));
return this;
}
@ -93,7 +95,7 @@ public class QueryableHibernateList<T extends DataEntity> implements QueryableLi
return join;
}
private Join getJoin(String field, JoinType type) {
public Join getJoin(String field, JoinType type) {
if (this.joinsMap.containsKey(field)) return this.joinsMap.get(field);
Join join = this.root.join(field, type);
this.joinsMap.put(field, join);
@ -133,11 +135,11 @@ public class QueryableHibernateList<T extends DataEntity> implements QueryableLi
}
public <R> List<R> select(SelectPredicate<T, R> predicate) {
return this.toList().stream().map(item -> predicate.applySelection(item)).collect(Collectors.toList());
return this.toList().stream().map(predicate::applySelection).collect(Collectors.toList());
}
public <R> CompletableFuture<List<R>> selectAsync(SelectPredicate<T, R> predicate) {
return this.toListAsync().thenApplyAsync(items -> items.stream().map(item -> predicate.applySelection(item)).collect(Collectors.toList()));
return this.toListAsync().thenApplyAsync(items -> items.stream().map(predicate::applySelection).collect(Collectors.toList()));
}
public QueryableList<T> distinct() {
@ -150,6 +152,11 @@ public class QueryableHibernateList<T extends DataEntity> implements QueryableLi
return this;
}
public QueryableList<T> groupBy(GroupByPredicate<T> predicate) {
this.groupings.add(predicate);
return this;
}
public Long count() {
CriteriaBuilder criteriaBuilder = this.manager.getCriteriaBuilder();
CriteriaQuery<Long> criteriaQuery = criteriaBuilder.createQuery(Long.class);
@ -157,8 +164,16 @@ public class QueryableHibernateList<T extends DataEntity> implements QueryableLi
if (distinct) criteriaQuery.select(criteriaBuilder.countDistinct(this.root.get("id")));
else criteriaQuery.select(criteriaBuilder.count(this.root));
criteriaQuery.where(this.generateWherePredicates(this.singlePredicates, this.root, this.nestedPredicates, this.nestedQueryRoot));
if (!this.groupings.isEmpty()) criteriaQuery.groupBy(this.generateGroupPredicates(this.groupings, this.root));
//if (distinct) criteriaQuery.distinct(true);
return this.manager.createQuery(criteriaQuery).getSingleResult();
//GK: Group By special case. When group by is used, since it will result in a list of how many elements have the grouped field common
// then it will instead return the number of the distinct values of the grouped field
if (this.groupings.isEmpty()) {
return this.manager.createQuery(criteriaQuery).getSingleResult();
} else {
return (long) this.manager.createQuery(criteriaQuery).getResultList().size();
}
}
@Async
@ -169,8 +184,15 @@ public class QueryableHibernateList<T extends DataEntity> implements QueryableLi
if (distinct) criteriaQuery.select(criteriaBuilder.countDistinct(this.root.get("id")));
else criteriaQuery.select(criteriaBuilder.count(this.root));
criteriaQuery.where(this.generateWherePredicates(this.singlePredicates, this.root, this.nestedPredicates, this.nestedQueryRoot));
if (!this.groupings.isEmpty()) criteriaQuery.groupBy(this.generateGroupPredicates(this.groupings, this.root));
//if (distinct) criteriaQuery.distinct(true);
return CompletableFuture.supplyAsync(() -> this.manager.createQuery(criteriaQuery).getSingleResult());
return CompletableFuture.supplyAsync(() -> {
if (this.groupings.isEmpty()) {
return this.manager.createQuery(criteriaQuery).getSingleResult();
} else {
return (long) this.manager.createQuery(criteriaQuery).getResultList().size();
}
});
}
@ -205,6 +227,14 @@ public class QueryableHibernateList<T extends DataEntity> implements QueryableLi
return predicates.toArray(new Order[predicates.size()]);
}
private Expression[] generateGroupPredicates(List<GroupByPredicate<T>> groupByPredicates, Root<T> root) {
List<Expression> predicates = new LinkedList<>();
for (GroupByPredicate<T> groupPredicate : groupByPredicates) {
predicates.add(groupPredicate.applyPredicate(this.manager.getCriteriaBuilder(), root));
}
return predicates.toArray(new Expression[predicates.size()]);
}
public List<T> toList() {
CriteriaBuilder builder = this.manager.getCriteriaBuilder();
if (!this.fields.isEmpty()) this.query = builder.createTupleQuery();
@ -212,22 +242,20 @@ public class QueryableHibernateList<T extends DataEntity> implements QueryableLi
this.root = this.query.from(this.tClass);
this.query.where(this.generateWherePredicates(this.singlePredicates, this.root, this.nestedPredicates, this.nestedQueryRoot));
if (!this.orderings.isEmpty()) this.query.orderBy(this.generateOrderPredicates(this.orderings, this.root));
if (!this.groupings.isEmpty()) this.query.groupBy(this.generateGroupPredicates(this.groupings, this.root));
if (!this.fields.isEmpty()) this.selectFields();
if (distinct) this.query.distinct(true);
//if (!this.fields.isEmpty()) return this.toListWithFields();
//if (!this.fields.isEmpty()) this.query.multiselect(this.parseFields(this.fields));
ObjectMapper mapper = new ObjectMapper();
if (!this.fields.isEmpty()) return this.toListWithFields().stream().map(m -> mapper.convertValue(m, this.tClass)).collect(Collectors.toList());
return this.toListWithOutFields();
}
public List<Map> toListWithFields() {
CriteriaBuilder builder = this.manager.getCriteriaBuilder();
if (!this.fields.isEmpty()) this.query = builder.createTupleQuery();
else this.query = builder.createQuery(this.tClass);
this.root = this.query.from(this.tClass);
this.query.where(this.generateWherePredicates(this.singlePredicates, this.root, this.nestedPredicates, this.nestedQueryRoot));
if (!this.orderings.isEmpty()) this.query.orderBy(this.generateOrderPredicates(this.orderings, this.root));
if (!this.fields.isEmpty()) this.selectFields();
if (distinct) this.query.distinct(true);
List<Tuple> results = this.manager.createQuery(query).getResultList();
TypedQuery<Tuple> typedQuery = this.manager.createQuery(this.query);
if (this.offset != null) typedQuery.setFirstResult(this.offset);
if (this.length != null) typedQuery.setMaxResults(this.length);
List<Tuple> results = typedQuery.getResultList();
Map<Object, List<Tuple>> groupedResults = results.stream()
.collect(Collectors.groupingBy(x -> x.get("id")));
return this.collector.buildFromTuple(results, groupedResults, this.fields, "id");
@ -252,6 +280,7 @@ public class QueryableHibernateList<T extends DataEntity> implements QueryableLi
this.root = this.query.from(this.tClass);
this.query.where(this.generateWherePredicates(this.singlePredicates, this.root, this.nestedPredicates, this.nestedQueryRoot));
if (!this.orderings.isEmpty()) this.query.orderBy(this.generateOrderPredicates(this.orderings, this.root));
if (!this.groupings.isEmpty()) this.query.groupBy(this.generateGroupPredicates(this.groupings, this.root));
if (!this.fields.isEmpty()) this.selectFields();
if (distinct) this.query.distinct(true);
if (!this.fields.isEmpty()) return this.toListAsyncWithFields();
@ -356,6 +385,8 @@ public class QueryableHibernateList<T extends DataEntity> implements QueryableLi
if (!this.orderings.isEmpty())
criteriaQuery.orderBy(this.generateOrderPredicates(this.orderings, criteriaRoot));
if (!this.groupings.isEmpty()) criteriaQuery.groupBy(this.generateGroupPredicates(this.groupings, this.root));
TypedQuery<T> typedQuery = this.manager.createQuery(criteriaQuery);
typedQuery.setHint("javax.persistence.fetchgraph", this.manager.getEntityGraph(this.hint));
return typedQuery;
@ -466,4 +497,11 @@ public class QueryableHibernateList<T extends DataEntity> implements QueryableLi
.createQuery(update)
.executeUpdate();
}
private Path[] parseFields(List<String> selectedFields) {
List<Path> paths = new ArrayList<>();
selectedFields.forEach(s -> paths.add(root.get(s)));
return paths.toArray(new Path[0]);
}
}

View File

@ -0,0 +1,10 @@
package eu.eudat.queryable.jpa.predicates;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.Expression;
import javax.persistence.criteria.Root;
public interface GroupByPredicate<T> {
Expression<T> applyPredicate(CriteriaBuilder builder, Root<T> root);
}

View File

@ -26,13 +26,16 @@
<artifactId>queryable</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>eu.eudat</groupId>
<artifactId>elastic</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>gr.cite.opendmp</groupId>
<artifactId>repositorydepositbase</artifactId>
<version>1.0.4</version>
</dependency>
<dependency>
@ -43,6 +46,10 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/com.googlecode.json-simple/json-simple -->
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
@ -50,44 +57,60 @@
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.9.0</version>
<version>2.12.3</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
<dependency>
<!--<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.10.RELEASE</version>
</dependency>
<version>5.3.8</version>
</dependency>-->
<!-- guava eu.eudat.cache -->
<dependency>
<!-- <dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>23.0</version>
</dependency>
<version>30.1.1-jre</version>
</dependency>-->
<!-- https://mvnrepository.com/artifact/org.springframework/spring-context-support -->
<dependency>
<groupId>com.github.ben-manes.caffeine</groupId>
<artifactId>caffeine</artifactId>
<version>2.9.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/junit/junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.7.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>postgresql</groupId>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>9.1-901.jdbc4</version>
<version>42.2.22</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.7.0</version>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-boot-starter</artifactId>
<version>3.0.0</version>
</dependency>
<!-- facebook Login -->
@ -101,7 +124,7 @@
<dependency>
<groupId>org.springframework.social</groupId>
<artifactId>spring-social-linkedin</artifactId>
<version>1.0.0.RELEASE</version>
<version>1.0.2.RELEASE</version>
</dependency>
<!-- tweeter login-->
@ -114,6 +137,66 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</dependency>
<dependency>
<groupId>org.opensaml</groupId>
<artifactId>opensaml-core</artifactId>
<version>${opensaml.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.opensaml</groupId>
<artifactId>opensaml-saml-api</artifactId>
<version>${opensaml.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.opensaml</groupId>
<artifactId>opensaml-saml-impl</artifactId>
<version>${opensaml.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.opensaml</groupId>
<artifactId>opensaml-soap-api</artifactId>
<version>${opensaml.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.opensaml</groupId>
<artifactId>opensaml-xmlsec-api</artifactId>
<version>${opensaml.version}</version>
</dependency>
<dependency>
<groupId>org.opensaml</groupId>
<artifactId>opensaml-security-api</artifactId>
<version>${opensaml.version}</version>
</dependency>
<dependency>
<groupId>org.opensaml</groupId>
<artifactId>opensaml-security-impl</artifactId>
<version>${opensaml.version}</version>
</dependency>
<dependency>
<groupId>org.opensaml</groupId>
<artifactId>opensaml-profile-api</artifactId>
<version>${opensaml.version}</version>
</dependency>
<dependency>
<groupId>org.opensaml</groupId>
<artifactId>xmltooling</artifactId>
<version>1.4.4</version>
</dependency>
<dependency>
<groupId>jakarta.xml.soap</groupId>
<artifactId>jakarta.xml.soap-api</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>com.sun.xml.messaging.saaj</groupId>
<artifactId>saaj-impl</artifactId>
<version>3.0.0-M2</version>
</dependency>
</dependencies>
<build>
@ -134,6 +217,7 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
@ -142,11 +226,46 @@
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>1.5.9.RELEASE</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>eu.eudat.EuDatApplication</mainClass>
<classpathPrefix>dependency-jars/</classpathPrefix>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.5.1</version>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>
${project.build.directory}/dependency-jars/
</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
<properties>
<start-class>eu.eudat.EuDatApplication</start-class>
<opensaml.version>4.0.1</opensaml.version>
</properties>
</project>

View File

@ -5,10 +5,10 @@ import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.support.SpringBootServletInitializer;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
import org.springframework.scheduling.annotation.EnableAsync;
@SpringBootApplication
@SpringBootApplication(scanBasePackages = {"eu.eudat", "eu.eudat.depositinterface"})
@EnableAsync
public class EuDatApplication extends SpringBootServletInitializer {
private static final Logger logger = LoggerFactory.getLogger(EuDatApplication.class);

View File

@ -0,0 +1,22 @@
package eu.eudat.cache;
import eu.eudat.logic.proxy.config.ExternalUrlCriteria;
import org.springframework.cache.interceptor.KeyGenerator;
import java.lang.reflect.Method;
public class ExternalUrlsKeyGenerator implements KeyGenerator {
@Override
public Object generate(Object o, Method method, Object... params) {
StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append(o.getClass().getSimpleName()).append("_");
stringBuffer.append(method.getName()).append("_");
for (Object param: params) {
if (param instanceof ExternalUrlCriteria) {
ExternalUrlCriteria externalUrlCriteria = (ExternalUrlCriteria) param;
stringBuffer.append(externalUrlCriteria);
}
}
return stringBuffer.toString();
}
}

View File

@ -1,12 +1,13 @@
package eu.eudat.cache;
import com.google.common.cache.CacheBuilder;
import com.github.benmanes.caffeine.cache.Caffeine;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.cache.guava.GuavaCache;
import org.springframework.cache.caffeine.CaffeineCache;
import org.springframework.cache.interceptor.KeyGenerator;
import org.springframework.cache.support.SimpleCacheManager;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
@ -29,22 +30,31 @@ public class ResponsesCache {
public CacheManager cacheManager() {
logger.info("Loading ResponsesCache...");
SimpleCacheManager simpleCacheManager = new SimpleCacheManager();
List<GuavaCache> caches = new ArrayList<GuavaCache>();
caches.add(new GuavaCache("repositories", CacheBuilder.newBuilder().expireAfterAccess(HOW_MANY, TIME_UNIT).build()));
caches.add(new GuavaCache("grants", CacheBuilder.newBuilder().expireAfterAccess(HOW_MANY, TIME_UNIT).build()));
caches.add(new GuavaCache("projects", CacheBuilder.newBuilder().expireAfterAccess(HOW_MANY, TIME_UNIT).build()));
caches.add(new GuavaCache("funders", CacheBuilder.newBuilder().expireAfterAccess(HOW_MANY, TIME_UNIT).build()));
caches.add(new GuavaCache("organisations", CacheBuilder.newBuilder().expireAfterAccess(HOW_MANY, TIME_UNIT).build()));
caches.add(new GuavaCache("registries", CacheBuilder.newBuilder().expireAfterAccess(HOW_MANY, TIME_UNIT).build()));
caches.add(new GuavaCache("services", CacheBuilder.newBuilder().expireAfterAccess(HOW_MANY, TIME_UNIT).build()));
caches.add(new GuavaCache("tags", CacheBuilder.newBuilder().expireAfterAccess(HOW_MANY, TIME_UNIT).build()));
caches.add(new GuavaCache("researchers", CacheBuilder.newBuilder().expireAfterAccess(HOW_MANY, TIME_UNIT).build()));
caches.add(new GuavaCache("externalDatasets", CacheBuilder.newBuilder().expireAfterAccess(HOW_MANY, TIME_UNIT).build()));
caches.add(new GuavaCache("currencies", CacheBuilder.newBuilder().expireAfterAccess(HOW_MANY, TIME_UNIT).build()));
caches.add(new GuavaCache("licenses", CacheBuilder.newBuilder().expireAfterAccess(HOW_MANY, TIME_UNIT).build()));
List<CaffeineCache> caches = new ArrayList<CaffeineCache>();
caches.add(new CaffeineCache("repositories", Caffeine.newBuilder().expireAfterAccess(HOW_MANY, TIME_UNIT).build()));
caches.add(new CaffeineCache("pubrepos", Caffeine.newBuilder().expireAfterAccess(HOW_MANY, TIME_UNIT).build()));
caches.add(new CaffeineCache("journals", Caffeine.newBuilder().expireAfterAccess(HOW_MANY, TIME_UNIT).build()));
caches.add(new CaffeineCache("taxonomies", Caffeine.newBuilder().expireAfterAccess(HOW_MANY, TIME_UNIT).build()));
caches.add(new CaffeineCache("publications", Caffeine.newBuilder().expireAfterAccess(HOW_MANY, TIME_UNIT).build()));
caches.add(new CaffeineCache("grants", Caffeine.newBuilder().expireAfterAccess(HOW_MANY, TIME_UNIT).build()));
caches.add(new CaffeineCache("projects", Caffeine.newBuilder().expireAfterAccess(HOW_MANY, TIME_UNIT).build()));
caches.add(new CaffeineCache("funders", Caffeine.newBuilder().expireAfterAccess(HOW_MANY, TIME_UNIT).build()));
caches.add(new CaffeineCache("organisations", Caffeine.newBuilder().expireAfterAccess(HOW_MANY, TIME_UNIT).build()));
caches.add(new CaffeineCache("registries", Caffeine.newBuilder().expireAfterAccess(HOW_MANY, TIME_UNIT).build()));
caches.add(new CaffeineCache("services", Caffeine.newBuilder().expireAfterAccess(HOW_MANY, TIME_UNIT).build()));
caches.add(new CaffeineCache("tags", Caffeine.newBuilder().expireAfterAccess(HOW_MANY, TIME_UNIT).build()));
caches.add(new CaffeineCache("researchers", Caffeine.newBuilder().expireAfterAccess(HOW_MANY, TIME_UNIT).build()));
caches.add(new CaffeineCache("externalDatasets", Caffeine.newBuilder().expireAfterAccess(HOW_MANY, TIME_UNIT).build()));
caches.add(new CaffeineCache("currencies", Caffeine.newBuilder().expireAfterAccess(HOW_MANY, TIME_UNIT).build()));
caches.add(new CaffeineCache("licenses", Caffeine.newBuilder().expireAfterAccess(HOW_MANY, TIME_UNIT).build()));
simpleCacheManager.setCaches(caches);
logger.info("OK");
return simpleCacheManager;
}
@Bean(name = "externalUrlsKeyGenerator")
private KeyGenerator externalUrlsKeyGenerator() {
return new ExternalUrlsKeyGenerator();
}
}

View File

@ -2,8 +2,8 @@ package eu.eudat.configurations;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.*;
import org.springframework.core.env.Environment;
import org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor;

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