From 674cbbf3848ec98ebc6a9374fd942668bd954b82 Mon Sep 17 00:00:00 2001 From: George Kalampokis Date: Mon, 21 Mar 2022 15:10:28 +0200 Subject: [PATCH 01/37] Remove unused module on the frontend --- dmp-frontend/package.json | 1 - dmp-frontend/src/app/ui/dmp/listing/dmp-listing.component.ts | 4 ++-- dmp-frontend/src/app/ui/dmp/overview/dmp-overview.module.ts | 4 ++-- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/dmp-frontend/package.json b/dmp-frontend/package.json index 12b85564e..020f2a1e1 100644 --- a/dmp-frontend/package.json +++ b/dmp-frontend/package.json @@ -31,7 +31,6 @@ "file-saver": "^2.0.5", "moment": "^2.29.1", "moment-timezone": "^0.5.33", - "ng-dialog-animation": "^9.0.4", "ng2-dragula": "^2.1.1", "ngx-cookie-service": "^12.0.3", "ngx-cookieconsent": "^2.2.3", diff --git a/dmp-frontend/src/app/ui/dmp/listing/dmp-listing.component.ts b/dmp-frontend/src/app/ui/dmp/listing/dmp-listing.component.ts index f825230d6..cc207f142 100644 --- a/dmp-frontend/src/app/ui/dmp/listing/dmp-listing.component.ts +++ b/dmp-frontend/src/app/ui/dmp/listing/dmp-listing.component.ts @@ -28,7 +28,7 @@ import { DmpCriteriaDialogComponent } from './criteria/dmp-criteria-dialog.compo import { RecentActivityOrder } from '@app/core/common/enum/recent-activity-order'; import { GuidedTourService } from '@app/library/guided-tour/guided-tour.service'; import { GuidedTour, Orientation } from '@app/library/guided-tour/guided-tour.constants'; -import { NgDialogAnimationService } from "ng-dialog-animation"; +//import { NgDialogAnimationService } from "ng-dialog-animation"; import { HttpClient } from '@angular/common/http'; import { MatomoService } from '@app/core/services/matomo/matomo-service'; @@ -75,7 +75,7 @@ export class DmpListingComponent extends BaseComponent implements OnInit, IBread private dmpService: DmpService, private router: Router, private route: ActivatedRoute, - public dialogAnimation: NgDialogAnimationService, + //public dialogAnimation: NgDialogAnimationService, public dialog: MatDialog, public enumUtils: EnumUtils, private language: TranslateService, diff --git a/dmp-frontend/src/app/ui/dmp/overview/dmp-overview.module.ts b/dmp-frontend/src/app/ui/dmp/overview/dmp-overview.module.ts index dc73b4f76..be0a5c30e 100644 --- a/dmp-frontend/src/app/ui/dmp/overview/dmp-overview.module.ts +++ b/dmp-frontend/src/app/ui/dmp/overview/dmp-overview.module.ts @@ -9,7 +9,7 @@ import { CommonFormsModule } from '@common/forms/common-forms.module'; import { CommonUiModule } from '@common/ui/common-ui.module'; import { RouterModule } from '@angular/router'; import { CloneDialogModule } from '../clone/clone-dialog/clone-dialog.module'; -import { NgDialogAnimationService } from 'ng-dialog-animation'; +//import { NgDialogAnimationService } from 'ng-dialog-animation'; @NgModule({ imports: [ @@ -27,7 +27,7 @@ import { NgDialogAnimationService } from 'ng-dialog-animation'; DmpOverviewComponent ], providers: [ - NgDialogAnimationService + //NgDialogAnimationService ] }) export class DmpOverviewModule { } From 4c651c6200e24252fcaf9da6ad33ad0a138773b3 Mon Sep 17 00:00:00 2001 From: George Kalampokis Date: Mon, 21 Mar 2022 15:55:44 +0200 Subject: [PATCH 02/37] Replace the old application.properties with application.yml --- .../config/application-devel.properties | 96 -------- .../resources/config/application-devel.yml | 59 +++++ .../config/application-production.properties | 100 -------- .../config/application-production.yml | 33 +++ .../config/application-staging.properties | 90 ------- .../resources/config/application-staging.yml | 34 +++ .../resources/config/application.properties | 123 ---------- .../src/main/resources/config/application.yml | 227 ++++++++++++++++++ 8 files changed, 353 insertions(+), 409 deletions(-) delete mode 100644 dmp-backend/web/src/main/resources/config/application-devel.properties create mode 100644 dmp-backend/web/src/main/resources/config/application-devel.yml delete mode 100644 dmp-backend/web/src/main/resources/config/application-production.properties create mode 100644 dmp-backend/web/src/main/resources/config/application-production.yml delete mode 100644 dmp-backend/web/src/main/resources/config/application-staging.properties create mode 100644 dmp-backend/web/src/main/resources/config/application-staging.yml delete mode 100644 dmp-backend/web/src/main/resources/config/application.properties create mode 100644 dmp-backend/web/src/main/resources/config/application.yml diff --git a/dmp-backend/web/src/main/resources/config/application-devel.properties b/dmp-backend/web/src/main/resources/config/application-devel.properties deleted file mode 100644 index 396776273..000000000 --- a/dmp-backend/web/src/main/resources/config/application-devel.properties +++ /dev/null @@ -1,96 +0,0 @@ -dmp.domain = http://localhost:4200 - -####################PERSISTENCE OVERRIDES CONFIGURATIONS########## -database.url= -database.username= -database.password= -spring.datasource.maxIdle=10 -spring.datasource.minIdle=5 -spring.datasource.maxActive=10 - -####################ELASTIIC SEARCH TAGS OVERRIDES CONFIGURATIONS########## -elasticsearch.host = localhost -elasticsearch.port = 9200 -elasticsearch.username=elastic -elasticsearch.password= -elasticsearch.index=dmps - -####################ELK OVERRIDES CONFIGURATIONS########## -http-logger.server-address = http://localhost:31311 - -####################PDF OVERRIDES CONFIGURATIONS########## -pdf.converter.url=http://localhost:3000/ - -####################CONFIGURATION FILES OVERRIDES CONFIGURATIONS########## -configuration.externalUrls=externalUrls/ExternalUrls.xml -configuration.rda=RDACommonStandards.txt -configuration.h2020template=documents/h2020.docx -configuration.configurable_login_providers=configurableLoginProviders.json -configuration.doi_funder=DOI_Funder.json - -####################EMAIL FILE TEMPLATES OVERRIDES CONFIGURATIONS########## -email.invite=classpath:templates/email/email.html -email.confirmation=classpath:templates/email/emailConfirmation.html -email.merge=classpath:templates/email/emailMergeConfirmation.html - -#############FACEBOOK LOGIN CONFIGURATIONS######### -facebook.login.clientId= -facebook.login.clientSecret= -facebook.login.namespace= - -#############GOOGLE LOGIN CONFIGURATIONS######### -google.login.clientId= - -#############LINKEDIN LOGIN CONFIGURATIONS######### -linkedin.login.clientId= -linkedin.login.clientSecret= -linkedin.login.redirect_uri=http://localhost:4200/login/linkedin -linkedin.login.user_info_url=https://api.linkedin.com/v2/me -linkedin.login.user_email=https://api.linkedin.com/v2/emailAddress?q=members&projection=(elements*(handle~)) -linkedin.login.access_token_url=https://www.linkedin.com/uas/oauth2/accessToken - -#############TWITTER LOGIN CONFIGURATIONS######### -twitter.login.redirect_uri=http://localhost:4200/login/twitter - -#############B2 ACCESS CONFIGURATIONS######### -b2access.externallogin.user_info_url=https://b2access-integration.fz-juelich.de:443/oauth2/userinfo -b2access.externallogin.access_token_url=https://b2access-integration.fz-juelich.de:443/oauth2/token -b2access.externallogin.redirect_uri=http://opendmp.eu/api/oauth/authorized/b2access -b2access.externallogin.clientid= -b2access.externallogin.clientSecret= - -#############ORCID CONFIGURATIONS######### -orcid.login.client_id=APP-766DI5LP8T75FC4R -orcid.login.client_secret=f6ddc717-f49e-4bce-b302-2e479b226a24 -orcid.login.access_token_url=https://orcid.org/oauth/token -orcid.login.redirect_uri=http://localhost:4200/login/external/orcid - -#############OPENAIRE CONFIGURATIONS######### -openaire.login.client_id= -openaire.login.client_secret= -openaire.login.access_token_url= -openaire.login.redirect_uri= -openaire.login.user_info_url= - -#############CONFIRMATION EMAIL CONFIGURATIONS######### -conf_email.expiration_time_seconds=14400 -conf_email.subject=OpenDMP email confirmation - -#############ZENODO CONFIGURATIONS######### -zenodo.url=https://sandbox.zenodo.org/api/ -zenodo.access_token= -zenodo.login.access_token_url=https://sandbox.zenodo.org/oauth/token -zenodo.login.client_id= -zenodo.login.client_secret= -zenodo.login.redirect_uri=http://localhost:4200/login/external/zenodo - -#############CONTACT EMAIL CONFIGURATIONS######### -contact_email.mail= - -language.path=dmp-frontend/src/assets/i18n/ - -#############LOGGING######### -logging.config=classpath:logging/logback-${spring.profiles.active}.xml - -#############PROMETHEUS######### -endpoints.prometheus.sensitive: false \ No newline at end of file diff --git a/dmp-backend/web/src/main/resources/config/application-devel.yml b/dmp-backend/web/src/main/resources/config/application-devel.yml new file mode 100644 index 000000000..354385426 --- /dev/null +++ b/dmp-backend/web/src/main/resources/config/application-devel.yml @@ -0,0 +1,59 @@ +dmp: + domain: http://localhost:4200 + +####################PERSISTENCE OVERRIDES CONFIGURATIONS########## +spring: + datasource: + maxIdle: 10 + minIdle: 5 + maxActive: 10 + +####################ELASTIIC SEARCH TAGS OVERRIDES CONFIGURATIONS########## +elasticsearch: + host: localhost + port: 9200 + +####################ELK OVERRIDES CONFIGURATIONS########## +http-logger: + server-address: http://localhost:31311 + +####################PDF OVERRIDES CONFIGURATIONS########## +pdf: + converter: + url: http://localhost:3000/ + +####################EMAIL FILE TEMPLATES OVERRIDES CONFIGURATIONS########## +email: + invite: classpath:templates/email/email.html + confirmation: classpath:templates/email/emailConfirmation.html + merge: classpath:templates/email/emailMergeConfirmation.html + +#############LINKEDIN LOGIN CONFIGURATIONS######### +linkedin: + login: + redirect_uri: http://localhost:4200/login/linkedin + +#############TWITTER LOGIN CONFIGURATIONS######### +twitter: + login: + redirect_uri: http://localhost:4200/login/twitter + +#############ORCID CONFIGURATIONS######### +orcid: + login: + redirect_uri: http://localhost:4200/login/external/orcid + +#############ZENODO CONFIGURATIONS######### +zenodo: + login: + access_token_url: https://sandbox.zenodo.org/oauth/token + redirect_uri: http://localhost:4200/login/external/zenodo + +#############LANGUAGE CONFIGURATION######### +language: + path: dmp-frontend/src/assets/i18n/ + +#############PROMETHEUS######### +endpoints: + prometheus: + sensitive: false \ No newline at end of file diff --git a/dmp-backend/web/src/main/resources/config/application-production.properties b/dmp-backend/web/src/main/resources/config/application-production.properties deleted file mode 100644 index 971e6be43..000000000 --- a/dmp-backend/web/src/main/resources/config/application-production.properties +++ /dev/null @@ -1,100 +0,0 @@ -dmp.domain = https://opendmp.eu - -####################PERSISTENCE OVERRIDES CONFIGURATIONS########## -database.url=jdbc:postgresql://dmp-db:5432/dmptool -database.username=dmptool -database.password=CHANGEME - -####################ELASTIIC SEARCH TAGS OVERRIDES CONFIGURATIONS########## -elasticsearch.host = tags-elastic-search -elasticsearch.port = 9200 -elasticsearch.username=elastic -elasticsearch.password= -elasticsearch.index=dmps - -####################PDF OVERRIDES CONFIGURATIONS########## -pdf.converter.url=http://docsbox-web/ - -####################CONFIGURATION FILES OVERRIDES CONFIGURATIONS########## -configuration.externalUrls=externalUrls/ExternalUrls.xml -configuration.rda=RDACommonStandards.txt -configuration.h2020template=documents/h2020.docx -configuration.configurable_login_providers=ConfigurableLoginProviders.json -configuration.doi_funder=DOI_Funder.json - -####################SPRING MAIL CONFIGURATIONS################# -spring.mail.default-encoding=UTF-8 -spring.mail.host= -spring.mail.username= -spring.mail.password= -spring.mail.port=25 -spring.mail.protocol=smtp -spring.mail.test-connection=false -spring.mail.properties.mail.smtp.auth=false -spring.mail.properties.mail.smtp.starttls.enable=true - -#############FACEBOOK LOGIN CONFIGURATIONS######### -facebook.login.clientId= -facebook.login.clientSecret= -facebook.login.namespace=opendmp - -#############GOOGLE LOGIN CONFIGURATIONS######### -google.login.clientId= - -#############LINKEDIN LOGIN CONFIGURATIONS######### -linkedin.login.clientId= -linkedin.login.clientSecret= -linkedin.login.redirect_uri=https://opendmp.eu/login/linkedin -linkedin.login.user_info_url=https://api.linkedin.com/v2/me -linkedin.login.user_email=https://api.linkedin.com/v2/emailAddress?q=members&projection=(elements*(handle~)) -linkedin.login.access_token_url=https://www.linkedin.com/uas/oauth2/accessToken - -#############TWITTER LOGIN CONFIGURATIONS######### -twitter.login.clientId= -twitter.login.clientSecret= -twitter.login.redirect_uri=https://opendmp.eu/login/twitter - -#############B2 ACCESS CONFIGURATIONS######### -b2access.externallogin.user_info_url=https://b2access-integration.fz-juelich.de:443/oauth2/userinfo -b2access.externallogin.access_token_url=https://b2access-integration.fz-juelich.de:443/oauth2/token -b2access.externallogin.redirect_uri=https://opendmp.eu/api/oauth/authorized/b2access -b2access.externallogin.clientid= -b2access.externallogin.clientSecret= - -#############ORCID CONFIGURATIONS######### -orcid.login.client_id= -orcid.login.client_secret= -orcid.login.access_token_url=https://orcid.org/oauth/token -orcid.login.redirect_uri=https://opendmp.eu/login/external/orcid - -#############OPENAIRE CONFIGURATIONS######### -openaire.login.client_id= -openaire.login.client_secret= -openaire.login.access_token_url= -openaire.login.redirect_uri= -openaire.login.user_info_url= - -#############SPRING DATASOURCE CONFIGURATIONS######### -spring.datasource.maxIdle: 10 -spring.datasource.max-active: 70 -spring.datasource.max-wait: 10000 -spring.datasource.validationQuery: select 1 -spring.datasource.removeAbandoned: true -spring.datasource.removeAbandonedTimeout: 1 -spring.datasource.logAbandoned: true -spring.datasource.testOnBorrow: true -spring.datasource.testOnConnect: false -spring.datasource.testWhileIdle: false - -#############CONFIRMATION EMAIL CONFIGURATIONS######### -conf_email.expiration_time_seconds=14400 -conf_email.subject=OpenDMP email confirmation - -#############ZENODO CONFIGURATIONS######### -zenodo.url=https://zenodo.org/api/ -zenodo.access_token= - -#############CONTACT EMAIL CONFIGURATIONS######### -contact_email.mail= - -language.path=i18n/ \ No newline at end of file diff --git a/dmp-backend/web/src/main/resources/config/application-production.yml b/dmp-backend/web/src/main/resources/config/application-production.yml new file mode 100644 index 000000000..01ddeaf21 --- /dev/null +++ b/dmp-backend/web/src/main/resources/config/application-production.yml @@ -0,0 +1,33 @@ +dmp: + domain: https://opendmp.eu + +####################ELASTIIC SEARCH TAGS OVERRIDES CONFIGURATIONS########## +elasticsearch: + host: tags-elastic-search + port: 9200 + +####################PDF OVERRIDES CONFIGURATIONS########## +pdf: + converter: + url: http://docsbox-web/ + +#############SPRING DATASOURCE CONFIGURATIONS######### +spring: + datasource: + maxIdle: 10 + max-active: 70 + max-wait: 10000 + validationQuery: select 1 + removeAbandoned: true + removeAbandonedTimeout: 1 + logAbandoned: true + testOnBorrow: true + testOnConnect: false + testWhileIdle: false + +#############CONTACT EMAIL CONFIGURATIONS######### +contact_email.mail= + +#############LANGUAGE CONFIGURATION######### +language: + path: i18n/ \ No newline at end of file diff --git a/dmp-backend/web/src/main/resources/config/application-staging.properties b/dmp-backend/web/src/main/resources/config/application-staging.properties deleted file mode 100644 index 8bafc9971..000000000 --- a/dmp-backend/web/src/main/resources/config/application-staging.properties +++ /dev/null @@ -1,90 +0,0 @@ -dmp.domain = https://devel.opendmp.eu - -####################PERSISTENCE OVERRIDES CONFIGURATIONS########## -database.url=jdbc:postgresql://dmp-db:5432/dmptool -database.username=dmptool -database.password=CHANGEME - -####################ELASTIIC SEARCH TAGS OVERRIDES CONFIGURATIONS########## -elasticsearch.host = tags-elastic-search -elasticsearch.port = 9200 -elasticsearch.username=elastic -elasticsearch.password= -elasticsearch.index=dmps - -####################PDF OVERRIDES CONFIGURATIONS########## -pdf.converter.url=http://docsbox-web/ - -####################CONFIGURATION FILES OVERRIDES CONFIGURATIONS########## -configuration.externalUrls=externalUrls/ExternalUrls.xml -configuration.rda=RDACommonStandards.txt -configuration.h2020template=documents/h2020.docx -configuration.configurable_login_providers=ConfigurableLoginProviders.json -configuration.doi_funder=DOI_Funder.json - -####################INVITATION MAIL CONFIGURATIONS############## -####################GENERIC MAIL CONFIGURATIONS################# -mail.subject=Invitation to DMP Plan {dmpname} -mail.from=opendmp-dev@cite.gr - -####################SPRING MAIL CONFIGURATIONS################# -spring.mail.default-encoding=UTF-8 -spring.mail.host=hermes.local.cite.gr -spring.mail.port=25 -spring.mail.protocol=smtp -spring.mail.test-connection=false -spring.mail.properties.mail.smtp.auth=false - -#############FACEBOOK LOGIN CONFIGURATIONS######### -facebook.login.clientId= -facebook.login.clientSecret= -facebook.login.namespace=opendmp - -#############GOOGLE LOGIN CONFIGURATIONS######### -google.login.clientId= - -#############LINKEDIN LOGIN CONFIGURATIONS######### -linkedin.login.clientId= -linkedin.login.clientSecret= -linkedin.login.redirect_uri=https://devel.opendmp.eu/login/linkedin -linkedin.login.user_info_url=https://api.linkedin.com/v2/me -linkedin.login.user_email=https://api.linkedin.com/v2/emailAddress?q=members&projection=(elements*(handle~)) -linkedin.login.access_token_url=https://www.linkedin.com/uas/oauth2/accessToken - -#############TWITTER LOGIN CONFIGURATIONS######### -twitter.login.clientId= -twitter.login.clientSecret= -twitter.login.redirect_uri=https://devel.opendmp.eu/login/twitter - -#############CONFIRMATION EMAIL CONFIGURATIONS######### -conf_email.expiration_time_seconds=14400 -conf_email.subject=OpenDMP email confirmation - -#############B2 ACCESS CONFIGURATIONS######### -b2access.externallogin.user_info_url=https://b2access-integration.fz-juelich.de:443/oauth2/userinfo -b2access.externallogin.access_token_url=https://b2access-integration.fz-juelich.de:443/oauth2/token -b2access.externallogin.redirect_uri=https://devel.opendmp.eu/api/oauth/authorized/b2access -b2access.externallogin.clientid= -b2access.externallogin.clientSecret= - -#############ORCID CONFIGURATIONS######### -orcid.login.client_id= -orcid.login.client_secret= -orcid.login.access_token_url=https://orcid.org/oauth/token -orcid.login.redirect_uri=https://opendmp.eu/login/external/orcid - -#############OPENAIRE CONFIGURATIONS######### -openaire.login.client_id= -openaire.login.client_secret= -openaire.login.access_token_url= -openaire.login.redirect_uri= -openaire.login.user_info_url= - -#############ZENODO CONFIGURATIONS######### -zenodo.url=https://sandbox.zenodo.org/api/ -zenodo.access_token= - -#############CONTACT EMAIL CONFIGURATIONS######### -contact_email.mail= - -language.path=i18n/ \ No newline at end of file diff --git a/dmp-backend/web/src/main/resources/config/application-staging.yml b/dmp-backend/web/src/main/resources/config/application-staging.yml new file mode 100644 index 000000000..2df177074 --- /dev/null +++ b/dmp-backend/web/src/main/resources/config/application-staging.yml @@ -0,0 +1,34 @@ +dmp: + domain: https://devel.opendmp.eu + +####################ELASTIIC SEARCH TAGS OVERRIDES CONFIGURATIONS########## +elasticsearch: + host: tags-elastic-search + port: 9200 + +####################PDF OVERRIDES CONFIGURATIONS########## +pdf: + converter: + url: http://docsbox-web/ + +#############LINKEDIN LOGIN CONFIGURATIONS######### +linkedin: + login: + redirect_uri: https://devel.opendmp.eu/login/linkedin + +#############TWITTER LOGIN CONFIGURATIONS######### +twitter: + login: + redirect_uri: https://devel.opendmp.eu/login/twitter + +#############B2 ACCESS CONFIGURATIONS######### +b2access: + externallogin: + redirect_uri: https://devel.opendmp.eu/api/oauth/authorized/b2access + +#############ZENODO CONFIGURATIONS######### +zenodo: + url: https://sandbox.zenodo.org/api/ + +language: + path: i18n/ \ No newline at end of file diff --git a/dmp-backend/web/src/main/resources/config/application.properties b/dmp-backend/web/src/main/resources/config/application.properties deleted file mode 100644 index e6d2f9a93..000000000 --- a/dmp-backend/web/src/main/resources/config/application.properties +++ /dev/null @@ -1,123 +0,0 @@ -server.port=8081 -server.tomcat.max-threads = 20 -server.tomcat.max-connections = 10000 -logging.file=/logs/spring-boot-logging.log -spring.profiles.active=devel -eu.eudat.logic.proxy.allowed.host=https://eestore.paas2.uninett.no - -####################Metrics############## -management.endpoint.metrics.enabled=false -management.metrics.enable.http=false -management.metrics.enable.jvm=false -management.metrics.enable.jdbc=false -management.metrics.enable.tomcat=false -management.metrics.enable.logback=false -management.metrics.enable.hikaricp=false -management.metrics.enable.cache=false -management.endpoints.web.base-path=/ -management.endpoints.web.exposure.include=prometheus -management.endpoint.prometheus.enabled=true -management.metrics.export.prometheus.enabled=true - -####################INVITATION MAIL CONFIGURATIONS############## -####################GENERIC MAIL CONFIGURATIONS################# -mail.subject=Invitation to DMP Plan {dmpname} -mail.from=opendmp-dev@cite.gr - -####################DATASET TEMPLATE MAIL CONFIGURATIONS################# -admin.mail.subject=You have been invited to the Dataset Template {templateName} - -####################SPRING MAIL CONFIGURATIONS################# -spring.mail.default-encoding=UTF-8 -spring.mail.host=hermes.local.cite.gr -spring.mail.port=25 -spring.mail.protocol=smtp -spring.mail.test-connection=false -spring.mail.properties.mail.smtp.auth=false -spring.mail.properties.mail.smtp.starttls.enable=false - -####################CONFIGURATION FILES OVERRIDES CONFIGURATIONS########## -configuration.externalUrls=externalUrls/ExternalUrls.xml -configuration.rda=RDACommonStandards.txt -configuration.h2020template=documents/h2020.docx -configuration.configurable_login_providers=ConfigurableLoginProviders.json -configuration.doi_funder=DOI_Funder.json - -####################EMAIL FILE TEMPLATES OVERRIDES CONFIGURATIONS########## -email.invite=file:templates/email/email.html -email.confirmation=file:templates/email/emailConfirmation.html -email.merge=file:templates/email/emailMergeConfirmation.html -email.dataset.template=file:templates/email/emailAdmin.html - -#############LOGIN CONFIGURATIONS######### -#############GENERIC LOGIN CONFIGURATIONS######### -autouser.root.email= -autouser.root.password= -autouser.root.username= - -#############FACEBOOK LOGIN CONFIGURATIONS######### -facebook.login.clientId= -facebook.login.clientSecret= -facebook.login.namespace= - -#############GOOGLE LOGIN CONFIGURATIONS######### -google.login.clientId= - -#############LINKEDIN LOGIN CONFIGURATIONS######### -linkedin.login.clientId= -linkedin.login.clientSecret= -linkedin.login.redirect_uri=http://opendmp.eu/login/linkedin -linkedin.login.user_info_url=https://api.linkedin.com/v2/me -linkedin.login.user_email=https://api.linkedin.com/v2/emailAddress?q=members&projection=(elements*(handle~)) -linkedin.login.access_token_url=https://www.linkedin.com/uas/oauth2/accessToken - -#############TWITTER LOGIN CONFIGURATIONS######### -twitter.login.clientId= -twitter.login.clientSecret= -twitter.login.redirect_uri=http://opendmp.eu/login/twitter - -#############B2 ACCESS CONFIGURATIONS######### -b2access.externallogin.user_info_url=https://b2access-integration.fz-juelich.de:443/oauth2/userinfo -b2access.externallogin.access_token_url=https://b2access-integration.fz-juelich.de:443/oauth2/token -b2access.externallogin.redirect_uri=http://opendmp.eu/api/oauth/authorized/b2access -b2access.externallogin.clientid= -b2access.externallogin.clientSecret= - -#############DYNAMIC PROJECT CONFIGURATIONS######### -project.configuration.project.name = Project -project.configuration.funder.name = Funder -project.configuration.grant.name = Grant - -#############HTTP LOGGER DELAY CONFIGURATIONS######### -http-logger.initial-delay = 0 -http-logger.delay = 10 - -##########################PERISTENCE########################################## -#############GENERIC DATASOURCE CONFIGURATIONS######### -database.driver-class-name=org.postgresql.Driver -database.lock-fail-interval=120000 - -##########################MISC########################################## -#############USER GUIDE######### -userguide.path=user-guide/ - -#############NOTIFICATION######### -notification.rateInterval=30000 -notification.maxRetries=10 -notification.modified.subject=[OpenDMP] The {name} has been modified -notification.publish.subject=[OpenDMP] The {name} has been published -notification.finalised.subject=[OpenDMP] The {name} has been finalised -notification.modifiedFinalised.subject=[OpenDMP] The {name} has been modified and finalised - -#############LOGGING######### -logging.config=classpath:logging/logback-${spring.profiles.active}.xml - -#############TEMP######### -temp.temp=tmp/ -file.storage=uploads/ -spring.servlet.multipart.max-file-size=10MB -spring.servlet.multipart.max-request-size=10MB - -#############ZENODO######### -zenodo.affiliation=ARGOS -zenodo.community=argos \ No newline at end of file diff --git a/dmp-backend/web/src/main/resources/config/application.yml b/dmp-backend/web/src/main/resources/config/application.yml new file mode 100644 index 000000000..4c35e4cd4 --- /dev/null +++ b/dmp-backend/web/src/main/resources/config/application.yml @@ -0,0 +1,227 @@ +server: + port: 8081 + tomcat: + max-threads: 20 + max-connections: 10000 + +eu: + eudat: + logic: + proxy: + allowed: + host: https://eestore.paas2.uninett.no + +####################Metrics############## +management: + endpoint: + metrics: + enabled: false + prometheus: + enabled: true + metrics: + enable: + http: false + jvm: false + jdbc: false + tomcat: false + logback: false + hikaricp: false + cache: false + export: + prometheus: + enabled: true + endpoints: + web: + base-path: / + exposure: + include: prometheus + +####################INVITATION MAIL CONFIGURATIONS############## +####################GENERIC MAIL CONFIGURATIONS################# +mail: + subject: "Invitation to DMP Plan {dmpname}" + from: opendmp-dev@cite.gr + +####################DATASET TEMPLATE MAIL CONFIGURATIONS################# +admin: + mail: + subject: "You have been invited to the Dataset Template {templateName}" + +####################SPRING MAIL CONFIGURATIONS################# +spring: + mail: + default-encoding: UTF-8 + host: hermes.local.cite.gr + username: ${SPRING_MAIL_USER:} + password: ${SPRING_MAIL_PASS:} + port: 25 + protocol: smtp + test-connection: false + properties: + mail: + smtp: + auth: false + starttls: + enable: false + servlet: + multipart: + max-file-size: 10MB + max-request-size: 10MB + +####################CONFIGURATION FILES OVERRIDES CONFIGURATIONS########## +configuration: + externalUrls: externalUrls/ExternalUrls.xml + rda: RDACommonStandards.txt + h2020template: documents/h2020.docx + configurable_login_providers: ConfigurableLoginProviders.json + doi_funder: DOI_Funder.json + +####################EMAIL FILE TEMPLATES OVERRIDES CONFIGURATIONS########## +email: + invite: file:templates/email/email.html + confirmation: file:templates/email/emailConfirmation.html + merge: file:templates/email/emailMergeConfirmation.html + dataset: + template: file:templates/email/emailAdmin.html + +#############LOGIN CONFIGURATIONS######### +#############GENERIC LOGIN CONFIGURATIONS######### +autouser: + root: + email: ${AUTOUSER_EMAIL:} + password: ${AUTOUSER_PASS:} + username: ${AUTOUSER_NAME:} + +#############FACEBOOK LOGIN CONFIGURATIONS######### +facebook: + login: + clientId: ${FACEBOOK_CLIENT_ID:} + clientSecret: ${FACEBOOK_CLIENT_SECRET:} + namespace: ${FACEBOOK_NAMESPACE:} + +#############GOOGLE LOGIN CONFIGURATIONS######### +google: + login: + clientId: ${GOOGLE_CLIENT_ID:} + +#############LINKEDIN LOGIN CONFIGURATIONS######### +linkedin: + login: + clientId: ${LINKEDIN_CLIENT_ID:} + clientSecret: ${LINKEDIN_CLIENT_SECRET:} + redirect_uri: http://opendmp.eu/login/linkedin + user_info_url: https://api.linkedin.com/v2/me + user_email: https://api.linkedin.com/v2/emailAddress?q=members&projection=(elements*(handle~)) + access_token_url: https://www.linkedin.com/uas/oauth2/accessToken + +#############TWITTER LOGIN CONFIGURATIONS######### +twitter: + login: + clientId: ${TWITTER_CLIENT_ID:} + clientSecret: ${TWITTER_CLIENT_SECRET:} + redirect_uri: http://opendmp.eu/login/twitter + +#############B2 ACCESS CONFIGURATIONS######### +b2access: + externallogin: + user_info_url: https://b2access-integration.fz-juelich.de:443/oauth2/userinfo + access_token_url: https://b2access-integration.fz-juelich.de:443/oauth2/token + redirect_uri: http://opendmp.eu/api/oauth/authorized/b2access + clientid: ${B2ACCESS_CLIENT_ID:} + clientSecret: ${B2ACCESS_CLIENT_SECRET:} + +#############ORCID CONFIGURATIONS######### +orcid: + login: + client_id: ${ORCID_CLIENT_ID:} + client_secret: ${ORCID_CLIENT_SECRET:} + access_token_url: https://orcid.org/oauth/token + redirect_uri: https://opendmp.eu/login/external/orcid + +#############OPENAIRE CONFIGURATIONS######### +openaire: + login: + client_id: ${OPENAIRE_CLIENT_ID:} + client_secret: ${OPENAIRE_CLIENT_SECRET:} + access_token_url: ${OPENAIRE_TOKEN_URL:} + redirect_uri: ${OPENAIRE_REFRESH_URL:} + user_info_url: ${OPENAIRE_INFO_URL:} + +#############ZENODO CONFIGURATIONS######### +zenodo: + url: https://sandbox.zenodo.org/api/ + access_token: ${ZENODO_ACCESS_TOKEN:} + login: + access_token_url: https://zenodo.org/oauth/token + client_id: ${ZENODO_CLIENT_ID:} + client_secret: ${ZENODO_CLIENT_SECRET:} + redirect_uri: https://opendmp.eu/login/external/zenodo + affiliation: ARGOS + community: argos + +#############DYNAMIC PROJECT CONFIGURATIONS######### +project: + configuration: + project: + name: Project + funder: + name: Funder + grant: + name: Grant + +#############HTTP LOGGER DELAY CONFIGURATIONS######### +http-logger: + initial-delay: 0 + delay: 10 + +##########################PERISTENCE########################################## +#############GENERIC DATASOURCE CONFIGURATIONS######### +database: + driver-class-name: org.postgresql.Driver + lock-fail-interval: 120000 + url: ${DB_URL:} + username: ${DB_USER:} + password: ${DB_PASS:} + +##########################MISC########################################## +#############USER GUIDE######### +userguide: + path: user-guide/ + +#############NOTIFICATION######### +notification: + rateInterval: 30000 + maxRetries: 10 + modified: + subject: "[OpenDMP] The {name} has been modified" + publish: + subject: "[OpenDMP] The {name} has been published" + finalised: + subject: "[OpenDMP] The {name} has been finalised" + modifiedFinalised: + subject: "[OpenDMP] The {name} has been modified and finalised" + +#############LOGGING######### +logging: + config: classpath:logging/logback-${spring.profiles.active}.xml + +#############TEMP######### +temp: + temp: tmp/ +file: + storage: uploads/ + +####################ELASTIIC SEARCH TAGS CONFIGURATIONS########## +elasticsearch: + username: elastic + password: ${ELASTIC_PASS:} + index: dmps + +#############CONTACT EMAIL CONFIGURATIONS######### +contact_email: + mail: ${CONTACT_EMAIL:} + +#############CONFIRMATION EMAIL CONFIGURATIONS######### +conf_email: + expiration_time_seconds: 14400 + subject: "OpenDMP email confirmation" \ No newline at end of file From 6e8794af1d8c61c410e7452cefa24c70027c6474 Mon Sep 17 00:00:00 2001 From: George Kalampokis Date: Mon, 21 Mar 2022 15:59:15 +0200 Subject: [PATCH 03/37] Minor improvement over logstash pipeline --- .../pipeline/open_dmp_send_to_elastic.conf | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/ELK.Docker/shared/config-elk/logstash/pipeline/open_dmp_send_to_elastic.conf b/ELK.Docker/shared/config-elk/logstash/pipeline/open_dmp_send_to_elastic.conf index 8b0f9fe02..2dd830467 100644 --- a/ELK.Docker/shared/config-elk/logstash/pipeline/open_dmp_send_to_elastic.conf +++ b/ELK.Docker/shared/config-elk/logstash/pipeline/open_dmp_send_to_elastic.conf @@ -2,18 +2,11 @@ input { pipeline { address => open_dmp_send_to_elastic } } -filter { -} - output { elasticsearch { hosts => "elasticsearch:9200" + index => "opendmp.logs" user => elastic - password => - index =>"opendmp.logs" - #manage_template => true - #template => "/usr/share/logstash/templates/audit/openDMP.json" - #template_name => "cite.elas.openDMP-audit*" - #template_overwrite => true - } -} \ No newline at end of file + password => "" + } +} From ac4886b47747bf2135f10d076195036fb3a4b070 Mon Sep 17 00:00:00 2001 From: George Kalampokis Date: Mon, 21 Mar 2022 17:20:39 +0200 Subject: [PATCH 04/37] Remove unreliable plugin update on logstash --- ELK.Docker/logstash/Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ELK.Docker/logstash/Dockerfile b/ELK.Docker/logstash/Dockerfile index 2effcf094..2b2323ae6 100644 --- a/ELK.Docker/logstash/Dockerfile +++ b/ELK.Docker/logstash/Dockerfile @@ -16,5 +16,5 @@ FROM docker.elastic.co/logstash/logstash:${ELK_VERSION} # Add your logstash plugins setup here # Example: RUN logstash-plugin install logstash-filter-json -RUN logstash-plugin update logstash-input-beats -RUN logstash-plugin update logstash-filter-grok \ No newline at end of file +#RUN logstash-plugin update logstash-input-beats +#RUN logstash-plugin update logstash-filter-grok From f20cacc312eaf5432409c34c50781c441c1e7780 Mon Sep 17 00:00:00 2001 From: George Kalampokis Date: Mon, 21 Mar 2022 15:10:28 +0200 Subject: [PATCH 05/37] Remove unused module on the frontend --- dmp-frontend/package.json | 1 - dmp-frontend/src/app/ui/dmp/listing/dmp-listing.component.ts | 4 ++-- dmp-frontend/src/app/ui/dmp/overview/dmp-overview.module.ts | 4 ++-- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/dmp-frontend/package.json b/dmp-frontend/package.json index 12b85564e..020f2a1e1 100644 --- a/dmp-frontend/package.json +++ b/dmp-frontend/package.json @@ -31,7 +31,6 @@ "file-saver": "^2.0.5", "moment": "^2.29.1", "moment-timezone": "^0.5.33", - "ng-dialog-animation": "^9.0.4", "ng2-dragula": "^2.1.1", "ngx-cookie-service": "^12.0.3", "ngx-cookieconsent": "^2.2.3", diff --git a/dmp-frontend/src/app/ui/dmp/listing/dmp-listing.component.ts b/dmp-frontend/src/app/ui/dmp/listing/dmp-listing.component.ts index f825230d6..cc207f142 100644 --- a/dmp-frontend/src/app/ui/dmp/listing/dmp-listing.component.ts +++ b/dmp-frontend/src/app/ui/dmp/listing/dmp-listing.component.ts @@ -28,7 +28,7 @@ import { DmpCriteriaDialogComponent } from './criteria/dmp-criteria-dialog.compo import { RecentActivityOrder } from '@app/core/common/enum/recent-activity-order'; import { GuidedTourService } from '@app/library/guided-tour/guided-tour.service'; import { GuidedTour, Orientation } from '@app/library/guided-tour/guided-tour.constants'; -import { NgDialogAnimationService } from "ng-dialog-animation"; +//import { NgDialogAnimationService } from "ng-dialog-animation"; import { HttpClient } from '@angular/common/http'; import { MatomoService } from '@app/core/services/matomo/matomo-service'; @@ -75,7 +75,7 @@ export class DmpListingComponent extends BaseComponent implements OnInit, IBread private dmpService: DmpService, private router: Router, private route: ActivatedRoute, - public dialogAnimation: NgDialogAnimationService, + //public dialogAnimation: NgDialogAnimationService, public dialog: MatDialog, public enumUtils: EnumUtils, private language: TranslateService, diff --git a/dmp-frontend/src/app/ui/dmp/overview/dmp-overview.module.ts b/dmp-frontend/src/app/ui/dmp/overview/dmp-overview.module.ts index dc73b4f76..be0a5c30e 100644 --- a/dmp-frontend/src/app/ui/dmp/overview/dmp-overview.module.ts +++ b/dmp-frontend/src/app/ui/dmp/overview/dmp-overview.module.ts @@ -9,7 +9,7 @@ import { CommonFormsModule } from '@common/forms/common-forms.module'; import { CommonUiModule } from '@common/ui/common-ui.module'; import { RouterModule } from '@angular/router'; import { CloneDialogModule } from '../clone/clone-dialog/clone-dialog.module'; -import { NgDialogAnimationService } from 'ng-dialog-animation'; +//import { NgDialogAnimationService } from 'ng-dialog-animation'; @NgModule({ imports: [ @@ -27,7 +27,7 @@ import { NgDialogAnimationService } from 'ng-dialog-animation'; DmpOverviewComponent ], providers: [ - NgDialogAnimationService + //NgDialogAnimationService ] }) export class DmpOverviewModule { } From 54173dc5b94c9ecf72bcfa6ed0adbefc3de372fe Mon Sep 17 00:00:00 2001 From: George Kalampokis Date: Mon, 21 Mar 2022 15:55:44 +0200 Subject: [PATCH 06/37] Replace the old application.properties with application.yml --- .../config/application-devel.properties | 96 -------- .../resources/config/application-devel.yml | 59 +++++ .../config/application-production.properties | 100 -------- .../config/application-production.yml | 33 +++ .../config/application-staging.properties | 90 ------- .../resources/config/application-staging.yml | 34 +++ .../resources/config/application.properties | 123 ---------- .../src/main/resources/config/application.yml | 227 ++++++++++++++++++ 8 files changed, 353 insertions(+), 409 deletions(-) delete mode 100644 dmp-backend/web/src/main/resources/config/application-devel.properties create mode 100644 dmp-backend/web/src/main/resources/config/application-devel.yml delete mode 100644 dmp-backend/web/src/main/resources/config/application-production.properties create mode 100644 dmp-backend/web/src/main/resources/config/application-production.yml delete mode 100644 dmp-backend/web/src/main/resources/config/application-staging.properties create mode 100644 dmp-backend/web/src/main/resources/config/application-staging.yml delete mode 100644 dmp-backend/web/src/main/resources/config/application.properties create mode 100644 dmp-backend/web/src/main/resources/config/application.yml diff --git a/dmp-backend/web/src/main/resources/config/application-devel.properties b/dmp-backend/web/src/main/resources/config/application-devel.properties deleted file mode 100644 index 396776273..000000000 --- a/dmp-backend/web/src/main/resources/config/application-devel.properties +++ /dev/null @@ -1,96 +0,0 @@ -dmp.domain = http://localhost:4200 - -####################PERSISTENCE OVERRIDES CONFIGURATIONS########## -database.url= -database.username= -database.password= -spring.datasource.maxIdle=10 -spring.datasource.minIdle=5 -spring.datasource.maxActive=10 - -####################ELASTIIC SEARCH TAGS OVERRIDES CONFIGURATIONS########## -elasticsearch.host = localhost -elasticsearch.port = 9200 -elasticsearch.username=elastic -elasticsearch.password= -elasticsearch.index=dmps - -####################ELK OVERRIDES CONFIGURATIONS########## -http-logger.server-address = http://localhost:31311 - -####################PDF OVERRIDES CONFIGURATIONS########## -pdf.converter.url=http://localhost:3000/ - -####################CONFIGURATION FILES OVERRIDES CONFIGURATIONS########## -configuration.externalUrls=externalUrls/ExternalUrls.xml -configuration.rda=RDACommonStandards.txt -configuration.h2020template=documents/h2020.docx -configuration.configurable_login_providers=configurableLoginProviders.json -configuration.doi_funder=DOI_Funder.json - -####################EMAIL FILE TEMPLATES OVERRIDES CONFIGURATIONS########## -email.invite=classpath:templates/email/email.html -email.confirmation=classpath:templates/email/emailConfirmation.html -email.merge=classpath:templates/email/emailMergeConfirmation.html - -#############FACEBOOK LOGIN CONFIGURATIONS######### -facebook.login.clientId= -facebook.login.clientSecret= -facebook.login.namespace= - -#############GOOGLE LOGIN CONFIGURATIONS######### -google.login.clientId= - -#############LINKEDIN LOGIN CONFIGURATIONS######### -linkedin.login.clientId= -linkedin.login.clientSecret= -linkedin.login.redirect_uri=http://localhost:4200/login/linkedin -linkedin.login.user_info_url=https://api.linkedin.com/v2/me -linkedin.login.user_email=https://api.linkedin.com/v2/emailAddress?q=members&projection=(elements*(handle~)) -linkedin.login.access_token_url=https://www.linkedin.com/uas/oauth2/accessToken - -#############TWITTER LOGIN CONFIGURATIONS######### -twitter.login.redirect_uri=http://localhost:4200/login/twitter - -#############B2 ACCESS CONFIGURATIONS######### -b2access.externallogin.user_info_url=https://b2access-integration.fz-juelich.de:443/oauth2/userinfo -b2access.externallogin.access_token_url=https://b2access-integration.fz-juelich.de:443/oauth2/token -b2access.externallogin.redirect_uri=http://opendmp.eu/api/oauth/authorized/b2access -b2access.externallogin.clientid= -b2access.externallogin.clientSecret= - -#############ORCID CONFIGURATIONS######### -orcid.login.client_id=APP-766DI5LP8T75FC4R -orcid.login.client_secret=f6ddc717-f49e-4bce-b302-2e479b226a24 -orcid.login.access_token_url=https://orcid.org/oauth/token -orcid.login.redirect_uri=http://localhost:4200/login/external/orcid - -#############OPENAIRE CONFIGURATIONS######### -openaire.login.client_id= -openaire.login.client_secret= -openaire.login.access_token_url= -openaire.login.redirect_uri= -openaire.login.user_info_url= - -#############CONFIRMATION EMAIL CONFIGURATIONS######### -conf_email.expiration_time_seconds=14400 -conf_email.subject=OpenDMP email confirmation - -#############ZENODO CONFIGURATIONS######### -zenodo.url=https://sandbox.zenodo.org/api/ -zenodo.access_token= -zenodo.login.access_token_url=https://sandbox.zenodo.org/oauth/token -zenodo.login.client_id= -zenodo.login.client_secret= -zenodo.login.redirect_uri=http://localhost:4200/login/external/zenodo - -#############CONTACT EMAIL CONFIGURATIONS######### -contact_email.mail= - -language.path=dmp-frontend/src/assets/i18n/ - -#############LOGGING######### -logging.config=classpath:logging/logback-${spring.profiles.active}.xml - -#############PROMETHEUS######### -endpoints.prometheus.sensitive: false \ No newline at end of file diff --git a/dmp-backend/web/src/main/resources/config/application-devel.yml b/dmp-backend/web/src/main/resources/config/application-devel.yml new file mode 100644 index 000000000..354385426 --- /dev/null +++ b/dmp-backend/web/src/main/resources/config/application-devel.yml @@ -0,0 +1,59 @@ +dmp: + domain: http://localhost:4200 + +####################PERSISTENCE OVERRIDES CONFIGURATIONS########## +spring: + datasource: + maxIdle: 10 + minIdle: 5 + maxActive: 10 + +####################ELASTIIC SEARCH TAGS OVERRIDES CONFIGURATIONS########## +elasticsearch: + host: localhost + port: 9200 + +####################ELK OVERRIDES CONFIGURATIONS########## +http-logger: + server-address: http://localhost:31311 + +####################PDF OVERRIDES CONFIGURATIONS########## +pdf: + converter: + url: http://localhost:3000/ + +####################EMAIL FILE TEMPLATES OVERRIDES CONFIGURATIONS########## +email: + invite: classpath:templates/email/email.html + confirmation: classpath:templates/email/emailConfirmation.html + merge: classpath:templates/email/emailMergeConfirmation.html + +#############LINKEDIN LOGIN CONFIGURATIONS######### +linkedin: + login: + redirect_uri: http://localhost:4200/login/linkedin + +#############TWITTER LOGIN CONFIGURATIONS######### +twitter: + login: + redirect_uri: http://localhost:4200/login/twitter + +#############ORCID CONFIGURATIONS######### +orcid: + login: + redirect_uri: http://localhost:4200/login/external/orcid + +#############ZENODO CONFIGURATIONS######### +zenodo: + login: + access_token_url: https://sandbox.zenodo.org/oauth/token + redirect_uri: http://localhost:4200/login/external/zenodo + +#############LANGUAGE CONFIGURATION######### +language: + path: dmp-frontend/src/assets/i18n/ + +#############PROMETHEUS######### +endpoints: + prometheus: + sensitive: false \ No newline at end of file diff --git a/dmp-backend/web/src/main/resources/config/application-production.properties b/dmp-backend/web/src/main/resources/config/application-production.properties deleted file mode 100644 index 971e6be43..000000000 --- a/dmp-backend/web/src/main/resources/config/application-production.properties +++ /dev/null @@ -1,100 +0,0 @@ -dmp.domain = https://opendmp.eu - -####################PERSISTENCE OVERRIDES CONFIGURATIONS########## -database.url=jdbc:postgresql://dmp-db:5432/dmptool -database.username=dmptool -database.password=CHANGEME - -####################ELASTIIC SEARCH TAGS OVERRIDES CONFIGURATIONS########## -elasticsearch.host = tags-elastic-search -elasticsearch.port = 9200 -elasticsearch.username=elastic -elasticsearch.password= -elasticsearch.index=dmps - -####################PDF OVERRIDES CONFIGURATIONS########## -pdf.converter.url=http://docsbox-web/ - -####################CONFIGURATION FILES OVERRIDES CONFIGURATIONS########## -configuration.externalUrls=externalUrls/ExternalUrls.xml -configuration.rda=RDACommonStandards.txt -configuration.h2020template=documents/h2020.docx -configuration.configurable_login_providers=ConfigurableLoginProviders.json -configuration.doi_funder=DOI_Funder.json - -####################SPRING MAIL CONFIGURATIONS################# -spring.mail.default-encoding=UTF-8 -spring.mail.host= -spring.mail.username= -spring.mail.password= -spring.mail.port=25 -spring.mail.protocol=smtp -spring.mail.test-connection=false -spring.mail.properties.mail.smtp.auth=false -spring.mail.properties.mail.smtp.starttls.enable=true - -#############FACEBOOK LOGIN CONFIGURATIONS######### -facebook.login.clientId= -facebook.login.clientSecret= -facebook.login.namespace=opendmp - -#############GOOGLE LOGIN CONFIGURATIONS######### -google.login.clientId= - -#############LINKEDIN LOGIN CONFIGURATIONS######### -linkedin.login.clientId= -linkedin.login.clientSecret= -linkedin.login.redirect_uri=https://opendmp.eu/login/linkedin -linkedin.login.user_info_url=https://api.linkedin.com/v2/me -linkedin.login.user_email=https://api.linkedin.com/v2/emailAddress?q=members&projection=(elements*(handle~)) -linkedin.login.access_token_url=https://www.linkedin.com/uas/oauth2/accessToken - -#############TWITTER LOGIN CONFIGURATIONS######### -twitter.login.clientId= -twitter.login.clientSecret= -twitter.login.redirect_uri=https://opendmp.eu/login/twitter - -#############B2 ACCESS CONFIGURATIONS######### -b2access.externallogin.user_info_url=https://b2access-integration.fz-juelich.de:443/oauth2/userinfo -b2access.externallogin.access_token_url=https://b2access-integration.fz-juelich.de:443/oauth2/token -b2access.externallogin.redirect_uri=https://opendmp.eu/api/oauth/authorized/b2access -b2access.externallogin.clientid= -b2access.externallogin.clientSecret= - -#############ORCID CONFIGURATIONS######### -orcid.login.client_id= -orcid.login.client_secret= -orcid.login.access_token_url=https://orcid.org/oauth/token -orcid.login.redirect_uri=https://opendmp.eu/login/external/orcid - -#############OPENAIRE CONFIGURATIONS######### -openaire.login.client_id= -openaire.login.client_secret= -openaire.login.access_token_url= -openaire.login.redirect_uri= -openaire.login.user_info_url= - -#############SPRING DATASOURCE CONFIGURATIONS######### -spring.datasource.maxIdle: 10 -spring.datasource.max-active: 70 -spring.datasource.max-wait: 10000 -spring.datasource.validationQuery: select 1 -spring.datasource.removeAbandoned: true -spring.datasource.removeAbandonedTimeout: 1 -spring.datasource.logAbandoned: true -spring.datasource.testOnBorrow: true -spring.datasource.testOnConnect: false -spring.datasource.testWhileIdle: false - -#############CONFIRMATION EMAIL CONFIGURATIONS######### -conf_email.expiration_time_seconds=14400 -conf_email.subject=OpenDMP email confirmation - -#############ZENODO CONFIGURATIONS######### -zenodo.url=https://zenodo.org/api/ -zenodo.access_token= - -#############CONTACT EMAIL CONFIGURATIONS######### -contact_email.mail= - -language.path=i18n/ \ No newline at end of file diff --git a/dmp-backend/web/src/main/resources/config/application-production.yml b/dmp-backend/web/src/main/resources/config/application-production.yml new file mode 100644 index 000000000..01ddeaf21 --- /dev/null +++ b/dmp-backend/web/src/main/resources/config/application-production.yml @@ -0,0 +1,33 @@ +dmp: + domain: https://opendmp.eu + +####################ELASTIIC SEARCH TAGS OVERRIDES CONFIGURATIONS########## +elasticsearch: + host: tags-elastic-search + port: 9200 + +####################PDF OVERRIDES CONFIGURATIONS########## +pdf: + converter: + url: http://docsbox-web/ + +#############SPRING DATASOURCE CONFIGURATIONS######### +spring: + datasource: + maxIdle: 10 + max-active: 70 + max-wait: 10000 + validationQuery: select 1 + removeAbandoned: true + removeAbandonedTimeout: 1 + logAbandoned: true + testOnBorrow: true + testOnConnect: false + testWhileIdle: false + +#############CONTACT EMAIL CONFIGURATIONS######### +contact_email.mail= + +#############LANGUAGE CONFIGURATION######### +language: + path: i18n/ \ No newline at end of file diff --git a/dmp-backend/web/src/main/resources/config/application-staging.properties b/dmp-backend/web/src/main/resources/config/application-staging.properties deleted file mode 100644 index 8bafc9971..000000000 --- a/dmp-backend/web/src/main/resources/config/application-staging.properties +++ /dev/null @@ -1,90 +0,0 @@ -dmp.domain = https://devel.opendmp.eu - -####################PERSISTENCE OVERRIDES CONFIGURATIONS########## -database.url=jdbc:postgresql://dmp-db:5432/dmptool -database.username=dmptool -database.password=CHANGEME - -####################ELASTIIC SEARCH TAGS OVERRIDES CONFIGURATIONS########## -elasticsearch.host = tags-elastic-search -elasticsearch.port = 9200 -elasticsearch.username=elastic -elasticsearch.password= -elasticsearch.index=dmps - -####################PDF OVERRIDES CONFIGURATIONS########## -pdf.converter.url=http://docsbox-web/ - -####################CONFIGURATION FILES OVERRIDES CONFIGURATIONS########## -configuration.externalUrls=externalUrls/ExternalUrls.xml -configuration.rda=RDACommonStandards.txt -configuration.h2020template=documents/h2020.docx -configuration.configurable_login_providers=ConfigurableLoginProviders.json -configuration.doi_funder=DOI_Funder.json - -####################INVITATION MAIL CONFIGURATIONS############## -####################GENERIC MAIL CONFIGURATIONS################# -mail.subject=Invitation to DMP Plan {dmpname} -mail.from=opendmp-dev@cite.gr - -####################SPRING MAIL CONFIGURATIONS################# -spring.mail.default-encoding=UTF-8 -spring.mail.host=hermes.local.cite.gr -spring.mail.port=25 -spring.mail.protocol=smtp -spring.mail.test-connection=false -spring.mail.properties.mail.smtp.auth=false - -#############FACEBOOK LOGIN CONFIGURATIONS######### -facebook.login.clientId= -facebook.login.clientSecret= -facebook.login.namespace=opendmp - -#############GOOGLE LOGIN CONFIGURATIONS######### -google.login.clientId= - -#############LINKEDIN LOGIN CONFIGURATIONS######### -linkedin.login.clientId= -linkedin.login.clientSecret= -linkedin.login.redirect_uri=https://devel.opendmp.eu/login/linkedin -linkedin.login.user_info_url=https://api.linkedin.com/v2/me -linkedin.login.user_email=https://api.linkedin.com/v2/emailAddress?q=members&projection=(elements*(handle~)) -linkedin.login.access_token_url=https://www.linkedin.com/uas/oauth2/accessToken - -#############TWITTER LOGIN CONFIGURATIONS######### -twitter.login.clientId= -twitter.login.clientSecret= -twitter.login.redirect_uri=https://devel.opendmp.eu/login/twitter - -#############CONFIRMATION EMAIL CONFIGURATIONS######### -conf_email.expiration_time_seconds=14400 -conf_email.subject=OpenDMP email confirmation - -#############B2 ACCESS CONFIGURATIONS######### -b2access.externallogin.user_info_url=https://b2access-integration.fz-juelich.de:443/oauth2/userinfo -b2access.externallogin.access_token_url=https://b2access-integration.fz-juelich.de:443/oauth2/token -b2access.externallogin.redirect_uri=https://devel.opendmp.eu/api/oauth/authorized/b2access -b2access.externallogin.clientid= -b2access.externallogin.clientSecret= - -#############ORCID CONFIGURATIONS######### -orcid.login.client_id= -orcid.login.client_secret= -orcid.login.access_token_url=https://orcid.org/oauth/token -orcid.login.redirect_uri=https://opendmp.eu/login/external/orcid - -#############OPENAIRE CONFIGURATIONS######### -openaire.login.client_id= -openaire.login.client_secret= -openaire.login.access_token_url= -openaire.login.redirect_uri= -openaire.login.user_info_url= - -#############ZENODO CONFIGURATIONS######### -zenodo.url=https://sandbox.zenodo.org/api/ -zenodo.access_token= - -#############CONTACT EMAIL CONFIGURATIONS######### -contact_email.mail= - -language.path=i18n/ \ No newline at end of file diff --git a/dmp-backend/web/src/main/resources/config/application-staging.yml b/dmp-backend/web/src/main/resources/config/application-staging.yml new file mode 100644 index 000000000..2df177074 --- /dev/null +++ b/dmp-backend/web/src/main/resources/config/application-staging.yml @@ -0,0 +1,34 @@ +dmp: + domain: https://devel.opendmp.eu + +####################ELASTIIC SEARCH TAGS OVERRIDES CONFIGURATIONS########## +elasticsearch: + host: tags-elastic-search + port: 9200 + +####################PDF OVERRIDES CONFIGURATIONS########## +pdf: + converter: + url: http://docsbox-web/ + +#############LINKEDIN LOGIN CONFIGURATIONS######### +linkedin: + login: + redirect_uri: https://devel.opendmp.eu/login/linkedin + +#############TWITTER LOGIN CONFIGURATIONS######### +twitter: + login: + redirect_uri: https://devel.opendmp.eu/login/twitter + +#############B2 ACCESS CONFIGURATIONS######### +b2access: + externallogin: + redirect_uri: https://devel.opendmp.eu/api/oauth/authorized/b2access + +#############ZENODO CONFIGURATIONS######### +zenodo: + url: https://sandbox.zenodo.org/api/ + +language: + path: i18n/ \ No newline at end of file diff --git a/dmp-backend/web/src/main/resources/config/application.properties b/dmp-backend/web/src/main/resources/config/application.properties deleted file mode 100644 index e6d2f9a93..000000000 --- a/dmp-backend/web/src/main/resources/config/application.properties +++ /dev/null @@ -1,123 +0,0 @@ -server.port=8081 -server.tomcat.max-threads = 20 -server.tomcat.max-connections = 10000 -logging.file=/logs/spring-boot-logging.log -spring.profiles.active=devel -eu.eudat.logic.proxy.allowed.host=https://eestore.paas2.uninett.no - -####################Metrics############## -management.endpoint.metrics.enabled=false -management.metrics.enable.http=false -management.metrics.enable.jvm=false -management.metrics.enable.jdbc=false -management.metrics.enable.tomcat=false -management.metrics.enable.logback=false -management.metrics.enable.hikaricp=false -management.metrics.enable.cache=false -management.endpoints.web.base-path=/ -management.endpoints.web.exposure.include=prometheus -management.endpoint.prometheus.enabled=true -management.metrics.export.prometheus.enabled=true - -####################INVITATION MAIL CONFIGURATIONS############## -####################GENERIC MAIL CONFIGURATIONS################# -mail.subject=Invitation to DMP Plan {dmpname} -mail.from=opendmp-dev@cite.gr - -####################DATASET TEMPLATE MAIL CONFIGURATIONS################# -admin.mail.subject=You have been invited to the Dataset Template {templateName} - -####################SPRING MAIL CONFIGURATIONS################# -spring.mail.default-encoding=UTF-8 -spring.mail.host=hermes.local.cite.gr -spring.mail.port=25 -spring.mail.protocol=smtp -spring.mail.test-connection=false -spring.mail.properties.mail.smtp.auth=false -spring.mail.properties.mail.smtp.starttls.enable=false - -####################CONFIGURATION FILES OVERRIDES CONFIGURATIONS########## -configuration.externalUrls=externalUrls/ExternalUrls.xml -configuration.rda=RDACommonStandards.txt -configuration.h2020template=documents/h2020.docx -configuration.configurable_login_providers=ConfigurableLoginProviders.json -configuration.doi_funder=DOI_Funder.json - -####################EMAIL FILE TEMPLATES OVERRIDES CONFIGURATIONS########## -email.invite=file:templates/email/email.html -email.confirmation=file:templates/email/emailConfirmation.html -email.merge=file:templates/email/emailMergeConfirmation.html -email.dataset.template=file:templates/email/emailAdmin.html - -#############LOGIN CONFIGURATIONS######### -#############GENERIC LOGIN CONFIGURATIONS######### -autouser.root.email= -autouser.root.password= -autouser.root.username= - -#############FACEBOOK LOGIN CONFIGURATIONS######### -facebook.login.clientId= -facebook.login.clientSecret= -facebook.login.namespace= - -#############GOOGLE LOGIN CONFIGURATIONS######### -google.login.clientId= - -#############LINKEDIN LOGIN CONFIGURATIONS######### -linkedin.login.clientId= -linkedin.login.clientSecret= -linkedin.login.redirect_uri=http://opendmp.eu/login/linkedin -linkedin.login.user_info_url=https://api.linkedin.com/v2/me -linkedin.login.user_email=https://api.linkedin.com/v2/emailAddress?q=members&projection=(elements*(handle~)) -linkedin.login.access_token_url=https://www.linkedin.com/uas/oauth2/accessToken - -#############TWITTER LOGIN CONFIGURATIONS######### -twitter.login.clientId= -twitter.login.clientSecret= -twitter.login.redirect_uri=http://opendmp.eu/login/twitter - -#############B2 ACCESS CONFIGURATIONS######### -b2access.externallogin.user_info_url=https://b2access-integration.fz-juelich.de:443/oauth2/userinfo -b2access.externallogin.access_token_url=https://b2access-integration.fz-juelich.de:443/oauth2/token -b2access.externallogin.redirect_uri=http://opendmp.eu/api/oauth/authorized/b2access -b2access.externallogin.clientid= -b2access.externallogin.clientSecret= - -#############DYNAMIC PROJECT CONFIGURATIONS######### -project.configuration.project.name = Project -project.configuration.funder.name = Funder -project.configuration.grant.name = Grant - -#############HTTP LOGGER DELAY CONFIGURATIONS######### -http-logger.initial-delay = 0 -http-logger.delay = 10 - -##########################PERISTENCE########################################## -#############GENERIC DATASOURCE CONFIGURATIONS######### -database.driver-class-name=org.postgresql.Driver -database.lock-fail-interval=120000 - -##########################MISC########################################## -#############USER GUIDE######### -userguide.path=user-guide/ - -#############NOTIFICATION######### -notification.rateInterval=30000 -notification.maxRetries=10 -notification.modified.subject=[OpenDMP] The {name} has been modified -notification.publish.subject=[OpenDMP] The {name} has been published -notification.finalised.subject=[OpenDMP] The {name} has been finalised -notification.modifiedFinalised.subject=[OpenDMP] The {name} has been modified and finalised - -#############LOGGING######### -logging.config=classpath:logging/logback-${spring.profiles.active}.xml - -#############TEMP######### -temp.temp=tmp/ -file.storage=uploads/ -spring.servlet.multipart.max-file-size=10MB -spring.servlet.multipart.max-request-size=10MB - -#############ZENODO######### -zenodo.affiliation=ARGOS -zenodo.community=argos \ No newline at end of file diff --git a/dmp-backend/web/src/main/resources/config/application.yml b/dmp-backend/web/src/main/resources/config/application.yml new file mode 100644 index 000000000..4c35e4cd4 --- /dev/null +++ b/dmp-backend/web/src/main/resources/config/application.yml @@ -0,0 +1,227 @@ +server: + port: 8081 + tomcat: + max-threads: 20 + max-connections: 10000 + +eu: + eudat: + logic: + proxy: + allowed: + host: https://eestore.paas2.uninett.no + +####################Metrics############## +management: + endpoint: + metrics: + enabled: false + prometheus: + enabled: true + metrics: + enable: + http: false + jvm: false + jdbc: false + tomcat: false + logback: false + hikaricp: false + cache: false + export: + prometheus: + enabled: true + endpoints: + web: + base-path: / + exposure: + include: prometheus + +####################INVITATION MAIL CONFIGURATIONS############## +####################GENERIC MAIL CONFIGURATIONS################# +mail: + subject: "Invitation to DMP Plan {dmpname}" + from: opendmp-dev@cite.gr + +####################DATASET TEMPLATE MAIL CONFIGURATIONS################# +admin: + mail: + subject: "You have been invited to the Dataset Template {templateName}" + +####################SPRING MAIL CONFIGURATIONS################# +spring: + mail: + default-encoding: UTF-8 + host: hermes.local.cite.gr + username: ${SPRING_MAIL_USER:} + password: ${SPRING_MAIL_PASS:} + port: 25 + protocol: smtp + test-connection: false + properties: + mail: + smtp: + auth: false + starttls: + enable: false + servlet: + multipart: + max-file-size: 10MB + max-request-size: 10MB + +####################CONFIGURATION FILES OVERRIDES CONFIGURATIONS########## +configuration: + externalUrls: externalUrls/ExternalUrls.xml + rda: RDACommonStandards.txt + h2020template: documents/h2020.docx + configurable_login_providers: ConfigurableLoginProviders.json + doi_funder: DOI_Funder.json + +####################EMAIL FILE TEMPLATES OVERRIDES CONFIGURATIONS########## +email: + invite: file:templates/email/email.html + confirmation: file:templates/email/emailConfirmation.html + merge: file:templates/email/emailMergeConfirmation.html + dataset: + template: file:templates/email/emailAdmin.html + +#############LOGIN CONFIGURATIONS######### +#############GENERIC LOGIN CONFIGURATIONS######### +autouser: + root: + email: ${AUTOUSER_EMAIL:} + password: ${AUTOUSER_PASS:} + username: ${AUTOUSER_NAME:} + +#############FACEBOOK LOGIN CONFIGURATIONS######### +facebook: + login: + clientId: ${FACEBOOK_CLIENT_ID:} + clientSecret: ${FACEBOOK_CLIENT_SECRET:} + namespace: ${FACEBOOK_NAMESPACE:} + +#############GOOGLE LOGIN CONFIGURATIONS######### +google: + login: + clientId: ${GOOGLE_CLIENT_ID:} + +#############LINKEDIN LOGIN CONFIGURATIONS######### +linkedin: + login: + clientId: ${LINKEDIN_CLIENT_ID:} + clientSecret: ${LINKEDIN_CLIENT_SECRET:} + redirect_uri: http://opendmp.eu/login/linkedin + user_info_url: https://api.linkedin.com/v2/me + user_email: https://api.linkedin.com/v2/emailAddress?q=members&projection=(elements*(handle~)) + access_token_url: https://www.linkedin.com/uas/oauth2/accessToken + +#############TWITTER LOGIN CONFIGURATIONS######### +twitter: + login: + clientId: ${TWITTER_CLIENT_ID:} + clientSecret: ${TWITTER_CLIENT_SECRET:} + redirect_uri: http://opendmp.eu/login/twitter + +#############B2 ACCESS CONFIGURATIONS######### +b2access: + externallogin: + user_info_url: https://b2access-integration.fz-juelich.de:443/oauth2/userinfo + access_token_url: https://b2access-integration.fz-juelich.de:443/oauth2/token + redirect_uri: http://opendmp.eu/api/oauth/authorized/b2access + clientid: ${B2ACCESS_CLIENT_ID:} + clientSecret: ${B2ACCESS_CLIENT_SECRET:} + +#############ORCID CONFIGURATIONS######### +orcid: + login: + client_id: ${ORCID_CLIENT_ID:} + client_secret: ${ORCID_CLIENT_SECRET:} + access_token_url: https://orcid.org/oauth/token + redirect_uri: https://opendmp.eu/login/external/orcid + +#############OPENAIRE CONFIGURATIONS######### +openaire: + login: + client_id: ${OPENAIRE_CLIENT_ID:} + client_secret: ${OPENAIRE_CLIENT_SECRET:} + access_token_url: ${OPENAIRE_TOKEN_URL:} + redirect_uri: ${OPENAIRE_REFRESH_URL:} + user_info_url: ${OPENAIRE_INFO_URL:} + +#############ZENODO CONFIGURATIONS######### +zenodo: + url: https://sandbox.zenodo.org/api/ + access_token: ${ZENODO_ACCESS_TOKEN:} + login: + access_token_url: https://zenodo.org/oauth/token + client_id: ${ZENODO_CLIENT_ID:} + client_secret: ${ZENODO_CLIENT_SECRET:} + redirect_uri: https://opendmp.eu/login/external/zenodo + affiliation: ARGOS + community: argos + +#############DYNAMIC PROJECT CONFIGURATIONS######### +project: + configuration: + project: + name: Project + funder: + name: Funder + grant: + name: Grant + +#############HTTP LOGGER DELAY CONFIGURATIONS######### +http-logger: + initial-delay: 0 + delay: 10 + +##########################PERISTENCE########################################## +#############GENERIC DATASOURCE CONFIGURATIONS######### +database: + driver-class-name: org.postgresql.Driver + lock-fail-interval: 120000 + url: ${DB_URL:} + username: ${DB_USER:} + password: ${DB_PASS:} + +##########################MISC########################################## +#############USER GUIDE######### +userguide: + path: user-guide/ + +#############NOTIFICATION######### +notification: + rateInterval: 30000 + maxRetries: 10 + modified: + subject: "[OpenDMP] The {name} has been modified" + publish: + subject: "[OpenDMP] The {name} has been published" + finalised: + subject: "[OpenDMP] The {name} has been finalised" + modifiedFinalised: + subject: "[OpenDMP] The {name} has been modified and finalised" + +#############LOGGING######### +logging: + config: classpath:logging/logback-${spring.profiles.active}.xml + +#############TEMP######### +temp: + temp: tmp/ +file: + storage: uploads/ + +####################ELASTIIC SEARCH TAGS CONFIGURATIONS########## +elasticsearch: + username: elastic + password: ${ELASTIC_PASS:} + index: dmps + +#############CONTACT EMAIL CONFIGURATIONS######### +contact_email: + mail: ${CONTACT_EMAIL:} + +#############CONFIRMATION EMAIL CONFIGURATIONS######### +conf_email: + expiration_time_seconds: 14400 + subject: "OpenDMP email confirmation" \ No newline at end of file From 6ddf8103f2e16312cc4766c8bedf52281c2c2de0 Mon Sep 17 00:00:00 2001 From: George Kalampokis Date: Mon, 21 Mar 2022 15:59:15 +0200 Subject: [PATCH 07/37] Minor improvement over logstash pipeline --- .../pipeline/open_dmp_send_to_elastic.conf | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/ELK.Docker/shared/config-elk/logstash/pipeline/open_dmp_send_to_elastic.conf b/ELK.Docker/shared/config-elk/logstash/pipeline/open_dmp_send_to_elastic.conf index 8b0f9fe02..2dd830467 100644 --- a/ELK.Docker/shared/config-elk/logstash/pipeline/open_dmp_send_to_elastic.conf +++ b/ELK.Docker/shared/config-elk/logstash/pipeline/open_dmp_send_to_elastic.conf @@ -2,18 +2,11 @@ input { pipeline { address => open_dmp_send_to_elastic } } -filter { -} - output { elasticsearch { hosts => "elasticsearch:9200" + index => "opendmp.logs" user => elastic - password => - index =>"opendmp.logs" - #manage_template => true - #template => "/usr/share/logstash/templates/audit/openDMP.json" - #template_name => "cite.elas.openDMP-audit*" - #template_overwrite => true - } -} \ No newline at end of file + password => "" + } +} From 765ddf752a99b0fc353d726f0a7d05216279a0cf Mon Sep 17 00:00:00 2001 From: George Kalampokis Date: Mon, 21 Mar 2022 17:20:39 +0200 Subject: [PATCH 08/37] Remove unreliable plugin update on logstash --- ELK.Docker/logstash/Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ELK.Docker/logstash/Dockerfile b/ELK.Docker/logstash/Dockerfile index 2effcf094..2b2323ae6 100644 --- a/ELK.Docker/logstash/Dockerfile +++ b/ELK.Docker/logstash/Dockerfile @@ -16,5 +16,5 @@ FROM docker.elastic.co/logstash/logstash:${ELK_VERSION} # Add your logstash plugins setup here # Example: RUN logstash-plugin install logstash-filter-json -RUN logstash-plugin update logstash-input-beats -RUN logstash-plugin update logstash-filter-grok \ No newline at end of file +#RUN logstash-plugin update logstash-input-beats +#RUN logstash-plugin update logstash-filter-grok From ed7cd0f852d2b8af6b19585cb89603700cce0c78 Mon Sep 17 00:00:00 2001 From: George Kalampokis Date: Tue, 29 Mar 2022 10:55:49 +0300 Subject: [PATCH 09/37] Fix issue with DMP json export if it have been imported from json --- .../eu/eudat/logic/managers/DataManagementPlanManager.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DataManagementPlanManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DataManagementPlanManager.java index 7c41f2f65..94abaf691 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DataManagementPlanManager.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DataManagementPlanManager.java @@ -96,6 +96,7 @@ import java.util.stream.Stream; @Component public class DataManagementPlanManager { private static final Logger logger = LoggerFactory.getLogger(DataManagementPlanManager.class); + private static final ObjectMapper objectMapper = new ObjectMapper(); private final Map notificationPaths = Stream.of(new Object[][] { {NotificationType.DMP_MODIFIED, "/plans/edit"}, @@ -1739,6 +1740,9 @@ public class DataManagementPlanManager { UserInfo me = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(principal.getId()); dmp.setModified(new Date()); dmp.setCreator(me); + Map extraProperties = objectMapper.readValue(dmp.getExtraProperties(), HashMap.class); + extraProperties.put("contact", me.getId().toString()); + dmp.setExtraProperties(objectMapper.writeValueAsString(extraProperties)); dmp.setVersion(0); dmp.setStatus((short)0); dmp.setGroupId(UUID.randomUUID()); From 57420c140314be2c9117810d6d4d650a59c946c4 Mon Sep 17 00:00:00 2001 From: George Kalampokis Date: Mon, 21 Mar 2022 15:10:28 +0200 Subject: [PATCH 10/37] Remove unused module on the frontend --- dmp-frontend/package.json | 1 - dmp-frontend/src/app/ui/dmp/listing/dmp-listing.component.ts | 4 ++-- dmp-frontend/src/app/ui/dmp/overview/dmp-overview.module.ts | 4 ++-- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/dmp-frontend/package.json b/dmp-frontend/package.json index 12b85564e..020f2a1e1 100644 --- a/dmp-frontend/package.json +++ b/dmp-frontend/package.json @@ -31,7 +31,6 @@ "file-saver": "^2.0.5", "moment": "^2.29.1", "moment-timezone": "^0.5.33", - "ng-dialog-animation": "^9.0.4", "ng2-dragula": "^2.1.1", "ngx-cookie-service": "^12.0.3", "ngx-cookieconsent": "^2.2.3", diff --git a/dmp-frontend/src/app/ui/dmp/listing/dmp-listing.component.ts b/dmp-frontend/src/app/ui/dmp/listing/dmp-listing.component.ts index f825230d6..cc207f142 100644 --- a/dmp-frontend/src/app/ui/dmp/listing/dmp-listing.component.ts +++ b/dmp-frontend/src/app/ui/dmp/listing/dmp-listing.component.ts @@ -28,7 +28,7 @@ import { DmpCriteriaDialogComponent } from './criteria/dmp-criteria-dialog.compo import { RecentActivityOrder } from '@app/core/common/enum/recent-activity-order'; import { GuidedTourService } from '@app/library/guided-tour/guided-tour.service'; import { GuidedTour, Orientation } from '@app/library/guided-tour/guided-tour.constants'; -import { NgDialogAnimationService } from "ng-dialog-animation"; +//import { NgDialogAnimationService } from "ng-dialog-animation"; import { HttpClient } from '@angular/common/http'; import { MatomoService } from '@app/core/services/matomo/matomo-service'; @@ -75,7 +75,7 @@ export class DmpListingComponent extends BaseComponent implements OnInit, IBread private dmpService: DmpService, private router: Router, private route: ActivatedRoute, - public dialogAnimation: NgDialogAnimationService, + //public dialogAnimation: NgDialogAnimationService, public dialog: MatDialog, public enumUtils: EnumUtils, private language: TranslateService, diff --git a/dmp-frontend/src/app/ui/dmp/overview/dmp-overview.module.ts b/dmp-frontend/src/app/ui/dmp/overview/dmp-overview.module.ts index dc73b4f76..be0a5c30e 100644 --- a/dmp-frontend/src/app/ui/dmp/overview/dmp-overview.module.ts +++ b/dmp-frontend/src/app/ui/dmp/overview/dmp-overview.module.ts @@ -9,7 +9,7 @@ import { CommonFormsModule } from '@common/forms/common-forms.module'; import { CommonUiModule } from '@common/ui/common-ui.module'; import { RouterModule } from '@angular/router'; import { CloneDialogModule } from '../clone/clone-dialog/clone-dialog.module'; -import { NgDialogAnimationService } from 'ng-dialog-animation'; +//import { NgDialogAnimationService } from 'ng-dialog-animation'; @NgModule({ imports: [ @@ -27,7 +27,7 @@ import { NgDialogAnimationService } from 'ng-dialog-animation'; DmpOverviewComponent ], providers: [ - NgDialogAnimationService + //NgDialogAnimationService ] }) export class DmpOverviewModule { } From 063491ef21013d5ab63f0a646f8841b3f6875118 Mon Sep 17 00:00:00 2001 From: George Kalampokis Date: Mon, 21 Mar 2022 15:55:44 +0200 Subject: [PATCH 11/37] Replace the old application.properties with application.yml --- .../config/application-devel.properties | 96 -------- .../resources/config/application-devel.yml | 59 +++++ .../config/application-production.properties | 100 -------- .../config/application-production.yml | 33 +++ .../config/application-staging.properties | 90 ------- .../resources/config/application-staging.yml | 34 +++ .../resources/config/application.properties | 123 ---------- .../src/main/resources/config/application.yml | 227 ++++++++++++++++++ 8 files changed, 353 insertions(+), 409 deletions(-) delete mode 100644 dmp-backend/web/src/main/resources/config/application-devel.properties create mode 100644 dmp-backend/web/src/main/resources/config/application-devel.yml delete mode 100644 dmp-backend/web/src/main/resources/config/application-production.properties create mode 100644 dmp-backend/web/src/main/resources/config/application-production.yml delete mode 100644 dmp-backend/web/src/main/resources/config/application-staging.properties create mode 100644 dmp-backend/web/src/main/resources/config/application-staging.yml delete mode 100644 dmp-backend/web/src/main/resources/config/application.properties create mode 100644 dmp-backend/web/src/main/resources/config/application.yml diff --git a/dmp-backend/web/src/main/resources/config/application-devel.properties b/dmp-backend/web/src/main/resources/config/application-devel.properties deleted file mode 100644 index 396776273..000000000 --- a/dmp-backend/web/src/main/resources/config/application-devel.properties +++ /dev/null @@ -1,96 +0,0 @@ -dmp.domain = http://localhost:4200 - -####################PERSISTENCE OVERRIDES CONFIGURATIONS########## -database.url= -database.username= -database.password= -spring.datasource.maxIdle=10 -spring.datasource.minIdle=5 -spring.datasource.maxActive=10 - -####################ELASTIIC SEARCH TAGS OVERRIDES CONFIGURATIONS########## -elasticsearch.host = localhost -elasticsearch.port = 9200 -elasticsearch.username=elastic -elasticsearch.password= -elasticsearch.index=dmps - -####################ELK OVERRIDES CONFIGURATIONS########## -http-logger.server-address = http://localhost:31311 - -####################PDF OVERRIDES CONFIGURATIONS########## -pdf.converter.url=http://localhost:3000/ - -####################CONFIGURATION FILES OVERRIDES CONFIGURATIONS########## -configuration.externalUrls=externalUrls/ExternalUrls.xml -configuration.rda=RDACommonStandards.txt -configuration.h2020template=documents/h2020.docx -configuration.configurable_login_providers=configurableLoginProviders.json -configuration.doi_funder=DOI_Funder.json - -####################EMAIL FILE TEMPLATES OVERRIDES CONFIGURATIONS########## -email.invite=classpath:templates/email/email.html -email.confirmation=classpath:templates/email/emailConfirmation.html -email.merge=classpath:templates/email/emailMergeConfirmation.html - -#############FACEBOOK LOGIN CONFIGURATIONS######### -facebook.login.clientId= -facebook.login.clientSecret= -facebook.login.namespace= - -#############GOOGLE LOGIN CONFIGURATIONS######### -google.login.clientId= - -#############LINKEDIN LOGIN CONFIGURATIONS######### -linkedin.login.clientId= -linkedin.login.clientSecret= -linkedin.login.redirect_uri=http://localhost:4200/login/linkedin -linkedin.login.user_info_url=https://api.linkedin.com/v2/me -linkedin.login.user_email=https://api.linkedin.com/v2/emailAddress?q=members&projection=(elements*(handle~)) -linkedin.login.access_token_url=https://www.linkedin.com/uas/oauth2/accessToken - -#############TWITTER LOGIN CONFIGURATIONS######### -twitter.login.redirect_uri=http://localhost:4200/login/twitter - -#############B2 ACCESS CONFIGURATIONS######### -b2access.externallogin.user_info_url=https://b2access-integration.fz-juelich.de:443/oauth2/userinfo -b2access.externallogin.access_token_url=https://b2access-integration.fz-juelich.de:443/oauth2/token -b2access.externallogin.redirect_uri=http://opendmp.eu/api/oauth/authorized/b2access -b2access.externallogin.clientid= -b2access.externallogin.clientSecret= - -#############ORCID CONFIGURATIONS######### -orcid.login.client_id=APP-766DI5LP8T75FC4R -orcid.login.client_secret=f6ddc717-f49e-4bce-b302-2e479b226a24 -orcid.login.access_token_url=https://orcid.org/oauth/token -orcid.login.redirect_uri=http://localhost:4200/login/external/orcid - -#############OPENAIRE CONFIGURATIONS######### -openaire.login.client_id= -openaire.login.client_secret= -openaire.login.access_token_url= -openaire.login.redirect_uri= -openaire.login.user_info_url= - -#############CONFIRMATION EMAIL CONFIGURATIONS######### -conf_email.expiration_time_seconds=14400 -conf_email.subject=OpenDMP email confirmation - -#############ZENODO CONFIGURATIONS######### -zenodo.url=https://sandbox.zenodo.org/api/ -zenodo.access_token= -zenodo.login.access_token_url=https://sandbox.zenodo.org/oauth/token -zenodo.login.client_id= -zenodo.login.client_secret= -zenodo.login.redirect_uri=http://localhost:4200/login/external/zenodo - -#############CONTACT EMAIL CONFIGURATIONS######### -contact_email.mail= - -language.path=dmp-frontend/src/assets/i18n/ - -#############LOGGING######### -logging.config=classpath:logging/logback-${spring.profiles.active}.xml - -#############PROMETHEUS######### -endpoints.prometheus.sensitive: false \ No newline at end of file diff --git a/dmp-backend/web/src/main/resources/config/application-devel.yml b/dmp-backend/web/src/main/resources/config/application-devel.yml new file mode 100644 index 000000000..354385426 --- /dev/null +++ b/dmp-backend/web/src/main/resources/config/application-devel.yml @@ -0,0 +1,59 @@ +dmp: + domain: http://localhost:4200 + +####################PERSISTENCE OVERRIDES CONFIGURATIONS########## +spring: + datasource: + maxIdle: 10 + minIdle: 5 + maxActive: 10 + +####################ELASTIIC SEARCH TAGS OVERRIDES CONFIGURATIONS########## +elasticsearch: + host: localhost + port: 9200 + +####################ELK OVERRIDES CONFIGURATIONS########## +http-logger: + server-address: http://localhost:31311 + +####################PDF OVERRIDES CONFIGURATIONS########## +pdf: + converter: + url: http://localhost:3000/ + +####################EMAIL FILE TEMPLATES OVERRIDES CONFIGURATIONS########## +email: + invite: classpath:templates/email/email.html + confirmation: classpath:templates/email/emailConfirmation.html + merge: classpath:templates/email/emailMergeConfirmation.html + +#############LINKEDIN LOGIN CONFIGURATIONS######### +linkedin: + login: + redirect_uri: http://localhost:4200/login/linkedin + +#############TWITTER LOGIN CONFIGURATIONS######### +twitter: + login: + redirect_uri: http://localhost:4200/login/twitter + +#############ORCID CONFIGURATIONS######### +orcid: + login: + redirect_uri: http://localhost:4200/login/external/orcid + +#############ZENODO CONFIGURATIONS######### +zenodo: + login: + access_token_url: https://sandbox.zenodo.org/oauth/token + redirect_uri: http://localhost:4200/login/external/zenodo + +#############LANGUAGE CONFIGURATION######### +language: + path: dmp-frontend/src/assets/i18n/ + +#############PROMETHEUS######### +endpoints: + prometheus: + sensitive: false \ No newline at end of file diff --git a/dmp-backend/web/src/main/resources/config/application-production.properties b/dmp-backend/web/src/main/resources/config/application-production.properties deleted file mode 100644 index 971e6be43..000000000 --- a/dmp-backend/web/src/main/resources/config/application-production.properties +++ /dev/null @@ -1,100 +0,0 @@ -dmp.domain = https://opendmp.eu - -####################PERSISTENCE OVERRIDES CONFIGURATIONS########## -database.url=jdbc:postgresql://dmp-db:5432/dmptool -database.username=dmptool -database.password=CHANGEME - -####################ELASTIIC SEARCH TAGS OVERRIDES CONFIGURATIONS########## -elasticsearch.host = tags-elastic-search -elasticsearch.port = 9200 -elasticsearch.username=elastic -elasticsearch.password= -elasticsearch.index=dmps - -####################PDF OVERRIDES CONFIGURATIONS########## -pdf.converter.url=http://docsbox-web/ - -####################CONFIGURATION FILES OVERRIDES CONFIGURATIONS########## -configuration.externalUrls=externalUrls/ExternalUrls.xml -configuration.rda=RDACommonStandards.txt -configuration.h2020template=documents/h2020.docx -configuration.configurable_login_providers=ConfigurableLoginProviders.json -configuration.doi_funder=DOI_Funder.json - -####################SPRING MAIL CONFIGURATIONS################# -spring.mail.default-encoding=UTF-8 -spring.mail.host= -spring.mail.username= -spring.mail.password= -spring.mail.port=25 -spring.mail.protocol=smtp -spring.mail.test-connection=false -spring.mail.properties.mail.smtp.auth=false -spring.mail.properties.mail.smtp.starttls.enable=true - -#############FACEBOOK LOGIN CONFIGURATIONS######### -facebook.login.clientId= -facebook.login.clientSecret= -facebook.login.namespace=opendmp - -#############GOOGLE LOGIN CONFIGURATIONS######### -google.login.clientId= - -#############LINKEDIN LOGIN CONFIGURATIONS######### -linkedin.login.clientId= -linkedin.login.clientSecret= -linkedin.login.redirect_uri=https://opendmp.eu/login/linkedin -linkedin.login.user_info_url=https://api.linkedin.com/v2/me -linkedin.login.user_email=https://api.linkedin.com/v2/emailAddress?q=members&projection=(elements*(handle~)) -linkedin.login.access_token_url=https://www.linkedin.com/uas/oauth2/accessToken - -#############TWITTER LOGIN CONFIGURATIONS######### -twitter.login.clientId= -twitter.login.clientSecret= -twitter.login.redirect_uri=https://opendmp.eu/login/twitter - -#############B2 ACCESS CONFIGURATIONS######### -b2access.externallogin.user_info_url=https://b2access-integration.fz-juelich.de:443/oauth2/userinfo -b2access.externallogin.access_token_url=https://b2access-integration.fz-juelich.de:443/oauth2/token -b2access.externallogin.redirect_uri=https://opendmp.eu/api/oauth/authorized/b2access -b2access.externallogin.clientid= -b2access.externallogin.clientSecret= - -#############ORCID CONFIGURATIONS######### -orcid.login.client_id= -orcid.login.client_secret= -orcid.login.access_token_url=https://orcid.org/oauth/token -orcid.login.redirect_uri=https://opendmp.eu/login/external/orcid - -#############OPENAIRE CONFIGURATIONS######### -openaire.login.client_id= -openaire.login.client_secret= -openaire.login.access_token_url= -openaire.login.redirect_uri= -openaire.login.user_info_url= - -#############SPRING DATASOURCE CONFIGURATIONS######### -spring.datasource.maxIdle: 10 -spring.datasource.max-active: 70 -spring.datasource.max-wait: 10000 -spring.datasource.validationQuery: select 1 -spring.datasource.removeAbandoned: true -spring.datasource.removeAbandonedTimeout: 1 -spring.datasource.logAbandoned: true -spring.datasource.testOnBorrow: true -spring.datasource.testOnConnect: false -spring.datasource.testWhileIdle: false - -#############CONFIRMATION EMAIL CONFIGURATIONS######### -conf_email.expiration_time_seconds=14400 -conf_email.subject=OpenDMP email confirmation - -#############ZENODO CONFIGURATIONS######### -zenodo.url=https://zenodo.org/api/ -zenodo.access_token= - -#############CONTACT EMAIL CONFIGURATIONS######### -contact_email.mail= - -language.path=i18n/ \ No newline at end of file diff --git a/dmp-backend/web/src/main/resources/config/application-production.yml b/dmp-backend/web/src/main/resources/config/application-production.yml new file mode 100644 index 000000000..01ddeaf21 --- /dev/null +++ b/dmp-backend/web/src/main/resources/config/application-production.yml @@ -0,0 +1,33 @@ +dmp: + domain: https://opendmp.eu + +####################ELASTIIC SEARCH TAGS OVERRIDES CONFIGURATIONS########## +elasticsearch: + host: tags-elastic-search + port: 9200 + +####################PDF OVERRIDES CONFIGURATIONS########## +pdf: + converter: + url: http://docsbox-web/ + +#############SPRING DATASOURCE CONFIGURATIONS######### +spring: + datasource: + maxIdle: 10 + max-active: 70 + max-wait: 10000 + validationQuery: select 1 + removeAbandoned: true + removeAbandonedTimeout: 1 + logAbandoned: true + testOnBorrow: true + testOnConnect: false + testWhileIdle: false + +#############CONTACT EMAIL CONFIGURATIONS######### +contact_email.mail= + +#############LANGUAGE CONFIGURATION######### +language: + path: i18n/ \ No newline at end of file diff --git a/dmp-backend/web/src/main/resources/config/application-staging.properties b/dmp-backend/web/src/main/resources/config/application-staging.properties deleted file mode 100644 index 8bafc9971..000000000 --- a/dmp-backend/web/src/main/resources/config/application-staging.properties +++ /dev/null @@ -1,90 +0,0 @@ -dmp.domain = https://devel.opendmp.eu - -####################PERSISTENCE OVERRIDES CONFIGURATIONS########## -database.url=jdbc:postgresql://dmp-db:5432/dmptool -database.username=dmptool -database.password=CHANGEME - -####################ELASTIIC SEARCH TAGS OVERRIDES CONFIGURATIONS########## -elasticsearch.host = tags-elastic-search -elasticsearch.port = 9200 -elasticsearch.username=elastic -elasticsearch.password= -elasticsearch.index=dmps - -####################PDF OVERRIDES CONFIGURATIONS########## -pdf.converter.url=http://docsbox-web/ - -####################CONFIGURATION FILES OVERRIDES CONFIGURATIONS########## -configuration.externalUrls=externalUrls/ExternalUrls.xml -configuration.rda=RDACommonStandards.txt -configuration.h2020template=documents/h2020.docx -configuration.configurable_login_providers=ConfigurableLoginProviders.json -configuration.doi_funder=DOI_Funder.json - -####################INVITATION MAIL CONFIGURATIONS############## -####################GENERIC MAIL CONFIGURATIONS################# -mail.subject=Invitation to DMP Plan {dmpname} -mail.from=opendmp-dev@cite.gr - -####################SPRING MAIL CONFIGURATIONS################# -spring.mail.default-encoding=UTF-8 -spring.mail.host=hermes.local.cite.gr -spring.mail.port=25 -spring.mail.protocol=smtp -spring.mail.test-connection=false -spring.mail.properties.mail.smtp.auth=false - -#############FACEBOOK LOGIN CONFIGURATIONS######### -facebook.login.clientId= -facebook.login.clientSecret= -facebook.login.namespace=opendmp - -#############GOOGLE LOGIN CONFIGURATIONS######### -google.login.clientId= - -#############LINKEDIN LOGIN CONFIGURATIONS######### -linkedin.login.clientId= -linkedin.login.clientSecret= -linkedin.login.redirect_uri=https://devel.opendmp.eu/login/linkedin -linkedin.login.user_info_url=https://api.linkedin.com/v2/me -linkedin.login.user_email=https://api.linkedin.com/v2/emailAddress?q=members&projection=(elements*(handle~)) -linkedin.login.access_token_url=https://www.linkedin.com/uas/oauth2/accessToken - -#############TWITTER LOGIN CONFIGURATIONS######### -twitter.login.clientId= -twitter.login.clientSecret= -twitter.login.redirect_uri=https://devel.opendmp.eu/login/twitter - -#############CONFIRMATION EMAIL CONFIGURATIONS######### -conf_email.expiration_time_seconds=14400 -conf_email.subject=OpenDMP email confirmation - -#############B2 ACCESS CONFIGURATIONS######### -b2access.externallogin.user_info_url=https://b2access-integration.fz-juelich.de:443/oauth2/userinfo -b2access.externallogin.access_token_url=https://b2access-integration.fz-juelich.de:443/oauth2/token -b2access.externallogin.redirect_uri=https://devel.opendmp.eu/api/oauth/authorized/b2access -b2access.externallogin.clientid= -b2access.externallogin.clientSecret= - -#############ORCID CONFIGURATIONS######### -orcid.login.client_id= -orcid.login.client_secret= -orcid.login.access_token_url=https://orcid.org/oauth/token -orcid.login.redirect_uri=https://opendmp.eu/login/external/orcid - -#############OPENAIRE CONFIGURATIONS######### -openaire.login.client_id= -openaire.login.client_secret= -openaire.login.access_token_url= -openaire.login.redirect_uri= -openaire.login.user_info_url= - -#############ZENODO CONFIGURATIONS######### -zenodo.url=https://sandbox.zenodo.org/api/ -zenodo.access_token= - -#############CONTACT EMAIL CONFIGURATIONS######### -contact_email.mail= - -language.path=i18n/ \ No newline at end of file diff --git a/dmp-backend/web/src/main/resources/config/application-staging.yml b/dmp-backend/web/src/main/resources/config/application-staging.yml new file mode 100644 index 000000000..2df177074 --- /dev/null +++ b/dmp-backend/web/src/main/resources/config/application-staging.yml @@ -0,0 +1,34 @@ +dmp: + domain: https://devel.opendmp.eu + +####################ELASTIIC SEARCH TAGS OVERRIDES CONFIGURATIONS########## +elasticsearch: + host: tags-elastic-search + port: 9200 + +####################PDF OVERRIDES CONFIGURATIONS########## +pdf: + converter: + url: http://docsbox-web/ + +#############LINKEDIN LOGIN CONFIGURATIONS######### +linkedin: + login: + redirect_uri: https://devel.opendmp.eu/login/linkedin + +#############TWITTER LOGIN CONFIGURATIONS######### +twitter: + login: + redirect_uri: https://devel.opendmp.eu/login/twitter + +#############B2 ACCESS CONFIGURATIONS######### +b2access: + externallogin: + redirect_uri: https://devel.opendmp.eu/api/oauth/authorized/b2access + +#############ZENODO CONFIGURATIONS######### +zenodo: + url: https://sandbox.zenodo.org/api/ + +language: + path: i18n/ \ No newline at end of file diff --git a/dmp-backend/web/src/main/resources/config/application.properties b/dmp-backend/web/src/main/resources/config/application.properties deleted file mode 100644 index e6d2f9a93..000000000 --- a/dmp-backend/web/src/main/resources/config/application.properties +++ /dev/null @@ -1,123 +0,0 @@ -server.port=8081 -server.tomcat.max-threads = 20 -server.tomcat.max-connections = 10000 -logging.file=/logs/spring-boot-logging.log -spring.profiles.active=devel -eu.eudat.logic.proxy.allowed.host=https://eestore.paas2.uninett.no - -####################Metrics############## -management.endpoint.metrics.enabled=false -management.metrics.enable.http=false -management.metrics.enable.jvm=false -management.metrics.enable.jdbc=false -management.metrics.enable.tomcat=false -management.metrics.enable.logback=false -management.metrics.enable.hikaricp=false -management.metrics.enable.cache=false -management.endpoints.web.base-path=/ -management.endpoints.web.exposure.include=prometheus -management.endpoint.prometheus.enabled=true -management.metrics.export.prometheus.enabled=true - -####################INVITATION MAIL CONFIGURATIONS############## -####################GENERIC MAIL CONFIGURATIONS################# -mail.subject=Invitation to DMP Plan {dmpname} -mail.from=opendmp-dev@cite.gr - -####################DATASET TEMPLATE MAIL CONFIGURATIONS################# -admin.mail.subject=You have been invited to the Dataset Template {templateName} - -####################SPRING MAIL CONFIGURATIONS################# -spring.mail.default-encoding=UTF-8 -spring.mail.host=hermes.local.cite.gr -spring.mail.port=25 -spring.mail.protocol=smtp -spring.mail.test-connection=false -spring.mail.properties.mail.smtp.auth=false -spring.mail.properties.mail.smtp.starttls.enable=false - -####################CONFIGURATION FILES OVERRIDES CONFIGURATIONS########## -configuration.externalUrls=externalUrls/ExternalUrls.xml -configuration.rda=RDACommonStandards.txt -configuration.h2020template=documents/h2020.docx -configuration.configurable_login_providers=ConfigurableLoginProviders.json -configuration.doi_funder=DOI_Funder.json - -####################EMAIL FILE TEMPLATES OVERRIDES CONFIGURATIONS########## -email.invite=file:templates/email/email.html -email.confirmation=file:templates/email/emailConfirmation.html -email.merge=file:templates/email/emailMergeConfirmation.html -email.dataset.template=file:templates/email/emailAdmin.html - -#############LOGIN CONFIGURATIONS######### -#############GENERIC LOGIN CONFIGURATIONS######### -autouser.root.email= -autouser.root.password= -autouser.root.username= - -#############FACEBOOK LOGIN CONFIGURATIONS######### -facebook.login.clientId= -facebook.login.clientSecret= -facebook.login.namespace= - -#############GOOGLE LOGIN CONFIGURATIONS######### -google.login.clientId= - -#############LINKEDIN LOGIN CONFIGURATIONS######### -linkedin.login.clientId= -linkedin.login.clientSecret= -linkedin.login.redirect_uri=http://opendmp.eu/login/linkedin -linkedin.login.user_info_url=https://api.linkedin.com/v2/me -linkedin.login.user_email=https://api.linkedin.com/v2/emailAddress?q=members&projection=(elements*(handle~)) -linkedin.login.access_token_url=https://www.linkedin.com/uas/oauth2/accessToken - -#############TWITTER LOGIN CONFIGURATIONS######### -twitter.login.clientId= -twitter.login.clientSecret= -twitter.login.redirect_uri=http://opendmp.eu/login/twitter - -#############B2 ACCESS CONFIGURATIONS######### -b2access.externallogin.user_info_url=https://b2access-integration.fz-juelich.de:443/oauth2/userinfo -b2access.externallogin.access_token_url=https://b2access-integration.fz-juelich.de:443/oauth2/token -b2access.externallogin.redirect_uri=http://opendmp.eu/api/oauth/authorized/b2access -b2access.externallogin.clientid= -b2access.externallogin.clientSecret= - -#############DYNAMIC PROJECT CONFIGURATIONS######### -project.configuration.project.name = Project -project.configuration.funder.name = Funder -project.configuration.grant.name = Grant - -#############HTTP LOGGER DELAY CONFIGURATIONS######### -http-logger.initial-delay = 0 -http-logger.delay = 10 - -##########################PERISTENCE########################################## -#############GENERIC DATASOURCE CONFIGURATIONS######### -database.driver-class-name=org.postgresql.Driver -database.lock-fail-interval=120000 - -##########################MISC########################################## -#############USER GUIDE######### -userguide.path=user-guide/ - -#############NOTIFICATION######### -notification.rateInterval=30000 -notification.maxRetries=10 -notification.modified.subject=[OpenDMP] The {name} has been modified -notification.publish.subject=[OpenDMP] The {name} has been published -notification.finalised.subject=[OpenDMP] The {name} has been finalised -notification.modifiedFinalised.subject=[OpenDMP] The {name} has been modified and finalised - -#############LOGGING######### -logging.config=classpath:logging/logback-${spring.profiles.active}.xml - -#############TEMP######### -temp.temp=tmp/ -file.storage=uploads/ -spring.servlet.multipart.max-file-size=10MB -spring.servlet.multipart.max-request-size=10MB - -#############ZENODO######### -zenodo.affiliation=ARGOS -zenodo.community=argos \ No newline at end of file diff --git a/dmp-backend/web/src/main/resources/config/application.yml b/dmp-backend/web/src/main/resources/config/application.yml new file mode 100644 index 000000000..4c35e4cd4 --- /dev/null +++ b/dmp-backend/web/src/main/resources/config/application.yml @@ -0,0 +1,227 @@ +server: + port: 8081 + tomcat: + max-threads: 20 + max-connections: 10000 + +eu: + eudat: + logic: + proxy: + allowed: + host: https://eestore.paas2.uninett.no + +####################Metrics############## +management: + endpoint: + metrics: + enabled: false + prometheus: + enabled: true + metrics: + enable: + http: false + jvm: false + jdbc: false + tomcat: false + logback: false + hikaricp: false + cache: false + export: + prometheus: + enabled: true + endpoints: + web: + base-path: / + exposure: + include: prometheus + +####################INVITATION MAIL CONFIGURATIONS############## +####################GENERIC MAIL CONFIGURATIONS################# +mail: + subject: "Invitation to DMP Plan {dmpname}" + from: opendmp-dev@cite.gr + +####################DATASET TEMPLATE MAIL CONFIGURATIONS################# +admin: + mail: + subject: "You have been invited to the Dataset Template {templateName}" + +####################SPRING MAIL CONFIGURATIONS################# +spring: + mail: + default-encoding: UTF-8 + host: hermes.local.cite.gr + username: ${SPRING_MAIL_USER:} + password: ${SPRING_MAIL_PASS:} + port: 25 + protocol: smtp + test-connection: false + properties: + mail: + smtp: + auth: false + starttls: + enable: false + servlet: + multipart: + max-file-size: 10MB + max-request-size: 10MB + +####################CONFIGURATION FILES OVERRIDES CONFIGURATIONS########## +configuration: + externalUrls: externalUrls/ExternalUrls.xml + rda: RDACommonStandards.txt + h2020template: documents/h2020.docx + configurable_login_providers: ConfigurableLoginProviders.json + doi_funder: DOI_Funder.json + +####################EMAIL FILE TEMPLATES OVERRIDES CONFIGURATIONS########## +email: + invite: file:templates/email/email.html + confirmation: file:templates/email/emailConfirmation.html + merge: file:templates/email/emailMergeConfirmation.html + dataset: + template: file:templates/email/emailAdmin.html + +#############LOGIN CONFIGURATIONS######### +#############GENERIC LOGIN CONFIGURATIONS######### +autouser: + root: + email: ${AUTOUSER_EMAIL:} + password: ${AUTOUSER_PASS:} + username: ${AUTOUSER_NAME:} + +#############FACEBOOK LOGIN CONFIGURATIONS######### +facebook: + login: + clientId: ${FACEBOOK_CLIENT_ID:} + clientSecret: ${FACEBOOK_CLIENT_SECRET:} + namespace: ${FACEBOOK_NAMESPACE:} + +#############GOOGLE LOGIN CONFIGURATIONS######### +google: + login: + clientId: ${GOOGLE_CLIENT_ID:} + +#############LINKEDIN LOGIN CONFIGURATIONS######### +linkedin: + login: + clientId: ${LINKEDIN_CLIENT_ID:} + clientSecret: ${LINKEDIN_CLIENT_SECRET:} + redirect_uri: http://opendmp.eu/login/linkedin + user_info_url: https://api.linkedin.com/v2/me + user_email: https://api.linkedin.com/v2/emailAddress?q=members&projection=(elements*(handle~)) + access_token_url: https://www.linkedin.com/uas/oauth2/accessToken + +#############TWITTER LOGIN CONFIGURATIONS######### +twitter: + login: + clientId: ${TWITTER_CLIENT_ID:} + clientSecret: ${TWITTER_CLIENT_SECRET:} + redirect_uri: http://opendmp.eu/login/twitter + +#############B2 ACCESS CONFIGURATIONS######### +b2access: + externallogin: + user_info_url: https://b2access-integration.fz-juelich.de:443/oauth2/userinfo + access_token_url: https://b2access-integration.fz-juelich.de:443/oauth2/token + redirect_uri: http://opendmp.eu/api/oauth/authorized/b2access + clientid: ${B2ACCESS_CLIENT_ID:} + clientSecret: ${B2ACCESS_CLIENT_SECRET:} + +#############ORCID CONFIGURATIONS######### +orcid: + login: + client_id: ${ORCID_CLIENT_ID:} + client_secret: ${ORCID_CLIENT_SECRET:} + access_token_url: https://orcid.org/oauth/token + redirect_uri: https://opendmp.eu/login/external/orcid + +#############OPENAIRE CONFIGURATIONS######### +openaire: + login: + client_id: ${OPENAIRE_CLIENT_ID:} + client_secret: ${OPENAIRE_CLIENT_SECRET:} + access_token_url: ${OPENAIRE_TOKEN_URL:} + redirect_uri: ${OPENAIRE_REFRESH_URL:} + user_info_url: ${OPENAIRE_INFO_URL:} + +#############ZENODO CONFIGURATIONS######### +zenodo: + url: https://sandbox.zenodo.org/api/ + access_token: ${ZENODO_ACCESS_TOKEN:} + login: + access_token_url: https://zenodo.org/oauth/token + client_id: ${ZENODO_CLIENT_ID:} + client_secret: ${ZENODO_CLIENT_SECRET:} + redirect_uri: https://opendmp.eu/login/external/zenodo + affiliation: ARGOS + community: argos + +#############DYNAMIC PROJECT CONFIGURATIONS######### +project: + configuration: + project: + name: Project + funder: + name: Funder + grant: + name: Grant + +#############HTTP LOGGER DELAY CONFIGURATIONS######### +http-logger: + initial-delay: 0 + delay: 10 + +##########################PERISTENCE########################################## +#############GENERIC DATASOURCE CONFIGURATIONS######### +database: + driver-class-name: org.postgresql.Driver + lock-fail-interval: 120000 + url: ${DB_URL:} + username: ${DB_USER:} + password: ${DB_PASS:} + +##########################MISC########################################## +#############USER GUIDE######### +userguide: + path: user-guide/ + +#############NOTIFICATION######### +notification: + rateInterval: 30000 + maxRetries: 10 + modified: + subject: "[OpenDMP] The {name} has been modified" + publish: + subject: "[OpenDMP] The {name} has been published" + finalised: + subject: "[OpenDMP] The {name} has been finalised" + modifiedFinalised: + subject: "[OpenDMP] The {name} has been modified and finalised" + +#############LOGGING######### +logging: + config: classpath:logging/logback-${spring.profiles.active}.xml + +#############TEMP######### +temp: + temp: tmp/ +file: + storage: uploads/ + +####################ELASTIIC SEARCH TAGS CONFIGURATIONS########## +elasticsearch: + username: elastic + password: ${ELASTIC_PASS:} + index: dmps + +#############CONTACT EMAIL CONFIGURATIONS######### +contact_email: + mail: ${CONTACT_EMAIL:} + +#############CONFIRMATION EMAIL CONFIGURATIONS######### +conf_email: + expiration_time_seconds: 14400 + subject: "OpenDMP email confirmation" \ No newline at end of file From 9c9919fd8567a2a79c4b2db7f41ab627c4c7e7bf Mon Sep 17 00:00:00 2001 From: George Kalampokis Date: Mon, 21 Mar 2022 15:59:15 +0200 Subject: [PATCH 12/37] Minor improvement over logstash pipeline --- .../pipeline/open_dmp_send_to_elastic.conf | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/ELK.Docker/shared/config-elk/logstash/pipeline/open_dmp_send_to_elastic.conf b/ELK.Docker/shared/config-elk/logstash/pipeline/open_dmp_send_to_elastic.conf index 8b0f9fe02..2dd830467 100644 --- a/ELK.Docker/shared/config-elk/logstash/pipeline/open_dmp_send_to_elastic.conf +++ b/ELK.Docker/shared/config-elk/logstash/pipeline/open_dmp_send_to_elastic.conf @@ -2,18 +2,11 @@ input { pipeline { address => open_dmp_send_to_elastic } } -filter { -} - output { elasticsearch { hosts => "elasticsearch:9200" + index => "opendmp.logs" user => elastic - password => - index =>"opendmp.logs" - #manage_template => true - #template => "/usr/share/logstash/templates/audit/openDMP.json" - #template_name => "cite.elas.openDMP-audit*" - #template_overwrite => true - } -} \ No newline at end of file + password => "" + } +} From 3fff5e1d2ee63cb63faed08ecc1ca27e6d8f2d5c Mon Sep 17 00:00:00 2001 From: George Kalampokis Date: Mon, 21 Mar 2022 17:20:39 +0200 Subject: [PATCH 13/37] Remove unreliable plugin update on logstash --- ELK.Docker/logstash/Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ELK.Docker/logstash/Dockerfile b/ELK.Docker/logstash/Dockerfile index 2effcf094..2b2323ae6 100644 --- a/ELK.Docker/logstash/Dockerfile +++ b/ELK.Docker/logstash/Dockerfile @@ -16,5 +16,5 @@ FROM docker.elastic.co/logstash/logstash:${ELK_VERSION} # Add your logstash plugins setup here # Example: RUN logstash-plugin install logstash-filter-json -RUN logstash-plugin update logstash-input-beats -RUN logstash-plugin update logstash-filter-grok \ No newline at end of file +#RUN logstash-plugin update logstash-input-beats +#RUN logstash-plugin update logstash-filter-grok From cf1b2489a36e27fba1ccb07679042d5d9ed64ea0 Mon Sep 17 00:00:00 2001 From: George Kalampokis Date: Tue, 29 Mar 2022 11:30:56 +0300 Subject: [PATCH 14/37] Fix critical issue with xml import --- .../java/eu/eudat/logic/managers/DataManagementPlanManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DataManagementPlanManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DataManagementPlanManager.java index 94abaf691..9ab9ff5fc 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DataManagementPlanManager.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DataManagementPlanManager.java @@ -1679,7 +1679,7 @@ public class DataManagementPlanManager { if (dataManagementPlans.get(0).getPublicDate() != null) { extraPropertiesMap.put("publicDate", dataManagementPlans.get(0).getPublicDate()); } - if (dataManagementPlans.get(0).getCosts() != null) { + if (dataManagementPlans.get(0).getCosts() != null && !dataManagementPlans.get(0).getCosts().isEmpty()) { extraPropertiesMap.put("costs", mapper.readValue(dataManagementPlans.get(0).getCosts(), ArrayList.class)); } dm.setExtraProperties(extraPropertiesMap); From 2666568fab7aafa3394c0019c175e1c499c5e66b Mon Sep 17 00:00:00 2001 From: George Kalampokis Date: Tue, 29 Mar 2022 15:11:55 +0300 Subject: [PATCH 15/37] Make Dataset Validation checker to no longer be exception depedant --- .../java/eu/eudat/controllers/Datasets.java | 10 +++++----- .../eudat/logic/managers/DatasetManager.java | 18 ++++++++++++++---- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/Datasets.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/Datasets.java index c788adea7..94a17913b 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/Datasets.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/Datasets.java @@ -291,12 +291,12 @@ public class Datasets extends BaseController { @RequestMapping(method = RequestMethod.GET, value = {"/{id}/validate"}, produces = "application/json") public @ResponseBody ResponseEntity> validate(@PathVariable(value = "id") UUID id, Principal principal) throws Exception { - try { - Dataset dataset = datasetManager.getEntitySingle(id); - datasetManager.checkDatasetValidation(dataset); + Dataset dataset = datasetManager.getEntitySingle(id); + String failedField = datasetManager.checkDatasetValidation(dataset); + if (failedField == null) { return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem().status(ApiMessageCode.SUCCESS_MESSAGE).message("Valid")); - } catch (Exception datasetWizardCannotUnlockException) { - return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(new ResponseItem().status(ApiMessageCode.ERROR_MESSAGE).message(datasetWizardCannotUnlockException.getMessage())); + } else { + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(new ResponseItem().status(ApiMessageCode.ERROR_MESSAGE).message("Field value of " + failedField + " must be filled.")); } } diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetManager.java index a4d5d8bff..871c59e3c 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetManager.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetManager.java @@ -587,8 +587,12 @@ public class DatasetManager { if (this.apiContext.getOperationsContext().getElasticRepository().getDatasetRepository().getClient() != null) { this.getTagsFromProfile(datasetWizardModel, dataset); } - if (datasetWizardModel.getStatus() == (int) Dataset.Status.FINALISED.getValue()) - checkDatasetValidation(dataset); + if (datasetWizardModel.getStatus() == (int) Dataset.Status.FINALISED.getValue()) { + String failedField = checkDatasetValidation(dataset); + if (failedField != null) { + throw new Exception("Field value of " + failedField + " must be filled."); + } + } UserInfo userInfo = apiContext.getOperationsContext().getBuilderFactory().getBuilder(UserInfoBuilder.class).id(principal.getId()).build(); dataset.setCreator(userInfo); @@ -683,7 +687,7 @@ public class DatasetManager { } - public void checkDatasetValidation(Dataset dataset) throws Exception { + public String checkDatasetValidation(Dataset dataset) throws Exception { List datasetProfileValidators = new LinkedList<>(); DatasetProfile profile = apiContext.getOperationsContext().getDatabaseRepository().getDatasetProfileDao().find(dataset.getProfile().getId()); DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance(); @@ -712,11 +716,17 @@ public class DatasetManager { visibilityRuleService.buildVisibilityContext(pagedDatasetProfile.getRules()); + String failedField = null; + for (String validator : datasetProfileValidators) { if (obj.has(validator) && isNullOrEmpty(obj.getString(validator)) && isElementVisible(nodeList, validator, visibilityRuleService)) { - throw new Exception("Field value of " + validator + " must be filled."); + //throw new Exception("Field value of " + validator + " must be filled."); + failedField = validator; + break; } } + + return failedField; } private boolean isNullOrEmpty(String value) { From 2c00dab4503bae41f77a1b70d56b21ff009b1946 Mon Sep 17 00:00:00 2001 From: George Kalampokis Date: Tue, 29 Mar 2022 15:12:56 +0300 Subject: [PATCH 16/37] Make DMP export to be more consistent with the DMP shown on the front end UI --- .../managers/DataManagementPlanManager.java | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DataManagementPlanManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DataManagementPlanManager.java index 9ab9ff5fc..53279f756 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DataManagementPlanManager.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DataManagementPlanManager.java @@ -1220,9 +1220,12 @@ public class DataManagementPlanManager { wordBuilder.addParagraphContent("Datasets", document, ParagraphStyle.HEADER1, BigInteger.ZERO); // Space below Datasets. XWPFParagraph parBreakDatasets = document.createParagraph(); + final Boolean isFinalized = dmpEntity.getStatus() == DMP.DMPStatus.FINALISED.getValue(); + final Boolean isPublic = dmpEntity.isPublic(); dmpEntity.getDataset().stream() .filter(item -> item.getStatus() != Dataset.Status.CANCELED.getValue()) .filter(item -> item.getStatus() != Dataset.Status.DELETED.getValue()) + .filter(item -> !isPublic && !isFinalized || item.getStatus() == Dataset.Status.FINALISED.getValue()) .forEach(datasetEntity -> { Map properties = new HashMap<>(); if (datasetEntity.getProperties() != null) { @@ -1348,7 +1351,13 @@ public class DataManagementPlanManager { eu.eudat.data.entities.DMP dmp = databaseRepository.getDmpDao().find(UUID.fromString(id)); if (!dmp.isPublic() && dmp.getUsers().stream().filter(userInfo -> userInfo.getUser().getId() == principal.getId()).collect(Collectors.toList()).size() == 0) throw new UnauthorisedException(); - List datasets = dmp.getDataset().stream().filter(dataset -> dataset.getStatus() != Dmp.DMPStatus.DELETED.getValue()).collect(Collectors.toList()); + final Boolean isFinalized = dmp.getStatus() == DMP.DMPStatus.FINALISED.getValue(); + final Boolean isPublic = dmp.isPublic(); + List datasets = dmp.getDataset().stream() + .filter(dataset -> dataset.getStatus() != Dataset.Status.DELETED.getValue() && + dataset.getStatus() != Dataset.Status.CANCELED.getValue()) + .filter(dataset -> !isPublic && !isFinalized || dataset.getStatus() == Dataset.Status.FINALISED.getValue()) + .collect(Collectors.toList()); /*String fileName = dmp.getLabel(); fileName = fileName.replaceAll("[^a-zA-Z0-9+ ]", "");*/ String uuid = UUID.randomUUID().toString(); @@ -1499,6 +1508,13 @@ public class DataManagementPlanManager { if (!dmp.isPublic() && dmp.getUsers().stream().noneMatch(userInfo -> userInfo.getUser().getId() == principal.getId())) throw new UnauthorisedException(); // RDAExportModel rdaExportModel = new RDAExportModel().fromDataModel(dmp, datasetManager, principal); + final Boolean isFinalized = dmp.getStatus() == DMP.DMPStatus.FINALISED.getValue(); + final Boolean isPublic = dmp.isPublic(); + dmp.setDataset(dmp.getDataset().stream() + .filter(dataset -> dataset.getStatus() != Dataset.Status.DELETED.getValue() && + dataset.getStatus() != Dataset.Status.CANCELED.getValue()) + .filter(dataset -> !isPublic && !isFinalized || dataset.getStatus() == Dataset.Status.FINALISED.getValue()) + .collect(Collectors.toSet())); String result = rdaManager.convertToRDA(dmp); /*ObjectMapper mapper = new ObjectMapper(); From a51aa3aeb53dd5dab241b1e0bac5a2f644fd09d6 Mon Sep 17 00:00:00 2001 From: George Kalampokis Date: Mon, 21 Mar 2022 15:10:28 +0200 Subject: [PATCH 17/37] Remove unused module on the frontend --- dmp-frontend/package.json | 1 - dmp-frontend/src/app/ui/dmp/listing/dmp-listing.component.ts | 4 ++-- dmp-frontend/src/app/ui/dmp/overview/dmp-overview.module.ts | 4 ++-- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/dmp-frontend/package.json b/dmp-frontend/package.json index 12b85564e..020f2a1e1 100644 --- a/dmp-frontend/package.json +++ b/dmp-frontend/package.json @@ -31,7 +31,6 @@ "file-saver": "^2.0.5", "moment": "^2.29.1", "moment-timezone": "^0.5.33", - "ng-dialog-animation": "^9.0.4", "ng2-dragula": "^2.1.1", "ngx-cookie-service": "^12.0.3", "ngx-cookieconsent": "^2.2.3", diff --git a/dmp-frontend/src/app/ui/dmp/listing/dmp-listing.component.ts b/dmp-frontend/src/app/ui/dmp/listing/dmp-listing.component.ts index f825230d6..cc207f142 100644 --- a/dmp-frontend/src/app/ui/dmp/listing/dmp-listing.component.ts +++ b/dmp-frontend/src/app/ui/dmp/listing/dmp-listing.component.ts @@ -28,7 +28,7 @@ import { DmpCriteriaDialogComponent } from './criteria/dmp-criteria-dialog.compo import { RecentActivityOrder } from '@app/core/common/enum/recent-activity-order'; import { GuidedTourService } from '@app/library/guided-tour/guided-tour.service'; import { GuidedTour, Orientation } from '@app/library/guided-tour/guided-tour.constants'; -import { NgDialogAnimationService } from "ng-dialog-animation"; +//import { NgDialogAnimationService } from "ng-dialog-animation"; import { HttpClient } from '@angular/common/http'; import { MatomoService } from '@app/core/services/matomo/matomo-service'; @@ -75,7 +75,7 @@ export class DmpListingComponent extends BaseComponent implements OnInit, IBread private dmpService: DmpService, private router: Router, private route: ActivatedRoute, - public dialogAnimation: NgDialogAnimationService, + //public dialogAnimation: NgDialogAnimationService, public dialog: MatDialog, public enumUtils: EnumUtils, private language: TranslateService, diff --git a/dmp-frontend/src/app/ui/dmp/overview/dmp-overview.module.ts b/dmp-frontend/src/app/ui/dmp/overview/dmp-overview.module.ts index dc73b4f76..be0a5c30e 100644 --- a/dmp-frontend/src/app/ui/dmp/overview/dmp-overview.module.ts +++ b/dmp-frontend/src/app/ui/dmp/overview/dmp-overview.module.ts @@ -9,7 +9,7 @@ import { CommonFormsModule } from '@common/forms/common-forms.module'; import { CommonUiModule } from '@common/ui/common-ui.module'; import { RouterModule } from '@angular/router'; import { CloneDialogModule } from '../clone/clone-dialog/clone-dialog.module'; -import { NgDialogAnimationService } from 'ng-dialog-animation'; +//import { NgDialogAnimationService } from 'ng-dialog-animation'; @NgModule({ imports: [ @@ -27,7 +27,7 @@ import { NgDialogAnimationService } from 'ng-dialog-animation'; DmpOverviewComponent ], providers: [ - NgDialogAnimationService + //NgDialogAnimationService ] }) export class DmpOverviewModule { } From c0aac45f39d4cdbc259eb366ba4d7c5563bab665 Mon Sep 17 00:00:00 2001 From: George Kalampokis Date: Mon, 21 Mar 2022 15:55:44 +0200 Subject: [PATCH 18/37] Replace the old application.properties with application.yml --- .../config/application-devel.properties | 96 -------- .../resources/config/application-devel.yml | 59 +++++ .../config/application-production.properties | 100 -------- .../config/application-production.yml | 33 +++ .../config/application-staging.properties | 90 ------- .../resources/config/application-staging.yml | 34 +++ .../resources/config/application.properties | 123 ---------- .../src/main/resources/config/application.yml | 227 ++++++++++++++++++ 8 files changed, 353 insertions(+), 409 deletions(-) delete mode 100644 dmp-backend/web/src/main/resources/config/application-devel.properties create mode 100644 dmp-backend/web/src/main/resources/config/application-devel.yml delete mode 100644 dmp-backend/web/src/main/resources/config/application-production.properties create mode 100644 dmp-backend/web/src/main/resources/config/application-production.yml delete mode 100644 dmp-backend/web/src/main/resources/config/application-staging.properties create mode 100644 dmp-backend/web/src/main/resources/config/application-staging.yml delete mode 100644 dmp-backend/web/src/main/resources/config/application.properties create mode 100644 dmp-backend/web/src/main/resources/config/application.yml diff --git a/dmp-backend/web/src/main/resources/config/application-devel.properties b/dmp-backend/web/src/main/resources/config/application-devel.properties deleted file mode 100644 index 396776273..000000000 --- a/dmp-backend/web/src/main/resources/config/application-devel.properties +++ /dev/null @@ -1,96 +0,0 @@ -dmp.domain = http://localhost:4200 - -####################PERSISTENCE OVERRIDES CONFIGURATIONS########## -database.url= -database.username= -database.password= -spring.datasource.maxIdle=10 -spring.datasource.minIdle=5 -spring.datasource.maxActive=10 - -####################ELASTIIC SEARCH TAGS OVERRIDES CONFIGURATIONS########## -elasticsearch.host = localhost -elasticsearch.port = 9200 -elasticsearch.username=elastic -elasticsearch.password= -elasticsearch.index=dmps - -####################ELK OVERRIDES CONFIGURATIONS########## -http-logger.server-address = http://localhost:31311 - -####################PDF OVERRIDES CONFIGURATIONS########## -pdf.converter.url=http://localhost:3000/ - -####################CONFIGURATION FILES OVERRIDES CONFIGURATIONS########## -configuration.externalUrls=externalUrls/ExternalUrls.xml -configuration.rda=RDACommonStandards.txt -configuration.h2020template=documents/h2020.docx -configuration.configurable_login_providers=configurableLoginProviders.json -configuration.doi_funder=DOI_Funder.json - -####################EMAIL FILE TEMPLATES OVERRIDES CONFIGURATIONS########## -email.invite=classpath:templates/email/email.html -email.confirmation=classpath:templates/email/emailConfirmation.html -email.merge=classpath:templates/email/emailMergeConfirmation.html - -#############FACEBOOK LOGIN CONFIGURATIONS######### -facebook.login.clientId= -facebook.login.clientSecret= -facebook.login.namespace= - -#############GOOGLE LOGIN CONFIGURATIONS######### -google.login.clientId= - -#############LINKEDIN LOGIN CONFIGURATIONS######### -linkedin.login.clientId= -linkedin.login.clientSecret= -linkedin.login.redirect_uri=http://localhost:4200/login/linkedin -linkedin.login.user_info_url=https://api.linkedin.com/v2/me -linkedin.login.user_email=https://api.linkedin.com/v2/emailAddress?q=members&projection=(elements*(handle~)) -linkedin.login.access_token_url=https://www.linkedin.com/uas/oauth2/accessToken - -#############TWITTER LOGIN CONFIGURATIONS######### -twitter.login.redirect_uri=http://localhost:4200/login/twitter - -#############B2 ACCESS CONFIGURATIONS######### -b2access.externallogin.user_info_url=https://b2access-integration.fz-juelich.de:443/oauth2/userinfo -b2access.externallogin.access_token_url=https://b2access-integration.fz-juelich.de:443/oauth2/token -b2access.externallogin.redirect_uri=http://opendmp.eu/api/oauth/authorized/b2access -b2access.externallogin.clientid= -b2access.externallogin.clientSecret= - -#############ORCID CONFIGURATIONS######### -orcid.login.client_id=APP-766DI5LP8T75FC4R -orcid.login.client_secret=f6ddc717-f49e-4bce-b302-2e479b226a24 -orcid.login.access_token_url=https://orcid.org/oauth/token -orcid.login.redirect_uri=http://localhost:4200/login/external/orcid - -#############OPENAIRE CONFIGURATIONS######### -openaire.login.client_id= -openaire.login.client_secret= -openaire.login.access_token_url= -openaire.login.redirect_uri= -openaire.login.user_info_url= - -#############CONFIRMATION EMAIL CONFIGURATIONS######### -conf_email.expiration_time_seconds=14400 -conf_email.subject=OpenDMP email confirmation - -#############ZENODO CONFIGURATIONS######### -zenodo.url=https://sandbox.zenodo.org/api/ -zenodo.access_token= -zenodo.login.access_token_url=https://sandbox.zenodo.org/oauth/token -zenodo.login.client_id= -zenodo.login.client_secret= -zenodo.login.redirect_uri=http://localhost:4200/login/external/zenodo - -#############CONTACT EMAIL CONFIGURATIONS######### -contact_email.mail= - -language.path=dmp-frontend/src/assets/i18n/ - -#############LOGGING######### -logging.config=classpath:logging/logback-${spring.profiles.active}.xml - -#############PROMETHEUS######### -endpoints.prometheus.sensitive: false \ No newline at end of file diff --git a/dmp-backend/web/src/main/resources/config/application-devel.yml b/dmp-backend/web/src/main/resources/config/application-devel.yml new file mode 100644 index 000000000..354385426 --- /dev/null +++ b/dmp-backend/web/src/main/resources/config/application-devel.yml @@ -0,0 +1,59 @@ +dmp: + domain: http://localhost:4200 + +####################PERSISTENCE OVERRIDES CONFIGURATIONS########## +spring: + datasource: + maxIdle: 10 + minIdle: 5 + maxActive: 10 + +####################ELASTIIC SEARCH TAGS OVERRIDES CONFIGURATIONS########## +elasticsearch: + host: localhost + port: 9200 + +####################ELK OVERRIDES CONFIGURATIONS########## +http-logger: + server-address: http://localhost:31311 + +####################PDF OVERRIDES CONFIGURATIONS########## +pdf: + converter: + url: http://localhost:3000/ + +####################EMAIL FILE TEMPLATES OVERRIDES CONFIGURATIONS########## +email: + invite: classpath:templates/email/email.html + confirmation: classpath:templates/email/emailConfirmation.html + merge: classpath:templates/email/emailMergeConfirmation.html + +#############LINKEDIN LOGIN CONFIGURATIONS######### +linkedin: + login: + redirect_uri: http://localhost:4200/login/linkedin + +#############TWITTER LOGIN CONFIGURATIONS######### +twitter: + login: + redirect_uri: http://localhost:4200/login/twitter + +#############ORCID CONFIGURATIONS######### +orcid: + login: + redirect_uri: http://localhost:4200/login/external/orcid + +#############ZENODO CONFIGURATIONS######### +zenodo: + login: + access_token_url: https://sandbox.zenodo.org/oauth/token + redirect_uri: http://localhost:4200/login/external/zenodo + +#############LANGUAGE CONFIGURATION######### +language: + path: dmp-frontend/src/assets/i18n/ + +#############PROMETHEUS######### +endpoints: + prometheus: + sensitive: false \ No newline at end of file diff --git a/dmp-backend/web/src/main/resources/config/application-production.properties b/dmp-backend/web/src/main/resources/config/application-production.properties deleted file mode 100644 index 971e6be43..000000000 --- a/dmp-backend/web/src/main/resources/config/application-production.properties +++ /dev/null @@ -1,100 +0,0 @@ -dmp.domain = https://opendmp.eu - -####################PERSISTENCE OVERRIDES CONFIGURATIONS########## -database.url=jdbc:postgresql://dmp-db:5432/dmptool -database.username=dmptool -database.password=CHANGEME - -####################ELASTIIC SEARCH TAGS OVERRIDES CONFIGURATIONS########## -elasticsearch.host = tags-elastic-search -elasticsearch.port = 9200 -elasticsearch.username=elastic -elasticsearch.password= -elasticsearch.index=dmps - -####################PDF OVERRIDES CONFIGURATIONS########## -pdf.converter.url=http://docsbox-web/ - -####################CONFIGURATION FILES OVERRIDES CONFIGURATIONS########## -configuration.externalUrls=externalUrls/ExternalUrls.xml -configuration.rda=RDACommonStandards.txt -configuration.h2020template=documents/h2020.docx -configuration.configurable_login_providers=ConfigurableLoginProviders.json -configuration.doi_funder=DOI_Funder.json - -####################SPRING MAIL CONFIGURATIONS################# -spring.mail.default-encoding=UTF-8 -spring.mail.host= -spring.mail.username= -spring.mail.password= -spring.mail.port=25 -spring.mail.protocol=smtp -spring.mail.test-connection=false -spring.mail.properties.mail.smtp.auth=false -spring.mail.properties.mail.smtp.starttls.enable=true - -#############FACEBOOK LOGIN CONFIGURATIONS######### -facebook.login.clientId= -facebook.login.clientSecret= -facebook.login.namespace=opendmp - -#############GOOGLE LOGIN CONFIGURATIONS######### -google.login.clientId= - -#############LINKEDIN LOGIN CONFIGURATIONS######### -linkedin.login.clientId= -linkedin.login.clientSecret= -linkedin.login.redirect_uri=https://opendmp.eu/login/linkedin -linkedin.login.user_info_url=https://api.linkedin.com/v2/me -linkedin.login.user_email=https://api.linkedin.com/v2/emailAddress?q=members&projection=(elements*(handle~)) -linkedin.login.access_token_url=https://www.linkedin.com/uas/oauth2/accessToken - -#############TWITTER LOGIN CONFIGURATIONS######### -twitter.login.clientId= -twitter.login.clientSecret= -twitter.login.redirect_uri=https://opendmp.eu/login/twitter - -#############B2 ACCESS CONFIGURATIONS######### -b2access.externallogin.user_info_url=https://b2access-integration.fz-juelich.de:443/oauth2/userinfo -b2access.externallogin.access_token_url=https://b2access-integration.fz-juelich.de:443/oauth2/token -b2access.externallogin.redirect_uri=https://opendmp.eu/api/oauth/authorized/b2access -b2access.externallogin.clientid= -b2access.externallogin.clientSecret= - -#############ORCID CONFIGURATIONS######### -orcid.login.client_id= -orcid.login.client_secret= -orcid.login.access_token_url=https://orcid.org/oauth/token -orcid.login.redirect_uri=https://opendmp.eu/login/external/orcid - -#############OPENAIRE CONFIGURATIONS######### -openaire.login.client_id= -openaire.login.client_secret= -openaire.login.access_token_url= -openaire.login.redirect_uri= -openaire.login.user_info_url= - -#############SPRING DATASOURCE CONFIGURATIONS######### -spring.datasource.maxIdle: 10 -spring.datasource.max-active: 70 -spring.datasource.max-wait: 10000 -spring.datasource.validationQuery: select 1 -spring.datasource.removeAbandoned: true -spring.datasource.removeAbandonedTimeout: 1 -spring.datasource.logAbandoned: true -spring.datasource.testOnBorrow: true -spring.datasource.testOnConnect: false -spring.datasource.testWhileIdle: false - -#############CONFIRMATION EMAIL CONFIGURATIONS######### -conf_email.expiration_time_seconds=14400 -conf_email.subject=OpenDMP email confirmation - -#############ZENODO CONFIGURATIONS######### -zenodo.url=https://zenodo.org/api/ -zenodo.access_token= - -#############CONTACT EMAIL CONFIGURATIONS######### -contact_email.mail= - -language.path=i18n/ \ No newline at end of file diff --git a/dmp-backend/web/src/main/resources/config/application-production.yml b/dmp-backend/web/src/main/resources/config/application-production.yml new file mode 100644 index 000000000..01ddeaf21 --- /dev/null +++ b/dmp-backend/web/src/main/resources/config/application-production.yml @@ -0,0 +1,33 @@ +dmp: + domain: https://opendmp.eu + +####################ELASTIIC SEARCH TAGS OVERRIDES CONFIGURATIONS########## +elasticsearch: + host: tags-elastic-search + port: 9200 + +####################PDF OVERRIDES CONFIGURATIONS########## +pdf: + converter: + url: http://docsbox-web/ + +#############SPRING DATASOURCE CONFIGURATIONS######### +spring: + datasource: + maxIdle: 10 + max-active: 70 + max-wait: 10000 + validationQuery: select 1 + removeAbandoned: true + removeAbandonedTimeout: 1 + logAbandoned: true + testOnBorrow: true + testOnConnect: false + testWhileIdle: false + +#############CONTACT EMAIL CONFIGURATIONS######### +contact_email.mail= + +#############LANGUAGE CONFIGURATION######### +language: + path: i18n/ \ No newline at end of file diff --git a/dmp-backend/web/src/main/resources/config/application-staging.properties b/dmp-backend/web/src/main/resources/config/application-staging.properties deleted file mode 100644 index 8bafc9971..000000000 --- a/dmp-backend/web/src/main/resources/config/application-staging.properties +++ /dev/null @@ -1,90 +0,0 @@ -dmp.domain = https://devel.opendmp.eu - -####################PERSISTENCE OVERRIDES CONFIGURATIONS########## -database.url=jdbc:postgresql://dmp-db:5432/dmptool -database.username=dmptool -database.password=CHANGEME - -####################ELASTIIC SEARCH TAGS OVERRIDES CONFIGURATIONS########## -elasticsearch.host = tags-elastic-search -elasticsearch.port = 9200 -elasticsearch.username=elastic -elasticsearch.password= -elasticsearch.index=dmps - -####################PDF OVERRIDES CONFIGURATIONS########## -pdf.converter.url=http://docsbox-web/ - -####################CONFIGURATION FILES OVERRIDES CONFIGURATIONS########## -configuration.externalUrls=externalUrls/ExternalUrls.xml -configuration.rda=RDACommonStandards.txt -configuration.h2020template=documents/h2020.docx -configuration.configurable_login_providers=ConfigurableLoginProviders.json -configuration.doi_funder=DOI_Funder.json - -####################INVITATION MAIL CONFIGURATIONS############## -####################GENERIC MAIL CONFIGURATIONS################# -mail.subject=Invitation to DMP Plan {dmpname} -mail.from=opendmp-dev@cite.gr - -####################SPRING MAIL CONFIGURATIONS################# -spring.mail.default-encoding=UTF-8 -spring.mail.host=hermes.local.cite.gr -spring.mail.port=25 -spring.mail.protocol=smtp -spring.mail.test-connection=false -spring.mail.properties.mail.smtp.auth=false - -#############FACEBOOK LOGIN CONFIGURATIONS######### -facebook.login.clientId= -facebook.login.clientSecret= -facebook.login.namespace=opendmp - -#############GOOGLE LOGIN CONFIGURATIONS######### -google.login.clientId= - -#############LINKEDIN LOGIN CONFIGURATIONS######### -linkedin.login.clientId= -linkedin.login.clientSecret= -linkedin.login.redirect_uri=https://devel.opendmp.eu/login/linkedin -linkedin.login.user_info_url=https://api.linkedin.com/v2/me -linkedin.login.user_email=https://api.linkedin.com/v2/emailAddress?q=members&projection=(elements*(handle~)) -linkedin.login.access_token_url=https://www.linkedin.com/uas/oauth2/accessToken - -#############TWITTER LOGIN CONFIGURATIONS######### -twitter.login.clientId= -twitter.login.clientSecret= -twitter.login.redirect_uri=https://devel.opendmp.eu/login/twitter - -#############CONFIRMATION EMAIL CONFIGURATIONS######### -conf_email.expiration_time_seconds=14400 -conf_email.subject=OpenDMP email confirmation - -#############B2 ACCESS CONFIGURATIONS######### -b2access.externallogin.user_info_url=https://b2access-integration.fz-juelich.de:443/oauth2/userinfo -b2access.externallogin.access_token_url=https://b2access-integration.fz-juelich.de:443/oauth2/token -b2access.externallogin.redirect_uri=https://devel.opendmp.eu/api/oauth/authorized/b2access -b2access.externallogin.clientid= -b2access.externallogin.clientSecret= - -#############ORCID CONFIGURATIONS######### -orcid.login.client_id= -orcid.login.client_secret= -orcid.login.access_token_url=https://orcid.org/oauth/token -orcid.login.redirect_uri=https://opendmp.eu/login/external/orcid - -#############OPENAIRE CONFIGURATIONS######### -openaire.login.client_id= -openaire.login.client_secret= -openaire.login.access_token_url= -openaire.login.redirect_uri= -openaire.login.user_info_url= - -#############ZENODO CONFIGURATIONS######### -zenodo.url=https://sandbox.zenodo.org/api/ -zenodo.access_token= - -#############CONTACT EMAIL CONFIGURATIONS######### -contact_email.mail= - -language.path=i18n/ \ No newline at end of file diff --git a/dmp-backend/web/src/main/resources/config/application-staging.yml b/dmp-backend/web/src/main/resources/config/application-staging.yml new file mode 100644 index 000000000..2df177074 --- /dev/null +++ b/dmp-backend/web/src/main/resources/config/application-staging.yml @@ -0,0 +1,34 @@ +dmp: + domain: https://devel.opendmp.eu + +####################ELASTIIC SEARCH TAGS OVERRIDES CONFIGURATIONS########## +elasticsearch: + host: tags-elastic-search + port: 9200 + +####################PDF OVERRIDES CONFIGURATIONS########## +pdf: + converter: + url: http://docsbox-web/ + +#############LINKEDIN LOGIN CONFIGURATIONS######### +linkedin: + login: + redirect_uri: https://devel.opendmp.eu/login/linkedin + +#############TWITTER LOGIN CONFIGURATIONS######### +twitter: + login: + redirect_uri: https://devel.opendmp.eu/login/twitter + +#############B2 ACCESS CONFIGURATIONS######### +b2access: + externallogin: + redirect_uri: https://devel.opendmp.eu/api/oauth/authorized/b2access + +#############ZENODO CONFIGURATIONS######### +zenodo: + url: https://sandbox.zenodo.org/api/ + +language: + path: i18n/ \ No newline at end of file diff --git a/dmp-backend/web/src/main/resources/config/application.properties b/dmp-backend/web/src/main/resources/config/application.properties deleted file mode 100644 index e6d2f9a93..000000000 --- a/dmp-backend/web/src/main/resources/config/application.properties +++ /dev/null @@ -1,123 +0,0 @@ -server.port=8081 -server.tomcat.max-threads = 20 -server.tomcat.max-connections = 10000 -logging.file=/logs/spring-boot-logging.log -spring.profiles.active=devel -eu.eudat.logic.proxy.allowed.host=https://eestore.paas2.uninett.no - -####################Metrics############## -management.endpoint.metrics.enabled=false -management.metrics.enable.http=false -management.metrics.enable.jvm=false -management.metrics.enable.jdbc=false -management.metrics.enable.tomcat=false -management.metrics.enable.logback=false -management.metrics.enable.hikaricp=false -management.metrics.enable.cache=false -management.endpoints.web.base-path=/ -management.endpoints.web.exposure.include=prometheus -management.endpoint.prometheus.enabled=true -management.metrics.export.prometheus.enabled=true - -####################INVITATION MAIL CONFIGURATIONS############## -####################GENERIC MAIL CONFIGURATIONS################# -mail.subject=Invitation to DMP Plan {dmpname} -mail.from=opendmp-dev@cite.gr - -####################DATASET TEMPLATE MAIL CONFIGURATIONS################# -admin.mail.subject=You have been invited to the Dataset Template {templateName} - -####################SPRING MAIL CONFIGURATIONS################# -spring.mail.default-encoding=UTF-8 -spring.mail.host=hermes.local.cite.gr -spring.mail.port=25 -spring.mail.protocol=smtp -spring.mail.test-connection=false -spring.mail.properties.mail.smtp.auth=false -spring.mail.properties.mail.smtp.starttls.enable=false - -####################CONFIGURATION FILES OVERRIDES CONFIGURATIONS########## -configuration.externalUrls=externalUrls/ExternalUrls.xml -configuration.rda=RDACommonStandards.txt -configuration.h2020template=documents/h2020.docx -configuration.configurable_login_providers=ConfigurableLoginProviders.json -configuration.doi_funder=DOI_Funder.json - -####################EMAIL FILE TEMPLATES OVERRIDES CONFIGURATIONS########## -email.invite=file:templates/email/email.html -email.confirmation=file:templates/email/emailConfirmation.html -email.merge=file:templates/email/emailMergeConfirmation.html -email.dataset.template=file:templates/email/emailAdmin.html - -#############LOGIN CONFIGURATIONS######### -#############GENERIC LOGIN CONFIGURATIONS######### -autouser.root.email= -autouser.root.password= -autouser.root.username= - -#############FACEBOOK LOGIN CONFIGURATIONS######### -facebook.login.clientId= -facebook.login.clientSecret= -facebook.login.namespace= - -#############GOOGLE LOGIN CONFIGURATIONS######### -google.login.clientId= - -#############LINKEDIN LOGIN CONFIGURATIONS######### -linkedin.login.clientId= -linkedin.login.clientSecret= -linkedin.login.redirect_uri=http://opendmp.eu/login/linkedin -linkedin.login.user_info_url=https://api.linkedin.com/v2/me -linkedin.login.user_email=https://api.linkedin.com/v2/emailAddress?q=members&projection=(elements*(handle~)) -linkedin.login.access_token_url=https://www.linkedin.com/uas/oauth2/accessToken - -#############TWITTER LOGIN CONFIGURATIONS######### -twitter.login.clientId= -twitter.login.clientSecret= -twitter.login.redirect_uri=http://opendmp.eu/login/twitter - -#############B2 ACCESS CONFIGURATIONS######### -b2access.externallogin.user_info_url=https://b2access-integration.fz-juelich.de:443/oauth2/userinfo -b2access.externallogin.access_token_url=https://b2access-integration.fz-juelich.de:443/oauth2/token -b2access.externallogin.redirect_uri=http://opendmp.eu/api/oauth/authorized/b2access -b2access.externallogin.clientid= -b2access.externallogin.clientSecret= - -#############DYNAMIC PROJECT CONFIGURATIONS######### -project.configuration.project.name = Project -project.configuration.funder.name = Funder -project.configuration.grant.name = Grant - -#############HTTP LOGGER DELAY CONFIGURATIONS######### -http-logger.initial-delay = 0 -http-logger.delay = 10 - -##########################PERISTENCE########################################## -#############GENERIC DATASOURCE CONFIGURATIONS######### -database.driver-class-name=org.postgresql.Driver -database.lock-fail-interval=120000 - -##########################MISC########################################## -#############USER GUIDE######### -userguide.path=user-guide/ - -#############NOTIFICATION######### -notification.rateInterval=30000 -notification.maxRetries=10 -notification.modified.subject=[OpenDMP] The {name} has been modified -notification.publish.subject=[OpenDMP] The {name} has been published -notification.finalised.subject=[OpenDMP] The {name} has been finalised -notification.modifiedFinalised.subject=[OpenDMP] The {name} has been modified and finalised - -#############LOGGING######### -logging.config=classpath:logging/logback-${spring.profiles.active}.xml - -#############TEMP######### -temp.temp=tmp/ -file.storage=uploads/ -spring.servlet.multipart.max-file-size=10MB -spring.servlet.multipart.max-request-size=10MB - -#############ZENODO######### -zenodo.affiliation=ARGOS -zenodo.community=argos \ No newline at end of file diff --git a/dmp-backend/web/src/main/resources/config/application.yml b/dmp-backend/web/src/main/resources/config/application.yml new file mode 100644 index 000000000..4c35e4cd4 --- /dev/null +++ b/dmp-backend/web/src/main/resources/config/application.yml @@ -0,0 +1,227 @@ +server: + port: 8081 + tomcat: + max-threads: 20 + max-connections: 10000 + +eu: + eudat: + logic: + proxy: + allowed: + host: https://eestore.paas2.uninett.no + +####################Metrics############## +management: + endpoint: + metrics: + enabled: false + prometheus: + enabled: true + metrics: + enable: + http: false + jvm: false + jdbc: false + tomcat: false + logback: false + hikaricp: false + cache: false + export: + prometheus: + enabled: true + endpoints: + web: + base-path: / + exposure: + include: prometheus + +####################INVITATION MAIL CONFIGURATIONS############## +####################GENERIC MAIL CONFIGURATIONS################# +mail: + subject: "Invitation to DMP Plan {dmpname}" + from: opendmp-dev@cite.gr + +####################DATASET TEMPLATE MAIL CONFIGURATIONS################# +admin: + mail: + subject: "You have been invited to the Dataset Template {templateName}" + +####################SPRING MAIL CONFIGURATIONS################# +spring: + mail: + default-encoding: UTF-8 + host: hermes.local.cite.gr + username: ${SPRING_MAIL_USER:} + password: ${SPRING_MAIL_PASS:} + port: 25 + protocol: smtp + test-connection: false + properties: + mail: + smtp: + auth: false + starttls: + enable: false + servlet: + multipart: + max-file-size: 10MB + max-request-size: 10MB + +####################CONFIGURATION FILES OVERRIDES CONFIGURATIONS########## +configuration: + externalUrls: externalUrls/ExternalUrls.xml + rda: RDACommonStandards.txt + h2020template: documents/h2020.docx + configurable_login_providers: ConfigurableLoginProviders.json + doi_funder: DOI_Funder.json + +####################EMAIL FILE TEMPLATES OVERRIDES CONFIGURATIONS########## +email: + invite: file:templates/email/email.html + confirmation: file:templates/email/emailConfirmation.html + merge: file:templates/email/emailMergeConfirmation.html + dataset: + template: file:templates/email/emailAdmin.html + +#############LOGIN CONFIGURATIONS######### +#############GENERIC LOGIN CONFIGURATIONS######### +autouser: + root: + email: ${AUTOUSER_EMAIL:} + password: ${AUTOUSER_PASS:} + username: ${AUTOUSER_NAME:} + +#############FACEBOOK LOGIN CONFIGURATIONS######### +facebook: + login: + clientId: ${FACEBOOK_CLIENT_ID:} + clientSecret: ${FACEBOOK_CLIENT_SECRET:} + namespace: ${FACEBOOK_NAMESPACE:} + +#############GOOGLE LOGIN CONFIGURATIONS######### +google: + login: + clientId: ${GOOGLE_CLIENT_ID:} + +#############LINKEDIN LOGIN CONFIGURATIONS######### +linkedin: + login: + clientId: ${LINKEDIN_CLIENT_ID:} + clientSecret: ${LINKEDIN_CLIENT_SECRET:} + redirect_uri: http://opendmp.eu/login/linkedin + user_info_url: https://api.linkedin.com/v2/me + user_email: https://api.linkedin.com/v2/emailAddress?q=members&projection=(elements*(handle~)) + access_token_url: https://www.linkedin.com/uas/oauth2/accessToken + +#############TWITTER LOGIN CONFIGURATIONS######### +twitter: + login: + clientId: ${TWITTER_CLIENT_ID:} + clientSecret: ${TWITTER_CLIENT_SECRET:} + redirect_uri: http://opendmp.eu/login/twitter + +#############B2 ACCESS CONFIGURATIONS######### +b2access: + externallogin: + user_info_url: https://b2access-integration.fz-juelich.de:443/oauth2/userinfo + access_token_url: https://b2access-integration.fz-juelich.de:443/oauth2/token + redirect_uri: http://opendmp.eu/api/oauth/authorized/b2access + clientid: ${B2ACCESS_CLIENT_ID:} + clientSecret: ${B2ACCESS_CLIENT_SECRET:} + +#############ORCID CONFIGURATIONS######### +orcid: + login: + client_id: ${ORCID_CLIENT_ID:} + client_secret: ${ORCID_CLIENT_SECRET:} + access_token_url: https://orcid.org/oauth/token + redirect_uri: https://opendmp.eu/login/external/orcid + +#############OPENAIRE CONFIGURATIONS######### +openaire: + login: + client_id: ${OPENAIRE_CLIENT_ID:} + client_secret: ${OPENAIRE_CLIENT_SECRET:} + access_token_url: ${OPENAIRE_TOKEN_URL:} + redirect_uri: ${OPENAIRE_REFRESH_URL:} + user_info_url: ${OPENAIRE_INFO_URL:} + +#############ZENODO CONFIGURATIONS######### +zenodo: + url: https://sandbox.zenodo.org/api/ + access_token: ${ZENODO_ACCESS_TOKEN:} + login: + access_token_url: https://zenodo.org/oauth/token + client_id: ${ZENODO_CLIENT_ID:} + client_secret: ${ZENODO_CLIENT_SECRET:} + redirect_uri: https://opendmp.eu/login/external/zenodo + affiliation: ARGOS + community: argos + +#############DYNAMIC PROJECT CONFIGURATIONS######### +project: + configuration: + project: + name: Project + funder: + name: Funder + grant: + name: Grant + +#############HTTP LOGGER DELAY CONFIGURATIONS######### +http-logger: + initial-delay: 0 + delay: 10 + +##########################PERISTENCE########################################## +#############GENERIC DATASOURCE CONFIGURATIONS######### +database: + driver-class-name: org.postgresql.Driver + lock-fail-interval: 120000 + url: ${DB_URL:} + username: ${DB_USER:} + password: ${DB_PASS:} + +##########################MISC########################################## +#############USER GUIDE######### +userguide: + path: user-guide/ + +#############NOTIFICATION######### +notification: + rateInterval: 30000 + maxRetries: 10 + modified: + subject: "[OpenDMP] The {name} has been modified" + publish: + subject: "[OpenDMP] The {name} has been published" + finalised: + subject: "[OpenDMP] The {name} has been finalised" + modifiedFinalised: + subject: "[OpenDMP] The {name} has been modified and finalised" + +#############LOGGING######### +logging: + config: classpath:logging/logback-${spring.profiles.active}.xml + +#############TEMP######### +temp: + temp: tmp/ +file: + storage: uploads/ + +####################ELASTIIC SEARCH TAGS CONFIGURATIONS########## +elasticsearch: + username: elastic + password: ${ELASTIC_PASS:} + index: dmps + +#############CONTACT EMAIL CONFIGURATIONS######### +contact_email: + mail: ${CONTACT_EMAIL:} + +#############CONFIRMATION EMAIL CONFIGURATIONS######### +conf_email: + expiration_time_seconds: 14400 + subject: "OpenDMP email confirmation" \ No newline at end of file From 1c275c4d2b5275c0cd732e269f9201b47d863b76 Mon Sep 17 00:00:00 2001 From: George Kalampokis Date: Mon, 21 Mar 2022 15:59:15 +0200 Subject: [PATCH 19/37] Minor improvement over logstash pipeline --- .../pipeline/open_dmp_send_to_elastic.conf | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/ELK.Docker/shared/config-elk/logstash/pipeline/open_dmp_send_to_elastic.conf b/ELK.Docker/shared/config-elk/logstash/pipeline/open_dmp_send_to_elastic.conf index 8b0f9fe02..2dd830467 100644 --- a/ELK.Docker/shared/config-elk/logstash/pipeline/open_dmp_send_to_elastic.conf +++ b/ELK.Docker/shared/config-elk/logstash/pipeline/open_dmp_send_to_elastic.conf @@ -2,18 +2,11 @@ input { pipeline { address => open_dmp_send_to_elastic } } -filter { -} - output { elasticsearch { hosts => "elasticsearch:9200" + index => "opendmp.logs" user => elastic - password => - index =>"opendmp.logs" - #manage_template => true - #template => "/usr/share/logstash/templates/audit/openDMP.json" - #template_name => "cite.elas.openDMP-audit*" - #template_overwrite => true - } -} \ No newline at end of file + password => "" + } +} From f9027c8cc3d5d9a55f8ee0ab52ca1c4e684adfcd Mon Sep 17 00:00:00 2001 From: George Kalampokis Date: Mon, 21 Mar 2022 17:20:39 +0200 Subject: [PATCH 20/37] Remove unreliable plugin update on logstash --- ELK.Docker/logstash/Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ELK.Docker/logstash/Dockerfile b/ELK.Docker/logstash/Dockerfile index 2effcf094..2b2323ae6 100644 --- a/ELK.Docker/logstash/Dockerfile +++ b/ELK.Docker/logstash/Dockerfile @@ -16,5 +16,5 @@ FROM docker.elastic.co/logstash/logstash:${ELK_VERSION} # Add your logstash plugins setup here # Example: RUN logstash-plugin install logstash-filter-json -RUN logstash-plugin update logstash-input-beats -RUN logstash-plugin update logstash-filter-grok \ No newline at end of file +#RUN logstash-plugin update logstash-input-beats +#RUN logstash-plugin update logstash-filter-grok From c6fea04fb4d74b40f5daff3f6f007fa4f0e8c76d Mon Sep 17 00:00:00 2001 From: George Kalampokis Date: Mon, 21 Mar 2022 15:10:28 +0200 Subject: [PATCH 21/37] Remove unused module on the frontend --- dmp-frontend/package.json | 1 - dmp-frontend/src/app/ui/dmp/listing/dmp-listing.component.ts | 4 ++-- dmp-frontend/src/app/ui/dmp/overview/dmp-overview.module.ts | 4 ++-- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/dmp-frontend/package.json b/dmp-frontend/package.json index 12b85564e..020f2a1e1 100644 --- a/dmp-frontend/package.json +++ b/dmp-frontend/package.json @@ -31,7 +31,6 @@ "file-saver": "^2.0.5", "moment": "^2.29.1", "moment-timezone": "^0.5.33", - "ng-dialog-animation": "^9.0.4", "ng2-dragula": "^2.1.1", "ngx-cookie-service": "^12.0.3", "ngx-cookieconsent": "^2.2.3", diff --git a/dmp-frontend/src/app/ui/dmp/listing/dmp-listing.component.ts b/dmp-frontend/src/app/ui/dmp/listing/dmp-listing.component.ts index f825230d6..cc207f142 100644 --- a/dmp-frontend/src/app/ui/dmp/listing/dmp-listing.component.ts +++ b/dmp-frontend/src/app/ui/dmp/listing/dmp-listing.component.ts @@ -28,7 +28,7 @@ import { DmpCriteriaDialogComponent } from './criteria/dmp-criteria-dialog.compo import { RecentActivityOrder } from '@app/core/common/enum/recent-activity-order'; import { GuidedTourService } from '@app/library/guided-tour/guided-tour.service'; import { GuidedTour, Orientation } from '@app/library/guided-tour/guided-tour.constants'; -import { NgDialogAnimationService } from "ng-dialog-animation"; +//import { NgDialogAnimationService } from "ng-dialog-animation"; import { HttpClient } from '@angular/common/http'; import { MatomoService } from '@app/core/services/matomo/matomo-service'; @@ -75,7 +75,7 @@ export class DmpListingComponent extends BaseComponent implements OnInit, IBread private dmpService: DmpService, private router: Router, private route: ActivatedRoute, - public dialogAnimation: NgDialogAnimationService, + //public dialogAnimation: NgDialogAnimationService, public dialog: MatDialog, public enumUtils: EnumUtils, private language: TranslateService, diff --git a/dmp-frontend/src/app/ui/dmp/overview/dmp-overview.module.ts b/dmp-frontend/src/app/ui/dmp/overview/dmp-overview.module.ts index dc73b4f76..be0a5c30e 100644 --- a/dmp-frontend/src/app/ui/dmp/overview/dmp-overview.module.ts +++ b/dmp-frontend/src/app/ui/dmp/overview/dmp-overview.module.ts @@ -9,7 +9,7 @@ import { CommonFormsModule } from '@common/forms/common-forms.module'; import { CommonUiModule } from '@common/ui/common-ui.module'; import { RouterModule } from '@angular/router'; import { CloneDialogModule } from '../clone/clone-dialog/clone-dialog.module'; -import { NgDialogAnimationService } from 'ng-dialog-animation'; +//import { NgDialogAnimationService } from 'ng-dialog-animation'; @NgModule({ imports: [ @@ -27,7 +27,7 @@ import { NgDialogAnimationService } from 'ng-dialog-animation'; DmpOverviewComponent ], providers: [ - NgDialogAnimationService + //NgDialogAnimationService ] }) export class DmpOverviewModule { } From 88568f6dcfa249657b96839cb0c1100efe7543c2 Mon Sep 17 00:00:00 2001 From: George Kalampokis Date: Mon, 21 Mar 2022 15:55:44 +0200 Subject: [PATCH 22/37] Replace the old application.properties with application.yml --- .../config/application-devel.properties | 96 -------- .../resources/config/application-devel.yml | 59 +++++ .../config/application-production.properties | 100 -------- .../config/application-production.yml | 33 +++ .../config/application-staging.properties | 90 ------- .../resources/config/application-staging.yml | 34 +++ .../resources/config/application.properties | 123 ---------- .../src/main/resources/config/application.yml | 227 ++++++++++++++++++ 8 files changed, 353 insertions(+), 409 deletions(-) delete mode 100644 dmp-backend/web/src/main/resources/config/application-devel.properties create mode 100644 dmp-backend/web/src/main/resources/config/application-devel.yml delete mode 100644 dmp-backend/web/src/main/resources/config/application-production.properties create mode 100644 dmp-backend/web/src/main/resources/config/application-production.yml delete mode 100644 dmp-backend/web/src/main/resources/config/application-staging.properties create mode 100644 dmp-backend/web/src/main/resources/config/application-staging.yml delete mode 100644 dmp-backend/web/src/main/resources/config/application.properties create mode 100644 dmp-backend/web/src/main/resources/config/application.yml diff --git a/dmp-backend/web/src/main/resources/config/application-devel.properties b/dmp-backend/web/src/main/resources/config/application-devel.properties deleted file mode 100644 index 396776273..000000000 --- a/dmp-backend/web/src/main/resources/config/application-devel.properties +++ /dev/null @@ -1,96 +0,0 @@ -dmp.domain = http://localhost:4200 - -####################PERSISTENCE OVERRIDES CONFIGURATIONS########## -database.url= -database.username= -database.password= -spring.datasource.maxIdle=10 -spring.datasource.minIdle=5 -spring.datasource.maxActive=10 - -####################ELASTIIC SEARCH TAGS OVERRIDES CONFIGURATIONS########## -elasticsearch.host = localhost -elasticsearch.port = 9200 -elasticsearch.username=elastic -elasticsearch.password= -elasticsearch.index=dmps - -####################ELK OVERRIDES CONFIGURATIONS########## -http-logger.server-address = http://localhost:31311 - -####################PDF OVERRIDES CONFIGURATIONS########## -pdf.converter.url=http://localhost:3000/ - -####################CONFIGURATION FILES OVERRIDES CONFIGURATIONS########## -configuration.externalUrls=externalUrls/ExternalUrls.xml -configuration.rda=RDACommonStandards.txt -configuration.h2020template=documents/h2020.docx -configuration.configurable_login_providers=configurableLoginProviders.json -configuration.doi_funder=DOI_Funder.json - -####################EMAIL FILE TEMPLATES OVERRIDES CONFIGURATIONS########## -email.invite=classpath:templates/email/email.html -email.confirmation=classpath:templates/email/emailConfirmation.html -email.merge=classpath:templates/email/emailMergeConfirmation.html - -#############FACEBOOK LOGIN CONFIGURATIONS######### -facebook.login.clientId= -facebook.login.clientSecret= -facebook.login.namespace= - -#############GOOGLE LOGIN CONFIGURATIONS######### -google.login.clientId= - -#############LINKEDIN LOGIN CONFIGURATIONS######### -linkedin.login.clientId= -linkedin.login.clientSecret= -linkedin.login.redirect_uri=http://localhost:4200/login/linkedin -linkedin.login.user_info_url=https://api.linkedin.com/v2/me -linkedin.login.user_email=https://api.linkedin.com/v2/emailAddress?q=members&projection=(elements*(handle~)) -linkedin.login.access_token_url=https://www.linkedin.com/uas/oauth2/accessToken - -#############TWITTER LOGIN CONFIGURATIONS######### -twitter.login.redirect_uri=http://localhost:4200/login/twitter - -#############B2 ACCESS CONFIGURATIONS######### -b2access.externallogin.user_info_url=https://b2access-integration.fz-juelich.de:443/oauth2/userinfo -b2access.externallogin.access_token_url=https://b2access-integration.fz-juelich.de:443/oauth2/token -b2access.externallogin.redirect_uri=http://opendmp.eu/api/oauth/authorized/b2access -b2access.externallogin.clientid= -b2access.externallogin.clientSecret= - -#############ORCID CONFIGURATIONS######### -orcid.login.client_id=APP-766DI5LP8T75FC4R -orcid.login.client_secret=f6ddc717-f49e-4bce-b302-2e479b226a24 -orcid.login.access_token_url=https://orcid.org/oauth/token -orcid.login.redirect_uri=http://localhost:4200/login/external/orcid - -#############OPENAIRE CONFIGURATIONS######### -openaire.login.client_id= -openaire.login.client_secret= -openaire.login.access_token_url= -openaire.login.redirect_uri= -openaire.login.user_info_url= - -#############CONFIRMATION EMAIL CONFIGURATIONS######### -conf_email.expiration_time_seconds=14400 -conf_email.subject=OpenDMP email confirmation - -#############ZENODO CONFIGURATIONS######### -zenodo.url=https://sandbox.zenodo.org/api/ -zenodo.access_token= -zenodo.login.access_token_url=https://sandbox.zenodo.org/oauth/token -zenodo.login.client_id= -zenodo.login.client_secret= -zenodo.login.redirect_uri=http://localhost:4200/login/external/zenodo - -#############CONTACT EMAIL CONFIGURATIONS######### -contact_email.mail= - -language.path=dmp-frontend/src/assets/i18n/ - -#############LOGGING######### -logging.config=classpath:logging/logback-${spring.profiles.active}.xml - -#############PROMETHEUS######### -endpoints.prometheus.sensitive: false \ No newline at end of file diff --git a/dmp-backend/web/src/main/resources/config/application-devel.yml b/dmp-backend/web/src/main/resources/config/application-devel.yml new file mode 100644 index 000000000..354385426 --- /dev/null +++ b/dmp-backend/web/src/main/resources/config/application-devel.yml @@ -0,0 +1,59 @@ +dmp: + domain: http://localhost:4200 + +####################PERSISTENCE OVERRIDES CONFIGURATIONS########## +spring: + datasource: + maxIdle: 10 + minIdle: 5 + maxActive: 10 + +####################ELASTIIC SEARCH TAGS OVERRIDES CONFIGURATIONS########## +elasticsearch: + host: localhost + port: 9200 + +####################ELK OVERRIDES CONFIGURATIONS########## +http-logger: + server-address: http://localhost:31311 + +####################PDF OVERRIDES CONFIGURATIONS########## +pdf: + converter: + url: http://localhost:3000/ + +####################EMAIL FILE TEMPLATES OVERRIDES CONFIGURATIONS########## +email: + invite: classpath:templates/email/email.html + confirmation: classpath:templates/email/emailConfirmation.html + merge: classpath:templates/email/emailMergeConfirmation.html + +#############LINKEDIN LOGIN CONFIGURATIONS######### +linkedin: + login: + redirect_uri: http://localhost:4200/login/linkedin + +#############TWITTER LOGIN CONFIGURATIONS######### +twitter: + login: + redirect_uri: http://localhost:4200/login/twitter + +#############ORCID CONFIGURATIONS######### +orcid: + login: + redirect_uri: http://localhost:4200/login/external/orcid + +#############ZENODO CONFIGURATIONS######### +zenodo: + login: + access_token_url: https://sandbox.zenodo.org/oauth/token + redirect_uri: http://localhost:4200/login/external/zenodo + +#############LANGUAGE CONFIGURATION######### +language: + path: dmp-frontend/src/assets/i18n/ + +#############PROMETHEUS######### +endpoints: + prometheus: + sensitive: false \ No newline at end of file diff --git a/dmp-backend/web/src/main/resources/config/application-production.properties b/dmp-backend/web/src/main/resources/config/application-production.properties deleted file mode 100644 index 971e6be43..000000000 --- a/dmp-backend/web/src/main/resources/config/application-production.properties +++ /dev/null @@ -1,100 +0,0 @@ -dmp.domain = https://opendmp.eu - -####################PERSISTENCE OVERRIDES CONFIGURATIONS########## -database.url=jdbc:postgresql://dmp-db:5432/dmptool -database.username=dmptool -database.password=CHANGEME - -####################ELASTIIC SEARCH TAGS OVERRIDES CONFIGURATIONS########## -elasticsearch.host = tags-elastic-search -elasticsearch.port = 9200 -elasticsearch.username=elastic -elasticsearch.password= -elasticsearch.index=dmps - -####################PDF OVERRIDES CONFIGURATIONS########## -pdf.converter.url=http://docsbox-web/ - -####################CONFIGURATION FILES OVERRIDES CONFIGURATIONS########## -configuration.externalUrls=externalUrls/ExternalUrls.xml -configuration.rda=RDACommonStandards.txt -configuration.h2020template=documents/h2020.docx -configuration.configurable_login_providers=ConfigurableLoginProviders.json -configuration.doi_funder=DOI_Funder.json - -####################SPRING MAIL CONFIGURATIONS################# -spring.mail.default-encoding=UTF-8 -spring.mail.host= -spring.mail.username= -spring.mail.password= -spring.mail.port=25 -spring.mail.protocol=smtp -spring.mail.test-connection=false -spring.mail.properties.mail.smtp.auth=false -spring.mail.properties.mail.smtp.starttls.enable=true - -#############FACEBOOK LOGIN CONFIGURATIONS######### -facebook.login.clientId= -facebook.login.clientSecret= -facebook.login.namespace=opendmp - -#############GOOGLE LOGIN CONFIGURATIONS######### -google.login.clientId= - -#############LINKEDIN LOGIN CONFIGURATIONS######### -linkedin.login.clientId= -linkedin.login.clientSecret= -linkedin.login.redirect_uri=https://opendmp.eu/login/linkedin -linkedin.login.user_info_url=https://api.linkedin.com/v2/me -linkedin.login.user_email=https://api.linkedin.com/v2/emailAddress?q=members&projection=(elements*(handle~)) -linkedin.login.access_token_url=https://www.linkedin.com/uas/oauth2/accessToken - -#############TWITTER LOGIN CONFIGURATIONS######### -twitter.login.clientId= -twitter.login.clientSecret= -twitter.login.redirect_uri=https://opendmp.eu/login/twitter - -#############B2 ACCESS CONFIGURATIONS######### -b2access.externallogin.user_info_url=https://b2access-integration.fz-juelich.de:443/oauth2/userinfo -b2access.externallogin.access_token_url=https://b2access-integration.fz-juelich.de:443/oauth2/token -b2access.externallogin.redirect_uri=https://opendmp.eu/api/oauth/authorized/b2access -b2access.externallogin.clientid= -b2access.externallogin.clientSecret= - -#############ORCID CONFIGURATIONS######### -orcid.login.client_id= -orcid.login.client_secret= -orcid.login.access_token_url=https://orcid.org/oauth/token -orcid.login.redirect_uri=https://opendmp.eu/login/external/orcid - -#############OPENAIRE CONFIGURATIONS######### -openaire.login.client_id= -openaire.login.client_secret= -openaire.login.access_token_url= -openaire.login.redirect_uri= -openaire.login.user_info_url= - -#############SPRING DATASOURCE CONFIGURATIONS######### -spring.datasource.maxIdle: 10 -spring.datasource.max-active: 70 -spring.datasource.max-wait: 10000 -spring.datasource.validationQuery: select 1 -spring.datasource.removeAbandoned: true -spring.datasource.removeAbandonedTimeout: 1 -spring.datasource.logAbandoned: true -spring.datasource.testOnBorrow: true -spring.datasource.testOnConnect: false -spring.datasource.testWhileIdle: false - -#############CONFIRMATION EMAIL CONFIGURATIONS######### -conf_email.expiration_time_seconds=14400 -conf_email.subject=OpenDMP email confirmation - -#############ZENODO CONFIGURATIONS######### -zenodo.url=https://zenodo.org/api/ -zenodo.access_token= - -#############CONTACT EMAIL CONFIGURATIONS######### -contact_email.mail= - -language.path=i18n/ \ No newline at end of file diff --git a/dmp-backend/web/src/main/resources/config/application-production.yml b/dmp-backend/web/src/main/resources/config/application-production.yml new file mode 100644 index 000000000..01ddeaf21 --- /dev/null +++ b/dmp-backend/web/src/main/resources/config/application-production.yml @@ -0,0 +1,33 @@ +dmp: + domain: https://opendmp.eu + +####################ELASTIIC SEARCH TAGS OVERRIDES CONFIGURATIONS########## +elasticsearch: + host: tags-elastic-search + port: 9200 + +####################PDF OVERRIDES CONFIGURATIONS########## +pdf: + converter: + url: http://docsbox-web/ + +#############SPRING DATASOURCE CONFIGURATIONS######### +spring: + datasource: + maxIdle: 10 + max-active: 70 + max-wait: 10000 + validationQuery: select 1 + removeAbandoned: true + removeAbandonedTimeout: 1 + logAbandoned: true + testOnBorrow: true + testOnConnect: false + testWhileIdle: false + +#############CONTACT EMAIL CONFIGURATIONS######### +contact_email.mail= + +#############LANGUAGE CONFIGURATION######### +language: + path: i18n/ \ No newline at end of file diff --git a/dmp-backend/web/src/main/resources/config/application-staging.properties b/dmp-backend/web/src/main/resources/config/application-staging.properties deleted file mode 100644 index 8bafc9971..000000000 --- a/dmp-backend/web/src/main/resources/config/application-staging.properties +++ /dev/null @@ -1,90 +0,0 @@ -dmp.domain = https://devel.opendmp.eu - -####################PERSISTENCE OVERRIDES CONFIGURATIONS########## -database.url=jdbc:postgresql://dmp-db:5432/dmptool -database.username=dmptool -database.password=CHANGEME - -####################ELASTIIC SEARCH TAGS OVERRIDES CONFIGURATIONS########## -elasticsearch.host = tags-elastic-search -elasticsearch.port = 9200 -elasticsearch.username=elastic -elasticsearch.password= -elasticsearch.index=dmps - -####################PDF OVERRIDES CONFIGURATIONS########## -pdf.converter.url=http://docsbox-web/ - -####################CONFIGURATION FILES OVERRIDES CONFIGURATIONS########## -configuration.externalUrls=externalUrls/ExternalUrls.xml -configuration.rda=RDACommonStandards.txt -configuration.h2020template=documents/h2020.docx -configuration.configurable_login_providers=ConfigurableLoginProviders.json -configuration.doi_funder=DOI_Funder.json - -####################INVITATION MAIL CONFIGURATIONS############## -####################GENERIC MAIL CONFIGURATIONS################# -mail.subject=Invitation to DMP Plan {dmpname} -mail.from=opendmp-dev@cite.gr - -####################SPRING MAIL CONFIGURATIONS################# -spring.mail.default-encoding=UTF-8 -spring.mail.host=hermes.local.cite.gr -spring.mail.port=25 -spring.mail.protocol=smtp -spring.mail.test-connection=false -spring.mail.properties.mail.smtp.auth=false - -#############FACEBOOK LOGIN CONFIGURATIONS######### -facebook.login.clientId= -facebook.login.clientSecret= -facebook.login.namespace=opendmp - -#############GOOGLE LOGIN CONFIGURATIONS######### -google.login.clientId= - -#############LINKEDIN LOGIN CONFIGURATIONS######### -linkedin.login.clientId= -linkedin.login.clientSecret= -linkedin.login.redirect_uri=https://devel.opendmp.eu/login/linkedin -linkedin.login.user_info_url=https://api.linkedin.com/v2/me -linkedin.login.user_email=https://api.linkedin.com/v2/emailAddress?q=members&projection=(elements*(handle~)) -linkedin.login.access_token_url=https://www.linkedin.com/uas/oauth2/accessToken - -#############TWITTER LOGIN CONFIGURATIONS######### -twitter.login.clientId= -twitter.login.clientSecret= -twitter.login.redirect_uri=https://devel.opendmp.eu/login/twitter - -#############CONFIRMATION EMAIL CONFIGURATIONS######### -conf_email.expiration_time_seconds=14400 -conf_email.subject=OpenDMP email confirmation - -#############B2 ACCESS CONFIGURATIONS######### -b2access.externallogin.user_info_url=https://b2access-integration.fz-juelich.de:443/oauth2/userinfo -b2access.externallogin.access_token_url=https://b2access-integration.fz-juelich.de:443/oauth2/token -b2access.externallogin.redirect_uri=https://devel.opendmp.eu/api/oauth/authorized/b2access -b2access.externallogin.clientid= -b2access.externallogin.clientSecret= - -#############ORCID CONFIGURATIONS######### -orcid.login.client_id= -orcid.login.client_secret= -orcid.login.access_token_url=https://orcid.org/oauth/token -orcid.login.redirect_uri=https://opendmp.eu/login/external/orcid - -#############OPENAIRE CONFIGURATIONS######### -openaire.login.client_id= -openaire.login.client_secret= -openaire.login.access_token_url= -openaire.login.redirect_uri= -openaire.login.user_info_url= - -#############ZENODO CONFIGURATIONS######### -zenodo.url=https://sandbox.zenodo.org/api/ -zenodo.access_token= - -#############CONTACT EMAIL CONFIGURATIONS######### -contact_email.mail= - -language.path=i18n/ \ No newline at end of file diff --git a/dmp-backend/web/src/main/resources/config/application-staging.yml b/dmp-backend/web/src/main/resources/config/application-staging.yml new file mode 100644 index 000000000..2df177074 --- /dev/null +++ b/dmp-backend/web/src/main/resources/config/application-staging.yml @@ -0,0 +1,34 @@ +dmp: + domain: https://devel.opendmp.eu + +####################ELASTIIC SEARCH TAGS OVERRIDES CONFIGURATIONS########## +elasticsearch: + host: tags-elastic-search + port: 9200 + +####################PDF OVERRIDES CONFIGURATIONS########## +pdf: + converter: + url: http://docsbox-web/ + +#############LINKEDIN LOGIN CONFIGURATIONS######### +linkedin: + login: + redirect_uri: https://devel.opendmp.eu/login/linkedin + +#############TWITTER LOGIN CONFIGURATIONS######### +twitter: + login: + redirect_uri: https://devel.opendmp.eu/login/twitter + +#############B2 ACCESS CONFIGURATIONS######### +b2access: + externallogin: + redirect_uri: https://devel.opendmp.eu/api/oauth/authorized/b2access + +#############ZENODO CONFIGURATIONS######### +zenodo: + url: https://sandbox.zenodo.org/api/ + +language: + path: i18n/ \ No newline at end of file diff --git a/dmp-backend/web/src/main/resources/config/application.properties b/dmp-backend/web/src/main/resources/config/application.properties deleted file mode 100644 index e6d2f9a93..000000000 --- a/dmp-backend/web/src/main/resources/config/application.properties +++ /dev/null @@ -1,123 +0,0 @@ -server.port=8081 -server.tomcat.max-threads = 20 -server.tomcat.max-connections = 10000 -logging.file=/logs/spring-boot-logging.log -spring.profiles.active=devel -eu.eudat.logic.proxy.allowed.host=https://eestore.paas2.uninett.no - -####################Metrics############## -management.endpoint.metrics.enabled=false -management.metrics.enable.http=false -management.metrics.enable.jvm=false -management.metrics.enable.jdbc=false -management.metrics.enable.tomcat=false -management.metrics.enable.logback=false -management.metrics.enable.hikaricp=false -management.metrics.enable.cache=false -management.endpoints.web.base-path=/ -management.endpoints.web.exposure.include=prometheus -management.endpoint.prometheus.enabled=true -management.metrics.export.prometheus.enabled=true - -####################INVITATION MAIL CONFIGURATIONS############## -####################GENERIC MAIL CONFIGURATIONS################# -mail.subject=Invitation to DMP Plan {dmpname} -mail.from=opendmp-dev@cite.gr - -####################DATASET TEMPLATE MAIL CONFIGURATIONS################# -admin.mail.subject=You have been invited to the Dataset Template {templateName} - -####################SPRING MAIL CONFIGURATIONS################# -spring.mail.default-encoding=UTF-8 -spring.mail.host=hermes.local.cite.gr -spring.mail.port=25 -spring.mail.protocol=smtp -spring.mail.test-connection=false -spring.mail.properties.mail.smtp.auth=false -spring.mail.properties.mail.smtp.starttls.enable=false - -####################CONFIGURATION FILES OVERRIDES CONFIGURATIONS########## -configuration.externalUrls=externalUrls/ExternalUrls.xml -configuration.rda=RDACommonStandards.txt -configuration.h2020template=documents/h2020.docx -configuration.configurable_login_providers=ConfigurableLoginProviders.json -configuration.doi_funder=DOI_Funder.json - -####################EMAIL FILE TEMPLATES OVERRIDES CONFIGURATIONS########## -email.invite=file:templates/email/email.html -email.confirmation=file:templates/email/emailConfirmation.html -email.merge=file:templates/email/emailMergeConfirmation.html -email.dataset.template=file:templates/email/emailAdmin.html - -#############LOGIN CONFIGURATIONS######### -#############GENERIC LOGIN CONFIGURATIONS######### -autouser.root.email= -autouser.root.password= -autouser.root.username= - -#############FACEBOOK LOGIN CONFIGURATIONS######### -facebook.login.clientId= -facebook.login.clientSecret= -facebook.login.namespace= - -#############GOOGLE LOGIN CONFIGURATIONS######### -google.login.clientId= - -#############LINKEDIN LOGIN CONFIGURATIONS######### -linkedin.login.clientId= -linkedin.login.clientSecret= -linkedin.login.redirect_uri=http://opendmp.eu/login/linkedin -linkedin.login.user_info_url=https://api.linkedin.com/v2/me -linkedin.login.user_email=https://api.linkedin.com/v2/emailAddress?q=members&projection=(elements*(handle~)) -linkedin.login.access_token_url=https://www.linkedin.com/uas/oauth2/accessToken - -#############TWITTER LOGIN CONFIGURATIONS######### -twitter.login.clientId= -twitter.login.clientSecret= -twitter.login.redirect_uri=http://opendmp.eu/login/twitter - -#############B2 ACCESS CONFIGURATIONS######### -b2access.externallogin.user_info_url=https://b2access-integration.fz-juelich.de:443/oauth2/userinfo -b2access.externallogin.access_token_url=https://b2access-integration.fz-juelich.de:443/oauth2/token -b2access.externallogin.redirect_uri=http://opendmp.eu/api/oauth/authorized/b2access -b2access.externallogin.clientid= -b2access.externallogin.clientSecret= - -#############DYNAMIC PROJECT CONFIGURATIONS######### -project.configuration.project.name = Project -project.configuration.funder.name = Funder -project.configuration.grant.name = Grant - -#############HTTP LOGGER DELAY CONFIGURATIONS######### -http-logger.initial-delay = 0 -http-logger.delay = 10 - -##########################PERISTENCE########################################## -#############GENERIC DATASOURCE CONFIGURATIONS######### -database.driver-class-name=org.postgresql.Driver -database.lock-fail-interval=120000 - -##########################MISC########################################## -#############USER GUIDE######### -userguide.path=user-guide/ - -#############NOTIFICATION######### -notification.rateInterval=30000 -notification.maxRetries=10 -notification.modified.subject=[OpenDMP] The {name} has been modified -notification.publish.subject=[OpenDMP] The {name} has been published -notification.finalised.subject=[OpenDMP] The {name} has been finalised -notification.modifiedFinalised.subject=[OpenDMP] The {name} has been modified and finalised - -#############LOGGING######### -logging.config=classpath:logging/logback-${spring.profiles.active}.xml - -#############TEMP######### -temp.temp=tmp/ -file.storage=uploads/ -spring.servlet.multipart.max-file-size=10MB -spring.servlet.multipart.max-request-size=10MB - -#############ZENODO######### -zenodo.affiliation=ARGOS -zenodo.community=argos \ No newline at end of file diff --git a/dmp-backend/web/src/main/resources/config/application.yml b/dmp-backend/web/src/main/resources/config/application.yml new file mode 100644 index 000000000..4c35e4cd4 --- /dev/null +++ b/dmp-backend/web/src/main/resources/config/application.yml @@ -0,0 +1,227 @@ +server: + port: 8081 + tomcat: + max-threads: 20 + max-connections: 10000 + +eu: + eudat: + logic: + proxy: + allowed: + host: https://eestore.paas2.uninett.no + +####################Metrics############## +management: + endpoint: + metrics: + enabled: false + prometheus: + enabled: true + metrics: + enable: + http: false + jvm: false + jdbc: false + tomcat: false + logback: false + hikaricp: false + cache: false + export: + prometheus: + enabled: true + endpoints: + web: + base-path: / + exposure: + include: prometheus + +####################INVITATION MAIL CONFIGURATIONS############## +####################GENERIC MAIL CONFIGURATIONS################# +mail: + subject: "Invitation to DMP Plan {dmpname}" + from: opendmp-dev@cite.gr + +####################DATASET TEMPLATE MAIL CONFIGURATIONS################# +admin: + mail: + subject: "You have been invited to the Dataset Template {templateName}" + +####################SPRING MAIL CONFIGURATIONS################# +spring: + mail: + default-encoding: UTF-8 + host: hermes.local.cite.gr + username: ${SPRING_MAIL_USER:} + password: ${SPRING_MAIL_PASS:} + port: 25 + protocol: smtp + test-connection: false + properties: + mail: + smtp: + auth: false + starttls: + enable: false + servlet: + multipart: + max-file-size: 10MB + max-request-size: 10MB + +####################CONFIGURATION FILES OVERRIDES CONFIGURATIONS########## +configuration: + externalUrls: externalUrls/ExternalUrls.xml + rda: RDACommonStandards.txt + h2020template: documents/h2020.docx + configurable_login_providers: ConfigurableLoginProviders.json + doi_funder: DOI_Funder.json + +####################EMAIL FILE TEMPLATES OVERRIDES CONFIGURATIONS########## +email: + invite: file:templates/email/email.html + confirmation: file:templates/email/emailConfirmation.html + merge: file:templates/email/emailMergeConfirmation.html + dataset: + template: file:templates/email/emailAdmin.html + +#############LOGIN CONFIGURATIONS######### +#############GENERIC LOGIN CONFIGURATIONS######### +autouser: + root: + email: ${AUTOUSER_EMAIL:} + password: ${AUTOUSER_PASS:} + username: ${AUTOUSER_NAME:} + +#############FACEBOOK LOGIN CONFIGURATIONS######### +facebook: + login: + clientId: ${FACEBOOK_CLIENT_ID:} + clientSecret: ${FACEBOOK_CLIENT_SECRET:} + namespace: ${FACEBOOK_NAMESPACE:} + +#############GOOGLE LOGIN CONFIGURATIONS######### +google: + login: + clientId: ${GOOGLE_CLIENT_ID:} + +#############LINKEDIN LOGIN CONFIGURATIONS######### +linkedin: + login: + clientId: ${LINKEDIN_CLIENT_ID:} + clientSecret: ${LINKEDIN_CLIENT_SECRET:} + redirect_uri: http://opendmp.eu/login/linkedin + user_info_url: https://api.linkedin.com/v2/me + user_email: https://api.linkedin.com/v2/emailAddress?q=members&projection=(elements*(handle~)) + access_token_url: https://www.linkedin.com/uas/oauth2/accessToken + +#############TWITTER LOGIN CONFIGURATIONS######### +twitter: + login: + clientId: ${TWITTER_CLIENT_ID:} + clientSecret: ${TWITTER_CLIENT_SECRET:} + redirect_uri: http://opendmp.eu/login/twitter + +#############B2 ACCESS CONFIGURATIONS######### +b2access: + externallogin: + user_info_url: https://b2access-integration.fz-juelich.de:443/oauth2/userinfo + access_token_url: https://b2access-integration.fz-juelich.de:443/oauth2/token + redirect_uri: http://opendmp.eu/api/oauth/authorized/b2access + clientid: ${B2ACCESS_CLIENT_ID:} + clientSecret: ${B2ACCESS_CLIENT_SECRET:} + +#############ORCID CONFIGURATIONS######### +orcid: + login: + client_id: ${ORCID_CLIENT_ID:} + client_secret: ${ORCID_CLIENT_SECRET:} + access_token_url: https://orcid.org/oauth/token + redirect_uri: https://opendmp.eu/login/external/orcid + +#############OPENAIRE CONFIGURATIONS######### +openaire: + login: + client_id: ${OPENAIRE_CLIENT_ID:} + client_secret: ${OPENAIRE_CLIENT_SECRET:} + access_token_url: ${OPENAIRE_TOKEN_URL:} + redirect_uri: ${OPENAIRE_REFRESH_URL:} + user_info_url: ${OPENAIRE_INFO_URL:} + +#############ZENODO CONFIGURATIONS######### +zenodo: + url: https://sandbox.zenodo.org/api/ + access_token: ${ZENODO_ACCESS_TOKEN:} + login: + access_token_url: https://zenodo.org/oauth/token + client_id: ${ZENODO_CLIENT_ID:} + client_secret: ${ZENODO_CLIENT_SECRET:} + redirect_uri: https://opendmp.eu/login/external/zenodo + affiliation: ARGOS + community: argos + +#############DYNAMIC PROJECT CONFIGURATIONS######### +project: + configuration: + project: + name: Project + funder: + name: Funder + grant: + name: Grant + +#############HTTP LOGGER DELAY CONFIGURATIONS######### +http-logger: + initial-delay: 0 + delay: 10 + +##########################PERISTENCE########################################## +#############GENERIC DATASOURCE CONFIGURATIONS######### +database: + driver-class-name: org.postgresql.Driver + lock-fail-interval: 120000 + url: ${DB_URL:} + username: ${DB_USER:} + password: ${DB_PASS:} + +##########################MISC########################################## +#############USER GUIDE######### +userguide: + path: user-guide/ + +#############NOTIFICATION######### +notification: + rateInterval: 30000 + maxRetries: 10 + modified: + subject: "[OpenDMP] The {name} has been modified" + publish: + subject: "[OpenDMP] The {name} has been published" + finalised: + subject: "[OpenDMP] The {name} has been finalised" + modifiedFinalised: + subject: "[OpenDMP] The {name} has been modified and finalised" + +#############LOGGING######### +logging: + config: classpath:logging/logback-${spring.profiles.active}.xml + +#############TEMP######### +temp: + temp: tmp/ +file: + storage: uploads/ + +####################ELASTIIC SEARCH TAGS CONFIGURATIONS########## +elasticsearch: + username: elastic + password: ${ELASTIC_PASS:} + index: dmps + +#############CONTACT EMAIL CONFIGURATIONS######### +contact_email: + mail: ${CONTACT_EMAIL:} + +#############CONFIRMATION EMAIL CONFIGURATIONS######### +conf_email: + expiration_time_seconds: 14400 + subject: "OpenDMP email confirmation" \ No newline at end of file From 4317feacd74034fc521632bfac8f96da5d8391da Mon Sep 17 00:00:00 2001 From: George Kalampokis Date: Mon, 21 Mar 2022 15:59:15 +0200 Subject: [PATCH 23/37] Minor improvement over logstash pipeline --- .../pipeline/open_dmp_send_to_elastic.conf | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/ELK.Docker/shared/config-elk/logstash/pipeline/open_dmp_send_to_elastic.conf b/ELK.Docker/shared/config-elk/logstash/pipeline/open_dmp_send_to_elastic.conf index 8b0f9fe02..2dd830467 100644 --- a/ELK.Docker/shared/config-elk/logstash/pipeline/open_dmp_send_to_elastic.conf +++ b/ELK.Docker/shared/config-elk/logstash/pipeline/open_dmp_send_to_elastic.conf @@ -2,18 +2,11 @@ input { pipeline { address => open_dmp_send_to_elastic } } -filter { -} - output { elasticsearch { hosts => "elasticsearch:9200" + index => "opendmp.logs" user => elastic - password => - index =>"opendmp.logs" - #manage_template => true - #template => "/usr/share/logstash/templates/audit/openDMP.json" - #template_name => "cite.elas.openDMP-audit*" - #template_overwrite => true - } -} \ No newline at end of file + password => "" + } +} From 1dd971c4aaf862828b5af6daecd00619c7aa7226 Mon Sep 17 00:00:00 2001 From: George Kalampokis Date: Mon, 21 Mar 2022 17:20:39 +0200 Subject: [PATCH 24/37] Remove unreliable plugin update on logstash --- ELK.Docker/logstash/Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ELK.Docker/logstash/Dockerfile b/ELK.Docker/logstash/Dockerfile index 2effcf094..2b2323ae6 100644 --- a/ELK.Docker/logstash/Dockerfile +++ b/ELK.Docker/logstash/Dockerfile @@ -16,5 +16,5 @@ FROM docker.elastic.co/logstash/logstash:${ELK_VERSION} # Add your logstash plugins setup here # Example: RUN logstash-plugin install logstash-filter-json -RUN logstash-plugin update logstash-input-beats -RUN logstash-plugin update logstash-filter-grok \ No newline at end of file +#RUN logstash-plugin update logstash-input-beats +#RUN logstash-plugin update logstash-filter-grok From 734dc94f264f087087079aa0859d7097c2236876 Mon Sep 17 00:00:00 2001 From: George Kalampokis Date: Tue, 5 Apr 2022 15:27:58 +0300 Subject: [PATCH 25/37] Change Dataset sorting on DMP overview and editor from last modified to last created --- .../logic/managers/DataManagementPlanManager.java | 4 ++-- .../models/data/dataset/DatasetOverviewModel.java | 10 ++++++++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DataManagementPlanManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DataManagementPlanManager.java index dc4322711..dafa1fa10 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DataManagementPlanManager.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DataManagementPlanManager.java @@ -291,7 +291,7 @@ public class DataManagementPlanManager { if (includeDatasets) { dataManagementPlan.fromDataModel(dataManagementPlanEntity); dataManagementPlan.getDatasets().forEach(datasetWizardModel -> datasetWizardModel.setDescription(null)); - dataManagementPlan.setDatasets(dataManagementPlan.getDatasets().stream().sorted(Comparator.comparing(DatasetWizardModel::getModified).reversed()).collect(Collectors.toList())); + dataManagementPlan.setDatasets(dataManagementPlan.getDatasets().stream().sorted(Comparator.comparing(DatasetWizardModel::getCreated).reversed()).collect(Collectors.toList())); //List datasetEnities = new ArrayList<>(dataManagementPlanEntity.getDataset()); /*for (int i = 0; i < datasetEnities.size(); i++) { for (int j = i; j < dataManagementPlan.getDatasets().size(); j++) { @@ -343,7 +343,7 @@ public class DataManagementPlanManager { } DataManagementPlanOverviewModel datamanagementPlan = new DataManagementPlanOverviewModel(); datamanagementPlan.fromDataModelDatasets(dataManagementPlanEntity); - datamanagementPlan.setDatasets(datamanagementPlan.getDatasets().stream().sorted(Comparator.comparing(DatasetOverviewModel::getModified).reversed()).collect(Collectors.toList())); + datamanagementPlan.setDatasets(datamanagementPlan.getDatasets().stream().sorted(Comparator.comparing(DatasetOverviewModel::getCreated).reversed()).collect(Collectors.toList())); if (isPublic) { datamanagementPlan.setDatasets(datamanagementPlan.getDatasets().stream().filter(dataset -> dataset.getStatus() == Dataset.Status.FINALISED.getValue()).collect(Collectors.toList())); } diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/dataset/DatasetOverviewModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/dataset/DatasetOverviewModel.java index 2ef2aeba1..78e00c7ef 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/dataset/DatasetOverviewModel.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/dataset/DatasetOverviewModel.java @@ -24,6 +24,7 @@ public class DatasetOverviewModel implements DataModel Date: Thu, 7 Apr 2022 17:28:39 +0300 Subject: [PATCH 26/37] Fix critical issue when importing from xml with researchers --- .../data/src/main/java/eu/eudat/data/entities/Researcher.java | 2 +- .../java/eu/eudat/logic/managers/DataManagementPlanManager.java | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/entities/Researcher.java b/dmp-backend/data/src/main/java/eu/eudat/data/entities/Researcher.java index 7777a883f..0c5d853ba 100644 --- a/dmp-backend/data/src/main/java/eu/eudat/data/entities/Researcher.java +++ b/dmp-backend/data/src/main/java/eu/eudat/data/entities/Researcher.java @@ -24,7 +24,7 @@ public class Researcher implements DataEntity { @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\"") diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DataManagementPlanManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DataManagementPlanManager.java index dafa1fa10..b7c5196f9 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DataManagementPlanManager.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DataManagementPlanManager.java @@ -1668,6 +1668,7 @@ public class DataManagementPlanManager { for (ResearcherImportModels res : dataManagementPlans.get(0).getResearchersImportModels()) { eu.eudat.models.data.dmp.Researcher researcher = new eu.eudat.models.data.dmp.Researcher(); researcher.setLabel(res.getResearcherImportName()); + researcher.setName(res.getResearcherImportName()); researcher.setReference(res.getResearcherImportReference()); researcher.setKey(researcher.getReference().split(":")[0]); researchers.add(researcher); From ee356c047df9c6c594f9671793db778dab4449d6 Mon Sep 17 00:00:00 2001 From: George Kalampokis Date: Thu, 7 Apr 2022 17:30:40 +0300 Subject: [PATCH 27/37] Refactor Zenodo deposit creation. Add model for mapping instead of relying on stringBuilder --- .../main/java/eu/eudat/controllers/DMPs.java | 2 +- .../managers/DataManagementPlanManager.java | 147 +++------------- .../deposit/zenodo/ZenodoAccessRight.java | 18 ++ .../models/deposit/zenodo/ZenodoComunity.java | 19 +++ .../deposit/zenodo/ZenodoContributor.java | 45 +++++ .../models/deposit/zenodo/ZenodoDeposit.java | 19 +++ .../deposit/zenodo/ZenodoDepositMetadata.java | 159 ++++++++++++++++++ .../models/deposit/zenodo/ZenodoGrant.java | 18 ++ .../models/deposit/zenodo/ZenodoRelator.java | 28 +++ .../zenodo/mapper/DMPToZenodoMapper.java | 115 +++++++++++++ 10 files changed, 441 insertions(+), 129 deletions(-) create mode 100644 dmp-backend/web/src/main/java/eu/eudat/models/deposit/zenodo/ZenodoAccessRight.java create mode 100644 dmp-backend/web/src/main/java/eu/eudat/models/deposit/zenodo/ZenodoComunity.java create mode 100644 dmp-backend/web/src/main/java/eu/eudat/models/deposit/zenodo/ZenodoContributor.java create mode 100644 dmp-backend/web/src/main/java/eu/eudat/models/deposit/zenodo/ZenodoDeposit.java create mode 100644 dmp-backend/web/src/main/java/eu/eudat/models/deposit/zenodo/ZenodoDepositMetadata.java create mode 100644 dmp-backend/web/src/main/java/eu/eudat/models/deposit/zenodo/ZenodoGrant.java create mode 100644 dmp-backend/web/src/main/java/eu/eudat/models/deposit/zenodo/ZenodoRelator.java create mode 100644 dmp-backend/web/src/main/java/eu/eudat/models/deposit/zenodo/mapper/DMPToZenodoMapper.java diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/DMPs.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/DMPs.java index 174848582..efc212e5e 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/DMPs.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/DMPs.java @@ -328,7 +328,7 @@ public class DMPs extends BaseController { @RequestMapping(method = RequestMethod.POST, value = {"/createZenodoDoi/{id}"}) public ResponseEntity> createZenodoDoi(@PathVariable String id, Principal principal) { try { - String zenodoDOI = this.dataManagementPlanManager.createZenodoDoi(UUID.fromString(id), principal, configLoader); + String zenodoDOI = this.dataManagementPlanManager.createZenodoDoi(UUID.fromString(id), principal); return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem().status(ApiMessageCode.SUCCESS_MESSAGE).message("Successfully created DOI for Data Datamanagement Plan in question.").payload(zenodoDOI)); } catch (Exception e) { logger.error(e.getMessage(), e); diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DataManagementPlanManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DataManagementPlanManager.java index b7c5196f9..34cfadcd2 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DataManagementPlanManager.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DataManagementPlanManager.java @@ -28,13 +28,11 @@ import eu.eudat.exceptions.security.UnauthorisedException; import eu.eudat.logic.builders.entity.UserInfoBuilder; import eu.eudat.logic.mapper.elastic.DmpMapper; import eu.eudat.logic.mapper.elastic.criteria.DmpCriteriaMapper; -import eu.eudat.logic.proxy.config.DOIFunder; import eu.eudat.logic.proxy.config.configloaders.ConfigLoader; import eu.eudat.logic.services.ApiContext; import eu.eudat.logic.services.forms.VisibilityRuleService; import eu.eudat.logic.services.forms.VisibilityRuleServiceImpl; import eu.eudat.logic.services.operations.DatabaseRepository; -import eu.eudat.logic.services.utilities.UtilitiesService; import eu.eudat.logic.utilities.builders.XmlBuilder; import eu.eudat.logic.utilities.documents.helpers.FileEnvelope; import eu.eudat.logic.utilities.documents.pdf.PDFUtils; @@ -59,6 +57,8 @@ import eu.eudat.models.data.project.ProjectDMPEditorModel; import eu.eudat.models.data.security.Principal; import eu.eudat.models.data.user.composite.PagedDatasetProfile; import eu.eudat.models.data.userinfo.UserListingModel; +import eu.eudat.models.deposit.zenodo.ZenodoDeposit; +import eu.eudat.models.deposit.zenodo.mapper.DMPToZenodoMapper; import eu.eudat.queryable.QueryableList; import eu.eudat.types.Authorities; import eu.eudat.types.MetricNames; @@ -113,9 +113,10 @@ public class DataManagementPlanManager { private RDAManager rdaManager; private UserManager userManager; private final MetricsManager metricsManager; + private final ConfigLoader configLoader; @Autowired - public DataManagementPlanManager(ApiContext apiContext, DatasetManager datasetManager, Environment environment, RDAManager rdaManager, UserManager userManager, MetricsManager metricsManager) { + public DataManagementPlanManager(ApiContext apiContext, DatasetManager datasetManager, Environment environment, RDAManager rdaManager, UserManager userManager, MetricsManager metricsManager, ConfigLoader configLoader) { this.apiContext = apiContext; this.datasetManager = datasetManager; this.databaseRepository = apiContext.getOperationsContext().getDatabaseRepository(); @@ -123,6 +124,7 @@ public class DataManagementPlanManager { this.rdaManager = rdaManager; this.userManager = userManager; this.metricsManager = metricsManager; + this.configLoader = configLoader; } /* @@ -1055,7 +1057,7 @@ public class DataManagementPlanManager { UserInfo user = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(principal.getId()); sendNotification(dmp, user, NotificationType.DMP_PUBLISH); if (dmp.getDoi() != null && !dmp.getDoi().isEmpty()) { - this.createZenodoDoi(dmp.getId(), principal, null, true); + this.createZenodoDoi(dmp.getId(), principal, true); } } @@ -2013,11 +2015,11 @@ public class DataManagementPlanManager { } } - public String createZenodoDoi(UUID id, Principal principal, ConfigLoader configLoader) throws Exception { - return this.createZenodoDoi(id, principal, configLoader, false); + public String createZenodoDoi(UUID id, Principal principal) throws Exception { + return this.createZenodoDoi(id, principal, false); } - public String createZenodoDoi(UUID id, Principal principal, ConfigLoader configLoader, boolean update) throws Exception { + public String createZenodoDoi(UUID id, Principal principal, boolean update) throws Exception { DMP dmp = this.apiContext.getOperationsContext().getDatabaseRepository().getDmpDao().find(id); if (!isUserOwnerOfDmp(dmp, principal)) throw new Exception("User is not authorized to invoke this action"); @@ -2039,129 +2041,18 @@ public class DataManagementPlanManager { HttpHeaders headers = new HttpHeaders(); headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON)); headers.setContentType(MediaType.APPLICATION_JSON); - String createData = null; - Map extraProperties = dmp.getExtraProperties() != null ? new org.json.JSONObject(dmp.getExtraProperties()).toMap() : new HashMap<>(); - StringBuilder dataBuilder = new StringBuilder(); - dataBuilder.append("{\n \"metadata\": {\n"); - dataBuilder.append( " \"title\": \"").append(dmp.getLabel()).append("\",\n"); - dataBuilder.append(" \"upload_type\": \"publication\",\n"); - dataBuilder.append(" \"publication_type\": \"datamanagementplan\",\n"); - dataBuilder.append(" \"description\": \"").append((dmp.getDescription() != null && !dmp.getDescription().isEmpty() ? dmp.getDescription() : "

")).append("\",\n"); - dataBuilder.append(" \"version\": \"").append(dmp.getVersion()).append("\",\n"); - dataBuilder.append(" \"communities\": [{\n \t\t\"identifier\": \"").append(environment.getProperty("zenodo.community")).append("\"\n \t\t}],\n"); - dataBuilder.append(" \"access_right\": \""); - if (extraProperties.get("visible") == null) { - dataBuilder.append("restricted\",\n"); - dataBuilder.append(" \"access_conditions\": \"\",\n"); - } else { - if (((Boolean) extraProperties.get("visible"))) { - Instant publicationDate = Instant.parse(extraProperties.get("publicDate").toString()); - if (publicationDate.isBefore(Instant.now())) { - dataBuilder.append("open\",\n"); - } else { - dataBuilder.append("embargoed\",\n"); - dataBuilder.append(" \"embargo_date\": \"" + publicationDate + "\",\n"); - } - - if (extraProperties.get("license") != null) { - dataBuilder.append(" \"license\": \"").append(((Map) extraProperties.get("license")).get("pid")).append("\",\n"); - } - } else { - dataBuilder.append("restricted\",\n"); - dataBuilder.append(" \"access_conditions\": \"\",\n"); - } - } - if (dmp.isPublic()) { - dataBuilder.append(" \"related_identifiers\": [{\n"); - dataBuilder.append(" \t\t\"identifier\": \"").append((this.environment.getProperty("dmp.domain") + "/external/zenodo/" + id.toString())).append("\",\n"); - dataBuilder.append(" \t\t\"relation\": \"isIdenticalTo\"}],\n"); - } - dataBuilder.append(" \"contributors\": ["); - int i = 0; - for(UserDMP userDMP: dmp.getUsers()) { - if (i > 0) { - dataBuilder.append(",\n"); - } - dataBuilder.append("{\n"); - dataBuilder.append(" \t\t\"name\": \"").append(userDMP.getUser().getName()).append("\",\n"); - dataBuilder.append(" \t\t\"type\": \"").append("ProjectMember").append("\",\n"); - if (dmp.getOrganisations() != null && !dmp.getOrganisations().isEmpty()) { - dataBuilder.append(" \t\t\"affiliation\": \""); - int j = 0; - for (Organisation organization: dmp.getOrganisations()) { - if (j > 0) { - dataBuilder.append(", "); - } - dataBuilder.append(organization.getLabel()); - j++; - } - dataBuilder.append("\"\n}"); - } else { - dataBuilder.append(" \t\t\"affiliation\": \"" + this.environment.getProperty("zenodo.affiliation") +"\"\n}"); - } - i++; - } - for(Researcher researcher: dmp.getResearchers()) { - if (i > 0) { - dataBuilder.append(",\n"); - } - dataBuilder.append("{\n"); - dataBuilder.append(" \t\t\"name\": \"").append(researcher.getLabel()).append("\",\n"); - dataBuilder.append(" \t\t\"type\": \"").append("Researcher").append("\",\n"); - String referenceHead = researcher.getReference().split(":")[0]; - String referenceTail = researcher.getReference().replace(referenceHead + ":", ""); - dataBuilder.append(" \t\t\"affiliation\": \"" + referenceHead + "\""); - if (referenceHead.toUpperCase().equals("ORCID")) { - dataBuilder.append(",\n \t\t\"orcid\": \"" + referenceTail + "\""); - } - dataBuilder.append("\n}"); - i++; - } - dataBuilder.append("],\n"); - if (dmp.getGrant().getReference() == null) { - dmp.getGrant().setReference("dmp:" + dmp.getGrant().getId()); - } - String grantReferenceHead = dmp.getGrant().getReference().split(":")[0]; - if (grantReferenceHead.equals("openaire")) { - String grantReferenceTail = dmp.getGrant().getReference().split(":")[3]; - DOIFunder doiFunder = configLoader.getDOIFunders().stream() - .filter(doiFunder1 -> dmp.getGrant().getFunder().getLabel().contains(doiFunder1.getFunder()) || doiFunder1.getFunder().contains(dmp.getGrant().getFunder().getLabel())) - .findFirst().orElse(null); - if (doiFunder != null) { - String finalId = doiFunder.getDOI() + "::" + grantReferenceTail; - dataBuilder.append(" \"grants\": [{\n"); - dataBuilder.append(" \t\t\"id\": \"").append(finalId).append("\"\n}],\n"); - } - } - - dataBuilder.append(" \"creators\": [{\n"); - dataBuilder.append(" \t\t\"name\": \"").append(dmp.getUsers().stream().filter(userDMP -> userDMP.getRole().equals(UserDMP.UserDMPRoles.OWNER.getValue())).findFirst().get().getUser().getName()).append("\",\n"); - if (dmp.getOrganisations() != null && !dmp.getOrganisations().isEmpty()) { - dataBuilder.append(" \t\t\"affiliation\": \""); - int j = 0; - for (Organisation organization: dmp.getOrganisations()) { - if (j > 0) { - dataBuilder.append(", "); - } - dataBuilder.append(organization.getLabel()); - j++; - } - dataBuilder.append("\"}]\n"); - } else { - dataBuilder.append(" \t\t\"affiliation\": \"" + this.environment.getProperty("zenodo.affiliation") +"\"}]\n"); - } - dataBuilder.append(" }\n").append("}"); - createData = dataBuilder.toString(); - /*ObjectMapper mapper = new ObjectMapper(); - mapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_CONTROL_CHARS, true); - JsonNode createDataJSON = mapper.readTree(createData);*/ - HttpEntity request = new HttpEntity<>(createData, headers); - Map createResponse = null; - LinkedHashMap links = null; + ZenodoDeposit deposit = DMPToZenodoMapper.fromDMP(dmp, environment, configLoader); + //if (Objects.requireNonNull(environment.getProperty("spring.profiles.active")).contains("devel")) { + String json = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(deposit); + logger.info(json); + //} + HttpEntity request = new HttpEntity<>(deposit, headers); + Map createResponse; + LinkedHashMap links; String previousDOI = this.getPreviousDOI(dmp.getGroupId(), dmp.getId()); String unpublishedUrl = null; - String publishUrl = null; - String finalDoi = null; + String publishUrl; + String finalDoi; try { if (previousDOI == null) { diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/deposit/zenodo/ZenodoAccessRight.java b/dmp-backend/web/src/main/java/eu/eudat/models/deposit/zenodo/ZenodoAccessRight.java new file mode 100644 index 000000000..b143338fc --- /dev/null +++ b/dmp-backend/web/src/main/java/eu/eudat/models/deposit/zenodo/ZenodoAccessRight.java @@ -0,0 +1,18 @@ +package eu.eudat.models.deposit.zenodo; + +import com.fasterxml.jackson.annotation.JsonValue; + +public enum ZenodoAccessRight { + RESTRICTED("restricted"), EMBARGOED("embargoed"), OPEN("open"); + + private final String value; + + ZenodoAccessRight(String value) { + this.value = value; + } + + @JsonValue + public String getValue() { + return value; + } +} diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/deposit/zenodo/ZenodoComunity.java b/dmp-backend/web/src/main/java/eu/eudat/models/deposit/zenodo/ZenodoComunity.java new file mode 100644 index 000000000..f644d3144 --- /dev/null +++ b/dmp-backend/web/src/main/java/eu/eudat/models/deposit/zenodo/ZenodoComunity.java @@ -0,0 +1,19 @@ +package eu.eudat.models.deposit.zenodo; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; + +@JsonIgnoreProperties(ignoreUnknown = true) +@JsonInclude(JsonInclude.Include.NON_NULL) +public class ZenodoComunity { + + private String identifier; + + public String getIdentifier() { + return identifier; + } + + public void setIdentifier(String identifier) { + this.identifier = identifier; + } +} diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/deposit/zenodo/ZenodoContributor.java b/dmp-backend/web/src/main/java/eu/eudat/models/deposit/zenodo/ZenodoContributor.java new file mode 100644 index 000000000..55ca86ed7 --- /dev/null +++ b/dmp-backend/web/src/main/java/eu/eudat/models/deposit/zenodo/ZenodoContributor.java @@ -0,0 +1,45 @@ +package eu.eudat.models.deposit.zenodo; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; + +@JsonIgnoreProperties(ignoreUnknown = true) +@JsonInclude(JsonInclude.Include.NON_NULL) +public class ZenodoContributor { + private String name; + private String type; + private String affiliation; + private String orcid; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getAffiliation() { + return affiliation; + } + + public void setAffiliation(String affiliation) { + this.affiliation = affiliation; + } + + public String getOrcid() { + return orcid; + } + + public void setOrcid(String orcid) { + this.orcid = orcid; + } +} diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/deposit/zenodo/ZenodoDeposit.java b/dmp-backend/web/src/main/java/eu/eudat/models/deposit/zenodo/ZenodoDeposit.java new file mode 100644 index 000000000..c80a167c9 --- /dev/null +++ b/dmp-backend/web/src/main/java/eu/eudat/models/deposit/zenodo/ZenodoDeposit.java @@ -0,0 +1,19 @@ +package eu.eudat.models.deposit.zenodo; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; + +@JsonIgnoreProperties(ignoreUnknown = true) +@JsonInclude(JsonInclude.Include.NON_NULL) +public class ZenodoDeposit { + + private ZenodoDepositMetadata metadata; + + public ZenodoDepositMetadata getMetadata() { + return metadata; + } + + public void setMetadata(ZenodoDepositMetadata metadata) { + this.metadata = metadata; + } +} diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/deposit/zenodo/ZenodoDepositMetadata.java b/dmp-backend/web/src/main/java/eu/eudat/models/deposit/zenodo/ZenodoDepositMetadata.java new file mode 100644 index 000000000..014239f69 --- /dev/null +++ b/dmp-backend/web/src/main/java/eu/eudat/models/deposit/zenodo/ZenodoDepositMetadata.java @@ -0,0 +1,159 @@ +package eu.eudat.models.deposit.zenodo; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; + +import java.time.Instant; +import java.util.List; + +@JsonIgnoreProperties(ignoreUnknown = true) +@JsonInclude(JsonInclude.Include.NON_NULL) +public class ZenodoDepositMetadata { + + private String title; + + @JsonProperty("upload_type") + private String uploadType; + + @JsonProperty("publication_type") + private String publicationType; + + private String description; + + private String version; + + private List communities; + + @JsonProperty("access_right") + private ZenodoAccessRight accessRight; + + @JsonProperty("access_conditions") + private String accessConditions; + + @JsonProperty("embargo_date") + private String embargoDate; + + private String license; + + @JsonProperty("related_identifiers") + private List relatedIdentifiers; + + private List contributors; + + private List grants; + + private List creators; + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getUploadType() { + return uploadType; + } + + public void setUploadType(String uploadType) { + this.uploadType = uploadType; + } + + public String getPublicationType() { + return publicationType; + } + + public void setPublicationType(String publicationType) { + this.publicationType = publicationType; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getVersion() { + return version; + } + + public void setVersion(String version) { + this.version = version; + } + + public List getCommunities() { + return communities; + } + + public void setCommunities(List communities) { + this.communities = communities; + } + + public ZenodoAccessRight getAccessRight() { + return accessRight; + } + + public void setAccessRight(ZenodoAccessRight accessRight) { + this.accessRight = accessRight; + } + + public String getAccessConditions() { + return accessConditions; + } + + public void setAccessConditions(String accessConditions) { + this.accessConditions = accessConditions; + } + + public String getEmbargoDate() { + return embargoDate; + } + + public void setEmbargoDate(String embargoDate) { + this.embargoDate = embargoDate; + } + + public String getLicense() { + return license; + } + + public void setLicense(String license) { + this.license = license; + } + + public List getRelatedIdentifiers() { + return relatedIdentifiers; + } + + public void setRelatedIdentifiers(List relatedIdentifiers) { + this.relatedIdentifiers = relatedIdentifiers; + } + + public List getContributors() { + return contributors; + } + + public void setContributors(List contributors) { + this.contributors = contributors; + } + + public List getGrants() { + return grants; + } + + public void setGrants(List grants) { + this.grants = grants; + } + + public List getCreators() { + return creators; + } + + public void setCreators(List creators) { + this.creators = creators; + } +} diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/deposit/zenodo/ZenodoGrant.java b/dmp-backend/web/src/main/java/eu/eudat/models/deposit/zenodo/ZenodoGrant.java new file mode 100644 index 000000000..292322a30 --- /dev/null +++ b/dmp-backend/web/src/main/java/eu/eudat/models/deposit/zenodo/ZenodoGrant.java @@ -0,0 +1,18 @@ +package eu.eudat.models.deposit.zenodo; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; + +@JsonIgnoreProperties(ignoreUnknown = true) +@JsonInclude(JsonInclude.Include.NON_NULL) +public class ZenodoGrant { + private String id; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } +} diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/deposit/zenodo/ZenodoRelator.java b/dmp-backend/web/src/main/java/eu/eudat/models/deposit/zenodo/ZenodoRelator.java new file mode 100644 index 000000000..e5389602e --- /dev/null +++ b/dmp-backend/web/src/main/java/eu/eudat/models/deposit/zenodo/ZenodoRelator.java @@ -0,0 +1,28 @@ +package eu.eudat.models.deposit.zenodo; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; + +@JsonIgnoreProperties(ignoreUnknown = true) +@JsonInclude(JsonInclude.Include.NON_NULL) +public class ZenodoRelator { + + private String identifier; + private String relation; + + public String getIdentifier() { + return identifier; + } + + public void setIdentifier(String identifier) { + this.identifier = identifier; + } + + public String getRelation() { + return relation; + } + + public void setRelation(String relation) { + this.relation = relation; + } +} diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/deposit/zenodo/mapper/DMPToZenodoMapper.java b/dmp-backend/web/src/main/java/eu/eudat/models/deposit/zenodo/mapper/DMPToZenodoMapper.java new file mode 100644 index 000000000..f4a399f49 --- /dev/null +++ b/dmp-backend/web/src/main/java/eu/eudat/models/deposit/zenodo/mapper/DMPToZenodoMapper.java @@ -0,0 +1,115 @@ +package eu.eudat.models.deposit.zenodo.mapper; + +import eu.eudat.data.entities.DMP; +import eu.eudat.data.entities.Organisation; +import eu.eudat.data.entities.UserDMP; +import eu.eudat.logic.proxy.config.DOIFunder; +import eu.eudat.logic.proxy.config.configloaders.ConfigLoader; +import eu.eudat.models.deposit.zenodo.*; +import org.springframework.core.env.Environment; + +import java.time.Instant; +import java.util.*; +import java.util.stream.Collectors; + +public class DMPToZenodoMapper { + + public static ZenodoDeposit fromDMP(DMP dmp, Environment environment, ConfigLoader configLoader) { + Map extraProperties = dmp.getExtraProperties() != null ? new org.json.JSONObject(dmp.getExtraProperties()).toMap() : new HashMap<>(); + ZenodoDeposit deposit = new ZenodoDeposit(); + deposit.setMetadata(new ZenodoDepositMetadata()); + deposit.getMetadata().setTitle(dmp.getLabel()); + deposit.getMetadata().setUploadType("publication"); + deposit.getMetadata().setPublicationType("datamanagementplan"); + deposit.getMetadata().setDescription((dmp.getDescription() != null && !dmp.getDescription().isEmpty() ? dmp.getDescription() : "

")); + deposit.getMetadata().setVersion(dmp.getVersion().toString()); + ZenodoComunity community = new ZenodoComunity(); + community.setIdentifier(environment.getProperty("zenodo.community")); + deposit.getMetadata().setCommunities(Collections.singletonList(community)); + if (extraProperties.get("visible") == null) { + deposit.getMetadata().setAccessRight(ZenodoAccessRight.RESTRICTED); + deposit.getMetadata().setAccessConditions(""); + } else { + if (((Boolean) extraProperties.get("visible"))) { + Instant publicationDate = Instant.parse(extraProperties.get("publicDate").toString()); + if (publicationDate.isBefore(Instant.now())) { + deposit.getMetadata().setAccessRight(ZenodoAccessRight.OPEN); + } else { + deposit.getMetadata().setAccessRight(ZenodoAccessRight.EMBARGOED); + deposit.getMetadata().setEmbargoDate(publicationDate.toString()); + } + + if (extraProperties.get("license") != null) { + deposit.getMetadata().setLicense(((Map) extraProperties.get("license")).get("pid").toString()); + } + } else { + deposit.getMetadata().setAccessRight(ZenodoAccessRight.RESTRICTED); + deposit.getMetadata().setAccessConditions(""); + } + } + if (dmp.isPublic()) { + ZenodoRelator relator = new ZenodoRelator(); + relator.setIdentifier((environment.getProperty("dmp.domain") + "/external/zenodo/" + dmp.getId().toString())); + relator.setRelation("isIdenticalTo"); + deposit.getMetadata().setRelatedIdentifiers(Collections.singletonList(relator)); + } + deposit.getMetadata().setContributors(new LinkedList<>()); + List contributors = dmp.getUsers().stream().map(userDMP -> { + ZenodoContributor contributor = new ZenodoContributor(); + contributor.setName(userDMP.getUser().getName()); + contributor.setType("ProjectMember"); + if (dmp.getOrganisations() != null && !dmp.getOrganisations().isEmpty()) { + contributor.setAffiliation(dmp.getOrganisations() + .stream().map(Organisation::getLabel).collect(Collectors.joining(", "))); + } else { + contributor.setAffiliation(environment.getProperty("zenodo.affiliation")); + } + return contributor; + }).collect(Collectors.toList()); + + List researchers = dmp.getResearchers().stream().map(researcher -> { + ZenodoContributor contributor = new ZenodoContributor(); + contributor.setName(researcher.getLabel()); + contributor.setType("Researcher"); + String referenceHead = researcher.getReference().split(":")[0]; + String referenceTail = researcher.getReference().replace(referenceHead + ":", ""); + contributor.setAffiliation(referenceHead); + if (referenceHead.equalsIgnoreCase("ORCID")) { + contributor.setOrcid(referenceTail); + } + return contributor; + }).collect(Collectors.toList()); + + deposit.getMetadata().getContributors().addAll(contributors); + deposit.getMetadata().getContributors().addAll(researchers); + + if (dmp.getGrant().getReference() == null) { + dmp.getGrant().setReference("dmp:" + dmp.getGrant().getId()); + } + String grantReferenceHead = dmp.getGrant().getReference().split(":")[0]; + if (grantReferenceHead.equals("openaire")) { + String grantReferenceTail = dmp.getGrant().getReference().split(":")[3]; + DOIFunder doiFunder = configLoader.getDOIFunders().stream() + .filter(doiFunder1 -> dmp.getGrant().getFunder().getLabel().contains(doiFunder1.getFunder()) || doiFunder1.getFunder().contains(dmp.getGrant().getFunder().getLabel())) + .findFirst().orElse(null); + if (doiFunder != null) { + String finalId = doiFunder.getDOI() + "::" + grantReferenceTail; + ZenodoGrant grant = new ZenodoGrant(); + grant.setId(finalId); + deposit.getMetadata().setGrants(Collections.singletonList(grant)); + } + } + ZenodoContributor creator = new ZenodoContributor(); + creator.setName(dmp.getUsers().stream().filter(userDMP -> userDMP.getRole().equals(UserDMP.UserDMPRoles.OWNER.getValue())).findFirst().get().getUser().getName()); + if (dmp.getOrganisations() != null && !dmp.getOrganisations().isEmpty()) { + creator.setAffiliation(dmp.getOrganisations() + .stream().map(Organisation::getLabel).collect(Collectors.joining(", "))); + } else { + creator.setAffiliation(environment.getProperty("zenodo.affiliation")); + } + deposit.getMetadata().setCreators(Collections.singletonList(creator)); + + return deposit; + } +} + From df061051a34c4ed26f302cb31e50bc25a72587c7 Mon Sep 17 00:00:00 2001 From: George Kalampokis Date: Tue, 12 Apr 2022 12:06:14 +0300 Subject: [PATCH 28/37] Remove http logger configurations (unused) --- .../web/src/main/resources/config/application-devel.yml | 4 ---- dmp-backend/web/src/main/resources/config/application.yml | 5 ----- 2 files changed, 9 deletions(-) diff --git a/dmp-backend/web/src/main/resources/config/application-devel.yml b/dmp-backend/web/src/main/resources/config/application-devel.yml index 354385426..d6e5759ec 100644 --- a/dmp-backend/web/src/main/resources/config/application-devel.yml +++ b/dmp-backend/web/src/main/resources/config/application-devel.yml @@ -13,10 +13,6 @@ elasticsearch: host: localhost port: 9200 -####################ELK OVERRIDES CONFIGURATIONS########## -http-logger: - server-address: http://localhost:31311 - ####################PDF OVERRIDES CONFIGURATIONS########## pdf: converter: diff --git a/dmp-backend/web/src/main/resources/config/application.yml b/dmp-backend/web/src/main/resources/config/application.yml index 4c35e4cd4..7f9ed636e 100644 --- a/dmp-backend/web/src/main/resources/config/application.yml +++ b/dmp-backend/web/src/main/resources/config/application.yml @@ -169,11 +169,6 @@ project: grant: name: Grant -#############HTTP LOGGER DELAY CONFIGURATIONS######### -http-logger: - initial-delay: 0 - delay: 10 - ##########################PERISTENCE########################################## #############GENERIC DATASOURCE CONFIGURATIONS######### database: From 65575048fe19cdca06dae03057ded99d528f28cb Mon Sep 17 00:00:00 2001 From: George Kalampokis Date: Tue, 12 Apr 2022 16:39:05 +0300 Subject: [PATCH 29/37] Remove unused maven depedencies --- .../eudat/data/dao/entities/GrantDaoImpl.java | 1 - dmp-backend/pom.xml | 163 ++++-------------- .../queryable/collector/ProjectionField.java | 5 +- .../B2Access/B2AccessCustomProviderImpl.java | 5 +- 4 files changed, 41 insertions(+), 133 deletions(-) diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/GrantDaoImpl.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/GrantDaoImpl.java index 84674491b..90cc0fa67 100644 --- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/GrantDaoImpl.java +++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/GrantDaoImpl.java @@ -11,7 +11,6 @@ import eu.eudat.types.grant.GrantStateType; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Component; -import schemasMicrosoftComOfficeOffice.LeftDocument; import javax.persistence.criteria.JoinType; import java.util.Date; diff --git a/dmp-backend/pom.xml b/dmp-backend/pom.xml index 16f74c1c1..60199781b 100644 --- a/dmp-backend/pom.xml +++ b/dmp-backend/pom.xml @@ -46,8 +46,12 @@ 1.2.3 - + + 4.0.0 + 2.12.3 + 7.6.2 + 2.3.1 @@ -57,6 +61,7 @@ json 20160810 + org.springframework spring-context-support @@ -67,68 +72,40 @@ spring-boot-starter-data-jpa - - - org.elasticsearch - elasticsearch - 7.7.0 - - - org.apache.httpcomponents - httpclient - - - org.apache.httpcomponents - httpcore - - - org.apache.httpcomponents - httpcore-nio - - - - - - org.apache.httpcomponents - httpclient - 4.5.12 - - - - org.apache.httpcomponents - httpcore-nio - 4.4.13 - - - - org.apache.httpcomponents - httpcore - 4.4.13 - - - - org.elasticsearch.client - elasticsearch-rest-high-level-client - 7.6.0 - - - org.hibernate - hibernate-core - ${hibernate.version} - - org.hibernate hibernate-c3p0 ${hibernate.version} + + + + org.elasticsearch + elasticsearch + ${elasticsearch.version} + + + + org.elasticsearch.client + elasticsearch-rest-high-level-client + ${elasticsearch.version} + + + + org.elasticsearch.client + transport + ${elasticsearch.version} + + + com.google.api-client google-api-client 1.23.0 + com.jayway.jsonpath @@ -136,33 +113,19 @@ 2.4.0 - - - - com.fasterxml.jackson.dataformat - jackson-dataformat-xml - 2.12.3 - - - com.fasterxml.jackson.core jackson-core - 2.12.3 + ${jackson.version} com.fasterxml.jackson.core jackson-databind - 2.12.3 + ${jackson.version} - - - - - org.apache.commons @@ -173,13 +136,13 @@ org.apache.poi poi-ooxml - 4.0.0 + ${apache.poi.version} org.apache.poi poi - 4.0.0 + ${apache.poi.version} @@ -194,24 +157,14 @@ jsoup 1.14.3 - - - fr.opensagres.xdocreport - org.apache.poi.xwpf.converter.pdf - 1.0.6 - + + fr.opensagres.xdocreport org.apache.poi.xwpf.converter.core 1.0.6 - - - fr.opensagres.xdocreport - fr.opensagres.xdocreport.itext.extension - 2.0.1 - commons-io @@ -219,28 +172,11 @@ 2.1 - - - - org.elasticsearch.client - transport - 7.6.0 - - - - javax.xml.bind jaxb-api - 2.3.1 + ${jaxb.version} @@ -254,7 +190,7 @@ org.glassfish.jaxb jaxb-runtime - 2.3.1 + ${jaxb.version} @@ -272,32 +208,7 @@ 2.0.1.Final - - - - io.prometheus - simpleclient - 0.11.0 - - - - io.prometheus - simpleclient_hotspot - 0.11.0 - - - - io.prometheus - simpleclient_httpserver - 0.11.0 - - - - io.prometheus - simpleclient_pushgateway - 0.11.0 - - + io.micrometer diff --git a/dmp-backend/queryable/src/main/java/eu/eudat/queryable/collector/ProjectionField.java b/dmp-backend/queryable/src/main/java/eu/eudat/queryable/collector/ProjectionField.java index d76e33c0c..0a4d2f80a 100644 --- a/dmp-backend/queryable/src/main/java/eu/eudat/queryable/collector/ProjectionField.java +++ b/dmp-backend/queryable/src/main/java/eu/eudat/queryable/collector/ProjectionField.java @@ -1,7 +1,5 @@ package eu.eudat.queryable.collector; -import com.google.common.collect.Lists; - import javax.persistence.Tuple; import java.util.*; import java.util.stream.Collectors; @@ -68,7 +66,8 @@ public class ProjectionField { list.add(current.parent.key); current = current.parent; } - return String.join(".", Lists.reverse(list)); + Collections.reverse(list); + return String.join(".", list); } private Object createObject(List tuples, String field) { diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/security/customproviders/B2Access/B2AccessCustomProviderImpl.java b/dmp-backend/web/src/main/java/eu/eudat/logic/security/customproviders/B2Access/B2AccessCustomProviderImpl.java index c986edb01..7bdda1fc6 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/security/customproviders/B2Access/B2AccessCustomProviderImpl.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/security/customproviders/B2Access/B2AccessCustomProviderImpl.java @@ -1,6 +1,5 @@ package eu.eudat.logic.security.customproviders.B2Access; -import com.google.api.client.repackaged.org.apache.commons.codec.binary.Base64; import eu.eudat.logic.security.validators.b2access.helpers.B2AccessResponseToken; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.env.Environment; @@ -14,6 +13,7 @@ import org.springframework.util.MultiValueMap; import org.springframework.web.client.RestTemplate; import java.nio.charset.Charset; +import java.util.Base64; import java.util.Map; @Component("b2AccessCustomProvider") @@ -60,8 +60,7 @@ public class B2AccessCustomProviderImpl implements B2AccessCustomProvider { private HttpHeaders createBasicAuthHeaders(String username, String password) { return new HttpHeaders() {{ String auth = username + ":" + password; - byte[] encodedAuth = Base64.encodeBase64( - auth.getBytes(Charset.forName("US-ASCII"))); + byte[] encodedAuth = Base64.getEncoder().encode(auth.getBytes(Charset.forName("US-ASCII"))); String authHeader = "Basic " + new String(encodedAuth); set("Authorization", authHeader); }}; From 9eec5daea1a4302e6d90656eb896aac9e9fa39a2 Mon Sep 17 00:00:00 2001 From: George Kalampokis Date: Fri, 15 Apr 2022 13:08:36 +0300 Subject: [PATCH 30/37] Update conf files --- .../web/src/main/resources/config/application-devel.yml | 8 +++++++- .../src/main/resources/config/application-production.yml | 6 ++++++ .../src/main/resources/config/application-staging.yml | 9 +++++++++ .../web/src/main/resources/config/application.yml | 2 +- 4 files changed, 23 insertions(+), 2 deletions(-) diff --git a/dmp-backend/web/src/main/resources/config/application-devel.yml b/dmp-backend/web/src/main/resources/config/application-devel.yml index d6e5759ec..8ca3a884a 100644 --- a/dmp-backend/web/src/main/resources/config/application-devel.yml +++ b/dmp-backend/web/src/main/resources/config/application-devel.yml @@ -52,4 +52,10 @@ language: #############PROMETHEUS######### endpoints: prometheus: - sensitive: false \ No newline at end of file + sensitive: false + +#############TEMP######### +temp: + temp: ${TEMP_STORAGE:} +file: + storage: ${FILE_STORAGE:} \ No newline at end of file diff --git a/dmp-backend/web/src/main/resources/config/application-production.yml b/dmp-backend/web/src/main/resources/config/application-production.yml index 01ddeaf21..c86cb0a74 100644 --- a/dmp-backend/web/src/main/resources/config/application-production.yml +++ b/dmp-backend/web/src/main/resources/config/application-production.yml @@ -24,6 +24,12 @@ spring: testOnBorrow: true testOnConnect: false testWhileIdle: false + mail: + properties: + mail: + smtp: + starttls: + enable: true #############CONTACT EMAIL CONFIGURATIONS######### contact_email.mail= diff --git a/dmp-backend/web/src/main/resources/config/application-staging.yml b/dmp-backend/web/src/main/resources/config/application-staging.yml index 2df177074..023f5704b 100644 --- a/dmp-backend/web/src/main/resources/config/application-staging.yml +++ b/dmp-backend/web/src/main/resources/config/application-staging.yml @@ -6,6 +6,15 @@ elasticsearch: host: tags-elastic-search port: 9200 +####################SPRING MAIL CONFIGURATIONS################# +spring: + mail: + properties: + mail: + smtp: + starttls: + enable: true + ####################PDF OVERRIDES CONFIGURATIONS########## pdf: converter: diff --git a/dmp-backend/web/src/main/resources/config/application.yml b/dmp-backend/web/src/main/resources/config/application.yml index 7f9ed636e..e21fd971e 100644 --- a/dmp-backend/web/src/main/resources/config/application.yml +++ b/dmp-backend/web/src/main/resources/config/application.yml @@ -51,7 +51,7 @@ admin: spring: mail: default-encoding: UTF-8 - host: hermes.local.cite.gr + host: ${SPRING_MAIL_HOST:} username: ${SPRING_MAIL_USER:} password: ${SPRING_MAIL_PASS:} port: 25 From 39cd57e4a93503ae435084a14b0214056618944f Mon Sep 17 00:00:00 2001 From: George Kalampokis Date: Fri, 15 Apr 2022 14:01:46 +0300 Subject: [PATCH 31/37] Improve Oauth2 Dialog --- .../src/app/ui/auth/login/login.component.ts | 5 +- .../oauth2-dialog/oauth2-dialog.component.ts | 16 +++---- .../service/oauth2-dialog.service.ts | 28 ++++------- .../src/environments/environment.prod.ts | 40 ---------------- .../src/environments/environment.staging.ts | 40 ---------------- dmp-frontend/src/environments/environment.ts | 47 +------------------ 6 files changed, 18 insertions(+), 158 deletions(-) delete mode 100644 dmp-frontend/src/environments/environment.prod.ts delete mode 100644 dmp-frontend/src/environments/environment.staging.ts diff --git a/dmp-frontend/src/app/ui/auth/login/login.component.ts b/dmp-frontend/src/app/ui/auth/login/login.component.ts index e5b243627..9e348683b 100644 --- a/dmp-frontend/src/app/ui/auth/login/login.component.ts +++ b/dmp-frontend/src/app/ui/auth/login/login.component.ts @@ -6,7 +6,6 @@ import { AuthService } from '@app/core/services/auth/auth.service'; import { ConfigurableProvidersService } from '@app/ui/auth/login/utilities/configurableProviders.service'; import { LoginService } from '@app/ui/auth/login/utilities/login.service'; import { BaseComponent } from '@common/base/base.component'; -import { environment } from 'environments/environment'; import { takeUntil } from 'rxjs/operators'; import { ConfigurationService } from '@app/core/services/configuration/configuration.service'; import { MergeLoginService } from './utilities/merge-login.service'; @@ -250,11 +249,11 @@ export class LoginComponent extends BaseComponent implements OnInit, AfterViewIn client_id: this.configurationService.loginProviders.googleConfiguration.clientId, scope: 'profile email' }); - this.attachGoogleSignΙn(document.getElementById('googleSignInButton')); + this.attachGoogleSignIn(document.getElementById('googleSignInButton')); }); } - public attachGoogleSignΙn(element) { + public attachGoogleSignIn(element) { if (!element) { return; } this.auth2.attachClickHandler(element, {}, (googleUser) => { diff --git a/dmp-frontend/src/app/ui/misc/oauth2-dialog/oauth2-dialog.component.ts b/dmp-frontend/src/app/ui/misc/oauth2-dialog/oauth2-dialog.component.ts index 4457a9a48..0bb7a3a70 100644 --- a/dmp-frontend/src/app/ui/misc/oauth2-dialog/oauth2-dialog.component.ts +++ b/dmp-frontend/src/app/ui/misc/oauth2-dialog/oauth2-dialog.component.ts @@ -33,15 +33,13 @@ export class Oauth2DialogComponent extends BaseComponent implements OnInit{ } private sendCode(params: Params) { - if (params['code']) { - localStorage.setItem('oauthCode', params['code']); - } - if (params['state']) { - localStorage.setItem('oauthState', params['state']); - } - if (params['oauth_token'] && params['oauth_verifier']) { - localStorage.setItem('oauthObject', JSON.stringify({oauth_token: params['oauth_token'], oauth_verifier: params['oauth_verifier']})); - } + const oauthObject = { + oauthCode: params['code'] ? params['code'] : undefined, + oauthState: params['state'] ? params['state'] : undefined, + oauthToken: params['oauth_token'] ? params['oath_token'] : undefined, + oauthVerifier: params['oauth_verifier'] ? params['oauth_verifier'] : undefined + }; + localStorage.setItem('arglogRes', JSON.stringify({response: { date: new Date(), data: oauthObject }})); window.close(); } diff --git a/dmp-frontend/src/app/ui/misc/oauth2-dialog/service/oauth2-dialog.service.ts b/dmp-frontend/src/app/ui/misc/oauth2-dialog/service/oauth2-dialog.service.ts index 8b556b63d..611c8dd6d 100644 --- a/dmp-frontend/src/app/ui/misc/oauth2-dialog/service/oauth2-dialog.service.ts +++ b/dmp-frontend/src/app/ui/misc/oauth2-dialog/service/oauth2-dialog.service.ts @@ -14,7 +14,7 @@ export class Oauth2DialogService extends BaseService{ super(); } - public registerCode(code: string) { + public registerCode(code: any) { this.code.next(code); } @@ -22,26 +22,14 @@ export class Oauth2DialogService extends BaseService{ const windows = window.open(this.configurationService.app + 'oauth2?url=' + encodeURIComponent(url) ,'', `height=500px,width=500px,top=${(window.screen.height / 2) - 200}px,left=${(window.screen.width / 2) - 200}px`); const sub = interval(300).pipe(takeUntil(this._destroyed)).subscribe(() => { if (windows.closed) { - let oauthCode; - let oauthState; - let oauthToken; - let oauthVerifier; - if (localStorage.getItem('oauthCode')) { - oauthCode = localStorage.getItem('oauthCode'); - localStorage.removeItem('oauthCode'); + if (localStorage.getItem('arglogRes')) { + const oauthResponse = JSON.parse(localStorage.getItem('arglogRes')); + localStorage.removeItem('arglogRes'); + const oauthObject = oauthResponse.response.data; + this.code.next(oauthObject); + this.code.next(undefined); } - if (localStorage.getItem('oauthState')) { - oauthState = localStorage.getItem('oauthState'); - localStorage.removeItem('oauthState'); - } - if (localStorage.getItem('oauthObject')) { - const oauthObject = JSON.parse(localStorage.getItem('oauthObject')); - localStorage.removeItem('oauthObject'); - oauthToken = oauthObject.oauth_token; - oauthVerifier = oauthObject.oauth_verifier; - } - this.code.next({oauthCode: oauthCode, oauthState: oauthState, oauthToken: oauthToken, oauthVerifier: oauthVerifier}); - this.code.next(undefined); + sub.unsubscribe(); } }); diff --git a/dmp-frontend/src/environments/environment.prod.ts b/dmp-frontend/src/environments/environment.prod.ts deleted file mode 100644 index 601551986..000000000 --- a/dmp-frontend/src/environments/environment.prod.ts +++ /dev/null @@ -1,40 +0,0 @@ -export const environment = { - production: true, - Server: 'https://devel.opendmp.eu/srv/api/', - App: 'https://devel.opendmp.eu/', - HelpService: { - Enabled: false, - Url: 'https://devel.opendmp.eu/content-service/', - }, - defaultCulture: 'en-US', - loginProviders: { - enabled: [1, 2, 3, 4, 5, 6], - facebookConfiguration: { clientId: '' }, - googleConfiguration: { clientId: '' }, - linkedInConfiguration: { - clientId: '', - oauthUrl: 'https://www.linkedin.com/oauth/v2/authorization', - redirectUri: 'http://localhost:4200/login/linkedin', - state: '' - }, - twitterConfiguration: { - clientId: '', - oauthUrl: 'https://api.twitter.com/oauth/authenticate' - }, - b2accessConfiguration: { - clientId: '', - oauthUrl: 'https://b2access-integration.fz-juelich.de:443/oauth2-as/oauth2-authz', - redirectUri: 'http://opendmp.eu/api/oauth/authorized/b2access', - state: '' - }, - orcidConfiguration: { - clientId: 'APP-766DI5LP8T75FC4R', - oauthUrl: 'https://sandbox.orcid.org/oauth/authorize', - redirectUri: 'http://opendmp.eu/api/oauth/authorized/orcid' - } - }, - logging: { - enabled: false, - logLevels: ["debug", "info", "warning", "error"] - }, -}; diff --git a/dmp-frontend/src/environments/environment.staging.ts b/dmp-frontend/src/environments/environment.staging.ts deleted file mode 100644 index 63cfd85e5..000000000 --- a/dmp-frontend/src/environments/environment.staging.ts +++ /dev/null @@ -1,40 +0,0 @@ -export const environment = { - production: true, - Server: 'https://devel.opendmp.eu/srv/api/', - App: 'https://devel.opendmp.eu/', - HelpService: { - Enabled: false, - Url: 'https://devel.opendmp.eu/content-service/', - }, - defaultCulture: 'en-US', - loginProviders: { - enabled: [1, 2, 3, 4, 5, 6], - facebookConfiguration: { clientId: '' }, - googleConfiguration: { clientId: '596924546661-83nhl986pnrpug5h624i5kptuao03dcd.apps.googleusercontent.com' }, - linkedInConfiguration: { - clientId: '', - oauthUrl: 'https://www.linkedin.com/oauth/v2/authorization', - redirectUri: 'https://devel.opendmp.eu/login/linkedin', - state: '' - }, - twitterConfiguration: { - clientId: '', - oauthUrl: 'https://api.twitter.com/oauth/authenticate' - }, - b2accessConfiguration: { - clientId: '', - oauthUrl: 'https://b2access-integration.fz-juelich.de:443/oauth2-as/oauth2-authz', - redirectUri: 'http://devel.opendmp.eu/api/oauth/authorized/b2access', - state: '' - }, - orcidConfiguration: { - clientId: '', - oauthUrl: 'https://sandbox.orcid.org/oauth/authorize', - redirectUri: 'http://opendmp.eu/api/oauth/authorized/orcid' - } - }, - logging: { - enabled: false, - logLevels: ["debug", "info", "warning", "error"] - }, -}; diff --git a/dmp-frontend/src/environments/environment.ts b/dmp-frontend/src/environments/environment.ts index ab3e5f23b..46808e456 100644 --- a/dmp-frontend/src/environments/environment.ts +++ b/dmp-frontend/src/environments/environment.ts @@ -1,48 +1,3 @@ export const environment = { - production: false, - Server: 'http://localhost:8080/api/', - App: 'http://localhost:4200/', - HelpService: { - Enabled: false, - Url: 'localhost:5000/', - }, - defaultCulture: 'en-US', - loginProviders: { - enabled: [1, 2, 3, 4, 5, 6, 7, 8], - facebookConfiguration: { clientId: '' }, - googleConfiguration: { clientId: '' }, - linkedInConfiguration: { - clientId: '', - oauthUrl: 'https://www.linkedin.com/oauth/v2/authorization', - redirectUri: 'http://localhost:4200/login/linkedin', - state: '987654321' - }, - twitterConfiguration: { - clientId: '', - oauthUrl: 'https://api.twitter.com/oauth/authenticate' - }, - b2accessConfiguration: { - clientId: '', - oauthUrl: 'https://b2access-integration.fz-juelich.de:443/oauth2-as/oauth2-authz', - redirectUri: 'http://localhost:4200/api/oauth/authorized/b2access', - state: '' - }, - orcidConfiguration: { - clientId: 'APP-766DI5LP8T75FC4R', - oauthUrl: 'https://orcid.org/oauth/authorize', - redirectUri: 'http://localhost:4200/login/external/orcid' - }, - openAireConfiguration: { - clientId: '', - oauthUrl: '', - redirectUri: '', - state: '987654321' - } - }, - logging: { - enabled: true, - logLevels: ["debug", "info", "warning", "error"] - }, - lockInterval: 60000, - guideAssets: "assets/images/guide" + production: false }; From a9d6ab89f51f1250791bc4b2d691ee2cae3f3cab Mon Sep 17 00:00:00 2001 From: George Kalampokis Date: Mon, 18 Apr 2022 18:26:20 +0300 Subject: [PATCH 32/37] Update and clean maven depedencies (possible breaking changes) --- .../data/dao/entities/DatasetDaoImpl.java | 4 + dmp-backend/pom.xml | 122 +++-- dmp-backend/web/pom.xml | 31 +- .../eu/eudat/controllers/FileController.java | 74 ++- .../ControllerErrorHandler.java | 3 +- .../ControllerUnauthorisedHandler.java | 3 +- .../managers/DataManagementPlanManager.java | 29 +- .../eudat/logic/managers/DatasetManager.java | 121 ++--- .../eu/eudat/logic/managers/UserManager.java | 11 +- .../mapper/prefilling/PrefillingMapper.java | 32 +- .../google/GoogleTokenValidator.java | 8 +- .../AbstractAuthenticationService.java | 17 +- .../VerifiedUserAuthenticationService.java | 12 +- .../services/utilities/MailServiceImpl.java | 15 +- .../services/utilities/UtilitiesService.java | 3 + .../utilities/UtilitiesServiceImpl.java | 8 + .../utilities/documents/pdf/PDFUtils.java | 4 +- .../utilities/documents/word/WordBuilder.java | 73 +-- .../documents/xml/ExportXmlBuilder.java | 3 - .../notification/NotificationScheduleJob.java | 22 +- .../commons/datafield/UploadData.java | 6 +- .../models/data/dmp/DataManagementPlan.java | 221 ++++---- .../dmp/DataManagementPlanEditorModel.java | 93 ++-- .../data/rda/ContactRDAExportModel.java | 44 -- .../DatasetDistributionRDAExportModel.java | 93 ---- .../rda/DatasetMetadataRDAExportModel.java | 47 -- .../data/rda/DatasetRDAExportModel.java | 474 ------------------ ...tasetSecurityAndPrivacyRDAExportModel.java | 29 -- ...atasetTechnicalResourceRDAExportModel.java | 28 -- .../rda/DmpContributorRDAExportModel.java | 52 -- .../data/rda/DmpCostRDAExportModel.java | 36 -- .../models/data/rda/DmpRDAExportModel.java | 164 ------ .../data/rda/FundingRDAExportModel.java | 43 -- .../models/data/rda/HostRDAExportModel.java | 86 ---- .../models/data/rda/IdRDAExportModel.java | 25 - .../data/rda/LicenseRDAExportModel.java | 20 - .../data/rda/ProjectRDAExportModel.java | 54 -- .../eudat/models/data/rda/RDAExportModel.java | 25 - .../eu/eudat/models/data/rda/RdaField.java | 36 -- .../user/components/datasetprofile/Field.java | 14 +- .../models/rda/mapper/CostRDAMapper.java | 33 +- .../models/rda/mapper/DatasetRDAMapper.java | 4 +- .../eudat/models/rda/mapper/DmpRDAMapper.java | 20 +- 43 files changed, 531 insertions(+), 1711 deletions(-) delete mode 100644 dmp-backend/web/src/main/java/eu/eudat/models/data/rda/ContactRDAExportModel.java delete mode 100644 dmp-backend/web/src/main/java/eu/eudat/models/data/rda/DatasetDistributionRDAExportModel.java delete mode 100644 dmp-backend/web/src/main/java/eu/eudat/models/data/rda/DatasetMetadataRDAExportModel.java delete mode 100644 dmp-backend/web/src/main/java/eu/eudat/models/data/rda/DatasetRDAExportModel.java delete mode 100644 dmp-backend/web/src/main/java/eu/eudat/models/data/rda/DatasetSecurityAndPrivacyRDAExportModel.java delete mode 100644 dmp-backend/web/src/main/java/eu/eudat/models/data/rda/DatasetTechnicalResourceRDAExportModel.java delete mode 100644 dmp-backend/web/src/main/java/eu/eudat/models/data/rda/DmpContributorRDAExportModel.java delete mode 100644 dmp-backend/web/src/main/java/eu/eudat/models/data/rda/DmpCostRDAExportModel.java delete mode 100644 dmp-backend/web/src/main/java/eu/eudat/models/data/rda/DmpRDAExportModel.java delete mode 100644 dmp-backend/web/src/main/java/eu/eudat/models/data/rda/FundingRDAExportModel.java delete mode 100644 dmp-backend/web/src/main/java/eu/eudat/models/data/rda/HostRDAExportModel.java delete mode 100644 dmp-backend/web/src/main/java/eu/eudat/models/data/rda/IdRDAExportModel.java delete mode 100644 dmp-backend/web/src/main/java/eu/eudat/models/data/rda/LicenseRDAExportModel.java delete mode 100644 dmp-backend/web/src/main/java/eu/eudat/models/data/rda/ProjectRDAExportModel.java delete mode 100644 dmp-backend/web/src/main/java/eu/eudat/models/data/rda/RDAExportModel.java delete mode 100644 dmp-backend/web/src/main/java/eu/eudat/models/data/rda/RdaField.java diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DatasetDaoImpl.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DatasetDaoImpl.java index 5df4bdf88..aecb1655c 100644 --- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DatasetDaoImpl.java +++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DatasetDaoImpl.java @@ -11,6 +11,8 @@ import eu.eudat.queryable.QueryableList; import eu.eudat.queryable.types.FieldSelectionType; import eu.eudat.queryable.types.SelectionField; import eu.eudat.types.grant.GrantStateType; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Component; @@ -25,6 +27,7 @@ import java.util.concurrent.CompletableFuture; @Component("datasetDao") public class DatasetDaoImpl extends DatabaseAccess implements DatasetDao { + private static final Logger logger = LoggerFactory.getLogger(DatasetDaoImpl.class); @Autowired public DatasetDaoImpl(DatabaseService databaseService) { super(databaseService); } @@ -99,6 +102,7 @@ public class DatasetDaoImpl extends DatabaseAccess implements DatasetDa @Override public Dataset createOrUpdate(Dataset item) { + logger.info("I'm Here " + item.getLabel()); return getDatabaseService().createOrUpdate(item, Dataset.class); } diff --git a/dmp-backend/pom.xml b/dmp-backend/pom.xml index 60199781b..d5c34d549 100644 --- a/dmp-backend/pom.xml +++ b/dmp-backend/pom.xml @@ -10,7 +10,7 @@ org.springframework.boot spring-boot-starter-parent - 2.5.2 + 2.6.6 @@ -27,46 +27,48 @@ 1.8 0.0.1-SNAPSHOT - 5.3.8 + - 5.3.10.RELEASE + - + - 5.5.3.Final + - 1.9 - 4.11 - 1.2.17 + + + 2.15.0 - 1.7.12 + - 1.2.3 + - 4.0.0 + 5.2.2 2.12.3 7.6.2 - 2.3.1 + 2.3.0 + 2.9.0 + 1.33.4 + 2.4.0 + 42.2.22 + 2.0.3.RELEASE + 1.0.2.RELEASE + 1.1.2.RELEASE + 3.12.0 - - - org.json - json - 20160810 - - + org.springframework.boot spring-boot-starter-data-jpa @@ -78,6 +80,13 @@ ${hibernate.version} + + + org.postgresql + postgresql + ${postgresql.version} + + @@ -92,10 +101,11 @@ ${elasticsearch.version} + - org.elasticsearch.client - transport - ${elasticsearch.version} + com.github.ben-manes.caffeine + caffeine + ${caffeine.version} @@ -103,14 +113,35 @@ com.google.api-client google-api-client - 1.23.0 + ${google.api.version} + + + + + org.springframework.social + spring-social-facebook + ${social.facebook.version} + + + + + org.springframework.social + spring-social-linkedin + ${social.linkedin.version} + + + + + org.springframework.social + spring-social-twitter + ${social.twitter.version} com.jayway.jsonpath json-path - 2.4.0 + ${json.path.version} @@ -126,12 +157,19 @@ ${jackson.version} + + com.fasterxml.jackson.core + jackson-annotations + ${jackson.version} + + org.apache.commons commons-lang3 - 3.5 + ${apache.commons.lang3.version} + org.apache.poi @@ -145,19 +183,6 @@ ${apache.poi.version} - - - org.apache.xmlgraphics - fop - 2.3 - - - - org.jsoup - jsoup - 1.14.3 - - @@ -167,11 +192,12 @@ - commons-io - commons-io - 2.1 + org.jsoup + jsoup + 1.14.3 + javax.xml.bind @@ -183,7 +209,7 @@ org.glassfish.jaxb jaxb-core - 2.3.0 + ${jaxb.version} @@ -195,12 +221,13 @@ - + + javax.validation @@ -213,7 +240,6 @@ io.micrometer micrometer-registry-prometheus - 1.7.1 org.springframework.boot diff --git a/dmp-backend/web/pom.xml b/dmp-backend/web/pom.xml index 6798b6022..3cbfbaff3 100644 --- a/dmp-backend/web/pom.xml +++ b/dmp-backend/web/pom.xml @@ -50,7 +50,6 @@ com.fasterxml.jackson.core jackson-annotations - 2.12.3 @@ -71,55 +70,45 @@ com.github.ben-manes.caffeine caffeine - 2.9.0 - + - - org.postgresql - postgresql - 42.2.22 - - - + - + + <!– linkedin Login –> org.springframework.social spring-social-linkedin - 1.0.2.RELEASE - + <!– tweeter login–> org.springframework.social spring-social-twitter - 1.1.2.RELEASE - - + --> + diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/FileController.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/FileController.java index a064145bc..ac3c01ccd 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/FileController.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/FileController.java @@ -1,6 +1,6 @@ package eu.eudat.controllers; -import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import eu.eudat.data.entities.FileUpload; @@ -12,14 +12,15 @@ import eu.eudat.logic.services.operations.DatabaseRepository; import eu.eudat.logic.utilities.documents.helpers.FileEnvelope; import eu.eudat.logic.utilities.json.JsonSearcher; import eu.eudat.models.HintedModelFactory; +import eu.eudat.models.data.components.commons.datafield.UploadData; import eu.eudat.models.data.datasetwizard.DatasetWizardModel; import eu.eudat.models.data.helpers.responses.ResponseItem; import eu.eudat.models.data.security.Principal; import eu.eudat.types.ApiMessageCode; import eu.eudat.types.Authorities; import org.apache.poi.util.IOUtils; -import org.json.JSONArray; -import org.json.JSONObject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.env.Environment; import org.springframework.http.HttpHeaders; @@ -32,25 +33,29 @@ import org.springframework.web.multipart.MultipartFile; import javax.transaction.Transactional; import java.io.*; import java.nio.file.Files; -import java.util.*; -import java.util.concurrent.atomic.AtomicBoolean; -import java.util.concurrent.atomic.AtomicReference; +import java.util.HashSet; +import java.util.NoSuchElementException; +import java.util.Set; +import java.util.UUID; import java.util.stream.Collectors; @RestController @CrossOrigin @RequestMapping(value = {"/api/file/"}) public class FileController { + private static final Logger logger = LoggerFactory.getLogger(FileController.class); private DatasetProfileManager datasetProfileManager; private final Environment environment; private DatabaseRepository databaseRepository; + private final ObjectMapper objectMapper; @Autowired public FileController(DatasetProfileManager datasetProfileManager, Environment environment, ApiContext apiContext) { this.datasetProfileManager = datasetProfileManager; this.environment = environment; this.databaseRepository = apiContext.getOperationsContext().getDatabaseRepository(); + this.objectMapper = apiContext.getUtilitiesService().getGenericObjectMapper(); } @RequestMapping(method = RequestMethod.POST, value = {"/upload"}) @@ -62,57 +67,48 @@ public class FileController { eu.eudat.models.data.admin.composite.DatasetProfile datasetprofile = this.datasetProfileManager.getDatasetProfile(datasetProfileId); - ObjectMapper mapper = new ObjectMapper(); - mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); - String json = mapper.writeValueAsString(datasetprofile.getSections());; - JsonNode propertiesJson = mapper.readTree(json); + String json = objectMapper.writeValueAsString(datasetprofile.getSections()); + JsonNode propertiesJson = objectMapper.readTree(json); Set fieldNodes = new HashSet<>(); fieldNodes.addAll(JsonSearcher.findNodes(propertiesJson, "id", fieldId, false)); // AtomicReference exceptionMessage = null; - AtomicBoolean acceptedFile = new AtomicBoolean(false); - fieldNodes.forEach(node -> { + Boolean acceptedFile = false; + for (JsonNode node : fieldNodes) { JsonNode data = node.get("data"); - if (data != null && !data.toString().equals("\"\"") && !data.toString().equals("null")) { - String stringValue = data.toString().replaceAll("=", ":"); - JSONObject dataObj = new JSONObject(stringValue); - Map dataMap = ((JSONObject) dataObj).toMap(); - if(dataMap.get("maxFileSizeInMB") != null && !dataMap.get("maxFileSizeInMB").toString().equals("\"\"") && !dataMap.get("maxFileSizeInMB").toString().equals("null")) { - if (file.getSize() <= Integer.parseInt(dataMap.get("maxFileSizeInMB").toString())*1048576) { - acceptedFile.set(true); + try { + UploadData uploadData = objectMapper.treeToValue(data, UploadData.class); + if (uploadData != null) { + if (uploadData.getMaxFileSizeInMB() != null) { + if (file.getSize() <= (uploadData.getMaxFileSizeInMB() * Math.pow(1024, 2))) { + acceptedFile = true; + } } -// else { -// exceptionMessage.set("The file is too large. Max file upload is " + dataMap.get("maxFileSizeInMB").toString() + " MB."); -// } - } - - if(acceptedFile.get() && data.get("types") != null && !data.get("types").toString().equals("\"\"") && !data.get("types").toString().equals("null")) { - acceptedFile.set(false); - - JSONArray types = new JSONArray(data.get("types").toString()); - - types.iterator().forEachRemaining(element -> { - Map typesMap = ((JSONObject) element).toMap(); - if(typesMap.get("value") != null && !typesMap.get("value").toString().equals("\"\"") && !typesMap.get("value").toString().equals("null")) { - if(file.getContentType().equals(typesMap.get("value").toString())) { - acceptedFile.set(true); + if (acceptedFile && uploadData.getTypes() != null && !uploadData.getTypes().isEmpty()) { + acceptedFile = false; + for (UploadData.Option option : uploadData.getTypes()) { + if (option.getValue() != null) { + if (file.getContentType().equals(option.getValue())) { + acceptedFile = true; + } } } - }); + } } + } catch (JsonProcessingException e) { + logger.error(e.getLocalizedMessage(), e); + } + } // if(!acceptedFile.get()) { // exceptionMessage.set("The file type is not accepted."); // } - } - }); - if(!acceptedFile.get()) { + if (!acceptedFile) { return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(new ResponseItem().status(ApiMessageCode.ERROR_MESSAGE).message("The uploaded file is too large or has an unaccepted type")); } File convFile = new File(this.environment.getProperty("temp.temp") + uuid); - convFile.createNewFile(); FileOutputStream fos = new FileOutputStream(convFile); fos.write(file.getBytes()); fos.close(); diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/controllerhandler/ControllerErrorHandler.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/controllerhandler/ControllerErrorHandler.java index 381f86972..c84f05cf2 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/controllerhandler/ControllerErrorHandler.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/controllerhandler/ControllerErrorHandler.java @@ -6,6 +6,7 @@ import eu.eudat.models.data.security.Principal; import eu.eudat.types.ApiMessageCode; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.core.annotation.Order; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; @@ -18,7 +19,7 @@ import javax.annotation.Priority; * Created by ikalyvas on 6/12/2018. */ @ControllerAdvice -@Priority(5) +@Order(5) public class ControllerErrorHandler { private static final Logger logger = LoggerFactory.getLogger(ControllerErrorHandler.class); diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/controllerhandler/ControllerUnauthorisedHandler.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/controllerhandler/ControllerUnauthorisedHandler.java index 63bf582cf..5eb6401f1 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/controllerhandler/ControllerUnauthorisedHandler.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/controllerhandler/ControllerUnauthorisedHandler.java @@ -4,6 +4,7 @@ import eu.eudat.exceptions.security.UnauthorisedException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.annotation.Order; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; @@ -16,7 +17,7 @@ import javax.annotation.Priority; * Created by ikalyvas on 6/12/2018. */ @ControllerAdvice -@Priority(4) +@Order(4) public class ControllerUnauthorisedHandler { private static final Logger logger = LoggerFactory.getLogger(ControllerUnauthorisedHandler.class); diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DataManagementPlanManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DataManagementPlanManager.java index 34cfadcd2..c5e9fd3e4 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DataManagementPlanManager.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DataManagementPlanManager.java @@ -65,7 +65,6 @@ import eu.eudat.types.MetricNames; import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.apache.poi.xwpf.usermodel.XWPFParagraph; import org.apache.poi.xwpf.usermodel.XWPFRun; -import org.json.JSONObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -97,21 +96,20 @@ import java.util.stream.Stream; @Component public class DataManagementPlanManager { private static final Logger logger = LoggerFactory.getLogger(DataManagementPlanManager.class); - private static final ObjectMapper objectMapper = new ObjectMapper(); - private final Map notificationPaths = Stream.of(new Object[][] { + private final Map notificationPaths = Stream.of(new Object[][]{ {NotificationType.DMP_MODIFIED, "/plans/edit"}, {NotificationType.DMP_PUBLISH, "/plans/publicEdit"}, {NotificationType.DMP_FINALISED, "/plans/edit"}, {NotificationType.DMP_MODIFIED_FINALISED, "/plans/edit"} }).collect(Collectors.toMap(data -> (NotificationType) data[0], data -> (String) data[1])); - private ApiContext apiContext; - private DatasetManager datasetManager; - private DatabaseRepository databaseRepository; - private Environment environment; - private RDAManager rdaManager; - private UserManager userManager; + private final ApiContext apiContext; + private final DatasetManager datasetManager; + private final DatabaseRepository databaseRepository; + private final Environment environment; + private final RDAManager rdaManager; + private final UserManager userManager; private final MetricsManager metricsManager; private final ConfigLoader configLoader; @@ -125,6 +123,7 @@ public class DataManagementPlanManager { this.userManager = userManager; this.metricsManager = metricsManager; this.configLoader = configLoader; + } /* @@ -318,7 +317,7 @@ public class DataManagementPlanManager { } else { dataManagementPlan.fromDataModelNoDatasets(dataManagementPlanEntity); } - Map dmpProperties = dataManagementPlanEntity.getDmpProperties() != null ? new org.json.JSONObject(dataManagementPlanEntity.getDmpProperties()).toMap() : null; + Map dmpProperties = dataManagementPlanEntity.getDmpProperties() != null ? apiContext.getUtilitiesService().getGenericObjectMapper().readValue(dataManagementPlanEntity.getDmpProperties(), LinkedHashMap.class) : null; if (dmpProperties != null && dataManagementPlan.getDynamicFields() != null) dataManagementPlan.getDynamicFields().forEach(item -> { @@ -1474,8 +1473,8 @@ public class DataManagementPlanManager { DatasetWizardModel datasetWizardModel = new DatasetWizardModel(); Map properties = new HashMap<>(); if (dataset.getProperties() != null) { - JSONObject jobject = new JSONObject(dataset.getProperties()); - properties = jobject.toMap(); + properties = apiContext.getUtilitiesService().getGenericObjectMapper().readValue(dataset.getProperties(), LinkedHashMap.class); + ; } PagedDatasetProfile pagedDatasetProfile = datasetManager.getPagedProfile(datasetWizardModel, dataset); visibilityRuleService.setProperties(properties); @@ -1763,9 +1762,9 @@ public class DataManagementPlanManager { UserInfo me = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(principal.getId()); dmp.setModified(new Date()); dmp.setCreator(me); - Map extraProperties = objectMapper.readValue(dmp.getExtraProperties(), HashMap.class); + Map extraProperties = apiContext.getUtilitiesService().getGenericObjectMapper().readValue(dmp.getExtraProperties(), HashMap.class); extraProperties.put("contact", me.getId().toString()); - dmp.setExtraProperties(objectMapper.writeValueAsString(extraProperties)); + dmp.setExtraProperties(apiContext.getUtilitiesService().getGenericObjectMapper().writeValueAsString(extraProperties)); dmp.setVersion(0); dmp.setStatus((short)0); dmp.setGroupId(UUID.randomUUID()); @@ -2043,7 +2042,7 @@ public class DataManagementPlanManager { headers.setContentType(MediaType.APPLICATION_JSON); ZenodoDeposit deposit = DMPToZenodoMapper.fromDMP(dmp, environment, configLoader); //if (Objects.requireNonNull(environment.getProperty("spring.profiles.active")).contains("devel")) { - String json = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(deposit); + String json = apiContext.getUtilitiesService().getGenericObjectMapper().writerWithDefaultPrettyPrinter().writeValueAsString(deposit); logger.info(json); //} HttpEntity request = new HttpEntity<>(deposit, headers); diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetManager.java index 871c59e3c..049f8ce54 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetManager.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetManager.java @@ -4,6 +4,8 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.type.CollectionType; +import com.fasterxml.jackson.databind.type.TypeFactory; import eu.eudat.data.dao.criteria.*; import eu.eudat.data.dao.entities.DataRepositoryDao; import eu.eudat.data.dao.entities.DatasetDao; @@ -56,8 +58,6 @@ import org.apache.poi.xwpf.extractor.XWPFWordExtractor; import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.apache.poi.xwpf.usermodel.XWPFParagraph; import org.apache.poi.xwpf.usermodel.XWPFRun; -import org.json.JSONArray; -import org.json.JSONObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -98,18 +98,18 @@ import java.util.stream.Stream; public class DatasetManager { private static final Logger logger = LoggerFactory.getLogger(DatasetManager.class); - private final Map notificationPaths = Stream.of(new Object[][] { + private final Map notificationPaths = Stream.of(new Object[][]{ {NotificationType.DATASET_MODIFIED, "/datasets/edit"}, {NotificationType.DATASET_MODIFIED_FINALISED, "/datasets/edit"} }).collect(Collectors.toMap(data -> (NotificationType) data[0], data -> (String) data[1])); - private ApiContext apiContext; - private DatabaseRepository databaseRepository; - private DatasetRepository datasetRepository; - private BuilderFactory builderFactory; - private UserManager userManager; - private ConfigLoader configLoader; - private Environment environment; + private final ApiContext apiContext; + private final DatabaseRepository databaseRepository; + private final DatasetRepository datasetRepository; + private final BuilderFactory builderFactory; + private final UserManager userManager; + private final ConfigLoader configLoader; + private final Environment environment; private final MetricsManager metricsManager; private final FileManager fileManager; @@ -168,20 +168,14 @@ public class DatasetManager { datasets = null; } - UserInfo userInfo = builderFactory.getBuilder(UserInfoBuilder.class).id(principal.getId()).build(); + UserInfo userInfo = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(principal.getId());//builderFactory.getBuilder(UserInfoBuilder.class).id(principal.getId()).build(); // QueryableList items = databaseRepository.getDatasetDao().getWithCriteria(datasetTableRequest.getCriteria()).withHint(HintedModelFactory.getHint(DatasetListingModel.class)); QueryableList items; - if (datasets != null) { - - if (!datasets.isEmpty()) { - //items = databaseRepository.getDatasetDao().asQueryable().withHint(HintedModelFactory.getHint(DatasetListingModel.class)); - final List datasetIds = datasets.stream().map(datasetE -> UUID.fromString(datasetE.getId())).distinct().collect(Collectors.toList()); - items = databaseRepository.getDatasetDao().filterFromElastic(datasetTableRequest.getCriteria(), datasetIds).withHint(HintedModelFactory.getHint(DatasetListingModel.class));//.withFields(Collections.singletonList("id")); - //items.where((builder, root) -> root.get("id").in(datasetIds)); - } else { - items = databaseRepository.getDatasetDao().getWithCriteria(datasetTableRequest.getCriteria()).withHint(HintedModelFactory.getHint(DatasetListingModel.class));//.withFields(Collections.singletonList("id")); - //items.where((builder, root) -> root.get("id").in(new UUID[]{UUID.randomUUID()})); - } + if (datasets != null && !datasets.isEmpty()) { + //items = databaseRepository.getDatasetDao().asQueryable().withHint(HintedModelFactory.getHint(DatasetListingModel.class)); + final List datasetIds = datasets.stream().map(datasetE -> UUID.fromString(datasetE.getId())).distinct().collect(Collectors.toList()); + items = databaseRepository.getDatasetDao().filterFromElastic(datasetTableRequest.getCriteria(), datasetIds).withHint(HintedModelFactory.getHint(DatasetListingModel.class));//.withFields(Collections.singletonList("id")); + //items.where((builder, root) -> root.get("id").in(datasetIds)); } else { items = databaseRepository.getDatasetDao().getWithCriteria(datasetTableRequest.getCriteria()).withHint(HintedModelFactory.getHint(DatasetListingModel.class));//.withFields(Collections.singletonList("id")); } @@ -196,7 +190,6 @@ public class DatasetManager { roles.add(datasetTableRequest.getCriteria().getRole()); } authItems = databaseRepository.getDatasetDao().getAuthenticated(items, userInfo, roles).distinct(); - pagedItems = PaginationManager.applyPaging(authItems, datasetTableRequest); } else { if (principal.getId() != null && datasetTableRequest.getCriteria().getRole() != null) { items.where((builder, root) -> { @@ -204,12 +197,12 @@ public class DatasetManager { return builder.and(builder.equal(userJoin.join("user", JoinType.LEFT).get("id"), principal.getId()), builder.equal(userJoin.get("role"), datasetTableRequest.getCriteria().getRole())); }); } - String[] strings = new String[1]; + //String[] strings = new String[1]; //strings[0] = "-dmp:publishedAt|join|"; //datasetTableRequest.getOrderings().setFields(strings); authItems = items; - pagedItems = PaginationManager.applyPaging(items, datasetTableRequest); } + pagedItems = PaginationManager.applyPaging(authItems, datasetTableRequest); DataTableData dataTable = new DataTableData<>(); @@ -387,8 +380,12 @@ public class DatasetManager { eu.eudat.models.data.user.composite.DatasetProfile datasetprofile = userManager.generateDatasetProfileModel(datasetEntity.getProfile()); datasetprofile.setStatus(dataset.getStatus()); if (datasetEntity.getProperties() != null) { - JSONObject jObject = new JSONObject(datasetEntity.getProperties()); - Map properties = jObject.toMap(); + Map properties = null; + try { + properties = apiContext.getUtilitiesService().getGenericObjectMapper().readValue(datasetEntity.getProperties(), LinkedHashMap.class); + } catch (JsonProcessingException e) { + logger.error(e.getLocalizedMessage(), e); + } datasetprofile.fromJsonObject(properties); } PagedDatasetProfile pagedDatasetProfile = new PagedDatasetProfile(); @@ -456,8 +453,7 @@ public class DatasetManager { Map properties = new HashMap<>(); if (datasetEntity.getProperties() != null) { - JSONObject jObject = new JSONObject(datasetEntity.getProperties()); - properties = jObject.toMap(); + properties = apiContext.getUtilitiesService().getGenericObjectMapper().readValue(datasetEntity.getProperties(), LinkedHashMap.class); } wordBuilder.addParagraphContent("Dataset Description", document, ParagraphStyle.HEADER2, BigInteger.ZERO); @@ -489,8 +485,7 @@ public class DatasetManager { Map properties = new HashMap<>(); if (dataset.getDatasetProfileDefinition() != null) { - JSONObject jObject = new JSONObject(propertiesModelToString(dataset.getDatasetProfileDefinition())); - properties = jObject.toMap(); + properties = apiContext.getUtilitiesService().getGenericObjectMapper().readValue(propertiesModelToString(dataset.getDatasetProfileDefinition()), LinkedHashMap.class); } wordBuilder.addParagraphContent("Dataset Description", document, ParagraphStyle.HEADER2, BigInteger.ZERO); @@ -547,8 +542,7 @@ public class DatasetManager { throw new UnauthorisedException(); Map properties = new HashMap<>(); if (datasetEntity.getProperties() != null) { - JSONObject jobject = new JSONObject(datasetEntity.getProperties()); - properties = jobject.toMap(); + properties = apiContext.getUtilitiesService().getGenericObjectMapper().readValue(datasetEntity.getProperties(), LinkedHashMap.class); } PagedDatasetProfile pagedDatasetProfile = getPagedProfile(dataset, datasetEntity); visibilityRuleService.setProperties(properties); @@ -609,6 +603,7 @@ public class DatasetManager { // datasetWizardModel.setDatasetProfileDefinition(getPagedProfile(datasetWizardModel, dataset1)); UUID dmpId = dataset1.getDmp().getId(); dataset1.getDmp().setUsers(new HashSet<>(apiContext.getOperationsContext().getDatabaseRepository().getUserDmpDao().asQueryable().where((builder, root) -> builder.equal(root.get("dmp").get("id"), dmpId)).toList())); + this.deleteOldFilesAndAddNew(datasetWizardModel, userInfo); updateTags(dataset1, datasetWizardModel.getTags()); if (sendNotification) { if (dataset1.getStatus() != Dataset.Status.FINALISED.getValue()) { @@ -618,9 +613,6 @@ public class DatasetManager { } } - this.deleteOldFilesAndAddNew(datasetWizardModel, userInfo); - - return dataset1; } @@ -631,7 +623,7 @@ public class DatasetManager { ObjectMapper mapper = new ObjectMapper(); mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); - String json = mapper.writeValueAsString(datasetWizardModel.getDatasetProfileDefinition());; + String json = mapper.writeValueAsString(datasetWizardModel.getDatasetProfileDefinition()); JsonNode propertiesJson = mapper.readTree(json); Set uploadNodes = new HashSet<>(); @@ -641,11 +633,15 @@ public class DatasetManager { JsonNode value = node.get("value"); if (value != null && !value.toString().equals("\"\"") && !value.toString().equals("null")) { String stringValue = value.toString().replaceAll("=", ":"); - JSONObject values = new JSONObject(stringValue); - Map data = ((JSONObject) values).toMap(); + Map data = null; + try { + data = apiContext.getUtilitiesService().getGenericObjectMapper().readValue(stringValue, LinkedHashMap.class); + } catch (JsonProcessingException e) { + logger.error(e.getLocalizedMessage(), e); + } int index = fileUploadIds.indexOf(data.get("id").toString()); - if(index != -1) { + if (index != -1) { // file in DB is the same as file in the Dataset fileUploadIds.remove(index); fileUploads.remove(index); @@ -657,9 +653,7 @@ public class DatasetManager { }); // old files in DB that are not contained anymore in the Dataset -> mark them as Deleted - fileUploads.forEach(fileUpload -> { - fileManager.markOldFileAsDeleted(fileUpload); - }); + fileUploads.forEach(fileManager::markOldFileAsDeleted); } private void sendNotification(Dataset dataset, DMP dmp, UserInfo user, NotificationType notificationType) { @@ -707,9 +701,9 @@ public class DatasetManager { nodeList = (NodeList) xPath.compile(expression).evaluate(xmlDocument, XPathConstants.NODESET); - JSONObject obj = new JSONObject(dataset.getProperties()); + Map obj = apiContext.getUtilitiesService().getGenericObjectMapper().readValue(dataset.getProperties(), LinkedHashMap.class); VisibilityRuleService visibilityRuleService = new VisibilityRuleServiceImpl(); - visibilityRuleService.setProperties(obj.toMap()); + visibilityRuleService.setProperties(obj); dataset.setProfile(profile); PagedDatasetProfile pagedDatasetProfile = this.getPagedProfile(new DatasetWizardModel(), dataset); @@ -719,7 +713,7 @@ public class DatasetManager { String failedField = null; for (String validator : datasetProfileValidators) { - if (obj.has(validator) && isNullOrEmpty(obj.getString(validator)) && isElementVisible(nodeList, validator, visibilityRuleService)) { + if (obj.containsKey(validator) && isNullOrEmpty(obj.get(validator).toString()) && isElementVisible(nodeList, validator, visibilityRuleService)) { //throw new Exception("Field value of " + validator + " must be filled."); failedField = validator; break; @@ -759,8 +753,12 @@ public class DatasetManager { private String propertiesModelToString(PagedDatasetProfile pagedDatasetProfile) { Map values = new LinkedHashMap<>(); pagedDatasetProfile.toMap(values); - JSONObject jobject = new JSONObject(values); - return jobject.toString(); + try { + return apiContext.getUtilitiesService().getGenericObjectMapper().writeValueAsString(values); + } catch (JsonProcessingException e) { + logger.error(e.getLocalizedMessage(), e); + } + return null; } public void updateTags(Dataset datasetEntity, List tags) throws Exception { @@ -969,12 +967,9 @@ public class DatasetManager { ))))) .collect(Collectors.toMap(DatasetImportField::getId, DatasetImportField::getValue)); - // Transforms map into json file. - JSONObject jsonDatasetProperties = new JSONObject(importMap); - // Creates the entity data set to save. eu.eudat.data.entities.Dataset entity = new Dataset(); - entity.setProperties(jsonDatasetProperties.toString()); + entity.setProperties(apiContext.getUtilitiesService().getGenericObjectMapper().writeValueAsString(importMap)); entity.setLabel(importFile.getOriginalFilename()); DMP dmp = new DMP(); dmp.setId(UUID.fromString(dmpId)); @@ -1047,8 +1042,12 @@ public class DatasetManager { eu.eudat.models.data.user.composite.DatasetProfile datasetprofile = userManager.generateDatasetProfileModel(profile); datasetprofile.setStatus(datasetEntity.getStatus()); if (datasetEntity.getProperties() != null) { - JSONObject jobject = new JSONObject(datasetEntity.getProperties()); - Map properties = jobject.toMap(); + Map properties = null; + try { + properties = apiContext.getUtilitiesService().getGenericObjectMapper().readValue(datasetEntity.getProperties(), LinkedHashMap.class); + } catch (JsonProcessingException e) { + logger.error(e.getLocalizedMessage(), e); + } datasetprofile.fromJsonObject(properties); } PagedDatasetProfile pagedDatasetProfile = new PagedDatasetProfile(); @@ -1117,11 +1116,15 @@ public class DatasetManager { JsonNode value = node.get("value"); if (!value.toString().equals("\"\"") && !value.toString().equals("null") && value.toString().startsWith("[")) { String stringValue = value.toString().replaceAll("=", ":"); - JSONArray values = new JSONArray(stringValue); - values.iterator().forEachRemaining(element -> { - Map data = ((JSONObject) element).toMap(); - this.addTag(tags, wizardModel.getTags(), data.get("id").toString(), data.get("name").toString()); - }); + List values = null; + try { + CollectionType tagCollection = TypeFactory.defaultInstance().constructCollectionType(LinkedList.class, Tag.class); + values = apiContext.getUtilitiesService().getGenericObjectMapper().readValue(stringValue, tagCollection); + values.iterator().forEachRemaining(element -> this.addTag(tags, wizardModel.getTags(), element.getId(), element.getName())); + } catch (JsonProcessingException e) { + logger.error(e.getLocalizedMessage(), e); + } + } else { List values = Arrays.asList(value.textValue().split(", ")); List tagValues = values.stream().map(stringValue -> new Tag(stringValue, stringValue)).collect(Collectors.toList()); diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/UserManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/UserManager.java index e7b00d0e6..f8de5e044 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/UserManager.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/UserManager.java @@ -33,7 +33,6 @@ import eu.eudat.models.data.userinfo.UserProfile; import eu.eudat.queryable.QueryableList; import eu.eudat.types.Authorities; -import org.json.JSONObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -129,13 +128,13 @@ public class UserManager { eu.eudat.data.entities.UserInfo userInfo = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(principal.getId()); apiContext.getOperationsContext().getDatabaseRepository().detachEntity(userInfo); HashMap result = - new ObjectMapper().readValue(userInfo.getAdditionalinfo(), HashMap.class); + apiContext.getUtilitiesService().getGenericObjectMapper().readValue(userInfo.getAdditionalinfo(), HashMap.class); userInfo.setName(settings.entrySet().stream().filter(entry -> entry.getKey().equals("name")).filter(Objects::nonNull).map(entry -> entry.getValue().toString()).findFirst().orElse(userInfo.getName())); settings.remove("name"); - result.putAll(settings); - userInfo.setAdditionalinfo(new JSONObject(result).toString()); - apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao() - .createOrUpdate(userInfo); + result.putAll(settings); + userInfo.setAdditionalinfo(apiContext.getUtilitiesService().getGenericObjectMapper().writeValueAsString(result)); + apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao() + .createOrUpdate(userInfo); } public PrincipalModel authenticate(AuthenticationService authenticationServiceImpl, Credentials credentials) throws NullEmailException { diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/mapper/prefilling/PrefillingMapper.java b/dmp-backend/web/src/main/java/eu/eudat/logic/mapper/prefilling/PrefillingMapper.java index b869320e9..ebe8290db 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/mapper/prefilling/PrefillingMapper.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/mapper/prefilling/PrefillingMapper.java @@ -20,7 +20,6 @@ import eu.eudat.models.data.datasetprofile.DatasetProfileOverviewModel; import eu.eudat.models.data.datasetprofile.RenderStyle; import eu.eudat.models.data.datasetwizard.DatasetWizardModel; import eu.eudat.models.data.externaldataset.ExternalAutocompleteFieldModel; -import org.json.JSONObject; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; @@ -31,6 +30,7 @@ import java.util.stream.Collectors; public class PrefillingMapper { private static final ObjectMapper mapper = new ObjectMapper().configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true); + private static final List tagDelimiters = Arrays.asList(", ", "; "); public static DatasetWizardModel mapPrefilledEntityToDatasetWizard(Map prefilledEntity, PrefillingGet prefillingGet, String type, DatasetProfile profile, DatasetManager datasetManager) throws Exception { @@ -151,12 +151,12 @@ public class PrefillingMapper { properties.put(id, mapper.valueToTree(parseTags(parsedValue)).toString()); break; case DATASET_IDENTIFIER: - JSONObject datasetID = new JSONObject(); - datasetID.put("identifier", parsedValue); - if(type.equals("zenodo")){ - datasetID.put("type", "doi"); + Map datasetId = new LinkedHashMap<>(); + datasetId.put("identifier", parsedValue); + if (type.equals("zenodo")) { + datasetId.put("type", "doi"); } - properties.put(id, datasetID.toString()); + properties.put(id, mapper.writeValueAsString(datasetId)); break; default: if (!parsedValues.isEmpty()) @@ -210,13 +210,23 @@ public class PrefillingMapper { } private static List parseTags(String value) throws JsonProcessingException { + if (value == null || value.isEmpty()) return new LinkedList<>(); - String[] rawTags = value.split(", "); - List parsedTags = new LinkedList<>(); - for (String rawTag : rawTags) { - parsedTags.add(new Tag(rawTag, rawTag)); + String[] rawTags = null; + for (String tagDelim : tagDelimiters) { + rawTags = value.split(tagDelim); + if (rawTags.length > 1) { + break; + } } - return parsedTags; + if (rawTags != null) { + List parsedTags = new LinkedList<>(); + for (String rawTag : rawTags) { + parsedTags.add(new Tag(rawTag, rawTag)); + } + return parsedTags; + } + return null; } } diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/security/validators/google/GoogleTokenValidator.java b/dmp-backend/web/src/main/java/eu/eudat/logic/security/validators/google/GoogleTokenValidator.java index add180486..ed3e8d7d8 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/security/validators/google/GoogleTokenValidator.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/security/validators/google/GoogleTokenValidator.java @@ -5,7 +5,7 @@ import com.google.api.client.googleapis.auth.oauth2.GoogleIdToken.Payload; import com.google.api.client.googleapis.auth.oauth2.GoogleIdTokenVerifier; import com.google.api.client.http.HttpTransport; import com.google.api.client.http.javanet.NetHttpTransport; -import com.google.api.client.json.jackson2.JacksonFactory; +import com.google.api.client.json.gson.GsonFactory; import eu.eudat.logic.security.validators.TokenValidator; import eu.eudat.logic.security.validators.TokenValidatorFactoryImpl; import eu.eudat.logic.services.operations.authentication.AuthenticationService; @@ -29,9 +29,9 @@ public class GoogleTokenValidator implements TokenValidator { @Autowired public GoogleTokenValidator(Environment environment, AuthenticationService nonVerifiedUserAuthenticationService) { this.nonVerifiedUserAuthenticationService = nonVerifiedUserAuthenticationService; - verifier = new GoogleIdTokenVerifier.Builder(transport, JacksonFactory.getDefaultInstance()) - .setAudience(Collections.singletonList(environment.getProperty("google.login.clientId"))) - .build(); + verifier = new GoogleIdTokenVerifier.Builder(transport, GsonFactory.getDefaultInstance()) + .setAudience(Collections.singletonList(environment.getProperty("google.login.clientId"))) + .build(); } private GoogleIdToken verifyUserAndGetUser(String idTokenString) throws IOException, GeneralSecurityException { diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/services/operations/authentication/AbstractAuthenticationService.java b/dmp-backend/web/src/main/java/eu/eudat/logic/services/operations/authentication/AbstractAuthenticationService.java index 2983bfa1d..915d03c74 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/services/operations/authentication/AbstractAuthenticationService.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/services/operations/authentication/AbstractAuthenticationService.java @@ -1,5 +1,6 @@ package eu.eudat.logic.services.operations.authentication; +import com.fasterxml.jackson.core.JsonProcessingException; import eu.eudat.data.entities.Credential; import eu.eudat.data.entities.UserInfo; import eu.eudat.data.entities.UserRole; @@ -14,7 +15,6 @@ import eu.eudat.models.data.login.Credentials; import eu.eudat.models.data.loginprovider.LoginProviderUser; import eu.eudat.models.data.security.Principal; import eu.eudat.types.Authorities; -import org.json.JSONObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.core.env.Environment; @@ -164,8 +164,13 @@ public abstract class AbstractAuthenticationService implements AuthenticationSer apiContext.getOperationsContext().getDatabaseRepository().getUserRoleDao().createOrUpdate(role); } else { - Map additionalInfo = userInfo.getAdditionalinfo() != null ? - new JSONObject(userInfo.getAdditionalinfo()).toMap() : new HashMap<>(); + Map additionalInfo = null; + try { + additionalInfo = userInfo.getAdditionalinfo() != null ? + apiContext.getUtilitiesService().getGenericObjectMapper().readValue(userInfo.getAdditionalinfo(), LinkedHashMap.class) : new HashMap<>(); + } catch (JsonProcessingException e) { + logger.error(e.getLocalizedMessage(), e); + } if (profile.getAvatarUrl() != null && !profile.getAvatarUrl().isEmpty() && !profile.getAvatarUrl().equals("null")) { additionalInfo.put("avatarUrl", profile.getAvatarUrl()); } @@ -182,7 +187,11 @@ public abstract class AbstractAuthenticationService implements AuthenticationSer additionalInfo.put("zenodoEmail", profile.getEmail()); } userInfo.setLastloggedin(new Date()); - userInfo.setAdditionalinfo(new JSONObject(additionalInfo).toString()); + try { + userInfo.setAdditionalinfo(apiContext.getUtilitiesService().getGenericObjectMapper().writeValueAsString(additionalInfo)); + } catch (JsonProcessingException e) { + logger.error(e.getLocalizedMessage(), e); + } Set credentials = userInfo.getCredentials(); if (credentials.contains(credential)) { Credential oldCredential = credentials.stream().filter(item -> credential.getProvider().equals(item.getProvider())).findFirst().get(); diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/services/operations/authentication/VerifiedUserAuthenticationService.java b/dmp-backend/web/src/main/java/eu/eudat/logic/services/operations/authentication/VerifiedUserAuthenticationService.java index dfaca0d7a..88ca0dc20 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/services/operations/authentication/VerifiedUserAuthenticationService.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/services/operations/authentication/VerifiedUserAuthenticationService.java @@ -1,27 +1,21 @@ package eu.eudat.logic.services.operations.authentication; import com.fasterxml.jackson.databind.ObjectMapper; -import eu.eudat.data.entities.Credential; import eu.eudat.data.entities.UserInfo; import eu.eudat.data.entities.UserRole; import eu.eudat.data.entities.UserToken; import eu.eudat.exceptions.security.NullEmailException; -import eu.eudat.logic.builders.entity.CredentialBuilder; -import eu.eudat.logic.builders.entity.UserInfoBuilder; -import eu.eudat.logic.builders.entity.UserTokenBuilder; import eu.eudat.logic.builders.model.models.PrincipalBuilder; -import eu.eudat.logic.security.validators.TokenValidatorFactoryImpl; import eu.eudat.logic.services.ApiContext; -import eu.eudat.models.data.login.Credentials; -import eu.eudat.models.data.loginprovider.LoginProviderUser; import eu.eudat.models.data.security.Principal; import eu.eudat.types.Authorities; -import org.json.JSONObject; import org.springframework.core.env.Environment; import org.springframework.stereotype.Service; import java.time.Instant; -import java.util.*; +import java.util.Date; +import java.util.HashSet; +import java.util.List; @Service("verifiedUserAuthenticationService") diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/services/utilities/MailServiceImpl.java b/dmp-backend/web/src/main/java/eu/eudat/logic/services/utilities/MailServiceImpl.java index 3f73d4996..aa16f0fa3 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/services/utilities/MailServiceImpl.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/services/utilities/MailServiceImpl.java @@ -1,7 +1,6 @@ package eu.eudat.logic.services.utilities; import eu.eudat.models.data.mail.SimpleMail; -import org.apache.commons.io.IOUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -17,10 +16,15 @@ import javax.mail.MessagingException; import javax.mail.internet.MimeBodyPart; import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeMultipart; -import java.io.*; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; import java.util.UUID; +import java.util.stream.Collectors; @Service("mailService") @@ -84,10 +88,11 @@ public class MailServiceImpl implements MailService { Resource resource = applicationContext.getResource(resourceTemplate); try { InputStream inputStream = resource.getInputStream(); - StringWriter writer = new StringWriter(); - IOUtils.copy(inputStream, writer, "UTF-8"); + String tempate = new BufferedReader( + new InputStreamReader(inputStream, StandardCharsets.UTF_8) + ).lines().collect(Collectors.joining("\n")); inputStream.close(); - return writer.toString(); + return tempate; } catch (IOException e) { logger.error(e.getMessage(), e); } diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/services/utilities/UtilitiesService.java b/dmp-backend/web/src/main/java/eu/eudat/logic/services/utilities/UtilitiesService.java index 58e9c499b..46d87ca04 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/services/utilities/UtilitiesService.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/services/utilities/UtilitiesService.java @@ -1,5 +1,6 @@ package eu.eudat.logic.services.utilities; +import com.fasterxml.jackson.databind.ObjectMapper; import eu.eudat.logic.services.forms.VisibilityRuleService; /** @@ -12,4 +13,6 @@ public interface UtilitiesService { MailService getMailService(); ConfirmationEmailService getConfirmationEmailService(); + + ObjectMapper getGenericObjectMapper(); } diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/services/utilities/UtilitiesServiceImpl.java b/dmp-backend/web/src/main/java/eu/eudat/logic/services/utilities/UtilitiesServiceImpl.java index 9bc943280..14b916dcc 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/services/utilities/UtilitiesServiceImpl.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/services/utilities/UtilitiesServiceImpl.java @@ -1,5 +1,6 @@ package eu.eudat.logic.services.utilities; +import com.fasterxml.jackson.databind.ObjectMapper; import eu.eudat.logic.services.forms.VisibilityRuleService; import eu.eudat.logic.services.forms.VisibilityRuleServiceImpl; import org.springframework.beans.factory.annotation.Autowired; @@ -14,12 +15,14 @@ public class UtilitiesServiceImpl implements UtilitiesService { private InvitationService invitationService; private MailService mailService; private ConfirmationEmailService confirmationEmailService; + private final ObjectMapper objectMapper; @Autowired public UtilitiesServiceImpl(InvitationService invitationService, MailService mailService, ConfirmationEmailService confirmationEmailService) { this.invitationService = invitationService; this.mailService = mailService; this.confirmationEmailService = confirmationEmailService; + this.objectMapper = new ObjectMapper(); } @Override @@ -27,6 +30,11 @@ public class UtilitiesServiceImpl implements UtilitiesService { return confirmationEmailService; } + @Override + public ObjectMapper getGenericObjectMapper() { + return this.objectMapper; + } + @Override public InvitationService getInvitationService() { return invitationService; diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/documents/pdf/PDFUtils.java b/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/documents/pdf/PDFUtils.java index 6f842b1f3..5118aac25 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/documents/pdf/PDFUtils.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/documents/pdf/PDFUtils.java @@ -1,7 +1,6 @@ package eu.eudat.logic.utilities.documents.pdf; import eu.eudat.logic.utilities.documents.helpers.FileEnvelope; -import org.apache.commons.io.IOUtils; import org.springframework.core.env.Environment; import org.springframework.core.io.FileSystemResource; import org.springframework.http.HttpEntity; @@ -36,7 +35,8 @@ public class PDFUtils { File resultPdf = new File(environment.getProperty("temp.temp") + uuid + ".pdf"); FileOutputStream output = new FileOutputStream(resultPdf); - IOUtils.write(queueResult, output); + output.write(queueResult); + output.flush(); output.close(); Files.deleteIfExists(file.getFile().toPath()); diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/documents/word/WordBuilder.java b/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/documents/word/WordBuilder.java index df9549b8d..e1ce8e714 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/documents/word/WordBuilder.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/documents/word/WordBuilder.java @@ -1,5 +1,6 @@ package eu.eudat.logic.utilities.documents.word; +import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; import eu.eudat.logic.services.forms.VisibilityRuleService; @@ -15,11 +16,12 @@ import eu.eudat.models.data.user.composite.PagedDatasetProfile; import org.apache.poi.openxml4j.exceptions.InvalidFormatException; import org.apache.poi.util.Units; import org.apache.poi.xwpf.usermodel.*; -import org.json.JSONArray; -import org.json.JSONException; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; -import org.openxmlformats.schemas.wordprocessingml.x2006.main.*; +import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTAbstractNum; +import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTDecimalNumber; +import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTLvl; +import org.openxmlformats.schemas.wordprocessingml.x2006.main.STNumberFormat; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.core.env.Environment; @@ -45,26 +47,27 @@ import static org.apache.poi.xwpf.usermodel.Document.*; public class WordBuilder { private static final Logger logger = LoggerFactory.getLogger(WordBuilder.class); - private static final Map IMAGE_TYPE_MAP = Stream.of(new Object[][] { - {"image/jpeg", PICTURE_TYPE_JPEG}, - {"image/png", PICTURE_TYPE_PNG}, - {"image/gif", PICTURE_TYPE_GIF}, - {"image/tiff", PICTURE_TYPE_TIFF}, - {"image/bmp", PICTURE_TYPE_BMP}, - {"image/wmf", PICTURE_TYPE_WMF} - } - ).collect(Collectors.toMap(objects -> (String)objects[0], o -> (Integer)o[1])); + private static final Map IMAGE_TYPE_MAP = Stream.of(new Object[][]{ + {"image/jpeg", PICTURE_TYPE_JPEG}, + {"image/png", PICTURE_TYPE_PNG}, + {"image/gif", PICTURE_TYPE_GIF}, + {"image/tiff", PICTURE_TYPE_TIFF}, + {"image/bmp", PICTURE_TYPE_BMP}, + {"image/wmf", PICTURE_TYPE_WMF} + } + ).collect(Collectors.toMap(objects -> (String) objects[0], o -> (Integer) o[1])); - private Map> options = new HashMap<>(); - private CTAbstractNum cTAbstractNum; + private final Map> options = new HashMap<>(); + private final CTAbstractNum cTAbstractNum; private BigInteger numId; private Integer indent; - private static final ObjectMapper mapper = new ObjectMapper(); + private final ObjectMapper mapper; public WordBuilder(Environment environment) { this.cTAbstractNum = CTAbstractNum.Factory.newInstance(); this.cTAbstractNum.setAbstractNumId(BigInteger.valueOf(1)); this.indent = 0; + this.mapper = new ObjectMapper(); this.buildOptions(environment); } @@ -164,7 +167,7 @@ public class WordBuilder { int format; format = IMAGE_TYPE_MAP.getOrDefault(fileType, 0); try { - FileInputStream image = new FileInputStream(environment.getProperty("file.storage") + imageId); + ImageInputStream iis = ImageIO.createImageInputStream(new File(environment.getProperty("file.storage") + imageId)); Iterator readers = ImageIO.getImageReaders(iis); if (readers.hasNext()) { @@ -174,30 +177,30 @@ public class WordBuilder { int initialImageWidth = reader.getWidth(0); int initialImageHeight = reader.getHeight(0); - float ratio = initialImageHeight / (float)initialImageWidth; + float ratio = initialImageHeight / (float) initialImageWidth; - int marginLeftInDXA = mainDocumentPart.getDocument().getBody().getSectPr().getPgMar().getLeft().intValue(); - int marginRightInDXA = mainDocumentPart.getDocument().getBody().getSectPr().getPgMar().getRight().intValue(); - int pageWidthInDXA = mainDocumentPart.getDocument().getBody().getSectPr().getPgSz().getW().intValue(); - int pageWidth = Math.round((pageWidthInDXA - marginLeftInDXA - marginRightInDXA) / (float)20); // /20 converts dxa to points + int marginLeftInDXA = ((BigInteger) mainDocumentPart.getDocument().getBody().getSectPr().getPgMar().getLeft()).intValue(); + int marginRightInDXA = ((BigInteger) mainDocumentPart.getDocument().getBody().getSectPr().getPgMar().getRight()).intValue(); + int pageWidthInDXA = ((BigInteger) mainDocumentPart.getDocument().getBody().getSectPr().getPgSz().getW()).intValue(); + int pageWidth = Math.round((pageWidthInDXA - marginLeftInDXA - marginRightInDXA) / (float) 20); // /20 converts dxa to points - int imageWidth = Math.round(initialImageWidth*(float)0.75); // *0.75 converts pixels to points + int imageWidth = Math.round(initialImageWidth * (float) 0.75); // *0.75 converts pixels to points int width = Math.min(imageWidth, pageWidth); - int marginTopInDXA = mainDocumentPart.getDocument().getBody().getSectPr().getPgMar().getTop().intValue(); - int marginBottomInDXA = mainDocumentPart.getDocument().getBody().getSectPr().getPgMar().getBottom().intValue(); - int pageHeightInDXA = mainDocumentPart.getDocument().getBody().getSectPr().getPgSz().getH().intValue(); - int pageHeight = Math.round((pageHeightInDXA - marginTopInDXA - marginBottomInDXA) / (float)20); // /20 converts dxa to points + int marginTopInDXA = ((BigInteger) mainDocumentPart.getDocument().getBody().getSectPr().getPgMar().getTop()).intValue(); + int marginBottomInDXA = ((BigInteger) mainDocumentPart.getDocument().getBody().getSectPr().getPgMar().getBottom()).intValue(); + int pageHeightInDXA = ((BigInteger) mainDocumentPart.getDocument().getBody().getSectPr().getPgSz().getH()).intValue(); + int pageHeight = Math.round((pageHeightInDXA - marginTopInDXA - marginBottomInDXA) / (float) 20); // /20 converts dxa to points - int imageHeight = Math.round(initialImageHeight * ((float)0.75)); // *0.75 converts pixels to points + int imageHeight = Math.round(initialImageHeight * ((float) 0.75)); // *0.75 converts pixels to points - int height = Math.round(width*ratio); - if(height > pageHeight) { + int height = Math.round(width * ratio); + if (height > pageHeight) { // height calculated with ratio is too large. Image may have Portrait (vertical) orientation. Recalculate image dimensions. height = Math.min(imageHeight, pageHeight); - width = Math.round(height/ratio); + width = Math.round(height / ratio); } - + FileInputStream image = new FileInputStream(environment.getProperty("file.storage") + imageId); run.addPicture(image, format, fileName, Units.toEMU(width), Units.toEMU(height)); paragraph.setPageBreak(false); } @@ -380,16 +383,16 @@ public class WordBuilder { return null; } try { - JSONArray array = new JSONArray(JavaToJson.objectStringToJson(format)); + List> array = this.mapper.readValue(JavaToJson.objectStringToJson(format), ArrayList.class); StringBuilder multipleFormats = new StringBuilder(); - for (int i = 0; i < array.length(); i++) { - multipleFormats.append(array.getJSONObject(i).getString(attribute)).append(", "); + for (Map node : array) { + multipleFormats.append(node.get(attribute)).append(", "); } if (multipleFormats.length() > 0) { multipleFormats.setLength(multipleFormats.length() - 2); } return multipleFormats.toString(); - } catch (JSONException e) { + } catch (JsonProcessingException e) { return format; } } diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/documents/xml/ExportXmlBuilder.java b/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/documents/xml/ExportXmlBuilder.java index 9c8a591b4..a435b62d2 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/documents/xml/ExportXmlBuilder.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/documents/xml/ExportXmlBuilder.java @@ -1,7 +1,6 @@ package eu.eudat.logic.utilities.documents.xml; import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.exc.MismatchedInputException; import eu.eudat.logic.services.forms.VisibilityRuleService; import eu.eudat.logic.utilities.builders.XmlBuilder; import eu.eudat.models.data.components.commons.datafield.ExternalDatasetsData; @@ -10,8 +9,6 @@ import eu.eudat.models.data.user.components.datasetprofile.FieldSet; import eu.eudat.models.data.user.components.datasetprofile.Section; import eu.eudat.models.data.user.composite.DatasetProfilePage; import eu.eudat.models.data.user.composite.PagedDatasetProfile; -import org.json.JSONArray; -import org.json.JSONException; import org.springframework.core.env.Environment; import org.w3c.dom.Document; import org.w3c.dom.Element; diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/schedule/notification/NotificationScheduleJob.java b/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/schedule/notification/NotificationScheduleJob.java index 24c5b593a..150738a53 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/schedule/notification/NotificationScheduleJob.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/schedule/notification/NotificationScheduleJob.java @@ -18,20 +18,20 @@ import java.util.concurrent.CompletableFuture; @Component public class NotificationScheduleJob { - private static final Logger logger = LoggerFactory.getLogger(NotificationScheduleJob.class); + private static final Logger logger = LoggerFactory.getLogger(NotificationScheduleJob.class); - private ApiContext apiContext; - private NotificationManager notificationManager; + private final ApiContext apiContext; + private final NotificationManager notificationManager; - @Autowired - public NotificationScheduleJob(ApiContext apiContext, NotificationManager notificationManager) { - this.apiContext = apiContext; - this.notificationManager = notificationManager; - } + @Autowired + public NotificationScheduleJob(ApiContext apiContext, NotificationManager notificationManager) { + this.apiContext = apiContext; + this.notificationManager = notificationManager; + } - @Transactional - @Scheduled(fixedRateString = "${notification.rateInterval}") - public void sendNotifications() { + @Transactional + @Scheduled(fixedRateString = "${notification.rateInterval}") + public void sendNotifications() { List> futures = new LinkedList<>(); this.apiContext.getOperationsContext().getDatabaseRepository().getNotificationDao().asQueryable().where(((builder, root) -> builder.and( diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/components/commons/datafield/UploadData.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/components/commons/datafield/UploadData.java index c3b0dad59..1d493326d 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/components/commons/datafield/UploadData.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/components/commons/datafield/UploadData.java @@ -13,7 +13,7 @@ import java.util.Map; public class UploadData extends FieldData { - public class Option implements XmlSerializable { + public static class Option implements XmlSerializable { private String label; private String value; @@ -77,7 +77,7 @@ public class UploadData extends FieldData { if (data != null) { List> types = ((Map>>) data).get("types"); for (Map map : types) { - UploadData.Option newOption = new UploadData.Option(); + UploadData.Option newOption = new Option(); newOption.setLabel(map.get("label")); newOption.setValue(map.get("value")); this.types.add(newOption); @@ -125,7 +125,7 @@ public class UploadData extends FieldData { for (int temp = 0; temp < optionElements.getLength(); temp++) { Node optionElement = optionElements.item(temp); if (optionElement.getNodeType() == Node.ELEMENT_NODE) { - this.types.add(new UploadData.Option().fromXml((Element) optionElement)); + this.types.add(new Option().fromXml((Element) optionElement)); } } } diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/dmp/DataManagementPlan.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/dmp/DataManagementPlan.java index cc2dcd4fb..532ca8aa3 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/dmp/DataManagementPlan.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/dmp/DataManagementPlan.java @@ -1,5 +1,7 @@ package eu.eudat.models.data.dmp; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; import eu.eudat.data.entities.*; import eu.eudat.logic.utilities.builders.XmlBuilder; import eu.eudat.models.DataModel; @@ -7,18 +9,21 @@ import eu.eudat.models.data.datasetwizard.DatasetWizardModel; import eu.eudat.models.data.dynamicfields.DynamicFieldWithValue; import eu.eudat.models.data.entities.xmlmodels.dmpprofiledefinition.DataManagementPlanProfile; import eu.eudat.models.data.funder.Funder; -import eu.eudat.models.data.helpermodels.Tuple; -import eu.eudat.models.data.listingmodels.DatasetListingModel; -import eu.eudat.models.data.listingmodels.UserInfoListingModel; import eu.eudat.models.data.grant.Grant; +import eu.eudat.models.data.helpermodels.Tuple; +import eu.eudat.models.data.listingmodels.UserInfoListingModel; import eu.eudat.models.data.project.Project; import eu.eudat.models.data.userinfo.UserListingModel; import net.minidev.json.JSONObject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.util.*; import java.util.stream.Collectors; public class DataManagementPlan implements DataModel { + private static final ObjectMapper objectMapper = new ObjectMapper(); + private static final Logger logger = LoggerFactory.getLogger(DataManagementPlan.class); private UUID id; private String label; private UUID groupId; @@ -233,67 +238,71 @@ public class DataManagementPlan implements DataModel { @Override public DataManagementPlan fromDataModel(DMP entity) { - this.id = entity.getId(); - this.profile = entity.getProfile() != null ? new Tuple(entity.getProfile().getId(), entity.getProfile().getLabel()) : null; - this.organisations = entity.getOrganisations() != null ? entity.getOrganisations().stream().map(item -> new Organisation().fromDataModel(item)).collect(Collectors.toList()) : new ArrayList<>(); - this.researchers = entity.getResearchers() != null ? entity.getResearchers().stream().map(item -> new Researcher().fromDataModel(item)).collect(Collectors.toList()): new ArrayList<>(); - this.version = entity.getVersion(); - this.groupId = this.groupId == null ? null : entity.getGroupId(); - this.label = entity.getLabel(); - this.grant = new Grant(); - this.properties = entity.getProperties() != null ? new org.json.JSONObject(entity.getProperties()).toMap() : null; - this.grant.fromDataModel(entity.getGrant()); - this.creator = new eu.eudat.models.data.userinfo.UserInfo(); - this.groupId = entity.getGroupId(); - this.lockable = entity.getDataset() != null && entity.getDataset().stream().findAny().isPresent(); - this.definition = entity.getProfile() == null ? null : new DataManagementPlanProfile().fromXml(XmlBuilder.fromXml(entity.getProfile().getDefinition()).getDocumentElement()); - if (this.definition != null && this.definition.getFields() != null && !this.definition.getFields().isEmpty() && this.properties != null) { - this.definition.getFields().forEach(item -> { - Optional> fieldOptional = ((List>) this.properties.get("fields")).stream().filter(field -> field.get("id").equals(item.getId().toString())).findFirst(); - if (fieldOptional.isPresent()) item.setValue(fieldOptional.get().get("value")); - }); - } - if (entity.getUsers() != null && entity.getUsers().stream().anyMatch(userDMP -> userDMP.getRole().equals(UserDMP.UserDMPRoles.OWNER.getValue()))) - this.creator.fromDataModel(entity.getUsers().stream().filter(user -> user.getRole().equals(UserDMP.UserDMPRoles.OWNER.getValue())).findFirst().get().getUser()); - - if (entity.getAssociatedDmps() != null && !entity.getAssociatedDmps().isEmpty()) { - this.profiles = new LinkedList<>(); - for (DatasetProfile datasetProfile: entity.getAssociatedDmps()) { - AssociatedProfile associatedProfile = new AssociatedProfile().fromData(datasetProfile); - this.profiles.add(associatedProfile); + try { + this.id = entity.getId(); + this.profile = entity.getProfile() != null ? new Tuple(entity.getProfile().getId(), entity.getProfile().getLabel()) : null; + this.organisations = entity.getOrganisations() != null ? entity.getOrganisations().stream().map(item -> new Organisation().fromDataModel(item)).collect(Collectors.toList()) : new ArrayList<>(); + this.researchers = entity.getResearchers() != null ? entity.getResearchers().stream().map(item -> new Researcher().fromDataModel(item)).collect(Collectors.toList()) : new ArrayList<>(); + this.version = entity.getVersion(); + this.groupId = this.groupId == null ? null : entity.getGroupId(); + this.label = entity.getLabel(); + this.grant = new Grant(); + this.properties = entity.getProperties() != null ? objectMapper.readValue(entity.getProperties(), LinkedHashMap.class) : null; + this.grant.fromDataModel(entity.getGrant()); + this.creator = new eu.eudat.models.data.userinfo.UserInfo(); + this.groupId = entity.getGroupId(); + this.lockable = entity.getDataset() != null && entity.getDataset().stream().findAny().isPresent(); + this.definition = entity.getProfile() == null ? null : new DataManagementPlanProfile().fromXml(XmlBuilder.fromXml(entity.getProfile().getDefinition()).getDocumentElement()); + if (this.definition != null && this.definition.getFields() != null && !this.definition.getFields().isEmpty() && this.properties != null) { + this.definition.getFields().forEach(item -> { + Optional> fieldOptional = ((List>) this.properties.get("fields")).stream().filter(field -> field.get("id").equals(item.getId().toString())).findFirst(); + if (fieldOptional.isPresent()) item.setValue(fieldOptional.get().get("value")); + }); } - } - if (entity.getDataset() != null) { - if (entity.isPublic()) { - this.datasets = entity.getDataset().stream() - .filter(dataset -> !dataset.getStatus().equals(Dataset.Status.DELETED.getValue()) && !dataset.getStatus().equals(Dataset.Status.CANCELED.getValue()) && !dataset.getStatus().equals(Dataset.Status.SAVED.getValue())) - .map(x -> new DatasetWizardModel().fromDataModelNoDmp(x)).collect(Collectors.toList()); - } else { - this.datasets = entity.getDataset().stream() - .filter(dataset -> !dataset.getStatus().equals(Dataset.Status.DELETED.getValue()) && !dataset.getStatus().equals(Dataset.Status.CANCELED.getValue())) - .map(x -> new DatasetWizardModel().fromDataModelNoDmp(x)).collect(Collectors.toList()); + if (entity.getUsers() != null && entity.getUsers().stream().anyMatch(userDMP -> userDMP.getRole().equals(UserDMP.UserDMPRoles.OWNER.getValue()))) + this.creator.fromDataModel(entity.getUsers().stream().filter(user -> user.getRole().equals(UserDMP.UserDMPRoles.OWNER.getValue())).findFirst().get().getUser()); + + if (entity.getAssociatedDmps() != null && !entity.getAssociatedDmps().isEmpty()) { + this.profiles = new LinkedList<>(); + for (DatasetProfile datasetProfile : entity.getAssociatedDmps()) { + AssociatedProfile associatedProfile = new AssociatedProfile().fromData(datasetProfile); + this.profiles.add(associatedProfile); + } } - } - this.modified = entity.getModified(); - this.created = entity.getCreated(); - this.description = entity.getDescription(); - this.status = entity.getStatus(); - this.associatedUsers = entity.getUsers() != null ? entity.getUsers().stream().map(item -> new UserListingModel().fromDataModel(item.getUser())).collect(Collectors.toList()) : new ArrayList<>(); - this.users = entity.getUsers() != null ? entity.getUsers().stream().map(item -> new UserInfoListingModel().fromDataModel(item)).collect(Collectors.toList()) : new ArrayList<>(); - this.doi = entity.getDoi(); + if (entity.getDataset() != null) { + if (entity.isPublic()) { + this.datasets = entity.getDataset().stream() + .filter(dataset -> !dataset.getStatus().equals(Dataset.Status.DELETED.getValue()) && !dataset.getStatus().equals(Dataset.Status.CANCELED.getValue()) && !dataset.getStatus().equals(Dataset.Status.SAVED.getValue())) + .map(x -> new DatasetWizardModel().fromDataModelNoDmp(x)).collect(Collectors.toList()); + } else { + this.datasets = entity.getDataset().stream() + .filter(dataset -> !dataset.getStatus().equals(Dataset.Status.DELETED.getValue()) && !dataset.getStatus().equals(Dataset.Status.CANCELED.getValue())) + .map(x -> new DatasetWizardModel().fromDataModelNoDmp(x)).collect(Collectors.toList()); + } + } + this.modified = entity.getModified(); + this.created = entity.getCreated(); + this.description = entity.getDescription(); + this.status = entity.getStatus(); + this.associatedUsers = entity.getUsers() != null ? entity.getUsers().stream().map(item -> new UserListingModel().fromDataModel(item.getUser())).collect(Collectors.toList()) : new ArrayList<>(); + this.users = entity.getUsers() != null ? entity.getUsers().stream().map(item -> new UserInfoListingModel().fromDataModel(item)).collect(Collectors.toList()) : new ArrayList<>(); + this.doi = entity.getDoi(); - if (entity.getProject() != null) { - this.project = new Project(); - this.project = new Project().fromDataModel(entity.getProject()); - } + if (entity.getProject() != null) { + this.project = new Project(); + this.project = new Project().fromDataModel(entity.getProject()); + } - if (entity.getGrant().getFunder() != null) { - this.funder = new Funder(); - this.funder.fromDataModel(entity.getGrant().getFunder()); - } - this.isPublic = entity.isPublic(); + if (entity.getGrant().getFunder() != null) { + this.funder = new Funder(); + this.funder.fromDataModel(entity.getGrant().getFunder()); + } + this.isPublic = entity.isPublic(); - this.extraProperties = entity.getExtraProperties() != null ? new org.json.JSONObject(entity.getExtraProperties()).toMap() : null; + this.extraProperties = entity.getExtraProperties() != null ? objectMapper.readValue(entity.getExtraProperties(), LinkedHashMap.class) : null; + } catch (JsonProcessingException e) { + logger.error(e.getLocalizedMessage(), e); + } return this; } @@ -342,54 +351,58 @@ public class DataManagementPlan implements DataModel { } public DataManagementPlan fromDataModelNoDatasets(DMP entity) { - this.id = entity.getId(); - this.profile = entity.getProfile() != null ? new Tuple(entity.getProfile().getId(), entity.getProfile().getLabel()) : null; - this.organisations = entity.getOrganisations() != null ? entity.getOrganisations().stream().map(item -> new Organisation().fromDataModel(item)).collect(Collectors.toList()) : new ArrayList<>(); - this.researchers = entity.getResearchers() != null ? entity.getResearchers().stream().filter(Objects::nonNull).map(item -> new Researcher().fromDataModel(item)).collect(Collectors.toList()) : new ArrayList<>(); - this.version = entity.getVersion(); - this.label = entity.getLabel(); - this.grant = new Grant(); - this.properties = entity.getProperties() != null ? new org.json.JSONObject(entity.getProperties()).toMap() : null; - this.creator = new eu.eudat.models.data.userinfo.UserInfo(); - this.groupId = entity.getGroupId(); - this.lockable = entity.getDataset() != null && entity.getDataset().stream().findAny().isPresent(); - this.definition = entity.getProfile() == null ? null : new DataManagementPlanProfile().fromXml(XmlBuilder.fromXml(entity.getProfile().getDefinition()).getDocumentElement()); - if (this.definition != null && this.definition.getFields() != null && !this.definition.getFields().isEmpty() && this.properties != null) { - this.definition.getFields().forEach(item -> { - Optional> fieldOptional = ((List>) this.properties.get("fields")).stream().filter(field -> field.get("id").equals(item.getId().toString())).findFirst(); - fieldOptional.ifPresent(stringObjectMap -> item.setValue(stringObjectMap.get("value"))); - }); - } - if (entity.getUsers() != null && entity.getUsers().stream().anyMatch(userDMP -> userDMP.getRole().equals(UserDMP.UserDMPRoles.OWNER.getValue()))) - this.creator.fromDataModel(entity.getUsers().stream().filter(user -> user.getRole().equals(UserDMP.UserDMPRoles.OWNER.getValue())).findFirst().get().getUser()); - - if (entity.getAssociatedDmps() != null && !entity.getAssociatedDmps().isEmpty()) { - this.profiles = new LinkedList<>(); - for (DatasetProfile datasetProfile: entity.getAssociatedDmps()) { - AssociatedProfile associatedProfile = new AssociatedProfile().fromData(datasetProfile); - this.profiles.add(associatedProfile); + try { + this.id = entity.getId(); + this.profile = entity.getProfile() != null ? new Tuple(entity.getProfile().getId(), entity.getProfile().getLabel()) : null; + this.organisations = entity.getOrganisations() != null ? entity.getOrganisations().stream().map(item -> new Organisation().fromDataModel(item)).collect(Collectors.toList()) : new ArrayList<>(); + this.researchers = entity.getResearchers() != null ? entity.getResearchers().stream().filter(Objects::nonNull).map(item -> new Researcher().fromDataModel(item)).collect(Collectors.toList()) : new ArrayList<>(); + this.version = entity.getVersion(); + this.label = entity.getLabel(); + this.grant = new Grant(); + this.properties = entity.getProperties() != null ? objectMapper.readValue(entity.getProperties(), LinkedHashMap.class) : null; + this.creator = new eu.eudat.models.data.userinfo.UserInfo(); + this.groupId = entity.getGroupId(); + this.lockable = entity.getDataset() != null && entity.getDataset().stream().findAny().isPresent(); + this.definition = entity.getProfile() == null ? null : new DataManagementPlanProfile().fromXml(XmlBuilder.fromXml(entity.getProfile().getDefinition()).getDocumentElement()); + if (this.definition != null && this.definition.getFields() != null && !this.definition.getFields().isEmpty() && this.properties != null) { + this.definition.getFields().forEach(item -> { + Optional> fieldOptional = ((List>) this.properties.get("fields")).stream().filter(field -> field.get("id").equals(item.getId().toString())).findFirst(); + fieldOptional.ifPresent(stringObjectMap -> item.setValue(stringObjectMap.get("value"))); + }); } - } - this.modified = entity.getModified(); - this.created = entity.getCreated(); - this.description = entity.getDescription(); - this.status = entity.getStatus(); - this.associatedUsers = entity.getUsers() != null ? entity.getUsers().stream().map(item -> new UserListingModel().fromDataModel(item.getUser())).collect(Collectors.toList()) : new ArrayList<>(); - this.users = entity.getUsers() != null ? entity.getUsers().stream().map(item -> new UserInfoListingModel().fromDataModel(item)).collect(Collectors.toList()) : new ArrayList<>(); - this.doi = entity.getDoi(); - this.grant.fromDataModel(entity.getGrant()); + if (entity.getUsers() != null && entity.getUsers().stream().anyMatch(userDMP -> userDMP.getRole().equals(UserDMP.UserDMPRoles.OWNER.getValue()))) + this.creator.fromDataModel(entity.getUsers().stream().filter(user -> user.getRole().equals(UserDMP.UserDMPRoles.OWNER.getValue())).findFirst().get().getUser()); - if (entity.getProject() != null) { - this.project = new Project(); - this.project = new Project().fromDataModel(entity.getProject()); - } - if (entity.getGrant().getFunder() != null) { - this.funder = new Funder(); - this.funder.fromDataModel(entity.getGrant().getFunder()); - } - this.isPublic = entity.isPublic(); + if (entity.getAssociatedDmps() != null && !entity.getAssociatedDmps().isEmpty()) { + this.profiles = new LinkedList<>(); + for (DatasetProfile datasetProfile : entity.getAssociatedDmps()) { + AssociatedProfile associatedProfile = new AssociatedProfile().fromData(datasetProfile); + this.profiles.add(associatedProfile); + } + } + this.modified = entity.getModified(); + this.created = entity.getCreated(); + this.description = entity.getDescription(); + this.status = entity.getStatus(); + this.associatedUsers = entity.getUsers() != null ? entity.getUsers().stream().map(item -> new UserListingModel().fromDataModel(item.getUser())).collect(Collectors.toList()) : new ArrayList<>(); + this.users = entity.getUsers() != null ? entity.getUsers().stream().map(item -> new UserInfoListingModel().fromDataModel(item)).collect(Collectors.toList()) : new ArrayList<>(); + this.doi = entity.getDoi(); + this.grant.fromDataModel(entity.getGrant()); - this.extraProperties = entity.getExtraProperties() != null ? new org.json.JSONObject(entity.getExtraProperties()).toMap() : null; + if (entity.getProject() != null) { + this.project = new Project(); + this.project = new Project().fromDataModel(entity.getProject()); + } + if (entity.getGrant().getFunder() != null) { + this.funder = new Funder(); + this.funder.fromDataModel(entity.getGrant().getFunder()); + } + this.isPublic = entity.isPublic(); + + this.extraProperties = entity.getExtraProperties() != null ? objectMapper.readValue(entity.getExtraProperties(), LinkedHashMap.class) : null; + } catch (JsonProcessingException e) { + logger.error(e.getLocalizedMessage(), e); + } return this; } diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/dmp/DataManagementPlanEditorModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/dmp/DataManagementPlanEditorModel.java index 1eca8b81c..5060f3f1e 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/dmp/DataManagementPlanEditorModel.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/dmp/DataManagementPlanEditorModel.java @@ -1,5 +1,8 @@ package eu.eudat.models.data.dmp; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.JsonMappingException; +import com.fasterxml.jackson.databind.ObjectMapper; import eu.eudat.data.entities.*; import eu.eudat.logic.utilities.builders.XmlBuilder; import eu.eudat.models.DataModel; @@ -14,11 +17,15 @@ import eu.eudat.models.data.grant.GrantDMPEditorModel; import eu.eudat.models.data.project.ProjectDMPEditorModel; import eu.eudat.models.data.userinfo.UserListingModel; import net.minidev.json.JSONObject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.util.*; import java.util.stream.Collectors; public class DataManagementPlanEditorModel implements DataModel { + private static final ObjectMapper objectMapper = new ObjectMapper(); + private static final Logger logger = LoggerFactory.getLogger(DataManagementPlanEditorModel.class); private UUID id; private String label; private UUID groupId; @@ -224,49 +231,53 @@ public class DataManagementPlanEditorModel implements DataModel(entity.getProfile().getId(), entity.getProfile().getLabel()) : null; - this.organisations = entity.getOrganisations().stream().map(item -> new Organisation().fromDataModel(item)).collect(Collectors.toList()); - this.researchers = entity.getResearchers().stream().map(item -> new Researcher().fromDataModel(item)).collect(Collectors.toList()); - this.version = entity.getVersion(); - this.groupId = this.groupId == null ? null : entity.getGroupId(); - this.label = entity.getLabel(); - this.grant = new GrantDMPEditorModel(); - this.properties = entity.getProperties() != null ? new org.json.JSONObject(entity.getProperties()).toMap() : null; - this.grant.getExistGrant().fromDataModel(entity.getGrant()); - this.grant.getExistGrant().setSource(""); - this.creator = new eu.eudat.models.data.userinfo.UserInfo(); - this.groupId = entity.getGroupId(); - this.lockable = entity.getDataset().stream().findAny().isPresent(); - this.definition = entity.getProfile() == null ? null : new DataManagementPlanProfile().fromXml(XmlBuilder.fromXml(entity.getProfile().getDefinition()).getDocumentElement()); - if (this.definition != null && this.definition.getFields() != null && !this.definition.getFields().isEmpty() && this.properties != null) { - this.definition.getFields().forEach(item -> { - Optional> fieldOptional = ((List>) this.properties.get("fields")).stream().filter(field -> field.get("id").equals(item.getId().toString())).findFirst(); - if (fieldOptional.isPresent()) item.setValue(fieldOptional.get().get("value")); - }); - } - if (entity.getUsers().stream().anyMatch(userDMP -> userDMP.getRole().equals(UserDMP.UserDMPRoles.OWNER.getValue()))) - this.creator.fromDataModel(entity.getUsers().stream().filter(user -> user.getRole().equals(UserDMP.UserDMPRoles.OWNER.getValue())).findFirst().get().getUser()); - - if (entity.getAssociatedDmps() != null && !entity.getAssociatedDmps().isEmpty()) { - this.profiles = new LinkedList<>(); - for (DatasetProfile datasetProfile: entity.getAssociatedDmps()) { - AssociatedProfile associatedProfile = new AssociatedProfile().fromData(datasetProfile); - this.profiles.add(associatedProfile); + try { + this.id = entity.getId(); + this.profile = entity.getProfile() != null ? new Tuple(entity.getProfile().getId(), entity.getProfile().getLabel()) : null; + this.organisations = entity.getOrganisations().stream().map(item -> new Organisation().fromDataModel(item)).collect(Collectors.toList()); + this.researchers = entity.getResearchers().stream().map(item -> new Researcher().fromDataModel(item)).collect(Collectors.toList()); + this.version = entity.getVersion(); + this.groupId = this.groupId == null ? null : entity.getGroupId(); + this.label = entity.getLabel(); + this.grant = new GrantDMPEditorModel(); + this.properties = entity.getProperties() != null ? objectMapper.readValue(entity.getProperties(), LinkedHashMap.class) : null; + this.grant.getExistGrant().fromDataModel(entity.getGrant()); + this.grant.getExistGrant().setSource(""); + this.creator = new eu.eudat.models.data.userinfo.UserInfo(); + this.groupId = entity.getGroupId(); + this.lockable = entity.getDataset().stream().findAny().isPresent(); + this.definition = entity.getProfile() == null ? null : new DataManagementPlanProfile().fromXml(XmlBuilder.fromXml(entity.getProfile().getDefinition()).getDocumentElement()); + if (this.definition != null && this.definition.getFields() != null && !this.definition.getFields().isEmpty() && this.properties != null) { + this.definition.getFields().forEach(item -> { + Optional> fieldOptional = ((List>) this.properties.get("fields")).stream().filter(field -> field.get("id").equals(item.getId().toString())).findFirst(); + if (fieldOptional.isPresent()) item.setValue(fieldOptional.get().get("value")); + }); } + if (entity.getUsers().stream().anyMatch(userDMP -> userDMP.getRole().equals(UserDMP.UserDMPRoles.OWNER.getValue()))) + this.creator.fromDataModel(entity.getUsers().stream().filter(user -> user.getRole().equals(UserDMP.UserDMPRoles.OWNER.getValue())).findFirst().get().getUser()); + + if (entity.getAssociatedDmps() != null && !entity.getAssociatedDmps().isEmpty()) { + this.profiles = new LinkedList<>(); + for (DatasetProfile datasetProfile : entity.getAssociatedDmps()) { + AssociatedProfile associatedProfile = new AssociatedProfile().fromData(datasetProfile); + this.profiles.add(associatedProfile); + } + } + this.datasets = entity.getDataset().stream().map(item -> new DatasetWizardModel().fromDataModelNoDmp(item)).collect(Collectors.toList()); + this.modified = entity.getModified(); + this.created = entity.getCreated(); + this.description = entity.getDescription(); + this.status = entity.getStatus(); + this.project = new ProjectDMPEditorModel(); + this.project.getExistProject().fromDataModel(entity.getProject()); + this.associatedUsers = entity.getUsers().stream().map(item -> new UserListingModel().fromDataModel(item.getUser())).collect(Collectors.toList()); + this.users = entity.getUsers().stream().map(item -> new UserInfoListingModel().fromDataModel(item)).collect(Collectors.toList()); + this.funder = new FunderDMPEditorModel(); + this.funder.getExistFunder().fromDataModel(entity.getGrant().getFunder()); + this.extraProperties = entity.getExtraProperties() != null ? objectMapper.readValue(entity.getExtraProperties(), LinkedHashMap.class) : null; + } catch (JsonProcessingException e) { + logger.error(e.getLocalizedMessage(), e); } - this.datasets = entity.getDataset().stream().map(item -> new DatasetWizardModel().fromDataModelNoDmp(item)).collect(Collectors.toList()); - this.modified = entity.getModified(); - this.created = entity.getCreated(); - this.description = entity.getDescription(); - this.status = entity.getStatus(); - this.project = new ProjectDMPEditorModel(); - this.project.getExistProject().fromDataModel(entity.getProject()); - this.associatedUsers = entity.getUsers().stream().map(item -> new UserListingModel().fromDataModel(item.getUser())).collect(Collectors.toList()); - this.users = entity.getUsers().stream().map(item -> new UserInfoListingModel().fromDataModel(item)).collect(Collectors.toList()); - this.funder = new FunderDMPEditorModel(); - this.funder.getExistFunder().fromDataModel(entity.getGrant().getFunder()); - this.extraProperties = entity.getExtraProperties() != null ? new org.json.JSONObject(entity.getExtraProperties()).toMap() : null; return this; } diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/ContactRDAExportModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/ContactRDAExportModel.java deleted file mode 100644 index 6f03ac9f7..000000000 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/ContactRDAExportModel.java +++ /dev/null @@ -1,44 +0,0 @@ -package eu.eudat.models.data.rda; - -import eu.eudat.data.entities.UserInfo; - -public class ContactRDAExportModel { - private String mbox; - private String name; - private IdRDAExportModel contact_id; - - public String getMbox() { - return mbox; - } - public void setMbox(String mbox) { - this.mbox = mbox; - } - - public String getName() { - return name; - } - public void setName(String name) { - this.name = name; - } - - public IdRDAExportModel getContact_id() { - return contact_id; - } - public void setContact_id(IdRDAExportModel contact_id) { - this.contact_id = contact_id; - } - - public ContactRDAExportModel fromDataModel(UserInfo entity) { - ContactRDAExportModel contact = new ContactRDAExportModel(); - contact.mbox = entity.getEmail(); - contact.name = entity.getName(); - // TODO: we should use a contact_id and not our UUID. - if (!entity.getId().toString().isEmpty()) { - contact.contact_id = new IdRDAExportModel(entity.getId().toString(), "other"); - } - else { - contact.contact_id = null; - } - return contact; - } -} diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/DatasetDistributionRDAExportModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/DatasetDistributionRDAExportModel.java deleted file mode 100644 index 0711822cb..000000000 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/DatasetDistributionRDAExportModel.java +++ /dev/null @@ -1,93 +0,0 @@ -package eu.eudat.models.data.rda; - -import com.fasterxml.jackson.annotation.JsonIgnore; - -import java.util.List; - -public class DatasetDistributionRDAExportModel { - private String access_url; - private String available_till; - private String byte_size; - private String data_access; // Allowed values: open / shared / closed - private String description; - private String download_url; - private List format; // Format according to: https://www.iana.org/assignments/media-types/media-types.xhtml if appropriate, otherwise use the common name for this format - private HostRDAExportModel host; - private List license; - private String title; - - public String getAccess_url() { - return access_url; - } - public void setAccess_url(String access_url) { - this.access_url = access_url; - } - - public String getAvailable_till() { - return available_till; - } - public void setAvailable_till(String available_till) { - this.available_till = available_till; - } - - public String getByte_size() { - return byte_size; - } - public void setByte_size(String byte_size) { - this.byte_size = byte_size; - } - - public String getData_access() { - return data_access; - } - public void setData_access(String data_access) { - this.data_access = data_access; - } - - public String getDescription() { - return description; - } - public void setDescription(String description) { - this.description = description; - } - - public String getDownload_url() { - return download_url; - } - public void setDownload_url(String download_url) { - this.download_url = download_url; - } - - public List getFormat() { - return format; - } - public void setFormat(List format) { - this.format = format; - } - - public HostRDAExportModel getHost() { - return host; - } - public void setHost(HostRDAExportModel host) { - this.host = host; - } - - public List getLicense() { - return license; - } - public void setLicense(List license) { - this.license = license; - } - - public String getTitle() { - return title; - } - public void setTitle(String title) { - this.title = title; - } - - @JsonIgnore - public boolean isValid() { - return title != null || data_access != null; - } -} diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/DatasetMetadataRDAExportModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/DatasetMetadataRDAExportModel.java deleted file mode 100644 index 2b5da6abd..000000000 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/DatasetMetadataRDAExportModel.java +++ /dev/null @@ -1,47 +0,0 @@ -package eu.eudat.models.data.rda; - -import com.fasterxml.jackson.annotation.JsonIgnore; - -public class DatasetMetadataRDAExportModel { - private String description; // Not mandatory. - private String language; - private IdRDAExportModel metadata_standard_id; - - public String getDescription() { - return description; - } - public void setDescription(String description) { - this.description = description; - } - - public String getLanguage() { - return language; - } - public void setLanguage(String language) { - this.language = language; - } - - public IdRDAExportModel getMetadata_standard_id() { - return metadata_standard_id; - } - public void setMetadata_standard_id(IdRDAExportModel metadata_standard_id) { - this.metadata_standard_id = metadata_standard_id; - } - - public DatasetMetadataRDAExportModel fromDataModel(String key, Object value) { - DatasetMetadataRDAExportModel metadataRDAExportModel = new DatasetMetadataRDAExportModel(); - if (key.contains("metadata_standard_id")) - metadataRDAExportModel.setMetadata_standard_id(new IdRDAExportModel(value.toString(), "other")); - else if (key.contains("language")) - metadataRDAExportModel.setLanguage(value.toString()); - else if (key.contains("description")) - metadataRDAExportModel.setDescription(value.toString()); - - return metadataRDAExportModel; - } - - @JsonIgnore - public boolean isValid() { - return description != null || language != null || metadata_standard_id != null; - } -} diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/DatasetRDAExportModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/DatasetRDAExportModel.java deleted file mode 100644 index ccd79971f..000000000 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/DatasetRDAExportModel.java +++ /dev/null @@ -1,474 +0,0 @@ -package eu.eudat.models.data.rda; - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.DeserializationFeature; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.jayway.jsonpath.JsonPath; -import eu.eudat.data.entities.Dataset; -import eu.eudat.logic.managers.DatasetManager; -import eu.eudat.logic.utilities.builders.XmlBuilder; -import eu.eudat.models.data.security.Principal; -import org.json.JSONArray; -import org.json.JSONObject; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.w3c.dom.Document; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; - -import javax.xml.xpath.*; -import java.text.DateFormat; -import java.util.*; - -import static java.util.stream.Collectors.groupingBy; - -public class DatasetRDAExportModel { - private static final Logger logger = LoggerFactory.getLogger(DatasetRDAExportModel.class); - - private static final ObjectMapper mapper = new ObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - private Map multiplicityIdToFieldSetId = new HashMap<>(); - - private List data_quality_assurance; - private IdRDAExportModel dataset_id; - private String description; - private List distribution; - private String issued; // Created Date, could also use finalized one. - private List keyword; - private String language; - private List metadata; - private String personal_data; // Allowed Values: yes no unknown. - private String preservation_statement; - private List security_and_privacy; - private String sensitive_data; // Allowed Values: yes no unknown. - private List technical_resource; - private String title; - private String type; // Type according to: http://vocabularies.coar-repositories.org/pubby/resource_type.html - - public List getData_quality_assurance() { - return data_quality_assurance; - } - public void setData_quality_assurance(List data_quality_assurance) { - this.data_quality_assurance = data_quality_assurance; - } - - public IdRDAExportModel getDataset_id() { - return dataset_id; - } - public void setDataset_id(IdRDAExportModel dataset_id) { - this.dataset_id = dataset_id; - } - - public String getDescription() { - return description; - } - public void setDescription(String description) { - this.description = description; - } - - public List getDistribution() { - return distribution; - } - public void setDistribution(List distribution) { - this.distribution = distribution; - } - - public String getIssued() { - return issued; - } - public void setIssued(String issued) { - this.issued = issued; - } - - public List getKeyword() { - return keyword; - } - public void setKeyword(List keyword) { - this.keyword = keyword; - } - - public String getLanguage() { - return language; - } - public void setLanguage(String language) { - this.language = language; - } - - public List getMetadata() { - return metadata; - } - public void setMetadata(List metadata) { - this.metadata = metadata; - } - - public String getPersonal_data() { - return personal_data; - } - public void setPersonal_data(String personal_data) { - this.personal_data = personal_data; - } - - public String getPreservation_statement() { - return preservation_statement; - } - public void setPreservation_statement(String preservation_statement) { - this.preservation_statement = preservation_statement; - } - - public List getSecurity_and_privacy() { - return security_and_privacy; - } - public void setSecurity_and_privacy(List security_and_privacy) { - this.security_and_privacy = security_and_privacy; - } - - public String getSensitive_data() { - return sensitive_data; - } - public void setSensitive_data(String sensitive_data) { - this.sensitive_data = sensitive_data; - } - - public List getTechnical_resource() { - return technical_resource; - } - public void setTechnical_resource(List technical_resource) { - this.technical_resource = technical_resource; - } - - public String getTitle() { - return title; - } - public void setTitle(String title) { - this.title = title; - } - - public String getType() { - return type; - } - public void setType(String type) { - this.type = type; - } - - - public DatasetRDAExportModel fromDataModel(Dataset dataset, DatasetManager datasetManager, Principal principal) { - // Map of template Ids to rda values. - JSONObject jObject = new JSONObject(dataset.getProperties()); - Map templateIdsToValues = jObject.toMap(); - - /*--------- Building dataset rda export model ---------*/ - DatasetRDAExportModel datasetRDAExportModel = new DatasetRDAExportModel(); - datasetRDAExportModel.setDataset_id(new IdRDAExportModel(dataset.getId().toString(), "other")); - if (dataset.getDescription() != null) datasetRDAExportModel.setDescription(dataset.getDescription().replace("\n", " ")); - datasetRDAExportModel.setIssued(DateFormat.getDateInstance(DateFormat.SHORT).format(dataset.getCreated())); - datasetRDAExportModel.setLanguage("en"); // mock data - datasetRDAExportModel.setTitle(dataset.getLabel()); - - // Transform the answered dataset description to json so we can parse it and fill the rda model. - JSONObject datasetDescriptionJson = null; - try { - String jsonResult = mapper.writeValueAsString(datasetManager.getSingle(dataset.getId().toString(), principal).getDatasetProfileDefinition()); - datasetDescriptionJson = new JSONObject(jsonResult); - } catch (JsonProcessingException e) { - logger.error(e.getMessage(), e); - } - setMultiplicityIdToFieldSetId(datasetDescriptionJson); - - /*--------- Building personal data. ---------*/ - String personalData = buildSingleProperties("dataset.personal_data", datasetDescriptionJson, templateIdsToValues); - if (personalData != null) { - datasetRDAExportModel.setPersonal_data(personalData); - } else { - datasetRDAExportModel.setPersonal_data("unknown"); - } - - /*--------- Building preservation statement. ---------*/ - datasetRDAExportModel.setPreservation_statement(buildSingleProperties("dataset.preservation_statement", datasetDescriptionJson, templateIdsToValues)); - - /*--------- Building sensitive data. ---------*/ - String sensitiveData = buildSingleProperties("dataset.sensitive_data", datasetDescriptionJson, templateIdsToValues); - if (personalData != null) { - datasetRDAExportModel.setSensitive_data(sensitiveData); - } else { - datasetRDAExportModel.setSensitive_data("unknown"); - } - - /*--------- Building type. ---------*/ - datasetRDAExportModel.setType(buildSingleProperties("dataset.type", datasetDescriptionJson, templateIdsToValues)); - - /*--------- Building data_quality_assurance. ---------*/ - datasetRDAExportModel.setData_quality_assurance(buildDataQualityAssurance(datasetDescriptionJson, templateIdsToValues, dataset.getProfile().getDefinition())); - - /*--------- Building distribution. ---------*/ - datasetRDAExportModel.setDistribution(buildDistribution(datasetDescriptionJson, templateIdsToValues, dataset.getProfile().getDefinition())); - - /*--------- Building keywords. ---------*/ - datasetRDAExportModel.setKeyword(buildKeywords(datasetDescriptionJson, templateIdsToValues, dataset.getProfile().getDefinition())); - - /*--------- Building metadata items. ---------*/ - datasetRDAExportModel.setMetadata(buildMetadata(datasetDescriptionJson, templateIdsToValues, dataset.getProfile().getDefinition())); - - /*--------- Building security and privacy items. ---------*/ - datasetRDAExportModel.setSecurity_and_privacy(buildSecurityAndPrivacy(datasetDescriptionJson, templateIdsToValues, dataset.getProfile().getDefinition())); - - /*--------- Building technical_resource. ---------*/ - datasetRDAExportModel.setTechnical_resource(buildTechnicalResource(datasetDescriptionJson, templateIdsToValues, dataset.getProfile().getDefinition())); - - return datasetRDAExportModel; - } - - private String buildSingleProperties(String rdaKey, JSONObject datasetDescriptionJson, Map templateIdsToValues) { - String expression = "$..fields[*][?(@.rdaProperty == \"" + rdaKey + "\" )].id"; - List list = jsonValueListFromExpression(datasetDescriptionJson, expression); - if (!list.isEmpty()) { - return templateIdsToValues.get(list.get(0)).toString(); - } else { - return null; - } - } - - private List buildDataQualityAssurance(JSONObject datasetDescriptionJson, Map templateIdsToValues, String datasetProfileDefinition) { - List dataQualityFields = getRDAFieldsFromJson(datasetDescriptionJson, new String[]{"dataset.data_quality_assurance"}, datasetProfileDefinition); - for (RdaField rdaField : dataQualityFields) { - rdaField.setRdaValue(templateIdsToValues.get(rdaField.getFieldId()).toString()); - } - List dataQualityAssuranceList = new LinkedList<>(); - for (RdaField rdaField : dataQualityFields) { - dataQualityAssuranceList.add(rdaField.getRdaValue()); - } - - return dataQualityAssuranceList; - } - - private List buildDistribution(JSONObject datasetDescriptionJson, Map templateIdsToValues, String datasetProfileDefinition) { - DatasetDistributionRDAExportModel distributionModel = new DatasetDistributionRDAExportModel(); - distributionModel.setAccess_url(buildSingleProperties("dataset.distribution.access_url", datasetDescriptionJson, templateIdsToValues)); - distributionModel.setAvailable_till(buildSingleProperties("dataset.distribution.available_till", datasetDescriptionJson, templateIdsToValues)); - distributionModel.setByte_size(buildSingleProperties("dataset.distribution.byte_size", datasetDescriptionJson, templateIdsToValues)); - distributionModel.setData_access(buildSingleProperties("dataset.distribution.data_access", datasetDescriptionJson, templateIdsToValues)); - distributionModel.setDescription(buildSingleProperties("dataset.distribution.description", datasetDescriptionJson, templateIdsToValues)); - distributionModel.setDownload_url(buildSingleProperties("dataset.distribution.download_url", datasetDescriptionJson, templateIdsToValues)); - distributionModel.setTitle(buildSingleProperties("dataset.distribution.title", datasetDescriptionJson, templateIdsToValues)); - - /*--------- Building format. ---------*/ - - - // We currently support the return of only one distribution. - List distributionList = new LinkedList<>(); - if (distributionModel.isValid()) { - distributionList.add(distributionModel); - } else { - DatasetDistributionRDAExportModel model = new DatasetDistributionRDAExportModel(); - model.setDescription("Distribution data was not valid"); - distributionList.add(model); - } - - return distributionList; - } - - private List buildKeywords(JSONObject datasetDescriptionJson, Map templateIdsToValues, String datasetProfileDefinition) { - List keywordFields = getRDAFieldsFromJson(datasetDescriptionJson, new String[]{"dataset.keyword"}, datasetProfileDefinition); - for (RdaField rdaField : keywordFields) { - rdaField.setRdaValue(templateIdsToValues.get(rdaField.getFieldId()).toString()); - } - List keywordsList = new LinkedList<>(); - for (RdaField rdaField : keywordFields) { - keywordsList.add(rdaField.getRdaValue()); - } - - return keywordsList; - } - - private List buildMetadata(JSONObject datasetDescriptionJson, Map templateIdsToValues, String datasetProfileDefinition) { - List metadataFields = getRDAFieldsFromJson(datasetDescriptionJson, - new String[]{"dataset.metadata.metadata_standard_id.type", "dataset.metadata.metadata_standard_id.identifier", "dataset.metadata.description", "dataset.metadata.language", "dataset.metadata.metadata_standard_id"}, - datasetProfileDefinition); - - // Adding rdaValue and FieldSetIds on metadataFields. - for (RdaField rdaField : metadataFields) { - rdaField.setRdaValue(templateIdsToValues.get(rdaField.getFieldId()).toString()); - } - // Group metadataFields based on their field set id. - Map> groupedMetadataFields = metadataFields.stream().collect(groupingBy(RdaField::getFieldSetId)); - - // Creating the metadata. - List metadataRDAExportModelList = new LinkedList<>(); - for (String fieldSetId : groupedMetadataFields.keySet()) { - DatasetMetadataRDAExportModel metadataRda = new DatasetMetadataRDAExportModel(); - for (RdaField rdaField : groupedMetadataFields.get(fieldSetId)) { - if (rdaField.getRdaProperty().equals("dataset.metadata.metadata_standard_id.identifier")) { - if (metadataRda.getMetadata_standard_id() != null) { - metadataRda.getMetadata_standard_id().setIdentifier(rdaField.getRdaValue()); - } else { - metadataRda.setMetadata_standard_id(new IdRDAExportModel(rdaField.getRdaValue(), "other")); - } - } - if (rdaField.getRdaProperty().equals("dataset.metadata.metadata_standard_id.type")) { - if (metadataRda.getMetadata_standard_id() != null) { - metadataRda.getMetadata_standard_id().setType(rdaField.getRdaValue()); - } else { - metadataRda.setMetadata_standard_id(new IdRDAExportModel("", rdaField.getRdaValue())); - } - } - if (rdaField.getRdaProperty().equals("dataset.metadata.description")) { - metadataRda.setDescription(rdaField.getRdaValue()); - } - if (rdaField.getRdaProperty().equals("dataset.metadata.language")) { - metadataRda.setLanguage(rdaField.getRdaValue()); - } - if (rdaField.getRdaProperty().equals("dataset.metadata.metadata_standard_id") && !rdaField.getRdaValue().isEmpty()) { - JSONArray jsonArray = new JSONArray(rdaField.getRdaValue()); - for (int i = 0; i < jsonArray.length(); i++) { - JSONObject jsonObject = jsonArray.getJSONObject(i); - Map jsonObjectMap = jsonObject.toMap(); - DatasetMetadataRDAExportModel metadataRda1 = new DatasetMetadataRDAExportModel(); -// metadataRda1.setMetadata_standard_id(new IdRDAExportModel(jsonObjectMap.get("label").toString(), jsonObjectMap.get("source").toString())); - metadataRda1.setMetadata_standard_id(new IdRDAExportModel(jsonObjectMap.get("uri").toString(), "url")); - metadataRDAExportModelList.add(metadataRda1); - } - } - } - if (metadataRda.isValid()) { - metadataRDAExportModelList.add(metadataRda); - } - } - - return new LinkedList<>(metadataRDAExportModelList); - } - - private List buildSecurityAndPrivacy(JSONObject datasetDescriptionJson, Map templateIdsToValues, String datasetProfileDefinition) { - List secAndPrFields = getRDAFieldsFromJson( - datasetDescriptionJson, - new String[]{"dataset.security_and_privacy.description", "dataset.security_and_privacy.title", "dataset.security_and_privacy"}, - datasetProfileDefinition); - for (RdaField rdaField : secAndPrFields) { - rdaField.setRdaValue(templateIdsToValues.get(rdaField.getFieldId()).toString()); - } - Map> groupedSecurityAndPrivacyFields = secAndPrFields.stream().collect(groupingBy(RdaField::getFieldSetId)); - - List securityAndPrivacyRDAExportModelList = new LinkedList<>(); - for (String fieldSetId : groupedSecurityAndPrivacyFields.keySet()) { - DatasetSecurityAndPrivacyRDAExportModel securityAndPrivacyModel = new DatasetSecurityAndPrivacyRDAExportModel(); - for (RdaField rdaField : groupedSecurityAndPrivacyFields.get(fieldSetId)) { - if (rdaField.getRdaProperty().equals("dataset.security_and_privacy.description")) { - securityAndPrivacyModel.setDescription(rdaField.getRdaValue()); - } - if (rdaField.getRdaProperty().equals("dataset.security_and_privacy.title")) { - securityAndPrivacyModel.setTitle(rdaField.getRdaValue()); - } - if (rdaField.getRdaProperty().equals("dataset.security_and_privacy")) { - JSONArray jsonArray = new JSONArray(rdaField.getRdaValue()); - for (int i = 0; i < jsonArray.length(); i++) { - JSONObject jsonObject = jsonArray.getJSONObject(i); - Map jsonObjectMap = jsonObject.toMap(); - DatasetSecurityAndPrivacyRDAExportModel secAndPrivacy = new DatasetSecurityAndPrivacyRDAExportModel(jsonObjectMap.get("label").toString(), jsonObjectMap.get("source").toString()); - securityAndPrivacyRDAExportModelList.add(secAndPrivacy); - } - } - } - securityAndPrivacyRDAExportModelList.add(securityAndPrivacyModel); - } - - return securityAndPrivacyRDAExportModelList; - } - - private List buildTechnicalResource(JSONObject datasetDescriptionJson, Map templateIdsToValues, String datasetProfileDefinition) { - List dataQualityFields = getRDAFieldsFromJson(datasetDescriptionJson, - new String[]{"dataset.technical_resource.technical_resource", "dataset.technical_resource.technical_resource.description", "dataset.technical_resource.technical_resource.name"}, - datasetProfileDefinition); - for (RdaField rdaField : dataQualityFields) { - rdaField.setRdaValue(templateIdsToValues.get(rdaField.getFieldId()).toString()); - } - List technicalResourceList = new LinkedList<>(); - Map> groupedDataQualityFields = dataQualityFields.stream().collect(groupingBy(RdaField::getFieldSetId)); - for (String fieldSetId : groupedDataQualityFields.keySet()) { - DatasetTechnicalResourceRDAExportModel technicalResourceModel = new DatasetTechnicalResourceRDAExportModel(); - for (RdaField rdaField : groupedDataQualityFields.get(fieldSetId)) { - if (rdaField.getRdaProperty().equals("dataset.technical_resource.technical_resource.description")) { - technicalResourceModel.setDescription(rdaField.getRdaValue()); - } - if (rdaField.getRdaProperty().equals("dataset.technical_resource.technical_resource.name")) { - technicalResourceModel.setName(rdaField.getRdaValue()); - } - if (rdaField.getRdaProperty().equals("dataset.security_and_privacy")) { - JSONArray jsonArray = new JSONArray(rdaField.getRdaValue()); - for (int i = 0; i < jsonArray.length(); i++) { - JSONObject jsonObject = jsonArray.getJSONObject(i); - Map jsonObjectMap = jsonObject.toMap(); - DatasetTechnicalResourceRDAExportModel technicalResource = new DatasetTechnicalResourceRDAExportModel(jsonObjectMap.get("label").toString(), jsonObjectMap.get("label").toString()); - technicalResourceList.add(technicalResource); - } - } - } - technicalResourceList.add(technicalResourceModel); - } - - return technicalResourceList; - } - - private void setMultiplicityIdToFieldSetId(JSONObject json) { - String multiplicityItemsFieldSetIdExp = "$..multiplicityItems[*].id"; - List multiplicityItemsFieldSetIdList = jsonValueListFromExpression(json, multiplicityItemsFieldSetIdExp); - for (String fieldSetId : multiplicityItemsFieldSetIdList) { - String fieldsFromFieldSetIdExp = "$..multiplicityItems[*][?(@.id == \""+ fieldSetId +"\")].fields[*].id"; - List fieldsIdList = jsonValueListFromExpression(json, fieldsFromFieldSetIdExp); - for (String fieldId : fieldsIdList) { - this.multiplicityIdToFieldSetId.put(fieldId, fieldSetId); - } - } - } - - private List getRDAFieldsFromJson(JSONObject json, String[] rdaKey, String datasetProfileDefinition) { - List rdaFields = new LinkedList<>(); - for (String key : rdaKey) { - String fieldIdExpression = "$..fields[*][?(@.rdaProperty == \"" + key + "\" )].id"; - List listFromExpression = jsonValueListFromExpression(json, fieldIdExpression); - for (String fieldId : listFromExpression) { - RdaField rdaField = new RdaField(); - rdaField.setRdaProperty(key); - rdaField.setFieldId(fieldId); - if (fieldId.startsWith("multiple_")) { - rdaField.setFieldSetId(this.multiplicityIdToFieldSetId.get(fieldId)); - } else { - rdaField.setFieldSetId(getFieldSetIdForFieldFromXML(datasetProfileDefinition, fieldId)); - } - rdaFields.add(rdaField); - } - } - return rdaFields; - } - - private List jsonValueListFromExpression(JSONObject json, String expression) { - net.minidev.json.JSONArray jsonArray = JsonPath.parse(json.toString()).read(expression); - List valueList = new LinkedList<>(); - for (Object o : jsonArray) { - valueList.add(o.toString()); - } - return valueList; - } - - private String getFieldSetIdForFieldFromXML(String datasetProfileDefinition, String fieldId) { - String fieldSetIdExpression = "//field[@id ='" + fieldId + "']/ancestor::fieldSet/@id"; - List listFromExpression = xmlValueListFromExpression(datasetProfileDefinition, fieldSetIdExpression); - if (listFromExpression.size() == 1) return listFromExpression.get(0); - return null; - } - - private List xmlValueListFromExpression(String xml, String expression) { - List valuesList = new LinkedList<>(); - Document document = XmlBuilder.fromXml(xml); - XPathFactory xpathFactory = XPathFactory.newInstance(); - XPath xpath = xpathFactory.newXPath(); - try { - XPathExpression expr = xpath.compile(expression); - NodeList nodeList = (NodeList) expr.evaluate(document, XPathConstants.NODESET); - for (int i = 0; i < nodeList.getLength(); i++) { - Node node = nodeList.item(i); - valuesList.add(node.getNodeValue()); - } - } catch (XPathExpressionException e) { - logger.error(e.getMessage(), e); - } - - return valuesList; - } -} diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/DatasetSecurityAndPrivacyRDAExportModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/DatasetSecurityAndPrivacyRDAExportModel.java deleted file mode 100644 index a2d2a5581..000000000 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/DatasetSecurityAndPrivacyRDAExportModel.java +++ /dev/null @@ -1,29 +0,0 @@ -package eu.eudat.models.data.rda; - -public class DatasetSecurityAndPrivacyRDAExportModel { - private String description; - private String title; - - public DatasetSecurityAndPrivacyRDAExportModel() { - - } - - public DatasetSecurityAndPrivacyRDAExportModel(String description, String title) { - this.description = description; - this.title = title; - } - - public String getDescription() { - return description; - } - public void setDescription(String description) { - this.description = description; - } - - public String getTitle() { - return title; - } - public void setTitle(String title) { - this.title = title; - } -} diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/DatasetTechnicalResourceRDAExportModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/DatasetTechnicalResourceRDAExportModel.java deleted file mode 100644 index 6c47ea98e..000000000 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/DatasetTechnicalResourceRDAExportModel.java +++ /dev/null @@ -1,28 +0,0 @@ -package eu.eudat.models.data.rda; - -public class DatasetTechnicalResourceRDAExportModel { - private String description; - private String name; - - public String getDescription() { - return description; - } - public void setDescription(String description) { - this.description = description; - } - - public String getName() { - return name; - } - public void setName(String name) { - this.name = name; - } - - public DatasetTechnicalResourceRDAExportModel(String description, String name) { - this.description = description; - this.name = name; - } - - public DatasetTechnicalResourceRDAExportModel() { - } -} \ No newline at end of file diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/DmpContributorRDAExportModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/DmpContributorRDAExportModel.java deleted file mode 100644 index 47079023f..000000000 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/DmpContributorRDAExportModel.java +++ /dev/null @@ -1,52 +0,0 @@ -package eu.eudat.models.data.rda; - -import eu.eudat.data.entities.UserInfo; - -import java.util.LinkedList; -import java.util.List; - -public class DmpContributorRDAExportModel { - private IdRDAExportModel contributor_id; - private String mbox; - private String name; - private List role; - - public IdRDAExportModel getContributor_id() { - return contributor_id; - } - public void setContributor_id(IdRDAExportModel contributor_id) { - this.contributor_id = contributor_id; - } - - public String getMbox() { - return mbox; - } - public void setMbox(String mbox) { - this.mbox = mbox; - } - - public String getName() { - return name; - } - public void setName(String name) { - this.name = name; - } - - public List getRole() { - return role; - } - public void setRole(List role) { - this.role = role; - } - - public DmpContributorRDAExportModel fromDataModel(UserInfo user, String role) { - DmpContributorRDAExportModel contributor = new DmpContributorRDAExportModel(); - contributor.contributor_id = new IdRDAExportModel(user.getId().toString(), "other"); - contributor.mbox = user.getEmail(); - contributor.name = user.getName(); - contributor.role = new LinkedList<>(); - contributor.role.add(role); - - return contributor; - } -} diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/DmpCostRDAExportModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/DmpCostRDAExportModel.java deleted file mode 100644 index 98abbadd8..000000000 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/DmpCostRDAExportModel.java +++ /dev/null @@ -1,36 +0,0 @@ -package eu.eudat.models.data.rda; - -public class DmpCostRDAExportModel { - private String currency_code; //Allowed values defined by ISO 4217. - private String description; - private String title; - private String value; - - public String getCurrency_code() { - return currency_code; - } - public void setCurrency_code(String currency_code) { - this.currency_code = currency_code; - } - - public String getDescription() { - return description; - } - public void setDescription(String description) { - this.description = description; - } - - public String getTitle() { - return title; - } - public void setTitle(String title) { - this.title = title; - } - - public String getValue() { - return value; - } - public void setValue(String value) { - this.value = value; - } -} diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/DmpRDAExportModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/DmpRDAExportModel.java deleted file mode 100644 index 47147fc4e..000000000 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/DmpRDAExportModel.java +++ /dev/null @@ -1,164 +0,0 @@ -package eu.eudat.models.data.rda; - -import eu.eudat.data.entities.DMP; -import eu.eudat.data.entities.Dataset; -import eu.eudat.data.entities.UserDMP; -import eu.eudat.data.entities.UserInfo; -import eu.eudat.logic.managers.DatasetManager; -import eu.eudat.models.data.security.Principal; - -import java.text.DateFormat; -import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.LinkedList; -import java.util.List; -import java.util.stream.Collectors; - -public class DmpRDAExportModel { - private ContactRDAExportModel contact; - private List contributor; - private List cost; - private String created; - private List dataset; - private String description; - private IdRDAExportModel dmp_id; - private String ethical_issues_description; - private String ethical_issues_exist; // Allowed Values: yes no unknown. - private String ethical_issues_report; - private String language; - private String modified; - private ProjectRDAExportModel project; - private String title; - - public ContactRDAExportModel getContact() { - return contact; - } - public void setContact(ContactRDAExportModel contact) { - this.contact = contact; - } - - public List getContributor() { - return contributor; - } - public void setContributor(List contributor) { - this.contributor = contributor; - } - - public List getCost() { - return cost; - } - public void setCost(List cost) { - this.cost = cost; - } - - public String getCreated() { - return created; - } - public void setCreated(String created) { - this.created = created; - } - - public List getDataset() { - return dataset; - } - public void setDataset(List dataset) { - this.dataset = dataset; - } - - public String getDescription() { - return description; - } - public void setDescription(String description) { - this.description = description; - } - - public IdRDAExportModel getDmp_id() { - return dmp_id; - } - public void setDmp_id(IdRDAExportModel dmp_id) { - this.dmp_id = dmp_id; - } - - public String getEthical_issues_description() { - return ethical_issues_description; - } - public void setEthical_issues_description(String ethical_issues_description) { - this.ethical_issues_description = ethical_issues_description; - } - - public String getEthical_issues_exist() { - return ethical_issues_exist; - } - public void setEthical_issues_exist(String ethical_issues_exist) { - this.ethical_issues_exist = ethical_issues_exist; - } - - public String getEthical_issues_report() { - return ethical_issues_report; - } - public void setEthical_issues_report(String ethical_issues_report) { - this.ethical_issues_report = ethical_issues_report; - } - - public String getLanguage() { - return language; - } - public void setLanguage(String language) { - this.language = language; - } - - public String getModified() { - return modified; - } - public void setModified(String modified) { - this.modified = modified; - } - - public ProjectRDAExportModel getProject() { - return project; - } - public void setProject(ProjectRDAExportModel project) { - this.project = project; - } - - public String getTitle() { - return title; - } - public void setTitle(String title) { - this.title = title; - } - - public DmpRDAExportModel fromDataModel(DMP entity, DatasetManager datasetManager, Principal principal) { - DmpRDAExportModel dmpRda = new DmpRDAExportModel(); - dmpRda.contact = new ContactRDAExportModel().fromDataModel(entity.getUsers().stream().filter(x -> x.getRole().equals(UserDMP.UserDMPRoles.OWNER.getValue())).findFirst().get().getUser()); - if (entity.getUsers().stream().anyMatch(x -> x.getRole().equals(UserDMP.UserDMPRoles.USER.getValue()))) { - dmpRda.contributor = new LinkedList<>(); - for (UserDMP userdmp : entity.getUsers().stream().filter(x -> x.getRole().equals(UserDMP.UserDMPRoles.USER.getValue())).collect(Collectors.toList())) { - dmpRda.contributor.add(new DmpContributorRDAExportModel().fromDataModel(userdmp.getUser(), UserDMP.UserDMPRoles.fromInteger(userdmp.getRole()).toString())); - } - } - dmpRda.cost = null; - SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy"); - dmpRda.created = formatter.format(entity.getCreated()); - dmpRda.dataset = new LinkedList<>(); - for (Dataset dataset : entity.getDataset()) { - if (dataset.getStatus() != Dataset.Status.DELETED.getValue() && dataset.getStatus() != Dataset.Status.CANCELED.getValue()) - dmpRda.dataset.add(new DatasetRDAExportModel().fromDataModel(dataset, datasetManager, principal)); - } - dmpRda.description = entity.getDescription().replace("\n", " "); - if (entity.getDoi() != null) { - dmpRda.dmp_id = new IdRDAExportModel(entity.getDoi(), "zenodo"); - } - else { - dmpRda.dmp_id = new IdRDAExportModel(entity.getId().toString(), "other"); - } - // Mock up data on "language" and "ethical_issues_*" for now. - dmpRda.ethical_issues_exist = "unknown"; - dmpRda.language = "en"; - dmpRda.modified = formatter.format(new Date()); - dmpRda.project = new ProjectRDAExportModel().fromDataModel(entity.getGrant()); - dmpRda.title = entity.getLabel(); - - return dmpRda; - } -} diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/FundingRDAExportModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/FundingRDAExportModel.java deleted file mode 100644 index 5691cae2c..000000000 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/FundingRDAExportModel.java +++ /dev/null @@ -1,43 +0,0 @@ -package eu.eudat.models.data.rda; - -import eu.eudat.data.entities.Funder; -import eu.eudat.data.entities.Grant; - -public class FundingRDAExportModel { - private IdRDAExportModel funder_id; - private IdRDAExportModel grant_id; - private String funding_status; - - public IdRDAExportModel getFunder_id() { - return funder_id; - } - public void setFunder_id(IdRDAExportModel funder_id) { - this.funder_id = funder_id; - } - - public IdRDAExportModel getGrant_id() { - return grant_id; - } - public void setGrant_id(IdRDAExportModel grant_id) { - this.grant_id = grant_id; - } - - public String getFunding_status() { - return funding_status; - } - public void setFunding_status(String funding_status) { - this.funding_status = funding_status; - } - - public FundingRDAExportModel fromDataModel(Funder funder, Grant grant) { - FundingRDAExportModel funding = new FundingRDAExportModel(); - funding.funding_status = "planned"; // mock data - if (funder != null) { - funding.funder_id = new IdRDAExportModel(funder.getReference(), "other"); - } - if (grant != null) { - funding.grant_id = new IdRDAExportModel(grant.getReference(), "other"); - } - return funding; - } -} diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/HostRDAExportModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/HostRDAExportModel.java deleted file mode 100644 index bac169259..000000000 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/HostRDAExportModel.java +++ /dev/null @@ -1,86 +0,0 @@ -package eu.eudat.models.data.rda; - -import java.util.List; - -public class HostRDAExportModel { - private String availability; - private String backup__frequency; - private String backup_type; - private String certified_with; // Repository certified with one the following standards: DIN31644 / DINI-Zertifikat / DSA / ISO16363 / ISO16919 /TRAC / WDS / CoreTrustSeal - private String description; - private String geo_location; // Physical location of the data expressed using ISO 3166-1 country code. - private List pid_system; // PID System: ark arxiv bibcode doi ean13 eissn handle igsn isbn issn istc lissn lsid pmid purl upc url urn other - private String storage_type; - private String support_versioning; // Allowed values: yes / no / unknown - private String title; - - public String getAvailability() { - return availability; - } - public void setAvailability(String availability) { - this.availability = availability; - } - - public String getBackup__frequency() { - return backup__frequency; - } - public void setBackup__frequency(String backup__frequency) { - this.backup__frequency = backup__frequency; - } - - public String getBackup_type() { - return backup_type; - } - public void setBackup_type(String backup_type) { - this.backup_type = backup_type; - } - - public String getCertified_with() { - return certified_with; - } - public void setCertified_with(String certified_with) { - this.certified_with = certified_with; - } - - public String getDescription() { - return description; - } - public void setDescription(String description) { - this.description = description; - } - - public String getGeo_location() { - return geo_location; - } - public void setGeo_location(String geo_location) { - this.geo_location = geo_location; - } - - public List getPid_system() { - return pid_system; - } - public void setPid_system(List pid_system) { - this.pid_system = pid_system; - } - - public String getStorage_type() { - return storage_type; - } - public void setStorage_type(String storage_type) { - this.storage_type = storage_type; - } - - public String getSupport_versioning() { - return support_versioning; - } - public void setSupport_versioning(String support_versioning) { - this.support_versioning = support_versioning; - } - - public String getTitle() { - return title; - } - public void setTitle(String title) { - this.title = title; - } -} diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/IdRDAExportModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/IdRDAExportModel.java deleted file mode 100644 index 2aef46e5b..000000000 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/IdRDAExportModel.java +++ /dev/null @@ -1,25 +0,0 @@ -package eu.eudat.models.data.rda; - -public class IdRDAExportModel { - private String identifier; - private String type; - - public String getIdentifier() { - return identifier; - } - public void setIdentifier(String identifier) { - this.identifier = identifier; - } - - public String getType() { - return type; - } - public void setType(String type) { - this.type = type; - } - - IdRDAExportModel(String identifier, String type) { - this.identifier = identifier; - this.type = type; - } -} diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/LicenseRDAExportModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/LicenseRDAExportModel.java deleted file mode 100644 index dec57a467..000000000 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/LicenseRDAExportModel.java +++ /dev/null @@ -1,20 +0,0 @@ -package eu.eudat.models.data.rda; - -public class LicenseRDAExportModel { - private String license_ref; - private String start_date; // If date is set in the future, it indicates embargo period. - - public String getLicense_ref() { - return license_ref; - } - public void setLicense_ref(String license_ref) { - this.license_ref = license_ref; - } - - public String getStart_date() { - return start_date; - } - public void setStart_date(String start_date) { - this.start_date = start_date; - } -} diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/ProjectRDAExportModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/ProjectRDAExportModel.java deleted file mode 100644 index 2d5b1912a..000000000 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/ProjectRDAExportModel.java +++ /dev/null @@ -1,54 +0,0 @@ -package eu.eudat.models.data.rda; - -import eu.eudat.data.entities.Grant; - -import java.util.Date; - -public class ProjectRDAExportModel { - private String title; - private String description; - private Date project_start; - private Date project_end; - private FundingRDAExportModel funding; - - public String getTitle() { - return title; - } - public void setTitle(String title) { - this.title = title; - } - - public String getDescription() { - return description; - } - public void setDescription(String description) { - this.description = description; - } - - public Date getProject_start() { - return project_start; - } - public void setProject_start(Date project_start) { - this.project_start = project_start; - } - - public Date getProject_end() { - return project_end; - } - public void setProject_end(Date project_end) { - this.project_end = project_end; - } - - public FundingRDAExportModel getFunding() { - return funding; - } - public void setFunding(FundingRDAExportModel funding) { - this.funding = funding; - } - - - public ProjectRDAExportModel fromDataModel(Grant grant) { - this.funding = new FundingRDAExportModel().fromDataModel(grant.getFunder(), grant); - return this; - } -} diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/RDAExportModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/RDAExportModel.java deleted file mode 100644 index 98bb5627d..000000000 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/RDAExportModel.java +++ /dev/null @@ -1,25 +0,0 @@ -package eu.eudat.models.data.rda; - -import eu.eudat.data.entities.DMP; -import eu.eudat.data.entities.Dataset; -import eu.eudat.logic.managers.DatasetManager; -import eu.eudat.models.data.security.Principal; - -import java.util.LinkedList; -import java.util.List; - -public class RDAExportModel { - private DmpRDAExportModel dmp; - - public DmpRDAExportModel getDmp() { - return dmp; - } - public void setDmp(DmpRDAExportModel dmp) { - this.dmp = dmp; - } - - public RDAExportModel fromDataModel(DMP dmp, DatasetManager datasetManager, Principal principal) { - this.dmp = new DmpRDAExportModel().fromDataModel(dmp, datasetManager, principal); - return this; - } -} diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/RdaField.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/RdaField.java deleted file mode 100644 index 31acd5c51..000000000 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/rda/RdaField.java +++ /dev/null @@ -1,36 +0,0 @@ -package eu.eudat.models.data.rda; - -public class RdaField { - private String rdaProperty; - private String rdaValue; - private String fieldId; - private String fieldSetId; - - public String getRdaProperty() { - return rdaProperty; - } - public void setRdaProperty(String rdaProperty) { - this.rdaProperty = rdaProperty; - } - - public String getRdaValue() { - return rdaValue; - } - public void setRdaValue(String rdaValue) { - this.rdaValue = rdaValue; - } - - public String getFieldId() { - return fieldId; - } - public void setFieldId(String fieldId) { - this.fieldId = fieldId; - } - - public String getFieldSetId() { - return fieldSetId; - } - public void setFieldSetId(String fieldSetId) { - this.fieldSetId = fieldSetId; - } -} diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/user/components/datasetprofile/Field.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/user/components/datasetprofile/Field.java index 2a006ec5b..956c753bb 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/user/components/datasetprofile/Field.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/user/components/datasetprofile/Field.java @@ -2,18 +2,14 @@ package eu.eudat.models.data.user.components.datasetprofile; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; +import eu.eudat.logic.utilities.builders.ModelBuilder; +import eu.eudat.logic.utilities.interfaces.ViewStyleDefinition; import eu.eudat.models.data.components.commons.DefaultValue; import eu.eudat.models.data.components.commons.Multiplicity; import eu.eudat.models.data.components.commons.ViewStyle; import eu.eudat.models.data.components.commons.Visibility; import eu.eudat.models.data.properties.PropertiesGenerator; import eu.eudat.models.data.user.composite.PropertiesModelBuilder; -import eu.eudat.logic.utilities.interfaces.ViewStyleDefinition; -import eu.eudat.logic.utilities.builders.ModelBuilder; - -import org.json.JSONArray; -import org.json.JSONException; -import org.json.JSONObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -26,6 +22,7 @@ import java.util.stream.Collectors; public class Field implements Comparable, PropertiesModelBuilder, ViewStyleDefinition, PropertiesGenerator { private static final Logger logger = LoggerFactory.getLogger(Field.class); + private static final ObjectMapper objectMapper = new ObjectMapper(); private String id; private Integer ordinal; private Object value; @@ -205,10 +202,9 @@ public class Field implements Comparable, PropertiesModelBuilder, ViewStyleDefin @Override public void fromJsonObject(Map properties) { try { - ObjectMapper mapper = new ObjectMapper(); - List stringList = mapper.readValue(properties.get(this.id).toString(), LinkedList.class); + List stringList = objectMapper.readValue(properties.get(this.id).toString(), LinkedList.class); this.value = stringList; - } catch (JSONException | NullPointerException | IOException e) { + } catch (NullPointerException | IOException e) { try { this.value = (String) properties.get(this.id); } catch (ClassCastException ce) { diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/CostRDAMapper.java b/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/CostRDAMapper.java index aa76750d7..dc1a83adc 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/CostRDAMapper.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/CostRDAMapper.java @@ -1,30 +1,33 @@ package eu.eudat.models.rda.mapper; -import java.util.*; -import java.util.stream.Collectors; - import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; -import eu.eudat.logic.utilities.json.JavaToJson; import eu.eudat.models.rda.Cost; -import eu.eudat.models.rda.PidSystem; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.util.*; +import java.util.stream.Collectors; + public class CostRDAMapper { private static final Logger logger = LoggerFactory.getLogger(DatasetRDAMapper.class); - + private static final ObjectMapper objectMapper = new ObjectMapper(); + public static Cost toRDA(Map cost) { Cost rda = new Cost(); - Map code = new org.json.JSONObject((String) cost.get("code")).toMap(); - rda.setCurrencyCode(Cost.CurrencyCode.fromValue((String) code.get("value"))); - rda.setDescription((String) cost.get("description")); - if (cost.get("title") == null) { - throw new IllegalArgumentException("Cost Title is missing"); + try { + Map code = objectMapper.readValue((String) cost.get("code"), LinkedHashMap.class); + rda.setCurrencyCode(Cost.CurrencyCode.fromValue((String) code.get("value"))); + rda.setDescription((String) cost.get("description")); + if (cost.get("title") == null) { + throw new IllegalArgumentException("Cost Title is missing"); + } + rda.setTitle((String) cost.get("title")); + rda.setValue(((Integer) cost.get("value")).doubleValue()); + } catch (JsonProcessingException e) { + logger.error(e.getLocalizedMessage(), e); } - rda.setTitle((String) cost.get("title")); - rda.setValue(((Integer) cost.get("value")).doubleValue()); return rda; } @@ -55,8 +58,8 @@ public class CostRDAMapper { rda.setValue(Double.valueOf(rdaValue)); } else if(rdaProperty.contains("currency_code")){ - HashMap result = - new ObjectMapper().readValue(rdaValue, HashMap.class); + HashMap result = + objectMapper.readValue(rdaValue, HashMap.class); rda.setCurrencyCode(Cost.CurrencyCode.fromValue(result.get("value"))); } else if(rdaProperty.contains("title")){ diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/DatasetRDAMapper.java b/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/DatasetRDAMapper.java index 39b4187c3..02e9ef68d 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/DatasetRDAMapper.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/DatasetRDAMapper.java @@ -12,7 +12,6 @@ import eu.eudat.logic.utilities.json.JsonSearcher; import eu.eudat.models.data.datasetprofile.DatasetProfileOverviewModel; import eu.eudat.models.data.datasetwizard.DatasetWizardModel; import eu.eudat.models.rda.*; -import org.json.JSONObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -52,8 +51,7 @@ public class DatasetRDAMapper { rda.setDescription(dataset.getDescription()); rda.setAdditionalProperty("template", dataset.getProfile().getId()); try { - JSONObject jObject = new JSONObject(dataset.getProperties()); - Map templateIdsToValues = jObject.toMap(); + Map templateIdsToValues = apiContext.getUtilitiesService().getGenericObjectMapper().readValue(dataset.getProperties(), LinkedHashMap.class); DatasetWizardModel datasetWizardModel = new DatasetWizardModel().fromDataModel(dataset); datasetWizardModel.setDatasetProfileDefinition(datasetManager.getPagedProfile(datasetWizardModel, dataset)); ObjectMapper mapper = new ObjectMapper(); diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/DmpRDAMapper.java b/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/DmpRDAMapper.java index 539367e10..a45c896df 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/DmpRDAMapper.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/DmpRDAMapper.java @@ -1,5 +1,6 @@ package eu.eudat.models.rda.mapper; +import com.fasterxml.jackson.core.JsonProcessingException; import eu.eudat.data.entities.*; import eu.eudat.logic.services.ApiContext; import eu.eudat.logic.utilities.helpers.StreamDistinctBy; @@ -7,6 +8,8 @@ import eu.eudat.models.rda.Cost; import eu.eudat.models.rda.Dmp; import eu.eudat.models.rda.DmpId; import net.minidev.json.JSONObject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -17,6 +20,7 @@ import java.util.stream.Collectors; @Component public class DmpRDAMapper { + private static final Logger logger = LoggerFactory.getLogger(DmpRDAMapper.class); private DatasetRDAMapper datasetRDAMapper; private ApiContext apiContext; @@ -34,15 +38,19 @@ public class DmpRDAMapper { if (dmp.getDataset() == null || dmp.getDataset().isEmpty()) { throw new IllegalArgumentException("DMP has no Datasets"); } - Map extraProperties; + Map extraProperties = null; if (dmp.getExtraProperties() == null) { throw new IllegalArgumentException("DMP is missing language and contact properties"); } else { - extraProperties = new org.json.JSONObject(dmp.getExtraProperties()).toMap(); + try { + extraProperties = apiContext.getUtilitiesService().getGenericObjectMapper().readValue(dmp.getExtraProperties(), LinkedHashMap.class); + } catch (JsonProcessingException e) { + logger.error(e.getLocalizedMessage(), e); + } /*if (extraProperties.get("language") == null) { throw new IllegalArgumentException("DMP must have it's language property defined"); }*/ - if (extraProperties.get("contact") == null) { + if (extraProperties != null && extraProperties.get("contact") == null) { throw new IllegalArgumentException("DMP must have it's contact property defined"); } } @@ -66,7 +74,7 @@ public class DmpRDAMapper { rda.setModified(dmp.getModified()); rda.setTitle(dmp.getLabel()); - if (!extraProperties.isEmpty()) { + if (extraProperties != null && !extraProperties.isEmpty()) { if (extraProperties.get("ethicalIssues") != null) { rda.setEthicalIssuesExist(Dmp.EthicalIssuesExist.fromValue(extraProperties.get("ethicalIssues").toString())); } else { @@ -76,7 +84,7 @@ public class DmpRDAMapper { if (extraProperties.get("costs") != null) { rda.setCost(new ArrayList<>()); ((List) extraProperties.get("costs")).forEach(costl -> { - rda.getCost().add(CostRDAMapper.toRDA((Map)costl)); + rda.getCost().add(CostRDAMapper.toRDA((Map) costl)); }); } UserInfo contact = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(UUID.fromString((String) extraProperties.get("contact"))); @@ -107,7 +115,7 @@ public class DmpRDAMapper { if (rda.getDmpId().getType() == DmpId.Type.DOI) { entity.setDoi(rda.getDmpId().getIdentifier()); } - if (((List) rda.getAdditionalProperties().get("templates")) != null && !((List) rda.getAdditionalProperties().get("templates")).isEmpty()) { + if (rda.getAdditionalProperties().get("templates") != null && !((List) rda.getAdditionalProperties().get("templates")).isEmpty()) { entity.setAssociatedDmps(((List) rda.getAdditionalProperties().get("templates")).stream().map(this::getProfile).filter(Objects::nonNull).collect(Collectors.toSet())); } if (entity.getAssociatedDmps() == null) { From f5873ab9b003e25163f76acaf434c1c916ec4a15 Mon Sep 17 00:00:00 2001 From: George Kalampokis Date: Mon, 18 Apr 2022 18:30:15 +0300 Subject: [PATCH 33/37] Resolve some additional maven depedency deprecations and improve performance --- .../elastic/repository/ElasticRepository.java | 2 +- .../QueryableHibernateList.java | 4 ++- .../configurations/JacksonConfiguration.java | 30 ---------------- .../controllers/DatasetProfileController.java | 4 --- .../logic/managers/DashBoardManager.java | 35 ++++++++----------- .../zenodo/mapper/DMPToZenodoMapper.java | 17 +++++++-- 6 files changed, 32 insertions(+), 60 deletions(-) delete mode 100644 dmp-backend/web/src/main/java/eu/eudat/configurations/JacksonConfiguration.java diff --git a/dmp-backend/elastic/src/main/java/eu/eudat/elastic/repository/ElasticRepository.java b/dmp-backend/elastic/src/main/java/eu/eudat/elastic/repository/ElasticRepository.java index 11c7d1bca..410798671 100644 --- a/dmp-backend/elastic/src/main/java/eu/eudat/elastic/repository/ElasticRepository.java +++ b/dmp-backend/elastic/src/main/java/eu/eudat/elastic/repository/ElasticRepository.java @@ -17,6 +17,7 @@ import java.io.IOException; */ public abstract class ElasticRepository implements Repository { private static final Logger logger = LoggerFactory.getLogger(ElasticRepository.class); + private final ObjectMapper mapper = new ObjectMapper(); private RestHighLevelClient client; public RestHighLevelClient getClient() { @@ -35,7 +36,6 @@ public abstract class ElasticRepository T transformFromString(String value, Class tClass) { - ObjectMapper mapper = new ObjectMapper(); T item = null; try { item = mapper.readValue(value, tClass); diff --git a/dmp-backend/queryable/src/main/java/eu/eudat/queryable/jpa/hibernatequeryablelist/QueryableHibernateList.java b/dmp-backend/queryable/src/main/java/eu/eudat/queryable/jpa/hibernatequeryablelist/QueryableHibernateList.java index 54800f43a..4f6cdafde 100644 --- a/dmp-backend/queryable/src/main/java/eu/eudat/queryable/jpa/hibernatequeryablelist/QueryableHibernateList.java +++ b/dmp-backend/queryable/src/main/java/eu/eudat/queryable/jpa/hibernatequeryablelist/QueryableHibernateList.java @@ -42,9 +42,12 @@ public class QueryableHibernateList implements QueryableLi private String hint; private Map joinsMap = new HashMap<>(); + private final ObjectMapper mapper; + public QueryableHibernateList(EntityManager manager, Class tClass) { this.manager = manager; this.tClass = tClass; + this.mapper = new ObjectMapper(); } public QueryableHibernateList setManager(EntityManager manager) { @@ -246,7 +249,6 @@ public class QueryableHibernateList implements QueryableLi if (!this.fields.isEmpty()) this.selectFields(); if (distinct) this.query.distinct(true); //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(); } diff --git a/dmp-backend/web/src/main/java/eu/eudat/configurations/JacksonConfiguration.java b/dmp-backend/web/src/main/java/eu/eudat/configurations/JacksonConfiguration.java deleted file mode 100644 index 266c23ede..000000000 --- a/dmp-backend/web/src/main/java/eu/eudat/configurations/JacksonConfiguration.java +++ /dev/null @@ -1,30 +0,0 @@ -package eu.eudat.configurations; - -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.databind.DeserializationFeature; -import com.fasterxml.jackson.databind.Module; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.SerializationFeature; -import com.fasterxml.jackson.databind.module.SimpleModule; -import eu.eudat.criteria.entities.Criteria; -import eu.eudat.criteria.serialzier.CriteriaSerializer; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -import java.util.ArrayList; - -@Configuration -public class JacksonConfiguration { - @Bean - public ObjectMapper buildObjectMapper() { - - ArrayList modules = new ArrayList<>(); - SimpleModule criteriaSerializerModule = new SimpleModule(); - criteriaSerializerModule.addDeserializer(Criteria.class, new CriteriaSerializer()); - modules.add(criteriaSerializerModule); - - return new ObjectMapper() - .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false) - .registerModules(modules); - } -} diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/DatasetProfileController.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/DatasetProfileController.java index 5f16cb390..a7e059ffc 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/DatasetProfileController.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/DatasetProfileController.java @@ -9,9 +9,7 @@ import eu.eudat.models.data.components.commons.datafield.AutoCompleteData; import eu.eudat.models.data.externaldataset.ExternalAutocompleteFieldModel; import eu.eudat.models.data.helpers.common.AutoCompleteLookupItem; import eu.eudat.models.data.helpers.responses.ResponseItem; -import eu.eudat.models.data.properties.PropertiesModel; import eu.eudat.models.data.security.Principal; -import org.json.JSONObject; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -19,9 +17,7 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; import javax.xml.xpath.XPathExpressionException; -import java.util.HashMap; import java.util.List; -import java.util.Map; import java.util.UUID; import static eu.eudat.types.Authorities.ADMIN; diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DashBoardManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DashBoardManager.java index aded6d599..ae6a9ace5 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DashBoardManager.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DashBoardManager.java @@ -47,17 +47,17 @@ import java.util.stream.Stream; public class DashBoardManager { private static final Logger logger = LoggerFactory.getLogger(DashBoardManager.class); - private final Map> comparators = Stream.of(new Object[][] { - { "modified", Comparator.comparing(o -> ((RecentActivityModel)o).getModified()).reversed()}, - { "created", Comparator.comparing(o -> ((RecentActivityModel)o).getCreated()).reversed()}, - { "label", Comparator.comparing(o -> ((RecentActivityModel)o).getTitle())}, - { "status", Comparator.comparing(o -> ((RecentActivityModel)o).getStatus()).reversed()}, - { "finalizedAt", Comparator.comparing(o -> ((RecentActivityModel)o).getFinalizedAt(), Comparator.nullsLast(Comparator.naturalOrder())).reversed()}, - { "publishedAt", Comparator.comparing(o -> ((RecentActivityModel)o).getPublishedAt(), Comparator.nullsLast(Comparator.naturalOrder())).reversed()} - }).collect(Collectors.toMap(data -> (String) data[0], data -> (Comparator)data[1])); + private final Map> comparators = Stream.of(new Object[][]{ + {"modified", Comparator.comparing(o -> ((RecentActivityModel) o).getModified()).reversed()}, + {"created", Comparator.comparing(o -> ((RecentActivityModel) o).getCreated()).reversed()}, + {"label", Comparator.comparing(o -> ((RecentActivityModel) o).getTitle())}, + {"status", Comparator.comparing(o -> ((RecentActivityModel) o).getStatus()).reversed()}, + {"finalizedAt", Comparator.comparing(o -> ((RecentActivityModel) o).getFinalizedAt(), Comparator.nullsLast(Comparator.naturalOrder())).reversed()}, + {"publishedAt", Comparator.comparing(o -> ((RecentActivityModel) o).getPublishedAt(), Comparator.nullsLast(Comparator.naturalOrder())).reversed()} + }).collect(Collectors.toMap(data -> (String) data[0], data -> (Comparator) data[1])); - private ApiContext apiContext; - private DatabaseRepository databaseRepository; + private final ApiContext apiContext; + private final DatabaseRepository databaseRepository; private final DataManagementPlanManager dataManagementPlanManager; private final DatasetManager datasetManager; @@ -152,21 +152,14 @@ public class DashBoardManager { List roles = new LinkedList<>(); if ((dmps == null || dmps == 0L) && (datasets == null || datasets == 0L)) { - CompletableFuture dmpFuture = dataManagementPlanRepository.getAuthenticated(dataManagementPlanRepository.getWithCriteria(dataManagementPlanCriteria), principal.getId(), roles).distinct().countAsync() - .whenComplete((dmpsStats, throwable) -> statistics.setTotalDataManagementPlanCount(dmpsStats)); - CompletableFuture datasetFuture = datasetRepository.getAuthenticated( datasetRepository.getWithCriteria(datasetCriteria), user, roles).distinct().countAsync() - .whenComplete((datasetsStats, throwable) -> statistics.setTotalDataSetCount(datasetsStats)); - CompletableFuture.allOf(dmpFuture, datasetFuture).join(); + statistics.setTotalDataManagementPlanCount(dataManagementPlanRepository.getAuthenticated(dataManagementPlanRepository.getWithCriteria(dataManagementPlanCriteria), principal.getId(), roles).distinct().count()); + statistics.setTotalDataSetCount(datasetRepository.getAuthenticated(datasetRepository.getWithCriteria(datasetCriteria), user, roles).distinct().count()); } else { statistics.setTotalDataManagementPlanCount(dmps); statistics.setTotalDataSetCount(datasets); } - CompletableFuture grantFuture = grantRepository.getAuthenticated(grantRepository.getWithCriteria(grantCriteria), user).countAsync() - .whenComplete((grantsStats, throwable) -> statistics.setTotalGrantCount(grantsStats)); - CompletableFuture orgnanisationFuture = organisationRepository.getAuthenticated(organisationRepository.getWithCriteria(organisationCriteria).withHint("organisationRecentActivity"), user).countAsync() - .whenComplete((organisationStats, throwable) -> statistics.setTotalOrganisationCount(organisationStats)); - - CompletableFuture.allOf( grantFuture, orgnanisationFuture).join(); + statistics.setTotalGrantCount(grantRepository.getAuthenticated(grantRepository.getWithCriteria(grantCriteria), user).count()); + statistics.setTotalOrganisationCount(organisationRepository.getAuthenticated(organisationRepository.getWithCriteria(organisationCriteria).withHint("organisationRecentActivity"), user).count()); return statistics; } diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/deposit/zenodo/mapper/DMPToZenodoMapper.java b/dmp-backend/web/src/main/java/eu/eudat/models/deposit/zenodo/mapper/DMPToZenodoMapper.java index f4a399f49..d3c7c23e7 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/deposit/zenodo/mapper/DMPToZenodoMapper.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/deposit/zenodo/mapper/DMPToZenodoMapper.java @@ -1,11 +1,15 @@ package eu.eudat.models.deposit.zenodo.mapper; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; import eu.eudat.data.entities.DMP; import eu.eudat.data.entities.Organisation; import eu.eudat.data.entities.UserDMP; import eu.eudat.logic.proxy.config.DOIFunder; import eu.eudat.logic.proxy.config.configloaders.ConfigLoader; import eu.eudat.models.deposit.zenodo.*; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.core.env.Environment; import java.time.Instant; @@ -13,9 +17,16 @@ import java.util.*; import java.util.stream.Collectors; public class DMPToZenodoMapper { + private static final ObjectMapper objectmapper = new ObjectMapper(); + private static final Logger logger = LoggerFactory.getLogger(DMPToZenodoMapper.class); public static ZenodoDeposit fromDMP(DMP dmp, Environment environment, ConfigLoader configLoader) { - Map extraProperties = dmp.getExtraProperties() != null ? new org.json.JSONObject(dmp.getExtraProperties()).toMap() : new HashMap<>(); + Map extraProperties = null; + try { + extraProperties = dmp.getExtraProperties() != null ? objectmapper.readValue(dmp.getExtraProperties(), LinkedHashMap.class) : new HashMap<>(); + } catch (JsonProcessingException e) { + logger.error(e.getLocalizedMessage(), e); + } ZenodoDeposit deposit = new ZenodoDeposit(); deposit.setMetadata(new ZenodoDepositMetadata()); deposit.getMetadata().setTitle(dmp.getLabel()); @@ -26,11 +37,11 @@ public class DMPToZenodoMapper { ZenodoComunity community = new ZenodoComunity(); community.setIdentifier(environment.getProperty("zenodo.community")); deposit.getMetadata().setCommunities(Collections.singletonList(community)); - if (extraProperties.get("visible") == null) { + if (extraProperties != null && extraProperties.get("visible") == null) { deposit.getMetadata().setAccessRight(ZenodoAccessRight.RESTRICTED); deposit.getMetadata().setAccessConditions(""); } else { - if (((Boolean) extraProperties.get("visible"))) { + if (extraProperties != null && ((Boolean) extraProperties.get("visible"))) { Instant publicationDate = Instant.parse(extraProperties.get("publicDate").toString()); if (publicationDate.isBefore(Instant.now())) { deposit.getMetadata().setAccessRight(ZenodoAccessRight.OPEN); From f63d6b33edec6f941fe50c9640f06fa5a5b5d876 Mon Sep 17 00:00:00 2001 From: George Kalampokis Date: Mon, 18 Apr 2022 18:32:25 +0300 Subject: [PATCH 34/37] Replace CrossOrigin annotaion with global configuration --- .../configurations/WebMVCConfiguration.java | 24 ++++++++++++------- .../main/java/eu/eudat/controllers/Admin.java | 1 - .../eudat/controllers/CommonController.java | 1 - .../eu/eudat/controllers/ContactEmail.java | 1 - .../eudat/controllers/CurrencyController.java | 1 - .../controllers/DMPProfileController.java | 1 - .../main/java/eu/eudat/controllers/DMPs.java | 1 - .../controllers/DashBoardController.java | 3 +-- .../eudat/controllers/DataRepositories.java | 1 - .../controllers/DatasetProfileController.java | 1 - .../eu/eudat/controllers/DatasetProfiles.java | 1 - .../java/eu/eudat/controllers/Datasets.java | 1 - .../eudat/controllers/EmailConfirmation.java | 1 - .../controllers/EmailMergeConfirmation.java | 1 - .../eudat/controllers/ExternalDatasets.java | 1 - .../eu/eudat/controllers/FileController.java | 1 - .../java/eu/eudat/controllers/Funders.java | 1 - .../java/eu/eudat/controllers/Grants.java | 1 - .../eudat/controllers/JournalsController.java | 1 - .../eudat/controllers/LanguageController.java | 1 - .../java/eu/eudat/controllers/Licenses.java | 1 - .../eu/eudat/controllers/LockController.java | 1 - .../main/java/eu/eudat/controllers/Login.java | 1 - .../eu/eudat/controllers/Organisations.java | 1 - .../eu/eudat/controllers/Prefillings.java | 1 - .../java/eu/eudat/controllers/Projects.java | 1 - .../PubRepositoriesController.java | 1 - .../controllers/PublicationsController.java | 1 - .../controllers/QuickWizardController.java | 1 - .../java/eu/eudat/controllers/Registries.java | 1 - .../eu/eudat/controllers/Researchers.java | 1 - .../java/eu/eudat/controllers/Services.java | 1 - .../eu/eudat/controllers/TagController.java | 1 - .../controllers/TaxonomiesController.java | 1 - .../controllers/UserGuideController.java | 1 - .../controllers/UserInvitationController.java | 1 - .../main/java/eu/eudat/controllers/Users.java | 1 - .../java/eu/eudat/controllers/Validation.java | 1 - .../main/java/eu/eudat/logic/proxy/Proxy.java | 1 - 39 files changed, 16 insertions(+), 48 deletions(-) diff --git a/dmp-backend/web/src/main/java/eu/eudat/configurations/WebMVCConfiguration.java b/dmp-backend/web/src/main/java/eu/eudat/configurations/WebMVCConfiguration.java index 36d9c502c..67f56eb9f 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/configurations/WebMVCConfiguration.java +++ b/dmp-backend/web/src/main/java/eu/eudat/configurations/WebMVCConfiguration.java @@ -1,37 +1,43 @@ package eu.eudat.configurations; -import eu.eudat.controllers.interceptors.RequestInterceptor; import eu.eudat.logic.handlers.PrincipalArgumentResolver; import eu.eudat.logic.services.ApiContext; import eu.eudat.logic.services.operations.authentication.AuthenticationService; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; +import org.springframework.core.env.Environment; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.web.method.support.HandlerMethodArgumentResolver; +import org.springframework.web.servlet.config.annotation.CorsRegistry; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; -import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import java.util.List; @EnableAsync @Configuration @EnableScheduling -public class WebMVCConfiguration extends WebMvcConfigurerAdapter { +public class WebMVCConfiguration implements WebMvcConfigurer { private ApiContext apiContext; - private AuthenticationService verifiedUserAuthenticationService; - private AuthenticationService nonVerifiedUserAuthenticationService; + private final AuthenticationService verifiedUserAuthenticationService; + private final AuthenticationService nonVerifiedUserAuthenticationService; - @Autowired - public WebMVCConfiguration(ApiContext apiContext, AuthenticationService verifiedUserAuthenticationService, AuthenticationService nonVerifiedUserAuthenticationService) { + private final Environment environment; + + public WebMVCConfiguration(ApiContext apiContext, AuthenticationService verifiedUserAuthenticationService, AuthenticationService nonVerifiedUserAuthenticationService, Environment environment) { this.apiContext = apiContext; this.verifiedUserAuthenticationService = verifiedUserAuthenticationService; this.nonVerifiedUserAuthenticationService = nonVerifiedUserAuthenticationService; + this.environment = environment; + } + + @Override + public void addCorsMappings(CorsRegistry registry) { + registry.addMapping("/api/**").allowedOrigins(this.environment.getProperty("dmp.domain")); } - @Autowired @Override public void addArgumentResolvers(List argumentResolvers) { argumentResolvers.add(new PrincipalArgumentResolver(verifiedUserAuthenticationService, nonVerifiedUserAuthenticationService)); diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/Admin.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/Admin.java index 19e966980..0c772bcbf 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/Admin.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/Admin.java @@ -38,7 +38,6 @@ import static eu.eudat.types.Authorities.ADMIN; import static eu.eudat.types.Authorities.DATASET_PROFILE_MANAGER; @RestController -@CrossOrigin @RequestMapping(value = {"/api/admin/"}) public class Admin extends BaseController { diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/CommonController.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/CommonController.java index 7df80c1fa..3252df9ee 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/CommonController.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/CommonController.java @@ -18,7 +18,6 @@ import java.util.List; * Created by ikalyvas on 3/28/2018. */ @RestController -@CrossOrigin @RequestMapping(value = {"/api/common"}) public class CommonController { diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/ContactEmail.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/ContactEmail.java index 38fe71c83..1e5d920b5 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/ContactEmail.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/ContactEmail.java @@ -15,7 +15,6 @@ import org.springframework.web.bind.annotation.*; import javax.transaction.Transactional; @RestController -@CrossOrigin @RequestMapping(value = "api/contactEmail") public class ContactEmail { private static final Logger logger = LoggerFactory.getLogger(ContactEmail.class); diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/CurrencyController.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/CurrencyController.java index e562eadfb..77e79464b 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/CurrencyController.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/CurrencyController.java @@ -12,7 +12,6 @@ import org.springframework.web.bind.annotation.*; import java.util.List; @RestController -@CrossOrigin @RequestMapping(value = "api/currency") public class CurrencyController { diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/DMPProfileController.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/DMPProfileController.java index 1a54587fa..8c592d90e 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/DMPProfileController.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/DMPProfileController.java @@ -31,7 +31,6 @@ import static eu.eudat.types.Authorities.ADMIN; * Created by ikalyvas on 3/21/2018. */ @RestController -@CrossOrigin @RequestMapping(value = {"/api/dmpprofile"}) public class DMPProfileController extends BaseController { diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/DMPs.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/DMPs.java index efc212e5e..6217bf6f5 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/DMPs.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/DMPs.java @@ -62,7 +62,6 @@ import static org.springframework.http.MediaType.*; @RestController -@CrossOrigin @RequestMapping(value = {"/api/dmps/"}) public class DMPs extends BaseController { private static final Logger logger = LoggerFactory.getLogger(DMPs.class); diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/DashBoardController.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/DashBoardController.java index 12a75d5be..e4c00950f 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/DashBoardController.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/DashBoardController.java @@ -22,11 +22,10 @@ import java.io.IOException; import java.util.List; @RestController -@CrossOrigin @RequestMapping(value = {"/api"}) public class DashBoardController extends BaseController { - private DashBoardManager dashBoardManager; + private final DashBoardManager dashBoardManager; @Autowired public DashBoardController(ApiContext apiContext, DashBoardManager dashBoardManager) { super(apiContext); diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/DataRepositories.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/DataRepositories.java index f6bfed9d3..0edb1d477 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/DataRepositories.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/DataRepositories.java @@ -19,7 +19,6 @@ import java.util.List; @RestController -@CrossOrigin @RequestMapping(value = {"/api/external/datarepos"}) public class DataRepositories extends BaseController { diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/DatasetProfileController.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/DatasetProfileController.java index a7e059ffc..3c81a9d6f 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/DatasetProfileController.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/DatasetProfileController.java @@ -23,7 +23,6 @@ import java.util.UUID; import static eu.eudat.types.Authorities.ADMIN; @RestController -@CrossOrigin @RequestMapping(value = {"/api"}) public class DatasetProfileController extends BaseController { diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/DatasetProfiles.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/DatasetProfiles.java index 372ad6b1d..908488729 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/DatasetProfiles.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/DatasetProfiles.java @@ -17,7 +17,6 @@ import java.util.List; @RestController -@CrossOrigin @RequestMapping(value = {"/api"}) public class DatasetProfiles extends BaseController { diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/Datasets.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/Datasets.java index 94a17913b..b000f7d31 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/Datasets.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/Datasets.java @@ -59,7 +59,6 @@ import static eu.eudat.types.Authorities.ANONYMOUS; @RestController -@CrossOrigin @RequestMapping(value = {"/api/datasets/"}) public class Datasets extends BaseController { private static final Logger logger = LoggerFactory.getLogger(Datasets.class); diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/EmailConfirmation.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/EmailConfirmation.java index d1c9582aa..eb4e97e4c 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/EmailConfirmation.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/EmailConfirmation.java @@ -16,7 +16,6 @@ import org.springframework.web.bind.annotation.*; import javax.transaction.Transactional; @RestController -@CrossOrigin @RequestMapping(value = "api/emailConfirmation") public class EmailConfirmation { diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/EmailMergeConfirmation.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/EmailMergeConfirmation.java index d1e89b493..aadd8e920 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/EmailMergeConfirmation.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/EmailMergeConfirmation.java @@ -18,7 +18,6 @@ import org.springframework.web.bind.annotation.*; import javax.transaction.Transactional; @RestController -@CrossOrigin @RequestMapping(value = "api/emailMergeConfirmation") public class EmailMergeConfirmation { diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/ExternalDatasets.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/ExternalDatasets.java index 642ff7f60..1a6c08c5f 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/ExternalDatasets.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/ExternalDatasets.java @@ -24,7 +24,6 @@ import java.util.UUID; @RestController -@CrossOrigin @RequestMapping(value = {"/api"}) public class ExternalDatasets extends BaseController { diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/FileController.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/FileController.java index ac3c01ccd..0c76b7a29 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/FileController.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/FileController.java @@ -40,7 +40,6 @@ import java.util.UUID; import java.util.stream.Collectors; @RestController -@CrossOrigin @RequestMapping(value = {"/api/file/"}) public class FileController { private static final Logger logger = LoggerFactory.getLogger(FileController.class); diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/Funders.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/Funders.java index 7997dd6bc..83444bf94 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/Funders.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/Funders.java @@ -16,7 +16,6 @@ import org.springframework.web.bind.annotation.*; import java.util.List; @RestController -@CrossOrigin @RequestMapping(value = {"/api/funders/"}) public class Funders extends BaseController { private FunderManager funderManager; diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/Grants.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/Grants.java index 8e8bbb56e..5c492df44 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/Grants.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/Grants.java @@ -28,7 +28,6 @@ import static eu.eudat.types.Authorities.ANONYMOUS; @RestController -@CrossOrigin @RequestMapping(value = {"/api/grants/"}) public class Grants extends BaseController { private GrantManager grantManager; diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/JournalsController.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/JournalsController.java index 5f597eb7c..fb753441f 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/JournalsController.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/JournalsController.java @@ -19,7 +19,6 @@ import java.util.List; @RestController -@CrossOrigin @RequestMapping(value = {"/api/external/journals"}) public class JournalsController extends BaseController { diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/LanguageController.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/LanguageController.java index 2e77f4670..8291352ac 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/LanguageController.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/LanguageController.java @@ -15,7 +15,6 @@ import java.io.*; import java.util.UUID; @RestController -@CrossOrigin @RequestMapping(value = {"/api/language/"}) public class LanguageController { diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/Licenses.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/Licenses.java index ee251c2f4..774b67403 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/Licenses.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/Licenses.java @@ -17,7 +17,6 @@ import java.util.List; @RestController -@CrossOrigin @RequestMapping(value = {"/api/external/licenses"}) public class Licenses extends BaseController { diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/LockController.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/LockController.java index 7c47240e3..ab3aec285 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/LockController.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/LockController.java @@ -14,7 +14,6 @@ import org.springframework.web.bind.annotation.*; import java.util.UUID; @RestController -@CrossOrigin @RequestMapping(value = {"/api/lock/"}) public class LockController { diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/Login.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/Login.java index 4821a2b8a..6912dbecb 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/Login.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/Login.java @@ -50,7 +50,6 @@ import java.security.GeneralSecurityException; @RestController -@CrossOrigin @RequestMapping(value = "api/auth") public class Login { private static final Logger logger = LoggerFactory.getLogger(Login.class); diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/Organisations.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/Organisations.java index 0d2d12a65..a80295d0c 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/Organisations.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/Organisations.java @@ -20,7 +20,6 @@ import java.util.List; @RestController -@CrossOrigin @RequestMapping(value = {"/api"}) public class Organisations extends BaseController { diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/Prefillings.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/Prefillings.java index c6c3335d6..43331f929 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/Prefillings.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/Prefillings.java @@ -14,7 +14,6 @@ import java.util.List; import java.util.UUID; @RestController -@CrossOrigin @RequestMapping(value = {"/api"}) public class Prefillings { diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/Projects.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/Projects.java index 1cf583a7c..7c5d89e73 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/Projects.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/Projects.java @@ -17,7 +17,6 @@ import org.springframework.web.bind.annotation.*; import java.util.List; @RestController -@CrossOrigin @RequestMapping(value = {"/api/projects/"}) public class Projects extends BaseController { private ProjectManager projectManager; diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/PubRepositoriesController.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/PubRepositoriesController.java index 12b0558b9..79ea0ac11 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/PubRepositoriesController.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/PubRepositoriesController.java @@ -17,7 +17,6 @@ import java.util.List; @RestController -@CrossOrigin @RequestMapping(value = {"/api/external/pubrepos"}) public class PubRepositoriesController extends BaseController { diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/PublicationsController.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/PublicationsController.java index 578cd9cbe..44f486f74 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/PublicationsController.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/PublicationsController.java @@ -17,7 +17,6 @@ import java.util.List; @RestController -@CrossOrigin @RequestMapping(value = {"/api/external/publications"}) public class PublicationsController extends BaseController { diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/QuickWizardController.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/QuickWizardController.java index e80a2c70d..71f2ce7f6 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/QuickWizardController.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/QuickWizardController.java @@ -26,7 +26,6 @@ import javax.validation.Valid; import java.util.UUID; @RestController -@CrossOrigin @RequestMapping(value = {"/api/quick-wizard/"}) public class QuickWizardController extends BaseController { diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/Registries.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/Registries.java index c0a5a58b9..de4a10335 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/Registries.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/Registries.java @@ -19,7 +19,6 @@ import java.util.List; @RestController -@CrossOrigin @RequestMapping(value = {"/api"}) public class Registries extends BaseController { diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/Researchers.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/Researchers.java index b6f7b8da3..de1060ebf 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/Researchers.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/Researchers.java @@ -21,7 +21,6 @@ import java.util.Map; @RestController -@CrossOrigin @RequestMapping(value = {"/api/researchers"}) public class Researchers extends BaseController { diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/Services.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/Services.java index d24928ca1..3825a608b 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/Services.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/Services.java @@ -19,7 +19,6 @@ import java.util.List; @RestController -@CrossOrigin @RequestMapping(value = {"/api"}) public class Services extends BaseController { diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/TagController.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/TagController.java index eb53c5cb3..ee91395a8 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/TagController.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/TagController.java @@ -25,7 +25,6 @@ import java.util.stream.Collectors; * Created by ikalyvas on 7/5/2018. */ @RestController -@CrossOrigin @RequestMapping(value = {"/api"}) public class TagController extends BaseController { diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/TaxonomiesController.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/TaxonomiesController.java index a9f722e90..abc59d28f 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/TaxonomiesController.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/TaxonomiesController.java @@ -17,7 +17,6 @@ import java.util.List; @RestController -@CrossOrigin @RequestMapping(value = {"/api/external/taxonomies"}) public class TaxonomiesController extends BaseController { diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/UserGuideController.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/UserGuideController.java index 2a5dca57a..81e4091fd 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/UserGuideController.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/UserGuideController.java @@ -26,7 +26,6 @@ import java.util.stream.Stream; import static eu.eudat.types.Authorities.ADMIN; @RestController -@CrossOrigin @RequestMapping(value = {"/api/userguide/"}) public class UserGuideController { diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/UserInvitationController.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/UserInvitationController.java index 3838fee4a..07b05a9b5 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/UserInvitationController.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/UserInvitationController.java @@ -22,7 +22,6 @@ import java.util.UUID; @RequestMapping("api/invite/") @RestController -@CrossOrigin public class UserInvitationController extends BaseController { private InvitationsManager invitationsManager; diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/Users.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/Users.java index 2a7c56f5a..b795dc90a 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/Users.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/Users.java @@ -31,7 +31,6 @@ import static eu.eudat.types.Authorities.ADMIN; @RestController -@CrossOrigin @RequestMapping(value = "api/user") public class Users extends BaseController { diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/Validation.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/Validation.java index f9e26d6dd..d0b0b0fc9 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/Validation.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/Validation.java @@ -20,7 +20,6 @@ import java.util.List; @RestController -@CrossOrigin @RequestMapping(value = {"/api"}) public class Validation extends BaseController { diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/proxy/Proxy.java b/dmp-backend/web/src/main/java/eu/eudat/logic/proxy/Proxy.java index 3f1489350..89680f664 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/proxy/Proxy.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/proxy/Proxy.java @@ -11,7 +11,6 @@ import java.net.*; @RestController -@CrossOrigin public class Proxy { private String allowedHost; From 198acac6b204acd38a2fb5572444b791072509d7 Mon Sep 17 00:00:00 2001 From: George Kalampokis Date: Mon, 18 Apr 2022 18:38:22 +0300 Subject: [PATCH 35/37] Add background scheduled tasks in order to delete unused files (when and how frequent they run is configurable) --- .../file/FileTimeConfiguration.java | 9 ++ .../configurations/file/PermProperties.java | 17 +++ .../file/StartTimeProperties.java | 59 +++++++++ .../configurations/file/TimeProperties.java | 33 +++++ .../configurations/file/TmpProperties.java | 17 +++ .../eu/eudat/logic/managers/FileManager.java | 8 +- .../schedule/file/FileCleanUpJobs.java | 120 ++++++++++++++++++ .../src/main/resources/config/application.yml | 20 ++- 8 files changed, 279 insertions(+), 4 deletions(-) create mode 100644 dmp-backend/web/src/main/java/eu/eudat/configurations/file/FileTimeConfiguration.java create mode 100644 dmp-backend/web/src/main/java/eu/eudat/configurations/file/PermProperties.java create mode 100644 dmp-backend/web/src/main/java/eu/eudat/configurations/file/StartTimeProperties.java create mode 100644 dmp-backend/web/src/main/java/eu/eudat/configurations/file/TimeProperties.java create mode 100644 dmp-backend/web/src/main/java/eu/eudat/configurations/file/TmpProperties.java create mode 100644 dmp-backend/web/src/main/java/eu/eudat/logic/utilities/schedule/file/FileCleanUpJobs.java diff --git a/dmp-backend/web/src/main/java/eu/eudat/configurations/file/FileTimeConfiguration.java b/dmp-backend/web/src/main/java/eu/eudat/configurations/file/FileTimeConfiguration.java new file mode 100644 index 000000000..f1e26f15c --- /dev/null +++ b/dmp-backend/web/src/main/java/eu/eudat/configurations/file/FileTimeConfiguration.java @@ -0,0 +1,9 @@ +package eu.eudat.configurations.file; + +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +@Configuration +@EnableConfigurationProperties({TmpProperties.class, PermProperties.class}) +public class FileTimeConfiguration { +} diff --git a/dmp-backend/web/src/main/java/eu/eudat/configurations/file/PermProperties.java b/dmp-backend/web/src/main/java/eu/eudat/configurations/file/PermProperties.java new file mode 100644 index 000000000..ab33c20bc --- /dev/null +++ b/dmp-backend/web/src/main/java/eu/eudat/configurations/file/PermProperties.java @@ -0,0 +1,17 @@ +package eu.eudat.configurations.file; + +import org.springframework.boot.context.properties.ConfigurationProperties; + +@ConfigurationProperties(prefix = "perm") +public class PermProperties { + + private TimeProperties time; + + public TimeProperties getTime() { + return time; + } + + public void setTime(TimeProperties time) { + this.time = time; + } +} diff --git a/dmp-backend/web/src/main/java/eu/eudat/configurations/file/StartTimeProperties.java b/dmp-backend/web/src/main/java/eu/eudat/configurations/file/StartTimeProperties.java new file mode 100644 index 000000000..e403bb072 --- /dev/null +++ b/dmp-backend/web/src/main/java/eu/eudat/configurations/file/StartTimeProperties.java @@ -0,0 +1,59 @@ +package eu.eudat.configurations.file; + +public class StartTimeProperties { + private Integer month; + private String dayOfWeekName; + private Integer dayOfWeek; + + private Integer dayOfMonth; + private Integer hour; + private Integer minute; + + public Integer getMonth() { + return month; + } + + public void setMonth(Integer month) { + this.month = month; + } + + public String getDayOfWeekName() { + return dayOfWeekName; + } + + public void setDayOfWeekName(String dayOfWeekName) { + this.dayOfWeekName = dayOfWeekName; + } + + public Integer getDayOfWeek() { + return dayOfWeek; + } + + public void setDayOfWeek(Integer dayOfWeek) { + this.dayOfWeek = dayOfWeek; + } + + public Integer getDayOfMonth() { + return dayOfMonth; + } + + public void setDayOfMonth(Integer dayOfMonth) { + this.dayOfMonth = dayOfMonth; + } + + public Integer getHour() { + return hour; + } + + public void setHour(Integer hour) { + this.hour = hour; + } + + public Integer getMinute() { + return minute; + } + + public void setMinute(Integer minute) { + this.minute = minute; + } +} diff --git a/dmp-backend/web/src/main/java/eu/eudat/configurations/file/TimeProperties.java b/dmp-backend/web/src/main/java/eu/eudat/configurations/file/TimeProperties.java new file mode 100644 index 000000000..24bb3ad8d --- /dev/null +++ b/dmp-backend/web/src/main/java/eu/eudat/configurations/file/TimeProperties.java @@ -0,0 +1,33 @@ +package eu.eudat.configurations.file; + +import java.time.temporal.ChronoUnit; + +public class TimeProperties { + private Integer interval; + private ChronoUnit timeUnit; + private StartTimeProperties startTime; + + public Integer getInterval() { + return interval; + } + + public void setInterval(Integer interval) { + this.interval = interval; + } + + public ChronoUnit getTimeUnit() { + return timeUnit; + } + + public void setTimeUnit(ChronoUnit timeUnit) { + this.timeUnit = timeUnit; + } + + public StartTimeProperties getStartTime() { + return startTime; + } + + public void setStartTime(StartTimeProperties startTime) { + this.startTime = startTime; + } +} diff --git a/dmp-backend/web/src/main/java/eu/eudat/configurations/file/TmpProperties.java b/dmp-backend/web/src/main/java/eu/eudat/configurations/file/TmpProperties.java new file mode 100644 index 000000000..2700bdd26 --- /dev/null +++ b/dmp-backend/web/src/main/java/eu/eudat/configurations/file/TmpProperties.java @@ -0,0 +1,17 @@ +package eu.eudat.configurations.file; + +import org.springframework.boot.context.properties.ConfigurationProperties; + +@ConfigurationProperties(prefix = "tmp") +public class TmpProperties { + + private TimeProperties time; + + public TimeProperties getTime() { + return time; + } + + public void setTime(TimeProperties time) { + this.time = time; + } +} diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/FileManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/FileManager.java index cb65ffa34..d1ddd352c 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/FileManager.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/FileManager.java @@ -60,6 +60,10 @@ public class FileManager { databaseRepository.getFileUploadDao().createOrUpdate(fileUpload); } + public List getDeletedFileUploads() { + return databaseRepository.getFileUploadDao().asQueryable().where(((builder, root) -> builder.equal(root.get("isDeleted"), true))).toList(); + } + public List getFileUploadsForEntityId(String entityId) { return databaseRepository.getFileUploadDao().asQueryable() .where((builder, root) -> builder.equal(root.get("entityId"), entityId)).toList(); @@ -74,9 +78,7 @@ public class FileManager { public void markAllFilesOfEntityIdAsDeleted(UUID entityId) { List fileUploads = this.getCurrentFileUploadsForEntityId(entityId); - fileUploads.forEach(fileUpload -> { - this.markOldFileAsDeleted(fileUpload); - }); + fileUploads.forEach(this::markOldFileAsDeleted); } public void createFile(String id, String fileName, String fileType, String entityId, FileUpload.EntityType entityType, UserInfo userInfo) { diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/schedule/file/FileCleanUpJobs.java b/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/schedule/file/FileCleanUpJobs.java new file mode 100644 index 000000000..2fbcd0db4 --- /dev/null +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/schedule/file/FileCleanUpJobs.java @@ -0,0 +1,120 @@ +package eu.eudat.logic.utilities.schedule.file; + +import eu.eudat.configurations.file.PermProperties; +import eu.eudat.configurations.file.TimeProperties; +import eu.eudat.configurations.file.TmpProperties; +import eu.eudat.data.entities.FileUpload; +import eu.eudat.logic.managers.FileManager; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.env.Environment; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.LinkedList; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + +@Component +public class FileCleanUpJobs { + private static final Logger logger = LoggerFactory.getLogger(FileCleanUpJobs.class); + + private final FileManager fileManager; + private final Environment environment; + + @Autowired + public FileCleanUpJobs(FileManager fileManager, Environment environment, PermProperties permProperties, TmpProperties tmpProperties) { + this.fileManager = fileManager; + this.environment = environment; + if (permProperties != null) { + System.getProperties().put("perm.cron", createCron(permProperties.getTime())); + } + if (tmpProperties != null) { + System.getProperties().put("temp.cron", createCron(tmpProperties.getTime())); + } + + } + + @Scheduled(cron = "${perm.cron}") + public void deleteUnusedPermFiles() { + logger.info("Start deleting unused permanent files"); + List fileUploads = fileManager.getDeletedFileUploads(); + try { + List tempFilePaths = Files.walk(Paths.get(Objects.requireNonNull(environment.getProperty("file.storage")))).filter(Files::isRegularFile).collect(Collectors.toList()); + for (Path tempFilePath : tempFilePaths) { + if (fileUploads.stream().map(FileUpload::getId).anyMatch(uuid -> tempFilePath.endsWith(uuid.toString()))) { + Files.deleteIfExists(tempFilePath); + } + } + logger.info("Unused permanent files have been successfully deleted"); + } catch (IOException e) { + logger.error(e.getLocalizedMessage(), e); + } + } + + @Scheduled(cron = "${temp.cron}") + public void deleteTempFiles() { + logger.info("Start deleting temporary files"); + try { + List tempFilePaths = Files.walk(Paths.get(Objects.requireNonNull(environment.getProperty("temp.temp")))).filter(Files::isRegularFile).collect(Collectors.toList()); + for (Path tempFilePath : tempFilePaths) { + Files.deleteIfExists(tempFilePath); + } + logger.info("Temporary files have been successfully deleted"); + } catch (IOException e) { + logger.error(e.getLocalizedMessage(), e); + } + } + + private String createCron(TimeProperties timeProperties) { + List cronList = new LinkedList<>(); + cronList.add("0"); + switch (timeProperties.getTimeUnit()) { + case MINUTES: + cronList.add("0/" + timeProperties.getInterval()); + break; + case HOURS: + cronList.add(toSafeString(timeProperties.getStartTime().getMinute())); + cronList.add("0/" + timeProperties.getInterval()); + break; + case DAYS: + cronList.add(toSafeString(timeProperties.getStartTime().getMinute())); + cronList.add(toSafeString(timeProperties.getStartTime().getHour())); + cronList.add("*/" + timeProperties.getInterval()); + break; + case MONTHS: + cronList.add(toSafeString(timeProperties.getStartTime().getMinute())); + cronList.add(toSafeString(timeProperties.getStartTime().getHour())); + cronList.add(toSafeString(timeProperties.getStartTime().getDayOfMonth(), "1")); + cronList.add("*/" + timeProperties.getInterval()); + break; + case WEEKS: + cronList.add(toSafeString(timeProperties.getStartTime().getMinute())); + cronList.add(toSafeString(timeProperties.getStartTime().getHour())); + cronList.add("*/" + (timeProperties.getInterval() * 7)); + cronList.add("*"); + cronList.add(toSafeString(timeProperties.getStartTime().getDayOfWeek(), "1")); + break; + } + if (cronList.size() < 6) { + for (int i = cronList.size(); i < 6; i++) { + cronList.add("*"); + } + } + return String.join(" ", cronList); + } + + private String toSafeString(Object object) { + return toSafeString(object, "0"); + } + + private String toSafeString(Object object, String defaultValue) { + return object != null ? object.toString() : defaultValue; + } +} diff --git a/dmp-backend/web/src/main/resources/config/application.yml b/dmp-backend/web/src/main/resources/config/application.yml index e21fd971e..d88fd3d90 100644 --- a/dmp-backend/web/src/main/resources/config/application.yml +++ b/dmp-backend/web/src/main/resources/config/application.yml @@ -219,4 +219,22 @@ contact_email: #############CONFIRMATION EMAIL CONFIGURATIONS######### conf_email: expiration_time_seconds: 14400 - subject: "OpenDMP email confirmation" \ No newline at end of file + subject: "OpenDMP email confirmation" + +#############File Cleanup######### +tmp: + time: + interval: 1 + time-unit: WEEKS + start-time: + day-of-week: 4 + hour: 2 + minute: 15 +perm: + time: + interval: 1 + time-unit: WEEKS + start-time: + day-of-week: 4 + hour: 3 + minute: 15 \ No newline at end of file From d7653f374c532207ea55a3638e91c9d46be13a21 Mon Sep 17 00:00:00 2001 From: George Kalampokis Date: Mon, 18 Apr 2022 18:38:58 +0300 Subject: [PATCH 36/37] Refactor fieldData mapping --- .../utilities/builders/ModelBuilder.java | 90 ++++++++++--------- .../logic/utilities/helpers/FieldFactory.java | 63 +++++++++++++ .../commons/datafield/FieldData.java | 5 ++ .../components/datasetprofile/FieldSet.java | 4 +- 4 files changed, 117 insertions(+), 45 deletions(-) create mode 100644 dmp-backend/web/src/main/java/eu/eudat/logic/utilities/helpers/FieldFactory.java diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/builders/ModelBuilder.java b/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/builders/ModelBuilder.java index 58786cb16..074524868 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/builders/ModelBuilder.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/builders/ModelBuilder.java @@ -1,5 +1,6 @@ package eu.eudat.logic.utilities.builders; +import eu.eudat.logic.utilities.helpers.FieldFactory; import eu.eudat.models.data.entities.xmlmodels.datasetprofiledefinition.DatabaseViewStyleDefinition; import eu.eudat.models.data.components.commons.datafield.*; import eu.eudat.models.data.entities.xmlmodels.modeldefinition.DatabaseModelDefinition; @@ -20,9 +21,7 @@ public class ModelBuilder { for (U item : items) { try { list.add(item.toDatabaseDefinition(clazz.newInstance())); - } catch (InstantiationException e) { - logger.error(e.getMessage(), e); - } catch (IllegalAccessException e) { + } catch (InstantiationException | IllegalAccessException e) { logger.error(e.getMessage(), e); } } @@ -34,9 +33,7 @@ public class ModelBuilder { for (U item : items) { try { list.add(item.toDatabaseDefinition(clazz.newInstance())); - } catch (InstantiationException e) { - logger.error(e.getMessage(), e); - } catch (IllegalAccessException e) { + } catch (InstantiationException | IllegalAccessException e) { logger.error(e.getMessage(), e); } } @@ -50,64 +47,71 @@ public class ModelBuilder { U modelItem = clazz.newInstance(); modelItem.fromDatabaseDefinition(item); list.add(modelItem); - } catch (InstantiationException e) { - logger.error(e.getMessage(), e); - } catch (IllegalAccessException e) { + } catch (InstantiationException | IllegalAccessException e) { logger.error(e.getMessage(), e); } } return list; } - public FieldData toFieldData(Object data, String type, Element dataElement) { - if (type.equals("combobox")) { + public FieldData toFieldData(Object data, String type, Element dataElement) { + if (dataElement != null && dataElement.hasAttribute("type")) { + logger.info("Type " + type + " SubType " + dataElement.getAttribute("type")); + return FieldFactory.fromData(type, data, dataElement.getAttribute("type")); + } + return FieldFactory.fromData(type, data); + /*if (type.equals("combobox")) { if (dataElement != null) { if (dataElement.getAttribute("type").equals("autocomplete")) { - return (FieldData) new AutoCompleteData().fromData(data); + return new AutoCompleteData().fromData(data); } else if (dataElement.getAttribute("type").equals("wordlist")) - return (FieldData) new WordListData().fromData(data); + return new WordListData().fromData(data); } } if (type.equals("internalDmpEntities")) { if (dataElement != null) { if (dataElement.getAttribute("type").equals("researchers")) { - return (FieldData) new ResearchersAutoCompleteData().fromData(data); + return new ResearchersAutoCompleteData().fromData(data); } else if (dataElement.getAttribute("type").equals("datasets")) - return (FieldData) new DatasetsAutoCompleteData().fromData(data); + return new DatasetsAutoCompleteData().fromData(data); else if (dataElement.getAttribute("type").equals("dmps")) - return (FieldData) new DMPsAutoCompleteData().fromData(data); + return new DMPsAutoCompleteData().fromData(data); } } - if (type.equals("booleanDecision")) return (FieldData) new BooleanDecisionData().fromData(data); - if (type.equals("radiobox")) return (FieldData) new RadioBoxData().fromData(data); - if (type.equals("checkBox")) return (FieldData) new CheckBoxData().fromData(data); - if (type.equals("freetext")) return (FieldData) new FreeTextData().fromData(data); - if (type.equals("textarea")) return (FieldData) new TextAreaData().fromData(data); - if (type.equals("richTextarea")) return (FieldData) new RichTextAreaData().fromData(data); - if (type.equals("upload")) return (FieldData) new UploadData().fromData(data); + if (type.equals("booleanDecision")) return new BooleanDecisionData().fromData(data); + if (type.equals("radiobox")) return new RadioBoxData().fromData(data); + if (type.equals("checkBox")) return new CheckBoxData().fromData(data); + if (type.equals("freetext")) return new FreeTextData().fromData(data); + if (type.equals("textarea")) return new TextAreaData().fromData(data); + if (type.equals("richTextarea")) return new RichTextAreaData().fromData(data); + if (type.equals("upload")) return new UploadData().fromData(data); // if (type.equals("table")) return (FieldData) new TableData().fromData(data); - if (type.equals("datePicker")) return (FieldData) new DatePickerData().fromData(data); - if (type.equals("externalDatasets")) return (FieldData) new ExternalDatasetsData().fromData(data); - if (type.equals("dataRepositories")) return (FieldData) new DataRepositoriesData().fromData(data); - if (type.equals("pubRepositories")) return (FieldData) new DataRepositoriesData().fromData(data); - if (type.equals("journalRepositories")) return (FieldData) new DataRepositoriesData().fromData(data); - if (type.equals("taxonomies")) return (FieldData) new TaxonomiesData().fromData(data); - if (type.equals("licenses")) return (FieldData) new LicensesData().fromData(data); - if (type.equals("publications")) return (FieldData) new PublicationsData().fromData(data); - if (type.equals("registries")) return (FieldData) new RegistriesData().fromData(data); - if (type.equals("services")) return (FieldData) new ServicesData().fromData(data); - if (type.equals("tags")) return (FieldData) new TagsData().fromData(data); - if (type.equals("researchers")) return (FieldData) new ResearcherData().fromData(data); - if (type.equals("organizations")) return (FieldData) new OrganizationsData().fromData(data); - if (type.equals("datasetIdentifier")) return (FieldData) new DatasetIdentifierData().fromData(data); - if (type.equals("currency")) return (FieldData) new CurrencyData().fromData(data); - if (type.equals("validation")) return (FieldData) new ValidationData().fromData(data); - return null; + if (type.equals("datePicker")) return new DatePickerData().fromData(data); + if (type.equals("externalDatasets")) return new ExternalDatasetsData().fromData(data); + if (type.equals("dataRepositories")) return new DataRepositoriesData().fromData(data); + if (type.equals("pubRepositories")) return new DataRepositoriesData().fromData(data); + if (type.equals("journalRepositories")) return new DataRepositoriesData().fromData(data); + if (type.equals("taxonomies")) return new TaxonomiesData().fromData(data); + if (type.equals("licenses")) return new LicensesData().fromData(data); + if (type.equals("publications")) return new PublicationsData().fromData(data); + if (type.equals("registries")) return new RegistriesData().fromData(data); + if (type.equals("services")) return new ServicesData().fromData(data); + if (type.equals("tags")) return new TagsData().fromData(data); + if (type.equals("researchers")) return new ResearcherData().fromData(data); + if (type.equals("organizations")) return new OrganizationsData().fromData(data); + if (type.equals("datasetIdentifier")) return new DatasetIdentifierData().fromData(data); + if (type.equals("currency")) return new CurrencyData().fromData(data); + if (type.equals("validation")) return new ValidationData().fromData(data);*/ + //return null; } - public FieldData toFieldData(Object data, String type) { - if (type.equals("combobox")) { + public FieldData toFieldData(Object data, String type) { + if (data != null && ((Map) data).containsKey("type")) { + return FieldFactory.fromData(type, data, (String) ((Map) data).get("type")); + } + return FieldFactory.fromData(type, data); + /*if (type.equals("combobox")) { String comboboxType = (String) ((Map) data).get("type"); if (comboboxType.equals("autocomplete")) { return (FieldData) new AutoCompleteData().fromData(data); @@ -150,6 +154,6 @@ public class ModelBuilder { if (type.equals("datasetIdentifier")) return (FieldData) new DatasetIdentifierData().fromData(data); if (type.equals("currency")) return (FieldData) new CurrencyData().fromData(data); if (type.equals("validation")) return (FieldData) new ValidationData().fromData(data); - return null; + return null;*/ } } diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/helpers/FieldFactory.java b/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/helpers/FieldFactory.java new file mode 100644 index 000000000..f63e123c8 --- /dev/null +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/helpers/FieldFactory.java @@ -0,0 +1,63 @@ +package eu.eudat.logic.utilities.helpers; + +import eu.eudat.models.data.components.commons.datafield.*; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.lang.reflect.Modifier; +import java.util.Map; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +public class FieldFactory { + private static final Logger logger = LoggerFactory.getLogger(FieldFactory.class); + private static final Map> fieldMap = Stream.of(new Object[][]{ + {"combobox", ComboBoxData.class}, + {"autocomplete", AutoCompleteData.class}, + {"wordlist", WordListData.class}, + {"internalDmpEntities", InternalDmpEntitiesData.class}, + {"researchers", ResearcherData.class}, + {"datasets", DatasetsAutoCompleteData.class}, + {"dmps", DMPsAutoCompleteData.class}, + {"booleanDecision", BooleanDecisionData.class}, + {"radiobox", RadioBoxData.class}, + {"checkBox", CheckBoxData.class}, + {"freetext", FreeTextData.class}, + {"textarea", TextAreaData.class}, + {"richTextarea", RichTextAreaData.class}, + {"upload", UploadData.class}, + {"datePicker", DatePickerData.class}, + {"externalDatasets", ExternalDatasetsData.class}, + {"dataRepositories", DataRepositoriesData.class}, + {"pubRepositories", DataRepositoriesData.class}, + {"journalRepositories", DataRepositoriesData.class}, + {"taxonomies", TaxonomiesData.class}, + {"licenses", LicensesData.class}, + {"publications", PublicationsData.class}, + {"registries", RegistriesData.class}, + {"services", ServicesData.class}, + {"tags", TagsData.class}, + {"organizations", OrganizationsData.class}, + {"datasetIdentifier", DatasetIdentifierData.class}, + {"currency", CurrencyData.class}, + {"validation", ValidationData.class} + }).collect(Collectors.toMap(data -> (String) data[0], data -> (Class) data[1])); + + public static FieldData fromData(String type, Object data, String subType) { + if (Modifier.isAbstract(fieldMap.get(type).getModifiers())) { + return fromData(subType, data); + } else { + return fromData(type, data); + } + } + + public static FieldData fromData(String type, Object data) { + try { + return (FieldData) fieldMap.get(type).newInstance().fromData(data); + } catch (InstantiationException | IllegalAccessException e) { + logger.error(e.getMessage(), e); + } + return null; + } + +} diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/components/commons/datafield/FieldData.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/components/commons/datafield/FieldData.java index a992658bd..10f2ced17 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/components/commons/datafield/FieldData.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/components/commons/datafield/FieldData.java @@ -1,5 +1,6 @@ package eu.eudat.models.data.components.commons.datafield; +import eu.eudat.logic.utilities.helpers.FieldFactory; import eu.eudat.logic.utilities.interfaces.XmlSerializable; import org.w3c.dom.Document; import org.w3c.dom.Element; @@ -21,6 +22,10 @@ public abstract class FieldData implements XmlSerializable { return null; } + public T fromData(Object data, String subType) { + return (T) FieldFactory.fromData(subType, data); + } + public Object toData() { return null; } diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/user/components/datasetprofile/FieldSet.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/user/components/datasetprofile/FieldSet.java index 80ece4c30..9c17849b7 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/user/components/datasetprofile/FieldSet.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/user/components/datasetprofile/FieldSet.java @@ -175,12 +175,12 @@ public class FieldSet implements Comparable, PropertiesModelBuilder, ViewStyleDe private FieldSet CloneForMultiplicity2(List key, Map properties,String[] ids, int index){ FieldSet newFieldSet = new FieldSet(); - newFieldSet.id = ids[0]+"_"+ids[1]+"_"+ids[2] + (ids.length > 4 ? "_" + ids[3] : ""); + newFieldSet.id = ids[0] + "_" + ids[1] + "_" + ids[2] + (ids.length > 3 && !ids[ids.length - 1].isEmpty() ? "_" + ids[ids.length - 1] : ""); newFieldSet.description = this.description; newFieldSet.extendedDescription = this.extendedDescription; newFieldSet.additionalInformation=this.additionalInformation; newFieldSet.title = this.title; - newFieldSet.ordinal = ids.length > 4 ? Integer.valueOf(ids[3]) : this.ordinal; + newFieldSet.ordinal = ids.length > 3 && !ids[ids.length - 1].isEmpty() && ids[ids.length - 1].matches("[0-9]+") ? Integer.valueOf(ids[ids.length - 1]) : this.ordinal; newFieldSet.fields = new LinkedList(); for (Field field: this.fields) { From 53d38088cd3e3bbda1cfec34b5d45096de2ce03a Mon Sep 17 00:00:00 2001 From: George Kalampokis Date: Fri, 29 Apr 2022 13:32:22 +0300 Subject: [PATCH 37/37] Minor Refactoring --- .../java/eu/eudat/elastic/repository/ElasticRepository.java | 3 ++- .../src/main/java/eu/eudat/logic/managers/DatasetManager.java | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/dmp-backend/elastic/src/main/java/eu/eudat/elastic/repository/ElasticRepository.java b/dmp-backend/elastic/src/main/java/eu/eudat/elastic/repository/ElasticRepository.java index 410798671..4c2f65083 100644 --- a/dmp-backend/elastic/src/main/java/eu/eudat/elastic/repository/ElasticRepository.java +++ b/dmp-backend/elastic/src/main/java/eu/eudat/elastic/repository/ElasticRepository.java @@ -17,7 +17,7 @@ import java.io.IOException; */ public abstract class ElasticRepository implements Repository { private static final Logger logger = LoggerFactory.getLogger(ElasticRepository.class); - private final ObjectMapper mapper = new ObjectMapper(); + private final ObjectMapper mapper; private RestHighLevelClient client; public RestHighLevelClient getClient() { @@ -33,6 +33,7 @@ public abstract class ElasticRepository T transformFromString(String value, Class tClass) { diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetManager.java index 049f8ce54..4c494360d 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetManager.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetManager.java @@ -168,7 +168,7 @@ public class DatasetManager { datasets = null; } - UserInfo userInfo = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(principal.getId());//builderFactory.getBuilder(UserInfoBuilder.class).id(principal.getId()).build(); + // QueryableList items = databaseRepository.getDatasetDao().getWithCriteria(datasetTableRequest.getCriteria()).withHint(HintedModelFactory.getHint(DatasetListingModel.class)); QueryableList items; if (datasets != null && !datasets.isEmpty()) { @@ -186,6 +186,7 @@ public class DatasetManager { if (principal.getId() == null) { throw new UnauthorisedException("You are not allowed to access those datasets"); } + UserInfo userInfo = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(principal.getId());//builderFactory.getBuilder(UserInfoBuilder.class).id(principal.getId()).build(); if (datasetTableRequest.getCriteria().getRole() != null) { roles.add(datasetTableRequest.getCriteria().getRole()); }