diff --git a/dmp-migration-tool/data/src/main/java/eu/eudat/data/entities/DMPProfile.java b/dmp-migration-tool/data/src/main/java/eu/eudat/data/entities/DMPProfile.java index 13aad5d47..2a3d713cd 100644 --- a/dmp-migration-tool/data/src/main/java/eu/eudat/data/entities/DMPProfile.java +++ b/dmp-migration-tool/data/src/main/java/eu/eudat/data/entities/DMPProfile.java @@ -15,7 +15,7 @@ import java.util.UUID; @Entity -@Table(name = "\"DMPProfile\"") +@Table(name = "\"DmpBlueprint\"") public class DMPProfile implements DataEntity { public enum Status { @@ -48,7 +48,7 @@ public class DMPProfile implements DataEntity { @Id @GeneratedValue @GenericGenerator(name = "uuid2", strategy = "uuid2") - @Column(name = "\"ID\"", updatable = false, nullable = false, columnDefinition = "BINARY(16)") + @Column(name = "\"id\"", updatable = false, nullable = false, columnDefinition = "BINARY(16)") private UUID id; @@ -56,22 +56,22 @@ public class DMPProfile implements DataEntity { private Set dmps; - @Column(name = "\"Label\"") + @Column(name = "\"label\"") private String label; - @Column(name = "\"Definition\"", columnDefinition = "xml", nullable = true) + @Column(name = "\"definition\"", columnDefinition = "xml", nullable = true) private String definition; - @Column(name = "\"Status\"", nullable = false) + @Column(name = "\"status\"", nullable = false) private int status; - @Column(name = "\"Created\"") + @Column(name = "\"created_at\"") @Convert(converter = DateToUTCConverter.class) private Date created = null; - @Column(name = "\"Modified\"") + @Column(name = "\"updated_at\"") @Convert(converter = DateToUTCConverter.class) private Date modified = new Date(); diff --git a/dmp-migration-tool/data/src/main/java/eu/eudat/data/entities/DescriptionTemplate.java b/dmp-migration-tool/data/src/main/java/eu/eudat/data/entities/DescriptionTemplate.java index c50ee9750..cb7a5446b 100644 --- a/dmp-migration-tool/data/src/main/java/eu/eudat/data/entities/DescriptionTemplate.java +++ b/dmp-migration-tool/data/src/main/java/eu/eudat/data/entities/DescriptionTemplate.java @@ -46,46 +46,46 @@ public class DescriptionTemplate implements DataEntity @Id @GeneratedValue @GenericGenerator(name = "uuid2", strategy = "uuid2") - @Column(name = "\"ID\"", updatable = false, nullable = false, columnDefinition = "BINARY(16)") + @Column(name = "\"id\"", updatable = false, nullable = false, columnDefinition = "BINARY(16)") private UUID id; - @Column(name = "\"Label\"", nullable = false) + @Column(name = "\"label\"", nullable = false) private String label; @OneToMany(fetch = FetchType.LAZY, mappedBy = "profile") private Set dataset; - @Column(name = "\"Definition\"", columnDefinition = "xml", nullable = false) + @Column(name = "\"definition\"", columnDefinition = "xml", nullable = false) private String definition; - @Column(name = "\"Status\"", nullable = false) + @Column(name = "\"status\"", nullable = false) private Short status; - @Column(name = "\"Created\"") + @Column(name = "\"created_at\"") @Convert(converter = DateToUTCConverter.class) private Date created; - @Column(name = "\"Modified\"") + @Column(name = "\"updated_at\"") @Convert(converter = DateToUTCConverter.class) private Date modified = new Date(); - @Column(name = "\"Description\"") + @Column(name = "\"description\"") private String description; - @Column(name = "\"GroupId\"", updatable = false, nullable = false, columnDefinition = "BINARY(16)") + @Column(name = "\"group_id\"", updatable = false, nullable = false, columnDefinition = "BINARY(16)") private UUID groupId; - @Column(name = "\"Version\"", nullable = false) + @Column(name = "\"version\"", nullable = false) private Short version; @OneToMany(fetch = FetchType.LAZY) private Set dmps; - @Column(name = "\"Language\"", nullable = false) + @Column(name = "\"language\"", nullable = false) private String language; @OneToOne(fetch = FetchType.EAGER) - @JoinColumn(name = "\"Type\"", nullable = false) + @JoinColumn(name = "\"type\"", nullable = false) private DescriptionTemplateType type; @OneToMany(mappedBy = "descriptionTemplate", fetch = FetchType.LAZY) diff --git a/dmp-migration-tool/data/src/main/java/eu/eudat/data/entities/DescriptionTemplateType.java b/dmp-migration-tool/data/src/main/java/eu/eudat/data/entities/DescriptionTemplateType.java index 9b466f862..fca47aa66 100644 --- a/dmp-migration-tool/data/src/main/java/eu/eudat/data/entities/DescriptionTemplateType.java +++ b/dmp-migration-tool/data/src/main/java/eu/eudat/data/entities/DescriptionTemplateType.java @@ -40,13 +40,13 @@ public class DescriptionTemplateType implements DataEntity { } @Id - @Column(name = "\"ID\"", updatable = false, nullable = false, columnDefinition = "BINARY(16)") + @Column(name = "\"id\"", updatable = false, nullable = false, columnDefinition = "BINARY(16)") private UUID id; @Enumerated(EnumType.STRING) - @Column(name = "\"EntityType\"", nullable = false) + @Column(name = "\"entity_type\"", nullable = false) private EntityType entityType; - @Column(name = "\"RepositoryId\"", nullable = false) + @Column(name = "\"repository_id\"", nullable = false) private String repositoryId; - @Column(name = "\"Doi\"", nullable = false) + @Column(name = "\"doi\"", nullable = false) private String doi; - @Column(name = "\"CreatedAt\"", nullable = false) + @Column(name = "\"created_at\"", nullable = false) @Convert(converter = DateToUTCConverter.class) private Date createdAt; - @Column(name = "\"UpdatedAt\"", nullable = false) + @Column(name = "\"updated_at\"", nullable = false) @Convert(converter = DateToUTCConverter.class) private Date updatedAt; @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "\"EntityId\"", nullable = false) + @JoinColumn(name = "\"entity_id\"", nullable = false) private DMP entityId; public UUID getId() { diff --git a/dmp-migration-tool/data/src/main/java/eu/eudat/data/entities/UserRole.java b/dmp-migration-tool/data/src/main/java/eu/eudat/data/entities/UserRole.java index 1d00d08c4..a0030ed45 100644 --- a/dmp-migration-tool/data/src/main/java/eu/eudat/data/entities/UserRole.java +++ b/dmp-migration-tool/data/src/main/java/eu/eudat/data/entities/UserRole.java @@ -16,14 +16,14 @@ public class UserRole implements DataEntity { @Id @GeneratedValue @GenericGenerator(name = "uuid2", strategy = "uuid2") - @Column(name = "\"Id\"", updatable = false, nullable = false, columnDefinition = "BINARY(16)") + @Column(name = "\"id\"", updatable = false, nullable = false, columnDefinition = "BINARY(16)") private UUID id; - @Column(name = "\"Role\"", nullable = false) + @Column(name = "\"role\"", nullable = false) private int role; @ManyToOne(fetch = FetchType.EAGER) - @JoinColumn(name = "\"UserId\"", nullable = false) + @JoinColumn(name = "\"user\"", nullable = false) private UserInfo userInfo; public UUID getId() { diff --git a/dmp-migration-tool/data/src/main/java/eu/eudat/query/DMPQuery.java b/dmp-migration-tool/data/src/main/java/eu/eudat/query/DMPQuery.java index d47412e99..b717879b6 100644 --- a/dmp-migration-tool/data/src/main/java/eu/eudat/query/DMPQuery.java +++ b/dmp-migration-tool/data/src/main/java/eu/eudat/query/DMPQuery.java @@ -21,7 +21,7 @@ public class DMPQuery extends Query { private String label; private int version; private GrantQuery grantQuery; - private UserQuery userQuery; + private OldUserQuery userQuery; private DatasetQuery datasetQuery; private List statuses; private Date created; @@ -99,11 +99,11 @@ public class DMPQuery extends Query { this.modified = modified; } - public UserQuery getUserQuery() { + public OldUserQuery getUserQuery() { return userQuery; } - public void setUserQuery(UserQuery userQuery) { + public void setUserQuery(OldUserQuery userQuery) { this.userQuery = userQuery; } diff --git a/dmp-migration-tool/data/src/main/java/eu/eudat/query/GrantQuery.java b/dmp-migration-tool/data/src/main/java/eu/eudat/query/GrantQuery.java index d48365036..5cbd2bc1f 100644 --- a/dmp-migration-tool/data/src/main/java/eu/eudat/query/GrantQuery.java +++ b/dmp-migration-tool/data/src/main/java/eu/eudat/query/GrantQuery.java @@ -21,7 +21,7 @@ public class GrantQuery extends Query { private List statuses; private Date created; private Date modified; - private UserQuery userQuery; + private OldUserQuery userQuery; public GrantQuery(DatabaseAccessLayer databaseAccessLayer) { super(databaseAccessLayer); @@ -79,11 +79,11 @@ public class GrantQuery extends Query { this.modified = modified; } - public UserQuery getUserQuery() { + public OldUserQuery getUserQuery() { return userQuery; } - public void setUserQuery(UserQuery userQuery) { + public void setUserQuery(OldUserQuery userQuery) { this.userQuery = userQuery; } diff --git a/dmp-migration-tool/data/src/main/java/eu/eudat/query/LockQuery.java b/dmp-migration-tool/data/src/main/java/eu/eudat/query/LockQuery.java index 8f58687de..ccacf9e88 100644 --- a/dmp-migration-tool/data/src/main/java/eu/eudat/query/LockQuery.java +++ b/dmp-migration-tool/data/src/main/java/eu/eudat/query/LockQuery.java @@ -17,7 +17,7 @@ public class LockQuery extends Query { private UUID id; private UUID target; - private UserQuery userQuery; + private OldUserQuery userQuery; private Date touchedAt; public UUID getId() { @@ -36,11 +36,11 @@ public class LockQuery extends Query { this.target = target; } - public UserQuery getUserQuery() { + public OldUserQuery getUserQuery() { return userQuery; } - public void setUserQuery(UserQuery userQuery) { + public void setUserQuery(OldUserQuery userQuery) { this.userQuery = userQuery; } diff --git a/dmp-migration-tool/data/src/main/java/eu/eudat/query/UserQuery.java b/dmp-migration-tool/data/src/main/java/eu/eudat/query/OldUserQuery.java similarity index 72% rename from dmp-migration-tool/data/src/main/java/eu/eudat/query/UserQuery.java rename to dmp-migration-tool/data/src/main/java/eu/eudat/query/OldUserQuery.java index f6240b7c3..6af0ed6b2 100644 --- a/dmp-migration-tool/data/src/main/java/eu/eudat/query/UserQuery.java +++ b/dmp-migration-tool/data/src/main/java/eu/eudat/query/OldUserQuery.java @@ -7,7 +7,7 @@ import eu.eudat.queryable.QueryableList; import java.util.List; import java.util.UUID; -public class UserQuery extends Query { +public class OldUserQuery extends Query { private UUID id; @@ -19,11 +19,11 @@ public class UserQuery extends Query { this.id = id; } - public UserQuery(DatabaseAccessLayer databaseAccessLayer) { + public OldUserQuery(DatabaseAccessLayer databaseAccessLayer) { super(databaseAccessLayer); } - public UserQuery(DatabaseAccessLayer databaseAccessLayer, List selectionFields) { + public OldUserQuery(DatabaseAccessLayer databaseAccessLayer, List selectionFields) { super(databaseAccessLayer, selectionFields); } diff --git a/dmp-migration-tool/web/src/main/java/eu/eudat/EuDatApplication.java b/dmp-migration-tool/web/src/main/java/eu/eudat/EuDatApplication.java index 1810a0800..7df21836b 100644 --- a/dmp-migration-tool/web/src/main/java/eu/eudat/EuDatApplication.java +++ b/dmp-migration-tool/web/src/main/java/eu/eudat/EuDatApplication.java @@ -27,16 +27,4 @@ public class EuDatApplication extends SpringBootServletInitializer { SpringApplication.run(EuDatApplication.class, args); } - @Bean - AuthorizationRequirementMapper authorizationRequirementMapper() { - return (resource, matchAll, permissions) -> { - Class type = resource.getClass(); - if (!AuthorizationResource.class.isAssignableFrom(type)) throw new IllegalArgumentException("resource"); - - if (OwnedResource.class.equals(type)) { - return new OwnedAuthorizationRequirement(); - } - throw new IllegalArgumentException("resource"); - }; - } } diff --git a/dmp-migration-tool/web/src/main/java/eu/eudat/configurations/SecurityConfiguration.java b/dmp-migration-tool/web/src/main/java/eu/eudat/configurations/SecurityConfiguration.java new file mode 100644 index 000000000..143fa3726 --- /dev/null +++ b/dmp-migration-tool/web/src/main/java/eu/eudat/configurations/SecurityConfiguration.java @@ -0,0 +1,144 @@ +package eu.eudat.configurations; + +import eu.eudat.authorization.OwnedAuthorizationRequirement; +import eu.eudat.authorization.OwnedResource; +import gr.cite.commons.web.authz.handler.AuthorizationHandler; +import gr.cite.commons.web.authz.handler.PermissionAuthenticatedAuthorizationHandler; +import gr.cite.commons.web.authz.handler.PermissionClaimAuthorizationHandler; +import gr.cite.commons.web.authz.handler.PermissionClientAuthorizationHandler; +import gr.cite.commons.web.authz.policy.AuthorizationRequirement; +import gr.cite.commons.web.authz.policy.AuthorizationRequirementMapper; +import gr.cite.commons.web.authz.policy.AuthorizationResource; +import gr.cite.commons.web.authz.policy.resolver.AuthorizationPolicyConfigurer; +import gr.cite.commons.web.authz.policy.resolver.AuthorizationPolicyResolverStrategy; +import gr.cite.commons.web.oidc.configuration.WebSecurityProperties; +import jakarta.servlet.Filter; +import jakarta.servlet.http.HttpServletRequest; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.authentication.AuthenticationManagerResolver; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; +import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer; +import org.springframework.security.config.annotation.web.configurers.HeadersConfigurer; +import org.springframework.security.config.http.SessionCreationPolicy; +import org.springframework.security.web.SecurityFilterChain; +import org.springframework.security.web.authentication.preauth.AbstractPreAuthenticatedProcessingFilter; + +import java.util.List; +import java.util.Set; + +@Configuration +@EnableWebSecurity +public class SecurityConfiguration { + + private final WebSecurityProperties webSecurityProperties; + private final AuthenticationManagerResolver authenticationManagerResolver; + private final Filter apiKeyFilter; + + @Autowired + public SecurityConfiguration(WebSecurityProperties webSecurityProperties, + @Qualifier("tokenAuthenticationResolver") AuthenticationManagerResolver authenticationManagerResolver, + @Qualifier("apiKeyFilter") Filter apiKeyFilter) { + this.webSecurityProperties = webSecurityProperties; + this.authenticationManagerResolver = authenticationManagerResolver; + this.apiKeyFilter = apiKeyFilter; + } + + @Bean + public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { + HttpSecurity tempHttp = http + .csrf(AbstractHttpConfigurer::disable) + .cors(httpSecurityCorsConfigurer -> {}) + .headers(httpSecurityHeadersConfigurer -> httpSecurityHeadersConfigurer.frameOptions(HeadersConfigurer.FrameOptionsConfig::disable)) +// .addFilterBefore(apiKeyFilter, AbstractPreAuthenticatedProcessingFilter.class) + .authorizeHttpRequests(authRequest -> + authRequest.requestMatchers(buildAntPatterns(webSecurityProperties.getAllowedEndpoints())).permitAll() //TODO: Authz + .requestMatchers(buildAntPatterns(webSecurityProperties.getAuthorizedEndpoints())).permitAll()) + .sessionManagement( sessionManagementConfigurer-> sessionManagementConfigurer.sessionCreationPolicy(SessionCreationPolicy.NEVER)) + .oauth2ResourceServer(oauth2 -> oauth2.authenticationManagerResolver(authenticationManagerResolver)); + return tempHttp.build(); + } + + @Bean + AuthorizationPolicyConfigurer authorizationPolicyConfigurer() { + return new AuthorizationPolicyConfigurer() { + + @Override + public AuthorizationPolicyResolverStrategy strategy() { + return AuthorizationPolicyResolverStrategy.STRICT_CONSENSUS_BASED; + } + + //Here you can register your custom authorization handlers, which will get used as well as the existing ones + //This is optional and can be omitted + //If not set / set to null, only the default authorization handlers will be used + @Override + public List> addCustomHandlers() { + return List.of(); + } + + //Here you can register your custom authorization requirements (if any) + //This is optional and can be omitted + //If not set / set to null, only the default authorization requirements will be used + @Override + public List extendRequirements() { + return List.of( +// new TimeOfDayAuthorizationRequirement(new TimeOfDay("08:00","16:00"), true) + ); + } + + //Here you can select handlers you want to disable by providing the classes they are implemented by + //You can disable any handler (including any custom one) + //This is optional and can be omitted + //If not set / set to null, all the handlers will be invoked, based on their requirement support + //In the example below, the default client handler will be ignored by the resolver + @Override + public List>> disableHandlers() { + return List.of( + PermissionClientAuthorizationHandler.class, + PermissionAuthenticatedAuthorizationHandler.class, + PermissionClaimAuthorizationHandler.class); + } + }; + } + + @Bean + AuthorizationRequirementMapper authorizationRequirementMapper() { + return new AuthorizationRequirementMapper() { + @Override + public AuthorizationRequirement map(AuthorizationResource resource, boolean matchAll, String[] permissions) { + Class type = resource.getClass(); + if (!AuthorizationResource.class.isAssignableFrom(type)) throw new IllegalArgumentException("resource"); + + if (OwnedResource.class.equals(type)) { + return new OwnedAuthorizationRequirement(); + } + throw new IllegalArgumentException("resource"); + } + }; + } + + + private String[] buildAntPatterns(Set endpoints) { + if (endpoints == null) { + return new String[0]; + } + return endpoints.stream() + .filter(endpoint -> endpoint != null && !endpoint.isBlank()) + .map(endpoint -> "/" + stripUnnecessaryCharacters(endpoint) + "/**") + .toArray(String[]::new); + } + + private String stripUnnecessaryCharacters(String endpoint) { + endpoint = endpoint.strip(); + if (endpoint.startsWith("/")) { + endpoint = endpoint.substring(1); + } + if (endpoint.endsWith("/")) { + endpoint = endpoint.substring(0, endpoint.length() - 1); + } + return endpoint; + } +} diff --git a/dmp-migration-tool/web/src/main/java/eu/eudat/configurations/WebMVCConfiguration.java b/dmp-migration-tool/web/src/main/java/eu/eudat/configurations/WebMVCConfiguration.java deleted file mode 100644 index eb7a7fc6f..000000000 --- a/dmp-migration-tool/web/src/main/java/eu/eudat/configurations/WebMVCConfiguration.java +++ /dev/null @@ -1,44 +0,0 @@ -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.scheduling.annotation.EnableAsync; -import org.springframework.scheduling.annotation.EnableScheduling; -import org.springframework.web.method.support.HandlerMethodArgumentResolver; -import org.springframework.web.servlet.config.annotation.InterceptorRegistry; -import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; - -import java.util.List; - -@EnableAsync -@Configuration -@EnableScheduling -public class WebMVCConfiguration implements WebMvcConfigurer { - - private ApiContext apiContext; - - private AuthenticationService verifiedUserAuthenticationService; - private AuthenticationService nonVerifiedUserAuthenticationService; - - @Autowired - public WebMVCConfiguration(ApiContext apiContext, AuthenticationService verifiedUserAuthenticationService, AuthenticationService nonVerifiedUserAuthenticationService) { - this.apiContext = apiContext; - this.verifiedUserAuthenticationService = verifiedUserAuthenticationService; - this.nonVerifiedUserAuthenticationService = nonVerifiedUserAuthenticationService; - } - - @Autowired - @Override - public void addArgumentResolvers(List argumentResolvers) { - argumentResolvers.add(new PrincipalArgumentResolver(verifiedUserAuthenticationService, nonVerifiedUserAuthenticationService)); - } - - @Override - public void addInterceptors(InterceptorRegistry registry) { -// registry.addInterceptor(new RequestInterceptor(this.apiContext.getHelpersService().getLoggerService())); - } -} diff --git a/dmp-migration-tool/web/src/main/java/eu/eudat/criteria/UserCriteria.java b/dmp-migration-tool/web/src/main/java/eu/eudat/criteria/UserCriteria.java index b111294d9..cfdab469c 100644 --- a/dmp-migration-tool/web/src/main/java/eu/eudat/criteria/UserCriteria.java +++ b/dmp-migration-tool/web/src/main/java/eu/eudat/criteria/UserCriteria.java @@ -7,6 +7,7 @@ import com.fasterxml.jackson.databind.ObjectReader; import com.fasterxml.jackson.databind.node.JsonNodeType; import eu.eudat.criteria.entities.Criteria; import eu.eudat.logic.services.operations.DatabaseRepository; +import eu.eudat.query.OldUserQuery; import eu.eudat.query.UserQuery; import java.io.IOException; @@ -57,9 +58,9 @@ public class UserCriteria { return new LinkedList<>(fields); } - public UserQuery buildQuery(DatabaseRepository dao) { + public OldUserQuery buildQuery(DatabaseRepository dao) { List fields = this.buildFields(""); - UserQuery query = new UserQuery(dao.getUserInfoDao(), fields); + OldUserQuery query = new OldUserQuery(dao.getUserInfoDao(), fields); if (this.id != null) query.setId(this.id.getValue()); return query; } diff --git a/dmp-migration-tool/web/src/main/java/eu/eudat/models/data/dmp/DataManagementPlan.java b/dmp-migration-tool/web/src/main/java/eu/eudat/models/data/dmp/DataManagementPlan.java index ddf1a0841..08eab0e21 100644 --- a/dmp-migration-tool/web/src/main/java/eu/eudat/models/data/dmp/DataManagementPlan.java +++ b/dmp-migration-tool/web/src/main/java/eu/eudat/models/data/dmp/DataManagementPlan.java @@ -316,6 +316,88 @@ public class DataManagementPlan implements DataModel { return this; } + public DataManagementPlan fromDataModelWithoutUsers(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.properties = entity.getProperties() != null ? new org.json.JSONObject(entity.getProperties()).toMap() : null; + if(entity.getGrant() != null) { + this.grant = new Grant(); + this.grant.fromDataModel(entity.getGrant()); + } + else { + this.grant = null; + } + this.creator = new eu.eudat.models.data.userinfo.UserInfo(); + this.groupId = entity.getGroupId(); + this.lockable = entity.getDataset() != null && entity.getDataset().stream().findAny().isPresent(); + if (this.properties != null) { + this.extraFields = new ArrayList<>(); + this.properties.forEach((id, value) -> { + if (value != null) { + ExtraFieldModel extraField = new ExtraFieldModel(); + extraField.setId(id); + extraField.setValue(value.toString()); + this.extraFields.add(extraField); + } + }); + } + 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 (DMPDatasetProfile dmpDescriptionProfile : entity.getAssociatedDmps()) { + AssociatedProfile associatedProfile = new AssociatedProfile().fromData(dmpDescriptionProfile.getDatasetprofile()); + associatedProfile.setId(dmpDescriptionProfile.getId()); + try { + associatedProfile.setData(new ObjectMapper().readValue(dmpDescriptionProfile.getData(), new TypeReference>() {})); + } + catch (Exception e) { + associatedProfile.setData(null); + } + this.profiles.add(associatedProfile); + } + } + 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.dois = entity.getDois() != null ? entity.getDois().stream().map(item -> new Doi().fromDataModel(item)).collect(Collectors.toList()): new ArrayList<>(); + + if (entity.getProject() != null) { + this.project = new Project(); + this.project = new Project().fromDataModel(entity.getProject()); + } + + if (entity.getGrant() != null && 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; + + return this; + } + @Override public DMP toDataModel() throws Exception { DMP dataManagementPlanEntity = new DMP(); diff --git a/dmp-migration-tool/web/src/main/resources/config/application.yml b/dmp-migration-tool/web/src/main/resources/config/application.yml index 92dd2c185..e0b3bcdc4 100644 --- a/dmp-migration-tool/web/src/main/resources/config/application.yml +++ b/dmp-migration-tool/web/src/main/resources/config/application.yml @@ -2,7 +2,7 @@ web: security: enabled: true authorized-endpoints: [ api ] - allowed-endpoints: [ api/public, api/description/public ] + allowed-endpoints: [ error, api/public, api/description/public ] idp: api-key: enabled: true