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 org.springframework.beans.factory.annotation.Autowired;
|
||||
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.builder.SpringApplicationBuilder;
|
||||
import org.springframework.boot.context.properties.ConfigurationPropertiesScan;
|
||||
import org.springframework.context.ConfigurableApplicationContext;
|
||||
|
||||
@SpringBootApplication(
|
||||
scanBasePackages = "eu.eudat.migration",
|
||||
exclude = ElasticSearchRestHealthContributorAutoConfiguration.class
|
||||
scanBasePackages = "eu.eudat"
|
||||
)
|
||||
@ConfigurationPropertiesScan("eu.eudat.migration.properties")
|
||||
public class DMPRoadmapMigration implements CommandLineRunner {
|
||||
|
||||
private final DMPRoadmapService service;
|
||||
private static ConfigurableApplicationContext context;
|
||||
|
||||
@Autowired
|
||||
public DMPRoadmapMigration(DMPRoadmapService service) {
|
||||
|
@ -24,21 +23,15 @@ public class DMPRoadmapMigration implements CommandLineRunner {
|
|||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
new SpringApplicationBuilder(DMPRoadmapMigration.class)
|
||||
.web(WebApplicationType.NONE).run(args);
|
||||
|
||||
context = new SpringApplicationBuilder(DMPRoadmapMigration.class).run(args);
|
||||
context.close();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run(String... args) throws Exception {
|
||||
System.out.println("Logging in as administrator");
|
||||
this.service.login();
|
||||
System.out.println("Migration Started");
|
||||
this.service.migrateUsers();
|
||||
this.service.migrate();
|
||||
System.out.println("Migration Finished. Logging out");
|
||||
Thread.sleep(20000);
|
||||
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.OrganizationTypeConverter;
|
||||
import org.hibernate.annotations.LazyCollection;
|
||||
import org.hibernate.annotations.LazyCollectionOption;
|
||||
|
||||
import javax.persistence.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@Entity
|
||||
|
@ -53,6 +57,10 @@ public class Organization {
|
|||
@Column(name = "helpdesk_email")
|
||||
private String helpdeskEmail;
|
||||
private Boolean managed;
|
||||
@OneToMany(cascade = CascadeType.ALL)
|
||||
@JoinColumn(name = "org_id")
|
||||
@LazyCollection(LazyCollectionOption.FALSE)
|
||||
private List<User> users = new ArrayList<>();
|
||||
|
||||
public enum Type {
|
||||
INSTITUTION,
|
||||
|
@ -256,4 +264,11 @@ public class Organization {
|
|||
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;
|
||||
|
||||
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.LazyCollectionOption;
|
||||
|
||||
import javax.persistence.*;
|
||||
import java.sql.Timestamp;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.Date;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
|
||||
@Entity
|
||||
@Table(name = "users")
|
||||
|
@ -123,4 +130,16 @@ public class User {
|
|||
public void setPerms(Set<Perm> 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")
|
||||
public class ConfigProperties {
|
||||
private Database database;
|
||||
private Argos argos;
|
||||
private DefaultEntities entities;
|
||||
|
||||
public Database getDatabase() {
|
||||
|
@ -16,14 +15,6 @@ public class ConfigProperties {
|
|||
this.database = database;
|
||||
}
|
||||
|
||||
public Argos getArgos() {
|
||||
return argos;
|
||||
}
|
||||
|
||||
public void setArgos(Argos argos) {
|
||||
this.argos = argos;
|
||||
}
|
||||
|
||||
public DefaultEntities getEntities() {
|
||||
return entities;
|
||||
}
|
||||
|
|
|
@ -3,6 +3,7 @@ package eu.eudat.migration.properties;
|
|||
public class DefaultEntities {
|
||||
private Entity funder;
|
||||
private Entity grant;
|
||||
private User user;
|
||||
|
||||
public Entity getFunder() {
|
||||
return funder;
|
||||
|
@ -19,4 +20,12 @@ public class DefaultEntities {
|
|||
public void setGrant(Entity 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;
|
||||
|
||||
import eu.eudat.migration.properties.Argos;
|
||||
import eu.eudat.migration.properties.ConfigProperties;
|
||||
import eu.eudat.controllers.Datasets;
|
||||
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.datasetwizard.DatasetWizardModel;
|
||||
import eu.eudat.models.data.dmp.DataManagementPlan;
|
||||
import eu.eudat.models.data.dmp.DataManagementPlanEditorModel;
|
||||
import eu.eudat.models.data.helpers.responses.ResponseItem;
|
||||
import eu.eudat.models.data.login.Credentials;
|
||||
import eu.eudat.models.data.principal.PrincipalModel;
|
||||
import eu.eudat.models.data.listingmodels.UserInfoListingModel;
|
||||
import eu.eudat.models.data.security.Principal;
|
||||
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.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.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.UUID;
|
||||
|
||||
@Service
|
||||
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 final RestTemplate restTemplate = new RestTemplate();
|
||||
|
||||
@Autowired
|
||||
public ArgosService(ConfigProperties properties) {
|
||||
this.argos = properties.getArgos();
|
||||
public ArgosService(ApiContext context,
|
||||
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
|
||||
* */
|
||||
public void login() {
|
||||
Credentials credentials = new Credentials();
|
||||
credentials.setUsername(argos.getUsername());
|
||||
credentials.setSecret(argos.getPassword());
|
||||
HttpEntity<Credentials> request = new HttpEntity<>(credentials, setHeaders());
|
||||
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();
|
||||
*/
|
||||
@Transactional
|
||||
public UserInfo getUserInfo(String email) {
|
||||
QueryableList<UserInfo> query = context.getOperationsContext().getDatabaseRepository().getUserInfoDao().asQueryable();
|
||||
query.where((builder, root) -> builder.equal(root.get("email"), email));
|
||||
return query.getSingleOrDefault();
|
||||
}
|
||||
|
||||
public void logout() {
|
||||
HttpEntity<Object> request = new HttpEntity<>(null, setHeaders());
|
||||
this.restTemplate.exchange(argos.getUrl() + "/api/auth/logout", HttpMethod.POST, request, new ParameterizedTypeReference<ResponseItem<Principal>>() {});
|
||||
this.token = null;
|
||||
@Transactional
|
||||
public void createUserInfo(UserInfo userInfo) {
|
||||
if (getUserInfo(userInfo.getEmail()) == 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
|
||||
* */
|
||||
public UUID createDatasetProfile(DatasetProfile datasetProfile) {
|
||||
HttpEntity<DatasetProfile> request = new HttpEntity<>(datasetProfile, setHeaders());
|
||||
return Objects.requireNonNull(this.restTemplate.exchange(argos.getUrl() + "/api/admin/addDmp",
|
||||
HttpMethod.POST, request, new ParameterizedTypeReference<UUID>() {
|
||||
}).getBody());
|
||||
*/
|
||||
@Transactional
|
||||
public UUID createDatasetProfile(DatasetProfile datasetProfile, Principal principal) {
|
||||
return this.datasetProfileManager.addDmp(datasetProfile, principal, false).getId();
|
||||
}
|
||||
|
||||
public UUID createNewVersionDatasetProfile(UUID id, DatasetProfile datasetProfile) {
|
||||
HttpEntity<DatasetProfile> request = new HttpEntity<>(datasetProfile, setHeaders());
|
||||
return Objects.requireNonNull(this.restTemplate.exchange(argos.getUrl() + "/api/admin/newVersion/" + id,
|
||||
HttpMethod.POST, request, new ParameterizedTypeReference<UUID>() {
|
||||
}).getBody());
|
||||
@Transactional
|
||||
public UUID createNewVersionDatasetProfile(UUID id, DatasetProfile datasetProfile) throws Exception {
|
||||
return this.datasetProfileManager.createNewVersionDatasetProfile(id.toString(), datasetProfile, false).getId();
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public void deleteDatasetProfile(UUID id) {
|
||||
HttpEntity<Object> request = new HttpEntity<>(null, setHeaders());
|
||||
this.restTemplate.exchange(argos.getUrl() + "/api/admin/" + id, HttpMethod.DELETE, request, Object.class);
|
||||
AdminManager.inactivate(context.getOperationsContext().getDatabaseRepository().getDatasetProfileDao(), context.getOperationsContext().getDatabaseRepository().getDatasetDao(), id.toString());
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* DMP methods
|
||||
* */
|
||||
public DataManagementPlan createDMP(DataManagementPlanEditorModel model) {
|
||||
HttpEntity<DataManagementPlanEditorModel> request = new HttpEntity<>(model, setHeaders());
|
||||
return Objects.requireNonNull(this.restTemplate.exchange(argos.getUrl() + "/api/dmps/",
|
||||
HttpMethod.POST, request, new ParameterizedTypeReference<ResponseItem<DataManagementPlan>>() {
|
||||
}).getBody()).getPayload();
|
||||
* @return
|
||||
*/
|
||||
@Transactional
|
||||
public DataManagementPlan createDMP(DataManagementPlanEditorModel model, Principal principal) throws Exception {
|
||||
return new eu.eudat.models.data.dmp.DataManagementPlan().
|
||||
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) {
|
||||
HttpEntity<Object> request = new HttpEntity<>(null, setHeaders());
|
||||
this.restTemplate.exchange(argos.getUrl() + "/api/dmps/" + id, HttpMethod.DELETE, request, Object.class);
|
||||
try {
|
||||
this.dataManagementPlanManager.delete(id);
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Dataset Methods
|
||||
* */
|
||||
*/
|
||||
@Transactional
|
||||
public PagedDatasetProfile getDataset(UUID id) {
|
||||
HttpEntity<Object> request = new HttpEntity<>(null, setHeaders());
|
||||
return Objects.requireNonNull(this.restTemplate.exchange(argos.getUrl() + "/api/datasets/get/" + id,
|
||||
HttpMethod.GET, request, new ParameterizedTypeReference<ResponseItem<PagedDatasetProfile>>() {
|
||||
}).getBody()).getPayload();
|
||||
return Objects.requireNonNull(this.datasets.getSingle(id.toString()).getBody()).getPayload();
|
||||
}
|
||||
|
||||
public DatasetWizardModel createDataset(DatasetWizardModel model) {
|
||||
HttpEntity<DatasetWizardModel> request = new HttpEntity<>(model, setHeaders());
|
||||
return Objects.requireNonNull(this.restTemplate.exchange(argos.getUrl() + "/api/datasets/",
|
||||
HttpMethod.POST, request, new ParameterizedTypeReference<ResponseItem<DatasetWizardModel>>() {
|
||||
}).getBody()).getPayload();
|
||||
@Transactional
|
||||
public DatasetWizardModel createDataset(DatasetWizardModel model, Principal principal) throws Exception {
|
||||
return Objects.requireNonNull(this.datasets.createOrUpdate(model, principal).getBody()).getPayload();
|
||||
}
|
||||
|
||||
public void deleteDataset(UUID id) {
|
||||
HttpEntity<Object> request = new HttpEntity<>(null, setHeaders());
|
||||
this.restTemplate.exchange(argos.getUrl() + "/api/datasets/delete/" + id, HttpMethod.DELETE, request, Object.class);
|
||||
@Transactional
|
||||
public void deleteDataset(UUID id, Principal principal) {
|
||||
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) {
|
||||
|
|
|
@ -1,37 +1,55 @@
|
|||
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.UserRepository;
|
||||
import eu.eudat.migration.entities.Perm;
|
||||
import eu.eudat.migration.entities.Plan;
|
||||
import eu.eudat.migration.entities.Template;
|
||||
import eu.eudat.migration.entities.User;
|
||||
import eu.eudat.migration.properties.ConfigProperties;
|
||||
import eu.eudat.migration.properties.DefaultEntities;
|
||||
import eu.eudat.models.data.admin.composite.DatasetProfile;
|
||||
import eu.eudat.models.data.datasetwizard.DatasetWizardModel;
|
||||
import eu.eudat.models.data.dmp.DataManagementPlan;
|
||||
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.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||
import org.springframework.data.domain.Sort;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
import java.util.concurrent.atomic.AtomicReference;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Service
|
||||
@ConditionalOnProperty(prefix = "roadmap", name = "database.url")
|
||||
public class DMPRoadmapService {
|
||||
/** DMPRoadmap Repositories*/
|
||||
/**
|
||||
* DMPRoadmap Repositories
|
||||
*/
|
||||
private final TemplateRepository templateRepository;
|
||||
private final UserRepository userRepository;
|
||||
/** Default Entities*/
|
||||
/**
|
||||
* Default Entities
|
||||
*/
|
||||
private final DefaultEntities defaultEntities;
|
||||
/** Services */
|
||||
/**
|
||||
* Services
|
||||
*/
|
||||
private final ArgosService argosService;
|
||||
/** Metadata */
|
||||
/**
|
||||
* Metadata
|
||||
*/
|
||||
private final List<UUID> datasetProfiles = new ArrayList<>();
|
||||
private final List<UUID> dmps = new ArrayList<>();
|
||||
private final List<UUID> datasets = new ArrayList<>();
|
||||
private Principal principal;
|
||||
|
||||
@Autowired
|
||||
public DMPRoadmapService(TemplateRepository templateRepository, UserRepository userRepository, ArgosService argosService, ConfigProperties properties) {
|
||||
|
@ -41,48 +59,90 @@ public class DMPRoadmapService {
|
|||
this.argosService = argosService;
|
||||
}
|
||||
|
||||
public void login() {
|
||||
this.argosService.login();
|
||||
}
|
||||
|
||||
public void logout() {
|
||||
this.argosService.logout();
|
||||
public void migrateUsers() {
|
||||
this.argosService.createUserInfo(Objects.requireNonNull(defaultUser()));
|
||||
List<User> users = this.userRepository.findAll();
|
||||
users.forEach(user -> {
|
||||
this.argosService.createUserInfo(user.buildUserInfo());
|
||||
});
|
||||
}
|
||||
|
||||
public void migrate() {
|
||||
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"));
|
||||
AtomicReference<UUID> id = new AtomicReference<>(null);
|
||||
templates.forEach(template -> {
|
||||
UUID id = null;
|
||||
for (Template template : templates) {
|
||||
this.argosService.assignRole(userInfo, Authorities.DATASET_PROFILE_MANAGER);
|
||||
this.principal = this.argosService.login(userInfo);
|
||||
DatasetProfile datasetProfile = template.buildDatasetProfile();
|
||||
if (id.get() == null) {
|
||||
id.set(this.argosService.createDatasetProfile(datasetProfile));
|
||||
} else {
|
||||
id.set(this.argosService.createNewVersionDatasetProfile(id.get(), datasetProfile));
|
||||
if (users.size() > 1) {
|
||||
datasetProfile.setUsers(users.subList(1, users.size()).stream().map(info -> {
|
||||
UserInfoListingModel model = new UserInfoListingModel();
|
||||
model.setId(info.getId());
|
||||
return model;
|
||||
}).collect(Collectors.toList()));
|
||||
}
|
||||
this.datasetProfiles.add(id.get());
|
||||
template.getPlans().forEach(plan -> {
|
||||
DataManagementPlanEditorModel dataManagementPlanEditorModel = plan.buildDMP(id.get(), datasetProfile.getLabel(),
|
||||
defaultEntities.getFunder(), defaultEntities.getGrant());
|
||||
DataManagementPlan dmp = this.argosService.createDMP(dataManagementPlanEditorModel);
|
||||
if (id == null) {
|
||||
id = this.argosService.createDatasetProfile(datasetProfile, principal);
|
||||
} else {
|
||||
id = this.argosService.createNewVersionDatasetProfile(id, datasetProfile);
|
||||
}
|
||||
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());
|
||||
DatasetWizardModel dataset = plan.buildDataset(id.get(), datasetProfile.getLabel(), dmp, this.argosService.getDataset(id.get()));
|
||||
dataset = this.argosService.createDataset(dataset);
|
||||
if (collaborators.size() > 1) {
|
||||
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());
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
System.out.println("Migration Failed. All data will be deleted.");
|
||||
this.clear();
|
||||
this.logout();
|
||||
}
|
||||
}
|
||||
|
||||
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.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.PostgreSQL92Dialect
|
||||
|
||||
## Argos Backend URL ##
|
||||
roadmap.argos.url=http://localhost:8081
|
||||
roadmap.argos.username=root
|
||||
roadmap.argos.password=root
|
||||
|
||||
|
||||
## Default entities ##
|
||||
roadmap.entities.funder.reference=no_funder
|
||||
roadmap.entities.funder.label=No funder
|
||||
roadmap.entities.grant.reference=no_grant
|
||||
roadmap.entities.grant.label=No grant
|
||||
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.util.List;
|
||||
import java.util.UUID;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static eu.eudat.types.Authorities.ADMIN;
|
||||
import static eu.eudat.types.Authorities.DATASET_PROFILE_MANAGER;
|
||||
|
@ -59,42 +58,14 @@ public class Admin extends BaseController {
|
|||
@Transactional
|
||||
@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) {
|
||||
//this.getLoggerService().info(principal, "Admin Added Dataset Profile");
|
||||
DatasetProfile shortenProfile = profile.toShort();
|
||||
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());
|
||||
eu.eudat.data.entities.DatasetProfile datasetProfile = this.datasetProfileManager.addDmp(profile, principal);
|
||||
return ResponseEntity.status(HttpStatus.OK).body(datasetProfile.getId());
|
||||
}
|
||||
|
||||
@Transactional
|
||||
@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) {
|
||||
DatasetProfile shortenProfile = profile.toShort();
|
||||
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);
|
||||
}
|
||||
this.datasetProfileManager.updateDmp(id, profile);
|
||||
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.xml.datasetProfileXml.ExportXmlBuilderDatasetProfile;
|
||||
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.datasetprofile.DatasetProfileAutocompleteItem;
|
||||
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.core.env.Environment;
|
||||
import org.springframework.http.*;
|
||||
import org.springframework.http.client.ClientHttpRequestFactory;
|
||||
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.web.client.RestTemplate;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
@ -50,7 +46,6 @@ import javax.xml.xpath.*;
|
|||
import java.io.*;
|
||||
import java.nio.file.Files;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
|
||||
|
@ -73,6 +68,51 @@ public class DatasetProfileManager {
|
|||
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
|
||||
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));
|
||||
|
@ -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 {
|
||||
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.
|
||||
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());
|
||||
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;
|
||||
} else {
|
||||
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 (entity.getUsers() == null) {
|
||||
entity.setUsers(new HashSet<>());
|
||||
|
@ -312,14 +356,18 @@ public class DatasetProfileManager {
|
|||
userDatasetProfile1.setUser(userInfo1);
|
||||
userDatasetProfile1.setRole(1);
|
||||
apiContext.getOperationsContext().getDatabaseRepository().getUserDatasetProfileDao().createOrUpdate(userDatasetProfile1);
|
||||
if(email) {
|
||||
sendJoinMail(userDatasetProfile1);
|
||||
}
|
||||
});
|
||||
entity.getUsers().stream().filter(userDatasetProfile -> model.getUsers().stream()
|
||||
.filter(userInfoListingModel -> userDatasetProfile.getUser().getId().equals(userInfoListingModel.getId())).count() > 0
|
||||
&& userDatasetProfile.getRole() == 2).forEach(userDatasetProfile -> {
|
||||
userDatasetProfile.setRole(1);
|
||||
apiContext.getOperationsContext().getDatabaseRepository().getUserDatasetProfileDao().createOrUpdate(userDatasetProfile);
|
||||
if(email) {
|
||||
sendJoinMail(userDatasetProfile);
|
||||
}
|
||||
});
|
||||
}
|
||||
if (entity.getUsers() != null && !entity.getUsers().isEmpty()) {
|
||||
|
|
Loading…
Reference in New Issue