89 lines
3.9 KiB
Java
89 lines
3.9 KiB
Java
package eu.eudat.migration.services;
|
|
|
|
import eu.eudat.migration.dao.TemplateRepository;
|
|
import eu.eudat.migration.dao.UserRepository;
|
|
import eu.eudat.migration.entities.Template;
|
|
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 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;
|
|
|
|
@Service
|
|
@ConditionalOnProperty(prefix = "roadmap", name = "database.url")
|
|
public class DMPRoadmapService {
|
|
/** DMPRoadmap Repositories*/
|
|
private final TemplateRepository templateRepository;
|
|
private final UserRepository userRepository;
|
|
/** Default Entities*/
|
|
private final DefaultEntities defaultEntities;
|
|
/** Services */
|
|
private final ArgosService argosService;
|
|
/** Metadata */
|
|
private final List<UUID> datasetProfiles = new ArrayList<>();
|
|
private final List<UUID> dmps = new ArrayList<>();
|
|
private final List<UUID> datasets = new ArrayList<>();
|
|
|
|
@Autowired
|
|
public DMPRoadmapService(TemplateRepository templateRepository, UserRepository userRepository, ArgosService argosService, ConfigProperties properties) {
|
|
this.templateRepository = templateRepository;
|
|
this.userRepository = userRepository;
|
|
this.defaultEntities = properties.getEntities();
|
|
this.argosService = argosService;
|
|
}
|
|
|
|
public void login() {
|
|
this.argosService.login();
|
|
}
|
|
|
|
public void logout() {
|
|
this.argosService.logout();
|
|
}
|
|
|
|
public void migrate() {
|
|
try {
|
|
templateRepository.findAllGroups().forEach(group -> {
|
|
List<Template> templates = templateRepository.findAllByFamilyId(group, Sort.by(Sort.Direction.ASC, "version"));
|
|
AtomicReference<UUID> id = new AtomicReference<>(null);
|
|
templates.forEach(template -> {
|
|
DatasetProfile datasetProfile = template.buildDatasetProfile();
|
|
if (id.get() == null) {
|
|
id.set(this.argosService.createDatasetProfile(datasetProfile));
|
|
} else {
|
|
id.set(this.argosService.createNewVersionDatasetProfile(id.get(), datasetProfile));
|
|
}
|
|
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);
|
|
this.dmps.add(dmp.getId());
|
|
DatasetWizardModel dataset = plan.buildDataset(id.get(), datasetProfile.getLabel(), dmp, this.argosService.getDataset(id.get()));
|
|
dataset = this.argosService.createDataset(dataset);
|
|
this.datasets.add(dataset.getId());
|
|
});
|
|
});
|
|
});
|
|
} catch (Exception e) {
|
|
System.out.println("Migration Failed. All data will be deleted.");
|
|
this.clear();
|
|
this.logout();
|
|
}
|
|
}
|
|
|
|
public void clear() {
|
|
this.datasets.forEach(this.argosService::deleteDataset);
|
|
this.dmps.forEach(this.argosService::deleteDMP);
|
|
this.datasetProfiles.forEach(this.argosService::deleteDatasetProfile);
|
|
}
|
|
}
|