162 lines
7.6 KiB
Java
162 lines
7.6 KiB
Java
package eu.old.eudat.migration;
|
|
|
|
import eu.eudat.commons.enums.IsActive;
|
|
import eu.eudat.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());
|
|
}
|
|
|
|
}
|