argos/dmp-migration-tool/web/src/main/java/eu/old/eudat/migration/DatasetReferenceMigrationSe...

162 lines
7.6 KiB
Java

package eu.old.eudat.migration;
import org.opencdmp.commons.enums.IsActive;
import org.opencdmp.data.DescriptionReferenceEntity;
import eu.old.eudat.data.dao.entities.*;
import eu.old.eudat.data.entities.*;
import eu.old.eudat.logic.services.operations.DatabaseRepository;
import gr.cite.tools.logging.LoggerService;
import jakarta.persistence.EntityManager;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import java.time.Instant;
import java.util.List;
import java.util.UUID;
@Service
public class DatasetReferenceMigrationService {
private static final LoggerService logger = new LoggerService(LoggerFactory.getLogger(DmpDatasetProfileMigrationService.class));
private final DatabaseRepository databaseRepository;
private static final int PageSize = 500;
private final EntityManager entityManager;
public DatasetReferenceMigrationService(DatabaseRepository databaseRepository, EntityManager entityManager) {
this.databaseRepository = databaseRepository;
this.entityManager = entityManager;
}
public void migrateDatasetReferences() {
migrateDatasetDataRepositories();
migrateDatasetExternalDatasets();
migrateDatasetRegistries();
migrateDatasetServices();
}
public void migrateDatasetDataRepositories() {
DatasetDataRepositoryDao datasetDataRepositoryDao = databaseRepository.getDatasetDataRepositoryDao();
long total = datasetDataRepositoryDao.asQueryable().count();
logger.debug("Migrate Dataset DataRepository (from DatasetDataRepository) Total : " + total);
int page = 0;
List<DatasetDataRepository> items;
do {
items = datasetDataRepositoryDao.asQueryable().orderBy((builder, root) -> builder.asc(root.get("id"))).skip(page * PageSize).take(PageSize).toList();
if (items != null && !items.isEmpty()) {
logger.debug("Migrate Dataset DataRepository " + page * PageSize + " of " + total);
for (DatasetDataRepository item : items) {
// entityManager.detach(item);
DescriptionReferenceEntity data = new DescriptionReferenceEntity();
data.setId(UUID.randomUUID());
data.setDescriptionId(item.getDataset().getId());
data.setReferenceId(item.getDataRepository().getId());
data.setCreatedAt(item.getDataset().getCreated() != null ? item.getDataset().getCreated().toInstant() : Instant.now());
data.setUpdatedAt(item.getDataset().getModified() != null ? item.getDataset().getModified().toInstant() : Instant.now());
data.setIsActive(IsActive.Active);
this.entityManager.persist(data);
}
this.entityManager.flush();
page++;
}
} while (items != null && !items.isEmpty());
}
public void migrateDatasetExternalDatasets() {
DatasetExternalDatasetDao datasetExternalDatasetDao = databaseRepository.getDatasetExternalDatasetDao();
long total = datasetExternalDatasetDao.asQueryable().count();
logger.debug("Migrate Dataset ExternalDataset (from DatasetExternalDataset) Total : " + total);
int page = 0;
List<DatasetExternalDataset> items;
do {
items = datasetExternalDatasetDao.asQueryable().orderBy((builder, root) -> builder.asc(root.get("id"))).skip(page * PageSize).take(PageSize).toList();
if (items != null && !items.isEmpty()) {
logger.debug("Migrate Dataset ExternalDataset " + page * PageSize + " of " + total);
for (DatasetExternalDataset item : items) {
// entityManager.detach(item);
DescriptionReferenceEntity data = new DescriptionReferenceEntity();
data.setId(UUID.randomUUID());
data.setDescriptionId(item.getDataset().getId());
data.setReferenceId(item.getExternalDataset().getId());
data.setCreatedAt(item.getDataset().getCreated() != null ? item.getDataset().getCreated().toInstant() : Instant.now());
data.setUpdatedAt(item.getDataset().getModified() != null ? item.getDataset().getModified().toInstant() : Instant.now());
data.setIsActive(IsActive.Active);
this.entityManager.persist(data);
}
this.entityManager.flush();
page++;
}
} while (items != null && !items.isEmpty());
}
public void migrateDatasetRegistries() {
DatasetRegistryDao datasetRegistryDao = databaseRepository.getDatasetRegistryDao();
long total = datasetRegistryDao.asQueryable().count();
logger.debug("Migrate Dataset Registry (from DatasetRegistry) Total : " + total);
int page = 0;
List<DatasetRegistry> items;
do {
items = datasetRegistryDao.asQueryable().orderBy((builder, root) -> builder.asc(root.get("id"))).skip(page * PageSize).take(PageSize).toList();
if (items != null && !items.isEmpty()) {
logger.debug("Migrate Dataset Registry " + page * PageSize + " of " + total);
for (DatasetRegistry item : items) {
// entityManager.detach(item);
DescriptionReferenceEntity data = new DescriptionReferenceEntity();
data.setId(UUID.randomUUID());
data.setDescriptionId(item.getDataset().getId());
data.setReferenceId(item.getRegistry().getId());
data.setCreatedAt(item.getDataset().getCreated() != null ? item.getDataset().getCreated().toInstant() : Instant.now());
data.setUpdatedAt(item.getDataset().getModified() != null ? item.getDataset().getModified().toInstant() : Instant.now());
data.setIsActive(IsActive.Active);
this.entityManager.persist(data);
}
this.entityManager.flush();
page++;
}
} while (items != null && !items.isEmpty());
}
public void migrateDatasetServices() {
DatasetServiceDao datasetServiceDao = databaseRepository.getDatasetServiceDao();
long total = datasetServiceDao.asQueryable().count();
logger.debug("Migrate Dataset Service (from DatasetService) Total : " + total);
int page = 0;
List<DatasetService> items;
do {
items = datasetServiceDao.asQueryable().orderBy((builder, root) -> builder.asc(root.get("id"))).skip(page * PageSize).take(PageSize).toList();
if (items != null && !items.isEmpty()) {
logger.debug("Migrate Dataset Service " + page * PageSize + " of " + total);
for (DatasetService item : items) {
// entityManager.detach(item);
DescriptionReferenceEntity data = new DescriptionReferenceEntity();
data.setId(UUID.randomUUID());
data.setDescriptionId(item.getDataset().getId());
data.setReferenceId(item.getService().getId());
data.setCreatedAt(item.getDataset().getCreated() != null ? item.getDataset().getCreated().toInstant() : Instant.now());
data.setUpdatedAt(item.getDataset().getModified() != null ? item.getDataset().getModified().toInstant() : Instant.now());
data.setIsActive(IsActive.Active);
this.entityManager.persist(data);
}
this.entityManager.flush();
page++;
}
} while (items != null && !items.isEmpty());
}
}