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

105 lines
4.3 KiB
Java

package eu.old.eudat.migration;
import org.opencdmp.commons.XmlHandlingService;
import org.opencdmp.commons.enums.IsActive;
import org.opencdmp.commons.enums.ReferenceFieldDataType;
import org.opencdmp.commons.enums.ReferenceSourceType;
import org.opencdmp.commons.enums.StorageType;
import org.opencdmp.commons.types.reference.DefinitionEntity;
import org.opencdmp.commons.types.reference.FieldEntity;
import org.opencdmp.convention.ConventionService;
import org.opencdmp.data.ReferenceEntity;
import org.opencdmp.data.StorageFileEntity;
import eu.old.eudat.data.dao.entities.FileUploadDao;
import eu.old.eudat.data.dao.entities.ProjectDao;
import eu.old.eudat.data.entities.FileUpload;
import eu.old.eudat.data.entities.Project;
import eu.old.eudat.logic.services.operations.DatabaseRepository;
import gr.cite.tools.exception.MyApplicationException;
import gr.cite.tools.logging.LoggerService;
import jakarta.persistence.EntityManager;
import org.apache.commons.io.FilenameUtils;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import java.io.File;
import java.io.IOException;
import java.net.URLConnection;
import java.nio.file.Paths;
import java.time.Instant;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import java.util.UUID;
import org.springframework.core.env.Environment;
import org.springframework.util.FileCopyUtils;
@Service
public class StorageFileMigrationService {
private static final LoggerService logger = new LoggerService(LoggerFactory.getLogger(StorageFileMigrationService.class));
private static final int PageSize = 500;
private final DatabaseRepository databaseRepository;
private final EntityManager entityManager;
private final Environment environment;
public StorageFileMigrationService(DatabaseRepository databaseRepository, EntityManager entityManager, Environment environment) {
this.databaseRepository = databaseRepository;
this.entityManager = entityManager;
this.environment = environment;
}
public void migrate() throws IOException {
FileUploadDao fileUploadDao = databaseRepository.getFileUploadDao();
long total = fileUploadDao.asQueryable().count();
logger.debug("Migrate Files Total : " + total);
int page = 0;
List<File> filesToDelete = new ArrayList<>();
List<FileUpload> items;
do {
items = fileUploadDao.asQueryable().orderBy((builder, root) -> builder.asc(root.get("createdAt"))).orderBy((builder, root) -> builder.asc(root.get("ID"))).skip(page * PageSize).take(PageSize).toList();
if (items != null && !items.isEmpty()) {
logger.debug("Migrate FileUpload " + page * PageSize + " of " + total);
for (FileUpload item : items) {
entityManager.detach(item);
// File file = new File(this.environment.getProperty("file.storage") + item.getId().toString());
// if (!file.exists()) file = new File(this.environment.getProperty("temp.temp") + item.getId().toString());
// if (!file.exists()) throw new MyApplicationException("Storage file not exist " + item.getId().toString());
StorageFileEntity data = new StorageFileEntity();
data.setId(item.getId());
data.setFileRef(UUID.randomUUID().toString().replaceAll("-", "").toLowerCase(Locale.ROOT));
data.setStorageType(StorageType.Main);
data.setName(FilenameUtils.removeExtension(item.getName()));
data.setExtension(FilenameUtils.getExtension(item.getName()));
data.setMimeType(item.getFileType());
//data.setMimeType(URLConnection.guessContentTypeFromName(item.getName()));
data.setCreatedAt(item.getCreatedAt() == null ? Instant.now() : item.getCreatedAt().toInstant());
data.setPurgeAt(null);
data.setPurgedAt(null);
if (item.getCreator() == null) data.setOwnerId(item.getCreator().getId());
// File destinationFile = new File(Paths.get(this.environment.getProperty("file.mainstorage"), data.getFileRef()).toString());
// boolean fileCopied = FileCopyUtils.copy(file, destinationFile) > 0;
// if (!fileCopied) throw new MyApplicationException("Storage file not copied " + data.getId().toString());
//
// filesToDelete.add(file);
this.entityManager.persist(data);
}
this.entityManager.flush();
page++;
}
} while (items != null && !items.isEmpty());
// for (File file : filesToDelete){
// try{
// file.delete();
// } catch (Exception e){
// logger.error(e.getMessage());
// }
// }
}
}