argos/dmp-backend/src/main/java/eu/eudat/managers/DatasetManager.java

147 lines
8.3 KiB
Java
Raw Normal View History

2017-12-15 13:25:21 +01:00
package eu.eudat.managers;
2018-02-16 08:45:18 +01:00
import eu.eudat.builders.entity.UserInfoBuilder;
2017-12-21 11:38:18 +01:00
import eu.eudat.dao.entities.*;
2018-02-07 10:56:30 +01:00
import eu.eudat.entities.Dataset;
2018-01-12 09:05:44 +01:00
import eu.eudat.entities.UserInfo;
2018-01-19 10:31:05 +01:00
import eu.eudat.models.HintedModelFactory;
2017-12-21 11:38:18 +01:00
import eu.eudat.models.criteria.DataRepositoryCriteria;
2018-01-19 15:19:14 +01:00
import eu.eudat.models.criteria.ExternalDatasetCriteria;
2017-12-21 11:38:18 +01:00
import eu.eudat.models.criteria.RegistryCriteria;
import eu.eudat.models.criteria.ServiceCriteria;
2017-12-15 13:25:21 +01:00
import eu.eudat.models.dataset.DatasetTableRequest;
2017-12-22 14:42:47 +01:00
import eu.eudat.models.datasetwizard.DatasetWizardModel;
2018-01-25 16:24:21 +01:00
import eu.eudat.models.helpers.common.DataTableData;
2017-12-19 17:22:30 +01:00
import eu.eudat.models.listingmodels.DatasetListingModel;
2018-01-12 09:05:44 +01:00
import eu.eudat.models.security.Principal;
2018-01-19 10:31:05 +01:00
import eu.eudat.models.user.composite.PagedDatasetProfile;
import eu.eudat.queryable.QueryableList;
2018-01-04 10:32:39 +01:00
import eu.eudat.services.ApiContext;
2017-12-22 14:42:47 +01:00
import org.json.JSONObject;
2017-12-15 13:25:21 +01:00
2018-01-25 09:14:43 +01:00
import java.util.HashMap;
2017-12-15 13:25:21 +01:00
import java.util.List;
2017-12-22 14:42:47 +01:00
import java.util.Map;
2017-12-15 13:25:21 +01:00
import java.util.UUID;
2018-02-07 10:56:30 +01:00
import java.util.concurrent.CompletableFuture;
2018-02-16 08:45:18 +01:00
import java.util.stream.Collectors;
2017-12-15 13:25:21 +01:00
2018-02-01 10:08:06 +01:00
2017-12-15 13:25:21 +01:00
public class DatasetManager {
2018-01-25 16:24:21 +01:00
public DataTableData<DatasetListingModel> getPaged(ApiContext apiContext, DatasetTableRequest datasetTableRequest, Principal principal) throws Exception {
2018-02-16 08:45:18 +01:00
UserInfo userInfo = apiContext.getBuilderFactory().getBuilder(UserInfoBuilder.class).id(principal.getId()).build();
2018-01-12 09:05:44 +01:00
QueryableList<eu.eudat.entities.Dataset> items = apiContext.getDatabaseRepository().getDatasetDao().getWithCriteria(datasetTableRequest.getCriteria());
2018-01-19 12:11:22 +01:00
QueryableList<eu.eudat.entities.Dataset> authItems = apiContext.getDatabaseRepository().getDatasetDao().getAuthenticated(items, userInfo);
QueryableList<eu.eudat.entities.Dataset> pagedItems = PaginationManager.applyPaging(authItems, datasetTableRequest);
2017-12-19 17:22:30 +01:00
DataTableData<DatasetListingModel> dataTable = new DataTableData<DatasetListingModel>();
2018-02-07 10:56:30 +01:00
2018-02-08 16:54:31 +01:00
CompletableFuture<List<Dataset>> itemsFuture = pagedItems.withHint(HintedModelFactory.getHint(DatasetListingModel.class)).toListAsync().whenComplete((resultList, throwable) -> {
2018-02-16 11:34:02 +01:00
List<DatasetListingModel> datasets = resultList.stream().map(item -> new DatasetListingModel().fromDataModel(item)).collect(Collectors.toList());
2018-02-07 10:56:30 +01:00
dataTable.setData(datasets);
});
CompletableFuture countFuture = items.countAsync().whenComplete((count, throwable) -> {
dataTable.setTotalCount(count);
});
2018-02-08 16:54:31 +01:00
CompletableFuture.allOf(itemsFuture, countFuture).join();
2017-12-15 13:25:21 +01:00
return dataTable;
}
2018-01-19 12:11:22 +01:00
public DatasetWizardModel getSingle(DatasetDao datatasetRepository, String id) throws InstantiationException, IllegalAccessException {
2017-12-22 14:42:47 +01:00
DatasetWizardModel dataset = new DatasetWizardModel();
2018-02-08 16:54:31 +01:00
eu.eudat.entities.Dataset datasetEntity = datatasetRepository.find(UUID.fromString(id), HintedModelFactory.getHint(DatasetWizardModel.class));
2017-12-22 14:42:47 +01:00
eu.eudat.models.user.composite.DatasetProfile datasetprofile = UserManager.generateDatasetProfileModel(datasetEntity.getProfile());
datasetprofile.setStatus(dataset.getStatus());
2018-01-19 12:11:22 +01:00
if (datasetEntity.getProperties() != null) {
2018-01-09 12:31:01 +01:00
JSONObject jobject = new JSONObject(datasetEntity.getProperties());
2018-01-19 12:11:22 +01:00
Map<String, Object> properties = (Map<String, Object>) jobject.toMap();
2017-12-22 14:42:47 +01:00
datasetprofile.fromJsonObject(properties);
}
2018-01-19 10:31:05 +01:00
PagedDatasetProfile pagedDatasetProfile = new PagedDatasetProfile();
pagedDatasetProfile.buildPagedDatasetProfile(datasetprofile);
dataset.setDatasetProfileDefinition(pagedDatasetProfile);
2017-12-22 14:42:47 +01:00
dataset.fromDataModel(datasetEntity);
2017-12-15 13:25:21 +01:00
return dataset;
}
2017-12-20 15:52:09 +01:00
2018-02-08 16:54:31 +01:00
public static eu.eudat.entities.Dataset createOrUpdate(ApiContext apiContext, DatasetWizardModel profile, Principal principal) throws Exception {
2017-12-21 11:38:18 +01:00
eu.eudat.entities.Dataset dataset = profile.toDataModel();
2018-02-08 16:54:31 +01:00
propertiesModelToString(profile, dataset);
2018-02-16 08:45:18 +01:00
UserInfo userInfo = apiContext.getBuilderFactory().getBuilder(UserInfoBuilder.class).id(principal.getId()).build();
2018-02-08 16:54:31 +01:00
dataset.setCreator(userInfo);
2018-01-19 12:11:22 +01:00
createRegistriesIfTheyDontExist(apiContext.getDatabaseRepository().getRegistryDao(), dataset);
createDataRepositoriesIfTheyDontExist(apiContext.getDatabaseRepository().getDataRepositoryDao(), dataset);
createServicesIfTheyDontExist(apiContext.getDatabaseRepository().getServiceDao(), dataset);
2018-01-19 15:19:14 +01:00
createExternalDatasetsIfTheyDontExist(apiContext.getDatabaseRepository().getExternalDatasetDao(), dataset);
2018-01-04 10:32:39 +01:00
return apiContext.getDatabaseRepository().getDatasetDao().createOrUpdate(dataset);
2017-12-21 11:38:18 +01:00
}
2018-02-08 16:54:31 +01:00
private static void propertiesModelToString(DatasetWizardModel datasetWizardModel, eu.eudat.entities.Dataset dataset) {
Map<String, Object> values = new HashMap();
2018-01-30 12:07:51 +01:00
PagedDatasetProfile properties = datasetWizardModel.getDatasetProfileDefinition();
2018-01-25 09:14:43 +01:00
properties.toMap(values);
JSONObject jobject = new JSONObject(values);
dataset.setProperties(jobject.toString());
}
2017-12-21 11:38:18 +01:00
2018-01-19 12:11:22 +01:00
private static void createRegistriesIfTheyDontExist(RegistryDao registryDao, eu.eudat.entities.Dataset dataset) {
if (dataset.getRegistries() != null && !dataset.getRegistries().isEmpty()) {
for (eu.eudat.entities.Registry registry : dataset.getRegistries()) {
RegistryCriteria criteria = new RegistryCriteria();
criteria.setLike(registry.getReference());
2018-01-25 16:24:21 +01:00
List<eu.eudat.entities.Registry> entries = registryDao.getWithCriteria(criteria).toList();
2018-01-19 12:11:22 +01:00
if (entries != null && !entries.isEmpty()) registry.setId(entries.get(0).getId());
2018-01-25 16:24:21 +01:00
else registry = registryDao.createOrUpdate(registry);
2018-01-19 12:11:22 +01:00
}
}
2017-12-21 11:38:18 +01:00
}
2018-01-19 12:11:22 +01:00
private static void createServicesIfTheyDontExist(ServiceDao serviceDao, eu.eudat.entities.Dataset dataset) {
if (dataset.getServices() != null && !dataset.getServices().isEmpty()) {
for (eu.eudat.entities.Service service : dataset.getServices()) {
ServiceCriteria criteria = new ServiceCriteria();
criteria.setLike(service.getReference());
2018-01-25 16:24:21 +01:00
List<eu.eudat.entities.Service> entries = serviceDao.getWithCriteria(criteria).toList();
2018-01-19 12:11:22 +01:00
if (entries != null && !entries.isEmpty()) service.setId(entries.get(0).getId());
2018-01-25 16:24:21 +01:00
else service = serviceDao.createOrUpdate(service);
2018-01-19 12:11:22 +01:00
}
}
2017-12-21 11:38:18 +01:00
}
2018-01-19 12:11:22 +01:00
private static void createDataRepositoriesIfTheyDontExist(DataRepositoryDao dataRepositoryDao, eu.eudat.entities.Dataset dataset) {
if (dataset.getDataRepositories() != null && !dataset.getDataRepositories().isEmpty()) {
for (eu.eudat.entities.DataRepository dataRepo : dataset.getDataRepositories()) {
DataRepositoryCriteria criteria = new DataRepositoryCriteria();
criteria.setLike(dataRepo.getReference());
2018-01-25 16:24:21 +01:00
List<eu.eudat.entities.DataRepository> entries = dataRepositoryDao.getWithCriteria(criteria).toList();
2018-01-19 12:11:22 +01:00
if (entries != null && !entries.isEmpty()) dataRepo.setId(entries.get(0).getId());
else dataRepo = dataRepositoryDao.createOrUpdate(dataRepo);
}
}
2017-12-21 11:38:18 +01:00
}
2018-01-19 15:19:14 +01:00
private static void createExternalDatasetsIfTheyDontExist(ExternalDatasetDao externalDatasetDao, eu.eudat.entities.Dataset dataset) {
if (dataset.getExternalDatasets() != null && !dataset.getExternalDatasets().isEmpty()) {
for (eu.eudat.entities.ExternalDataset externalDataset : dataset.getExternalDatasets()) {
ExternalDatasetCriteria criteria = new ExternalDatasetCriteria();
criteria.setLike(externalDataset.getReference());
List<eu.eudat.entities.ExternalDataset> entries = externalDatasetDao.getWithCriteria(criteria).toList();
if (entries != null && !entries.isEmpty()) externalDataset.setId(entries.get(0).getId());
else externalDataset = externalDatasetDao.createOrUpdate(externalDataset);
}
}
}
2018-01-19 12:11:22 +01:00
public static void makePublic(DatasetDao datasetDao, UUID id) throws Exception {
eu.eudat.entities.Dataset dataset = datasetDao.find(id);
if (dataset.getStatus() != eu.eudat.entities.Dataset.Status.FINALISED.getValue())
throw new Exception("You cannot make public a Dataset That Has not Been Finalised");
dataset.setPublic(true);
datasetDao.createOrUpdate(dataset);
}
2017-12-21 11:38:18 +01:00
2017-12-15 13:25:21 +01:00
}