Finish migration process abouts users dataset profiles and dmps

This commit is contained in:
Konstantinos Triantafyllou 2022-05-30 11:11:28 +03:00
parent d6e89cd440
commit d9a67626a8
11 changed files with 336 additions and 175 deletions

View File

@ -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");
}
}

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -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;
}

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -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);
}
public HttpHeaders setHeaders() {
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
if(this.token != null) {
headers.add("AuthToken", this.token.toString());
@Transactional
public void deleteDataset(UUID id, Principal principal) {
try {
this.datasets.delete(id, principal);
} catch (Exception e) {
e.printStackTrace();
}
return headers;
}
public UUID getToken() {
return token;
}
public void setToken(UUID token) {

View File

@ -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;
}
}

View File

@ -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.grant.description=No grant available
roadmap.entities.user.email=dmp@roadmap.com
roadmap.entities.user.name=DMP Roadmap

View File

@ -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));
}

View File

@ -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);
sendJoinMail(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);
sendJoinMail(userDatasetProfile);
if(email) {
sendJoinMail(userDatasetProfile);
}
});
}
if (entity.getUsers() != null && !entity.getUsers().isEmpty()) {