argos/dmp-backend/roadmap/src/main/java/eu/eudat/migration/services/DMPRoadmapService.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);
}
}