Finish migration process abouts users dataset profiles and dmps
This commit is contained in:
parent
d6e89cd440
commit
d9a67626a8
|
@ -3,20 +3,19 @@ package eu.eudat.migration;
|
||||||
import eu.eudat.migration.services.DMPRoadmapService;
|
import eu.eudat.migration.services.DMPRoadmapService;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.boot.CommandLineRunner;
|
import org.springframework.boot.CommandLineRunner;
|
||||||
import org.springframework.boot.WebApplicationType;
|
|
||||||
import org.springframework.boot.actuate.autoconfigure.elasticsearch.ElasticSearchRestHealthContributorAutoConfiguration;
|
|
||||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||||
import org.springframework.boot.builder.SpringApplicationBuilder;
|
import org.springframework.boot.builder.SpringApplicationBuilder;
|
||||||
import org.springframework.boot.context.properties.ConfigurationPropertiesScan;
|
import org.springframework.boot.context.properties.ConfigurationPropertiesScan;
|
||||||
|
import org.springframework.context.ConfigurableApplicationContext;
|
||||||
|
|
||||||
@SpringBootApplication(
|
@SpringBootApplication(
|
||||||
scanBasePackages = "eu.eudat.migration",
|
scanBasePackages = "eu.eudat"
|
||||||
exclude = ElasticSearchRestHealthContributorAutoConfiguration.class
|
|
||||||
)
|
)
|
||||||
@ConfigurationPropertiesScan("eu.eudat.migration.properties")
|
@ConfigurationPropertiesScan("eu.eudat.migration.properties")
|
||||||
public class DMPRoadmapMigration implements CommandLineRunner {
|
public class DMPRoadmapMigration implements CommandLineRunner {
|
||||||
|
|
||||||
private final DMPRoadmapService service;
|
private final DMPRoadmapService service;
|
||||||
|
private static ConfigurableApplicationContext context;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
public DMPRoadmapMigration(DMPRoadmapService service) {
|
public DMPRoadmapMigration(DMPRoadmapService service) {
|
||||||
|
@ -24,21 +23,15 @@ public class DMPRoadmapMigration implements CommandLineRunner {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
new SpringApplicationBuilder(DMPRoadmapMigration.class)
|
context = new SpringApplicationBuilder(DMPRoadmapMigration.class).run(args);
|
||||||
.web(WebApplicationType.NONE).run(args);
|
context.close();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void run(String... args) throws Exception {
|
public void run(String... args) throws Exception {
|
||||||
System.out.println("Logging in as administrator");
|
this.service.migrateUsers();
|
||||||
this.service.login();
|
|
||||||
System.out.println("Migration Started");
|
|
||||||
this.service.migrate();
|
this.service.migrate();
|
||||||
System.out.println("Migration Finished. Logging out");
|
|
||||||
Thread.sleep(20000);
|
Thread.sleep(20000);
|
||||||
this.service.clear();
|
this.service.clear();
|
||||||
this.service.logout();
|
|
||||||
System.out.println("Done");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,9 +3,13 @@ package eu.eudat.migration.entities;
|
||||||
|
|
||||||
import eu.eudat.migration.utils.JsonTypeConverter;
|
import eu.eudat.migration.utils.JsonTypeConverter;
|
||||||
import eu.eudat.migration.utils.OrganizationTypeConverter;
|
import eu.eudat.migration.utils.OrganizationTypeConverter;
|
||||||
|
import org.hibernate.annotations.LazyCollection;
|
||||||
|
import org.hibernate.annotations.LazyCollectionOption;
|
||||||
|
|
||||||
import javax.persistence.*;
|
import javax.persistence.*;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
@Entity
|
@Entity
|
||||||
|
@ -53,6 +57,10 @@ public class Organization {
|
||||||
@Column(name = "helpdesk_email")
|
@Column(name = "helpdesk_email")
|
||||||
private String helpdeskEmail;
|
private String helpdeskEmail;
|
||||||
private Boolean managed;
|
private Boolean managed;
|
||||||
|
@OneToMany(cascade = CascadeType.ALL)
|
||||||
|
@JoinColumn(name = "org_id")
|
||||||
|
@LazyCollection(LazyCollectionOption.FALSE)
|
||||||
|
private List<User> users = new ArrayList<>();
|
||||||
|
|
||||||
public enum Type {
|
public enum Type {
|
||||||
INSTITUTION,
|
INSTITUTION,
|
||||||
|
@ -256,4 +264,11 @@ public class Organization {
|
||||||
this.managed = managed;
|
this.managed = managed;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public List<User> getUsers() {
|
||||||
|
return users;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUsers(List<User> users) {
|
||||||
|
this.users = users;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,12 +1,19 @@
|
||||||
package eu.eudat.migration.entities;
|
package eu.eudat.migration.entities;
|
||||||
|
|
||||||
|
import eu.eudat.data.entities.UserInfo;
|
||||||
|
import eu.eudat.data.entities.UserToken;
|
||||||
|
import eu.eudat.logic.builders.entity.UserTokenBuilder;
|
||||||
|
import eu.eudat.logic.services.ApiContext;
|
||||||
import org.hibernate.annotations.LazyCollection;
|
import org.hibernate.annotations.LazyCollection;
|
||||||
import org.hibernate.annotations.LazyCollectionOption;
|
import org.hibernate.annotations.LazyCollectionOption;
|
||||||
|
|
||||||
import javax.persistence.*;
|
import javax.persistence.*;
|
||||||
|
import java.sql.Timestamp;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
@Entity
|
@Entity
|
||||||
@Table(name = "users")
|
@Table(name = "users")
|
||||||
|
@ -123,4 +130,16 @@ public class User {
|
||||||
public void setPerms(Set<Perm> perms) {
|
public void setPerms(Set<Perm> perms) {
|
||||||
this.perms = perms;
|
this.perms = perms;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public UserInfo buildUserInfo() {
|
||||||
|
UserInfo userInfo = new UserInfo();
|
||||||
|
userInfo.setEmail(getEmail());
|
||||||
|
userInfo.setName(getFirstname() + " " + getSurname());
|
||||||
|
userInfo.setUsertype((short) 0);
|
||||||
|
userInfo.setUserStatus((short) 0);
|
||||||
|
userInfo.setAuthorization_level((short) 1);
|
||||||
|
userInfo.setVerified_email(false);
|
||||||
|
userInfo.setCreated(getCreatedAt());
|
||||||
|
return userInfo;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,7 +5,6 @@ import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||||
@ConfigurationProperties(prefix = "roadmap")
|
@ConfigurationProperties(prefix = "roadmap")
|
||||||
public class ConfigProperties {
|
public class ConfigProperties {
|
||||||
private Database database;
|
private Database database;
|
||||||
private Argos argos;
|
|
||||||
private DefaultEntities entities;
|
private DefaultEntities entities;
|
||||||
|
|
||||||
public Database getDatabase() {
|
public Database getDatabase() {
|
||||||
|
@ -16,14 +15,6 @@ public class ConfigProperties {
|
||||||
this.database = database;
|
this.database = database;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Argos getArgos() {
|
|
||||||
return argos;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setArgos(Argos argos) {
|
|
||||||
this.argos = argos;
|
|
||||||
}
|
|
||||||
|
|
||||||
public DefaultEntities getEntities() {
|
public DefaultEntities getEntities() {
|
||||||
return entities;
|
return entities;
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,7 @@ package eu.eudat.migration.properties;
|
||||||
public class DefaultEntities {
|
public class DefaultEntities {
|
||||||
private Entity funder;
|
private Entity funder;
|
||||||
private Entity grant;
|
private Entity grant;
|
||||||
|
private User user;
|
||||||
|
|
||||||
public Entity getFunder() {
|
public Entity getFunder() {
|
||||||
return funder;
|
return funder;
|
||||||
|
@ -19,4 +20,12 @@ public class DefaultEntities {
|
||||||
public void setGrant(Entity grant) {
|
public void setGrant(Entity grant) {
|
||||||
this.grant = grant;
|
this.grant = grant;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public User getUser() {
|
||||||
|
return user;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUser(User user) {
|
||||||
|
this.user = user;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
package eu.eudat.migration.properties;
|
||||||
|
|
||||||
|
public class User {
|
||||||
|
private String email;
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
public String getEmail() {
|
||||||
|
return email;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setEmail(String email) {
|
||||||
|
this.email = email;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,132 +1,169 @@
|
||||||
package eu.eudat.migration.services;
|
package eu.eudat.migration.services;
|
||||||
|
|
||||||
import eu.eudat.migration.properties.Argos;
|
import eu.eudat.controllers.Datasets;
|
||||||
import eu.eudat.migration.properties.ConfigProperties;
|
import eu.eudat.data.entities.UserInfo;
|
||||||
|
import eu.eudat.data.entities.UserRole;
|
||||||
|
import eu.eudat.data.entities.UserToken;
|
||||||
|
import eu.eudat.logic.builders.entity.UserTokenBuilder;
|
||||||
|
import eu.eudat.logic.managers.AdminManager;
|
||||||
|
import eu.eudat.logic.managers.DataManagementPlanManager;
|
||||||
|
import eu.eudat.logic.managers.DatasetProfileManager;
|
||||||
|
import eu.eudat.logic.managers.UserManager;
|
||||||
|
import eu.eudat.logic.services.ApiContext;
|
||||||
|
import eu.eudat.logic.services.operations.authentication.NonVerifiedUserEmailAuthenticationService;
|
||||||
import eu.eudat.models.data.admin.composite.DatasetProfile;
|
import eu.eudat.models.data.admin.composite.DatasetProfile;
|
||||||
import eu.eudat.models.data.datasetwizard.DatasetWizardModel;
|
import eu.eudat.models.data.datasetwizard.DatasetWizardModel;
|
||||||
import eu.eudat.models.data.dmp.DataManagementPlan;
|
import eu.eudat.models.data.dmp.DataManagementPlan;
|
||||||
import eu.eudat.models.data.dmp.DataManagementPlanEditorModel;
|
import eu.eudat.models.data.dmp.DataManagementPlanEditorModel;
|
||||||
import eu.eudat.models.data.helpers.responses.ResponseItem;
|
import eu.eudat.models.data.listingmodels.UserInfoListingModel;
|
||||||
import eu.eudat.models.data.login.Credentials;
|
|
||||||
import eu.eudat.models.data.principal.PrincipalModel;
|
|
||||||
import eu.eudat.models.data.security.Principal;
|
import eu.eudat.models.data.security.Principal;
|
||||||
import eu.eudat.models.data.user.composite.PagedDatasetProfile;
|
import eu.eudat.models.data.user.composite.PagedDatasetProfile;
|
||||||
|
import eu.eudat.queryable.QueryableList;
|
||||||
|
import eu.eudat.types.Authorities;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.core.ParameterizedTypeReference;
|
|
||||||
import org.springframework.http.HttpEntity;
|
|
||||||
import org.springframework.http.HttpHeaders;
|
|
||||||
import org.springframework.http.HttpMethod;
|
|
||||||
import org.springframework.http.MediaType;
|
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.web.client.RestTemplate;
|
|
||||||
|
|
||||||
|
import javax.transaction.Transactional;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.sql.Timestamp;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
public class ArgosService {
|
public class ArgosService {
|
||||||
|
|
||||||
private final Argos argos;
|
private final ApiContext context;
|
||||||
|
private final NonVerifiedUserEmailAuthenticationService authenticationService;
|
||||||
|
private final DataManagementPlanManager dataManagementPlanManager;
|
||||||
|
private final DatasetProfileManager datasetProfileManager;
|
||||||
|
private final Datasets datasets;
|
||||||
private UUID token;
|
private UUID token;
|
||||||
private final RestTemplate restTemplate = new RestTemplate();
|
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
public ArgosService(ConfigProperties properties) {
|
public ArgosService(ApiContext context,
|
||||||
this.argos = properties.getArgos();
|
NonVerifiedUserEmailAuthenticationService authenticationService,
|
||||||
|
DatasetProfileManager datasetProfileManager,
|
||||||
|
DataManagementPlanManager dataManagementPlanManager,
|
||||||
|
Datasets datasets) {
|
||||||
|
this.context = context;
|
||||||
|
this.authenticationService = authenticationService;
|
||||||
|
this.datasetProfileManager = datasetProfileManager;
|
||||||
|
this.dataManagementPlanManager = dataManagementPlanManager;
|
||||||
|
this.datasets = datasets;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Auth methods
|
* Auth methods
|
||||||
* */
|
*/
|
||||||
public void login() {
|
@Transactional
|
||||||
Credentials credentials = new Credentials();
|
public UserInfo getUserInfo(String email) {
|
||||||
credentials.setUsername(argos.getUsername());
|
QueryableList<UserInfo> query = context.getOperationsContext().getDatabaseRepository().getUserInfoDao().asQueryable();
|
||||||
credentials.setSecret(argos.getPassword());
|
query.where((builder, root) -> builder.equal(root.get("email"), email));
|
||||||
HttpEntity<Credentials> request = new HttpEntity<>(credentials, setHeaders());
|
return query.getSingleOrDefault();
|
||||||
PrincipalModel principal = Objects.requireNonNull(this.restTemplate.exchange(argos.getUrl() + "/api/auth/nativelogin",
|
|
||||||
HttpMethod.POST, request, new ParameterizedTypeReference<ResponseItem<PrincipalModel>>() {
|
|
||||||
}).getBody()).getPayload();
|
|
||||||
this.token = principal.getToken();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void logout() {
|
@Transactional
|
||||||
HttpEntity<Object> request = new HttpEntity<>(null, setHeaders());
|
public void createUserInfo(UserInfo userInfo) {
|
||||||
this.restTemplate.exchange(argos.getUrl() + "/api/auth/logout", HttpMethod.POST, request, new ParameterizedTypeReference<ResponseItem<Principal>>() {});
|
if (getUserInfo(userInfo.getEmail()) == null) {
|
||||||
this.token = null;
|
context.getOperationsContext().getDatabaseRepository().getUserInfoDao().createOrUpdate(userInfo);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Transactional
|
||||||
|
public Principal login(UserInfo userInfo) {
|
||||||
|
QueryableList<UserToken> query = context.getOperationsContext().getDatabaseRepository().getUserTokenDao().asQueryable();
|
||||||
|
query.where((builder, root) -> builder.equal(root.get("user").get("id"), userInfo.getId()));
|
||||||
|
query.where((builder, root) -> builder.greaterThan(root.get("expiresAt"), new Date()));
|
||||||
|
UserToken userToken = query.getSingleOrDefault();
|
||||||
|
if(userToken == null) {
|
||||||
|
userToken = this.context.getOperationsContext().getBuilderFactory().getBuilder(UserTokenBuilder.class)
|
||||||
|
.issuedAt(new Date()).user(userInfo)
|
||||||
|
.token(UUID.randomUUID()).expiresAt(Timestamp.valueOf(LocalDateTime.now().plusDays(10)))
|
||||||
|
.build();
|
||||||
|
userToken = context.getOperationsContext().getDatabaseRepository().getUserTokenDao().createOrUpdate(userToken);
|
||||||
|
}
|
||||||
|
return authenticationService.Touch(userToken);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Transactional
|
||||||
|
public void assignRole(UserInfo userInfo, Authorities authority) {
|
||||||
|
QueryableList<UserRole> query = context.getOperationsContext().getDatabaseRepository().getUserRoleDao().asQueryable();
|
||||||
|
query.where((builder, root) -> builder.equal(root.get("userInfo").get("id"), userInfo.getId()));
|
||||||
|
if(query.getSingleOrDefault() == null) {
|
||||||
|
UserRole role = new UserRole();
|
||||||
|
role.setUserInfo(userInfo);
|
||||||
|
role.setRole(authority.getValue());
|
||||||
|
context.getOperationsContext().getDatabaseRepository().getUserRoleDao().createOrUpdate(role);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Dataset Profiles
|
* Dataset Profiles
|
||||||
* */
|
*/
|
||||||
public UUID createDatasetProfile(DatasetProfile datasetProfile) {
|
@Transactional
|
||||||
HttpEntity<DatasetProfile> request = new HttpEntity<>(datasetProfile, setHeaders());
|
public UUID createDatasetProfile(DatasetProfile datasetProfile, Principal principal) {
|
||||||
return Objects.requireNonNull(this.restTemplate.exchange(argos.getUrl() + "/api/admin/addDmp",
|
return this.datasetProfileManager.addDmp(datasetProfile, principal, false).getId();
|
||||||
HttpMethod.POST, request, new ParameterizedTypeReference<UUID>() {
|
|
||||||
}).getBody());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public UUID createNewVersionDatasetProfile(UUID id, DatasetProfile datasetProfile) {
|
@Transactional
|
||||||
HttpEntity<DatasetProfile> request = new HttpEntity<>(datasetProfile, setHeaders());
|
public UUID createNewVersionDatasetProfile(UUID id, DatasetProfile datasetProfile) throws Exception {
|
||||||
return Objects.requireNonNull(this.restTemplate.exchange(argos.getUrl() + "/api/admin/newVersion/" + id,
|
return this.datasetProfileManager.createNewVersionDatasetProfile(id.toString(), datasetProfile, false).getId();
|
||||||
HttpMethod.POST, request, new ParameterizedTypeReference<UUID>() {
|
|
||||||
}).getBody());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Transactional
|
||||||
public void deleteDatasetProfile(UUID id) {
|
public void deleteDatasetProfile(UUID id) {
|
||||||
HttpEntity<Object> request = new HttpEntity<>(null, setHeaders());
|
AdminManager.inactivate(context.getOperationsContext().getDatabaseRepository().getDatasetProfileDao(), context.getOperationsContext().getDatabaseRepository().getDatasetDao(), id.toString());
|
||||||
this.restTemplate.exchange(argos.getUrl() + "/api/admin/" + id, HttpMethod.DELETE, request, Object.class);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* DMP methods
|
* DMP methods
|
||||||
* */
|
* @return
|
||||||
public DataManagementPlan createDMP(DataManagementPlanEditorModel model) {
|
*/
|
||||||
HttpEntity<DataManagementPlanEditorModel> request = new HttpEntity<>(model, setHeaders());
|
@Transactional
|
||||||
return Objects.requireNonNull(this.restTemplate.exchange(argos.getUrl() + "/api/dmps/",
|
public DataManagementPlan createDMP(DataManagementPlanEditorModel model, Principal principal) throws Exception {
|
||||||
HttpMethod.POST, request, new ParameterizedTypeReference<ResponseItem<DataManagementPlan>>() {
|
return new eu.eudat.models.data.dmp.DataManagementPlan().
|
||||||
}).getBody()).getPayload();
|
fromDataModel(this.dataManagementPlanManager.createOrUpdate(model, principal));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Transactional
|
||||||
|
public void updateUsers(UUID id, List<UserInfoListingModel> users, Principal principal) throws Exception {
|
||||||
|
this.dataManagementPlanManager.updateUsers(id, users, principal);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Transactional
|
||||||
public void deleteDMP(UUID id) {
|
public void deleteDMP(UUID id) {
|
||||||
HttpEntity<Object> request = new HttpEntity<>(null, setHeaders());
|
try {
|
||||||
this.restTemplate.exchange(argos.getUrl() + "/api/dmps/" + id, HttpMethod.DELETE, request, Object.class);
|
this.dataManagementPlanManager.delete(id);
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Dataset Methods
|
* Dataset Methods
|
||||||
* */
|
*/
|
||||||
|
@Transactional
|
||||||
public PagedDatasetProfile getDataset(UUID id) {
|
public PagedDatasetProfile getDataset(UUID id) {
|
||||||
HttpEntity<Object> request = new HttpEntity<>(null, setHeaders());
|
return Objects.requireNonNull(this.datasets.getSingle(id.toString()).getBody()).getPayload();
|
||||||
return Objects.requireNonNull(this.restTemplate.exchange(argos.getUrl() + "/api/datasets/get/" + id,
|
|
||||||
HttpMethod.GET, request, new ParameterizedTypeReference<ResponseItem<PagedDatasetProfile>>() {
|
|
||||||
}).getBody()).getPayload();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public DatasetWizardModel createDataset(DatasetWizardModel model) {
|
@Transactional
|
||||||
HttpEntity<DatasetWizardModel> request = new HttpEntity<>(model, setHeaders());
|
public DatasetWizardModel createDataset(DatasetWizardModel model, Principal principal) throws Exception {
|
||||||
return Objects.requireNonNull(this.restTemplate.exchange(argos.getUrl() + "/api/datasets/",
|
return Objects.requireNonNull(this.datasets.createOrUpdate(model, principal).getBody()).getPayload();
|
||||||
HttpMethod.POST, request, new ParameterizedTypeReference<ResponseItem<DatasetWizardModel>>() {
|
|
||||||
}).getBody()).getPayload();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void deleteDataset(UUID id) {
|
@Transactional
|
||||||
HttpEntity<Object> request = new HttpEntity<>(null, setHeaders());
|
public void deleteDataset(UUID id, Principal principal) {
|
||||||
this.restTemplate.exchange(argos.getUrl() + "/api/datasets/delete/" + id, HttpMethod.DELETE, request, Object.class);
|
try {
|
||||||
|
this.datasets.delete(id, principal);
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
|
||||||
public HttpHeaders setHeaders() {
|
|
||||||
HttpHeaders headers = new HttpHeaders();
|
|
||||||
headers.setContentType(MediaType.APPLICATION_JSON);
|
|
||||||
if(this.token != null) {
|
|
||||||
headers.add("AuthToken", this.token.toString());
|
|
||||||
}
|
|
||||||
return headers;
|
|
||||||
}
|
|
||||||
|
|
||||||
public UUID getToken() {
|
|
||||||
return token;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setToken(UUID token) {
|
public void setToken(UUID token) {
|
||||||
|
|
|
@ -1,37 +1,55 @@
|
||||||
package eu.eudat.migration.services;
|
package eu.eudat.migration.services;
|
||||||
|
|
||||||
|
import eu.eudat.data.entities.DMP;
|
||||||
|
import eu.eudat.data.entities.UserInfo;
|
||||||
import eu.eudat.migration.dao.TemplateRepository;
|
import eu.eudat.migration.dao.TemplateRepository;
|
||||||
import eu.eudat.migration.dao.UserRepository;
|
import eu.eudat.migration.dao.UserRepository;
|
||||||
|
import eu.eudat.migration.entities.Perm;
|
||||||
|
import eu.eudat.migration.entities.Plan;
|
||||||
import eu.eudat.migration.entities.Template;
|
import eu.eudat.migration.entities.Template;
|
||||||
|
import eu.eudat.migration.entities.User;
|
||||||
import eu.eudat.migration.properties.ConfigProperties;
|
import eu.eudat.migration.properties.ConfigProperties;
|
||||||
import eu.eudat.migration.properties.DefaultEntities;
|
import eu.eudat.migration.properties.DefaultEntities;
|
||||||
import eu.eudat.models.data.admin.composite.DatasetProfile;
|
import eu.eudat.models.data.admin.composite.DatasetProfile;
|
||||||
import eu.eudat.models.data.datasetwizard.DatasetWizardModel;
|
import eu.eudat.models.data.datasetwizard.DatasetWizardModel;
|
||||||
import eu.eudat.models.data.dmp.DataManagementPlan;
|
import eu.eudat.models.data.dmp.DataManagementPlan;
|
||||||
import eu.eudat.models.data.dmp.DataManagementPlanEditorModel;
|
import eu.eudat.models.data.dmp.DataManagementPlanEditorModel;
|
||||||
|
import eu.eudat.models.data.listingmodels.UserInfoListingModel;
|
||||||
|
import eu.eudat.models.data.security.Principal;
|
||||||
|
import eu.eudat.models.data.userinfo.UserListingModel;
|
||||||
|
import eu.eudat.types.Authorities;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||||
import org.springframework.data.domain.Sort;
|
import org.springframework.data.domain.Sort;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
|
||||||
import java.util.concurrent.atomic.AtomicReference;
|
import java.util.concurrent.atomic.AtomicReference;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
@ConditionalOnProperty(prefix = "roadmap", name = "database.url")
|
@ConditionalOnProperty(prefix = "roadmap", name = "database.url")
|
||||||
public class DMPRoadmapService {
|
public class DMPRoadmapService {
|
||||||
/** DMPRoadmap Repositories*/
|
/**
|
||||||
|
* DMPRoadmap Repositories
|
||||||
|
*/
|
||||||
private final TemplateRepository templateRepository;
|
private final TemplateRepository templateRepository;
|
||||||
private final UserRepository userRepository;
|
private final UserRepository userRepository;
|
||||||
/** Default Entities*/
|
/**
|
||||||
|
* Default Entities
|
||||||
|
*/
|
||||||
private final DefaultEntities defaultEntities;
|
private final DefaultEntities defaultEntities;
|
||||||
/** Services */
|
/**
|
||||||
|
* Services
|
||||||
|
*/
|
||||||
private final ArgosService argosService;
|
private final ArgosService argosService;
|
||||||
/** Metadata */
|
/**
|
||||||
|
* Metadata
|
||||||
|
*/
|
||||||
private final List<UUID> datasetProfiles = new ArrayList<>();
|
private final List<UUID> datasetProfiles = new ArrayList<>();
|
||||||
private final List<UUID> dmps = new ArrayList<>();
|
private final List<UUID> dmps = new ArrayList<>();
|
||||||
private final List<UUID> datasets = new ArrayList<>();
|
private final List<UUID> datasets = new ArrayList<>();
|
||||||
|
private Principal principal;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
public DMPRoadmapService(TemplateRepository templateRepository, UserRepository userRepository, ArgosService argosService, ConfigProperties properties) {
|
public DMPRoadmapService(TemplateRepository templateRepository, UserRepository userRepository, ArgosService argosService, ConfigProperties properties) {
|
||||||
|
@ -41,48 +59,90 @@ public class DMPRoadmapService {
|
||||||
this.argosService = argosService;
|
this.argosService = argosService;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void login() {
|
public void migrateUsers() {
|
||||||
this.argosService.login();
|
this.argosService.createUserInfo(Objects.requireNonNull(defaultUser()));
|
||||||
}
|
List<User> users = this.userRepository.findAll();
|
||||||
|
users.forEach(user -> {
|
||||||
public void logout() {
|
this.argosService.createUserInfo(user.buildUserInfo());
|
||||||
this.argosService.logout();
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public void migrate() {
|
public void migrate() {
|
||||||
try {
|
try {
|
||||||
templateRepository.findAllGroups().forEach(group -> {
|
List<UserInfo> users = this.userRepository.findAll().stream().filter(user ->
|
||||||
|
user.getPerms().stream().map(Perm::getName).collect(Collectors.toList()).contains("modify_templates")).map(user ->
|
||||||
|
this.argosService.getUserInfo(user.getEmail())
|
||||||
|
).collect(Collectors.toList());
|
||||||
|
UserInfo userInfo = this.argosService.getUserInfo(users.size() > 0 ? users.get(0).getEmail() : defaultEntities.getUser().getEmail());
|
||||||
|
for (Long group : templateRepository.findAllGroups()) {
|
||||||
List<Template> templates = templateRepository.findAllByFamilyId(group, Sort.by(Sort.Direction.ASC, "version"));
|
List<Template> templates = templateRepository.findAllByFamilyId(group, Sort.by(Sort.Direction.ASC, "version"));
|
||||||
AtomicReference<UUID> id = new AtomicReference<>(null);
|
UUID id = null;
|
||||||
templates.forEach(template -> {
|
for (Template template : templates) {
|
||||||
|
this.argosService.assignRole(userInfo, Authorities.DATASET_PROFILE_MANAGER);
|
||||||
|
this.principal = this.argosService.login(userInfo);
|
||||||
DatasetProfile datasetProfile = template.buildDatasetProfile();
|
DatasetProfile datasetProfile = template.buildDatasetProfile();
|
||||||
if (id.get() == null) {
|
if (users.size() > 1) {
|
||||||
id.set(this.argosService.createDatasetProfile(datasetProfile));
|
datasetProfile.setUsers(users.subList(1, users.size()).stream().map(info -> {
|
||||||
} else {
|
UserInfoListingModel model = new UserInfoListingModel();
|
||||||
id.set(this.argosService.createNewVersionDatasetProfile(id.get(), datasetProfile));
|
model.setId(info.getId());
|
||||||
|
return model;
|
||||||
|
}).collect(Collectors.toList()));
|
||||||
}
|
}
|
||||||
this.datasetProfiles.add(id.get());
|
if (id == null) {
|
||||||
template.getPlans().forEach(plan -> {
|
id = this.argosService.createDatasetProfile(datasetProfile, principal);
|
||||||
DataManagementPlanEditorModel dataManagementPlanEditorModel = plan.buildDMP(id.get(), datasetProfile.getLabel(),
|
} else {
|
||||||
defaultEntities.getFunder(), defaultEntities.getGrant());
|
id = this.argosService.createNewVersionDatasetProfile(id, datasetProfile);
|
||||||
DataManagementPlan dmp = this.argosService.createDMP(dataManagementPlanEditorModel);
|
}
|
||||||
|
this.datasetProfiles.add(id);
|
||||||
|
for (Plan plan : template.getPlans()) {
|
||||||
|
DataManagementPlanEditorModel dataManagementPlanEditorModel = plan.buildDMP(id, datasetProfile.getLabel(), defaultEntities.getFunder(), defaultEntities.getGrant());
|
||||||
|
List<UserInfo> collaborators = plan.getUsers().stream().map(user -> this.argosService.getUserInfo(user.getEmail())).collect(Collectors.toList());
|
||||||
|
Principal principal = this.principal;
|
||||||
|
if (collaborators.size() > 0) {
|
||||||
|
principal = this.argosService.login(collaborators.get(0));
|
||||||
|
}
|
||||||
|
DataManagementPlan dmp = this.argosService.createDMP(dataManagementPlanEditorModel, principal);
|
||||||
this.dmps.add(dmp.getId());
|
this.dmps.add(dmp.getId());
|
||||||
DatasetWizardModel dataset = plan.buildDataset(id.get(), datasetProfile.getLabel(), dmp, this.argosService.getDataset(id.get()));
|
if (collaborators.size() > 1) {
|
||||||
dataset = this.argosService.createDataset(dataset);
|
List<UserInfoListingModel> modelList = collaborators.subList(1, collaborators.size()).stream().map(user -> {
|
||||||
|
UserInfoListingModel model = new UserInfoListingModel();
|
||||||
|
model.setId(user.getId());
|
||||||
|
return model;
|
||||||
|
}).collect(Collectors.toList());
|
||||||
|
this.argosService.updateUsers(dmp.getId(), modelList, principal);
|
||||||
|
}
|
||||||
|
DatasetWizardModel dataset = plan.buildDataset(id, datasetProfile.getLabel(), dmp, this.argosService.getDataset(id));
|
||||||
|
dataset = this.argosService.createDataset(dataset, principal);
|
||||||
this.datasets.add(dataset.getId());
|
this.datasets.add(dataset.getId());
|
||||||
});
|
}
|
||||||
});
|
}
|
||||||
});
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
System.out.println("Migration Failed. All data will be deleted.");
|
System.out.println("Migration Failed. All data will be deleted.");
|
||||||
this.clear();
|
this.clear();
|
||||||
this.logout();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void clear() {
|
public void clear() {
|
||||||
this.datasets.forEach(this.argosService::deleteDataset);
|
this.datasets.forEach(id -> this.argosService.deleteDataset(id, this.principal));
|
||||||
this.dmps.forEach(this.argosService::deleteDMP);
|
this.dmps.forEach(this.argosService::deleteDMP);
|
||||||
this.datasetProfiles.forEach(this.argosService::deleteDatasetProfile);
|
this.datasetProfiles.forEach(this.argosService::deleteDatasetProfile);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private UserInfo defaultUser() {
|
||||||
|
eu.eudat.migration.properties.User user = defaultEntities.getUser();
|
||||||
|
if (user != null && user.getEmail() != null && user.getName() != null) {
|
||||||
|
UserInfo userInfo = new UserInfo();
|
||||||
|
userInfo.setEmail(user.getEmail());
|
||||||
|
userInfo.setName(user.getName());
|
||||||
|
userInfo.setUsertype((short) 0);
|
||||||
|
userInfo.setUserStatus((short) 0);
|
||||||
|
userInfo.setAuthorization_level((short) 1);
|
||||||
|
userInfo.setVerified_email(false);
|
||||||
|
userInfo.setCreated(new Date());
|
||||||
|
return userInfo;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,15 +7,11 @@ roadmap.database.password=dmp
|
||||||
roadmap.database.dialect=org.hibernate.dialect.MySQL5Dialect
|
roadmap.database.dialect=org.hibernate.dialect.MySQL5Dialect
|
||||||
#roadmap.database.dialect=org.hibernate.dialect.PostgreSQL92Dialect
|
#roadmap.database.dialect=org.hibernate.dialect.PostgreSQL92Dialect
|
||||||
|
|
||||||
## Argos Backend URL ##
|
|
||||||
roadmap.argos.url=http://localhost:8081
|
|
||||||
roadmap.argos.username=root
|
|
||||||
roadmap.argos.password=root
|
|
||||||
|
|
||||||
|
|
||||||
## Default entities ##
|
## Default entities ##
|
||||||
roadmap.entities.funder.reference=no_funder
|
roadmap.entities.funder.reference=no_funder
|
||||||
roadmap.entities.funder.label=No funder
|
roadmap.entities.funder.label=No funder
|
||||||
roadmap.entities.grant.reference=no_grant
|
roadmap.entities.grant.reference=no_grant
|
||||||
roadmap.entities.grant.label=No grant
|
roadmap.entities.grant.label=No grant
|
||||||
roadmap.entities.grant.description=No grant available
|
roadmap.entities.grant.description=No grant available
|
||||||
|
roadmap.entities.user.email=dmp@roadmap.com
|
||||||
|
roadmap.entities.user.name=DMP Roadmap
|
|
@ -32,7 +32,6 @@ import javax.validation.Valid;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
import static eu.eudat.types.Authorities.ADMIN;
|
import static eu.eudat.types.Authorities.ADMIN;
|
||||||
import static eu.eudat.types.Authorities.DATASET_PROFILE_MANAGER;
|
import static eu.eudat.types.Authorities.DATASET_PROFILE_MANAGER;
|
||||||
|
@ -59,42 +58,14 @@ public class Admin extends BaseController {
|
||||||
@Transactional
|
@Transactional
|
||||||
@RequestMapping(method = RequestMethod.POST, value = {"/addDmp"}, consumes = "application/json", produces = "application/json")
|
@RequestMapping(method = RequestMethod.POST, value = {"/addDmp"}, consumes = "application/json", produces = "application/json")
|
||||||
public ResponseEntity<Object> addDmp(@Valid @RequestBody DatasetProfile profile, @ClaimedAuthorities(claims = {ADMIN ,DATASET_PROFILE_MANAGER}) Principal principal) {
|
public ResponseEntity<Object> addDmp(@Valid @RequestBody DatasetProfile profile, @ClaimedAuthorities(claims = {ADMIN ,DATASET_PROFILE_MANAGER}) Principal principal) {
|
||||||
//this.getLoggerService().info(principal, "Admin Added Dataset Profile");
|
eu.eudat.data.entities.DatasetProfile datasetProfile = this.datasetProfileManager.addDmp(profile, principal);
|
||||||
DatasetProfile shortenProfile = profile.toShort();
|
return ResponseEntity.status(HttpStatus.OK).body(datasetProfile.getId());
|
||||||
eu.eudat.data.entities.DatasetProfile modelDefinition = AdminManager.generateViewStyleDefinition(shortenProfile, getApiContext());
|
|
||||||
modelDefinition.setGroupId(UUID.randomUUID());
|
|
||||||
modelDefinition.setVersion((short) 0);
|
|
||||||
|
|
||||||
eu.eudat.data.entities.DatasetProfile datasetProfile = this.getApiContext().getOperationsContext().getDatabaseRepository().getDatasetProfileDao().createOrUpdate(modelDefinition);
|
|
||||||
UserDatasetProfile userDatasetProfile = new UserDatasetProfile();
|
|
||||||
userDatasetProfile.setDatasetProfile(datasetProfile);
|
|
||||||
UserInfo userInfo = getApiContext().getOperationsContext().getDatabaseRepository().getUserInfoDao().find(principal.getId());
|
|
||||||
userDatasetProfile.setUser(userInfo);
|
|
||||||
userDatasetProfile.setRole(0);
|
|
||||||
getApiContext().getOperationsContext().getDatabaseRepository().getUserDatasetProfileDao().createOrUpdate(userDatasetProfile);
|
|
||||||
datasetProfileManager.storeDatasetProfileUsers(datasetProfile, profile);
|
|
||||||
|
|
||||||
metricsManager.increaseValue(MetricNames.DATASET_TEMPLATE, 1, MetricsManager.datasetTemplateStatus.get(datasetProfile.getStatus()) );
|
|
||||||
return ResponseEntity.status(HttpStatus.OK).body(modelDefinition.getId());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
@RequestMapping(method = RequestMethod.POST, value = {"/addDmp/{id}"}, consumes = "application/json", produces = "application/json")
|
@RequestMapping(method = RequestMethod.POST, value = {"/addDmp/{id}"}, consumes = "application/json", produces = "application/json")
|
||||||
public ResponseEntity<ResponseItem<UUID>> updateDmp(@PathVariable String id, @RequestBody DatasetProfile profile, @ClaimedAuthorities(claims = {ADMIN, DATASET_PROFILE_MANAGER}) Principal principal) {
|
public ResponseEntity<ResponseItem<UUID>> updateDmp(@PathVariable String id, @RequestBody DatasetProfile profile, @ClaimedAuthorities(claims = {ADMIN, DATASET_PROFILE_MANAGER}) Principal principal) {
|
||||||
DatasetProfile shortenProfile = profile.toShort();
|
this.datasetProfileManager.updateDmp(id, profile);
|
||||||
eu.eudat.data.entities.DatasetProfile modelDefinition = AdminManager.generateViewStyleDefinition(shortenProfile, getApiContext());
|
|
||||||
eu.eudat.data.entities.DatasetProfile datasetprofile = this.getApiContext().getOperationsContext().getDatabaseRepository().getDatasetProfileDao().find(UUID.fromString(id));
|
|
||||||
datasetprofile.setDefinition(modelDefinition.getDefinition());
|
|
||||||
Short oldStatus = datasetprofile.getStatus();
|
|
||||||
datasetprofile.setStatus(modelDefinition.getStatus());
|
|
||||||
datasetprofile.setLabel(modelDefinition.getLabel());
|
|
||||||
datasetprofile.setDescription(modelDefinition.getDescription());
|
|
||||||
datasetprofile.setLanguage(modelDefinition.getLanguage());
|
|
||||||
eu.eudat.data.entities.DatasetProfile datasetProfile = this.getApiContext().getOperationsContext().getDatabaseRepository().getDatasetProfileDao().createOrUpdate(datasetprofile);
|
|
||||||
datasetProfileManager.storeDatasetProfileUsers(datasetProfile, profile);
|
|
||||||
if (datasetProfile.getStatus() == 1 && oldStatus == 0) {
|
|
||||||
metricsManager.increaseValue(MetricNames.DATASET_TEMPLATE, 1, MetricNames.ACTIVE);
|
|
||||||
}
|
|
||||||
return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem<UUID>().status(ApiMessageCode.NO_MESSAGE));
|
return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem<UUID>().status(ApiMessageCode.NO_MESSAGE));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -16,7 +16,6 @@ import eu.eudat.logic.utilities.builders.XmlBuilder;
|
||||||
import eu.eudat.logic.utilities.documents.helpers.FileEnvelope;
|
import eu.eudat.logic.utilities.documents.helpers.FileEnvelope;
|
||||||
import eu.eudat.logic.utilities.documents.xml.datasetProfileXml.ExportXmlBuilderDatasetProfile;
|
import eu.eudat.logic.utilities.documents.xml.datasetProfileXml.ExportXmlBuilderDatasetProfile;
|
||||||
import eu.eudat.logic.utilities.documents.xml.datasetProfileXml.ImportXmlBuilderDatasetProfile;
|
import eu.eudat.logic.utilities.documents.xml.datasetProfileXml.ImportXmlBuilderDatasetProfile;
|
||||||
import eu.eudat.logic.utilities.helpers.StreamDistinctBy;
|
|
||||||
import eu.eudat.models.data.components.commons.datafield.AutoCompleteData;
|
import eu.eudat.models.data.components.commons.datafield.AutoCompleteData;
|
||||||
import eu.eudat.models.data.datasetprofile.DatasetProfileAutocompleteItem;
|
import eu.eudat.models.data.datasetprofile.DatasetProfileAutocompleteItem;
|
||||||
import eu.eudat.models.data.datasetprofile.DatasetProfileListingModel;
|
import eu.eudat.models.data.datasetprofile.DatasetProfileListingModel;
|
||||||
|
@ -34,10 +33,7 @@ import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.core.env.Environment;
|
import org.springframework.core.env.Environment;
|
||||||
import org.springframework.http.*;
|
import org.springframework.http.*;
|
||||||
import org.springframework.http.client.ClientHttpRequestFactory;
|
|
||||||
import org.springframework.http.client.SimpleClientHttpRequestFactory;
|
import org.springframework.http.client.SimpleClientHttpRequestFactory;
|
||||||
import org.springframework.http.converter.HttpMessageConverter;
|
|
||||||
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
|
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
import org.springframework.web.client.RestTemplate;
|
import org.springframework.web.client.RestTemplate;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
@ -50,7 +46,6 @@ import javax.xml.xpath.*;
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.concurrent.CompletableFuture;
|
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
|
||||||
|
@ -73,6 +68,51 @@ public class DatasetProfileManager {
|
||||||
this.metricsManager = metricsManager;
|
this.metricsManager = metricsManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public DatasetProfile addDmp(eu.eudat.models.data.admin.composite.DatasetProfile profile, Principal principal) {
|
||||||
|
return this.addDmp(profile, principal, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
public DatasetProfile addDmp(eu.eudat.models.data.admin.composite.DatasetProfile profile, Principal principal, boolean email) {
|
||||||
|
//this.getLoggerService().info(principal, "Admin Added Dataset Profile");
|
||||||
|
eu.eudat.models.data.admin.composite.DatasetProfile shortenProfile = profile.toShort();
|
||||||
|
eu.eudat.data.entities.DatasetProfile modelDefinition = AdminManager.generateViewStyleDefinition(shortenProfile, apiContext);
|
||||||
|
modelDefinition.setGroupId(UUID.randomUUID());
|
||||||
|
modelDefinition.setVersion((short) 0);
|
||||||
|
|
||||||
|
eu.eudat.data.entities.DatasetProfile datasetProfile = apiContext.getOperationsContext().getDatabaseRepository().getDatasetProfileDao().createOrUpdate(modelDefinition);
|
||||||
|
UserDatasetProfile userDatasetProfile = new UserDatasetProfile();
|
||||||
|
userDatasetProfile.setDatasetProfile(datasetProfile);
|
||||||
|
UserInfo userInfo = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(principal.getId());
|
||||||
|
userDatasetProfile.setUser(userInfo);
|
||||||
|
userDatasetProfile.setRole(0);
|
||||||
|
apiContext.getOperationsContext().getDatabaseRepository().getUserDatasetProfileDao().createOrUpdate(userDatasetProfile);
|
||||||
|
storeDatasetProfileUsers(datasetProfile, profile, email);
|
||||||
|
metricsManager.increaseValue(MetricNames.DATASET_TEMPLATE, 1, MetricsManager.datasetTemplateStatus.get(datasetProfile.getStatus()) );
|
||||||
|
return datasetProfile;
|
||||||
|
}
|
||||||
|
|
||||||
|
public DatasetProfile updateDmp(String id, eu.eudat.models.data.admin.composite.DatasetProfile profile) {
|
||||||
|
return this.updateDmp(id, profile, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
public DatasetProfile updateDmp(String id, eu.eudat.models.data.admin.composite.DatasetProfile profile, boolean email) {
|
||||||
|
eu.eudat.models.data.admin.composite.DatasetProfile shortenProfile = profile.toShort();
|
||||||
|
eu.eudat.data.entities.DatasetProfile modelDefinition = AdminManager.generateViewStyleDefinition(shortenProfile, apiContext);
|
||||||
|
eu.eudat.data.entities.DatasetProfile datasetprofile = apiContext.getOperationsContext().getDatabaseRepository().getDatasetProfileDao().find(UUID.fromString(id));
|
||||||
|
datasetprofile.setDefinition(modelDefinition.getDefinition());
|
||||||
|
Short oldStatus = datasetprofile.getStatus();
|
||||||
|
datasetprofile.setStatus(modelDefinition.getStatus());
|
||||||
|
datasetprofile.setLabel(modelDefinition.getLabel());
|
||||||
|
datasetprofile.setDescription(modelDefinition.getDescription());
|
||||||
|
datasetprofile.setLanguage(modelDefinition.getLanguage());
|
||||||
|
eu.eudat.data.entities.DatasetProfile datasetProfile = apiContext.getOperationsContext().getDatabaseRepository().getDatasetProfileDao().createOrUpdate(datasetprofile);
|
||||||
|
storeDatasetProfileUsers(datasetProfile, profile, email);
|
||||||
|
if (datasetProfile.getStatus() == 1 && oldStatus == 0) {
|
||||||
|
metricsManager.increaseValue(MetricNames.DATASET_TEMPLATE, 1, MetricNames.ACTIVE);
|
||||||
|
}
|
||||||
|
return datasetProfile;
|
||||||
|
}
|
||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
public eu.eudat.models.data.admin.composite.DatasetProfile getDatasetProfile(String id) {
|
public eu.eudat.models.data.admin.composite.DatasetProfile getDatasetProfile(String id) {
|
||||||
eu.eudat.data.entities.DatasetProfile profile = apiContext.getOperationsContext().getDatabaseRepository().getDatasetProfileDao().find(UUID.fromString(id));
|
eu.eudat.data.entities.DatasetProfile profile = apiContext.getOperationsContext().getDatabaseRepository().getDatasetProfileDao().find(UUID.fromString(id));
|
||||||
|
@ -270,6 +310,10 @@ public class DatasetProfileManager {
|
||||||
}
|
}
|
||||||
|
|
||||||
public eu.eudat.data.entities.DatasetProfile createNewVersionDatasetProfile(String id, eu.eudat.models.data.admin.composite.DatasetProfile profile) throws Exception {
|
public eu.eudat.data.entities.DatasetProfile createNewVersionDatasetProfile(String id, eu.eudat.models.data.admin.composite.DatasetProfile profile) throws Exception {
|
||||||
|
return this.createNewVersionDatasetProfile(id, profile, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
public eu.eudat.data.entities.DatasetProfile createNewVersionDatasetProfile(String id, eu.eudat.models.data.admin.composite.DatasetProfile profile, boolean email) throws Exception {
|
||||||
// Getting the DatasetProfile which we will create its new version.
|
// Getting the DatasetProfile which we will create its new version.
|
||||||
eu.eudat.data.entities.DatasetProfile oldDatasetProfile = apiContext.getOperationsContext().getDatabaseRepository().getDatasetProfileDao().find(UUID.fromString(id));
|
eu.eudat.data.entities.DatasetProfile oldDatasetProfile = apiContext.getOperationsContext().getDatabaseRepository().getDatasetProfileDao().find(UUID.fromString(id));
|
||||||
|
|
||||||
|
@ -291,14 +335,14 @@ public class DatasetProfileManager {
|
||||||
modelDefinition.setLanguage(oldDatasetProfile.getLanguage());
|
modelDefinition.setLanguage(oldDatasetProfile.getLanguage());
|
||||||
apiContext.getOperationsContext().getDatabaseRepository().getDatasetProfileDao().createOrUpdate(modelDefinition);
|
apiContext.getOperationsContext().getDatabaseRepository().getDatasetProfileDao().createOrUpdate(modelDefinition);
|
||||||
eu.eudat.data.entities.DatasetProfile datasetProfile = apiContext.getOperationsContext().getDatabaseRepository().getDatasetProfileDao().createOrUpdate(modelDefinition);
|
eu.eudat.data.entities.DatasetProfile datasetProfile = apiContext.getOperationsContext().getDatabaseRepository().getDatasetProfileDao().createOrUpdate(modelDefinition);
|
||||||
this.storeDatasetProfileUsers(datasetProfile, profile);
|
this.storeDatasetProfileUsers(datasetProfile, profile, email);
|
||||||
return modelDefinition;
|
return modelDefinition;
|
||||||
} else {
|
} else {
|
||||||
throw new DatasetProfileNewVersionException("Version to update not the latest.");
|
throw new DatasetProfileNewVersionException("Version to update not the latest.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void storeDatasetProfileUsers(DatasetProfile entity, eu.eudat.models.data.admin.composite.DatasetProfile model) {
|
public void storeDatasetProfileUsers(DatasetProfile entity, eu.eudat.models.data.admin.composite.DatasetProfile model, boolean email) {
|
||||||
if (model.getUsers() != null && !model.getUsers().isEmpty()) {
|
if (model.getUsers() != null && !model.getUsers().isEmpty()) {
|
||||||
if (entity.getUsers() == null) {
|
if (entity.getUsers() == null) {
|
||||||
entity.setUsers(new HashSet<>());
|
entity.setUsers(new HashSet<>());
|
||||||
|
@ -312,14 +356,18 @@ public class DatasetProfileManager {
|
||||||
userDatasetProfile1.setUser(userInfo1);
|
userDatasetProfile1.setUser(userInfo1);
|
||||||
userDatasetProfile1.setRole(1);
|
userDatasetProfile1.setRole(1);
|
||||||
apiContext.getOperationsContext().getDatabaseRepository().getUserDatasetProfileDao().createOrUpdate(userDatasetProfile1);
|
apiContext.getOperationsContext().getDatabaseRepository().getUserDatasetProfileDao().createOrUpdate(userDatasetProfile1);
|
||||||
|
if(email) {
|
||||||
sendJoinMail(userDatasetProfile1);
|
sendJoinMail(userDatasetProfile1);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
entity.getUsers().stream().filter(userDatasetProfile -> model.getUsers().stream()
|
entity.getUsers().stream().filter(userDatasetProfile -> model.getUsers().stream()
|
||||||
.filter(userInfoListingModel -> userDatasetProfile.getUser().getId().equals(userInfoListingModel.getId())).count() > 0
|
.filter(userInfoListingModel -> userDatasetProfile.getUser().getId().equals(userInfoListingModel.getId())).count() > 0
|
||||||
&& userDatasetProfile.getRole() == 2).forEach(userDatasetProfile -> {
|
&& userDatasetProfile.getRole() == 2).forEach(userDatasetProfile -> {
|
||||||
userDatasetProfile.setRole(1);
|
userDatasetProfile.setRole(1);
|
||||||
apiContext.getOperationsContext().getDatabaseRepository().getUserDatasetProfileDao().createOrUpdate(userDatasetProfile);
|
apiContext.getOperationsContext().getDatabaseRepository().getUserDatasetProfileDao().createOrUpdate(userDatasetProfile);
|
||||||
|
if(email) {
|
||||||
sendJoinMail(userDatasetProfile);
|
sendJoinMail(userDatasetProfile);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
if (entity.getUsers() != null && !entity.getUsers().isEmpty()) {
|
if (entity.getUsers() != null && !entity.getUsers().isEmpty()) {
|
||||||
|
|
Loading…
Reference in New Issue