package eu.eudat.managers; import eu.eudat.dao.entities.*; import eu.eudat.entities.UserInfo; import eu.eudat.models.criteria.DataRepositoryCriteria; import eu.eudat.models.criteria.RegistryCriteria; import eu.eudat.models.criteria.ServiceCriteria; import eu.eudat.models.dataset.Dataset; import eu.eudat.models.dataset.DatasetTableRequest; import eu.eudat.models.datasetwizard.DatasetWizardModel; import eu.eudat.models.helpers.DataTableData; import eu.eudat.models.listingmodels.DatasetListingModel; import eu.eudat.models.project.Project; import eu.eudat.models.project.ProjectTableRequest; import eu.eudat.models.security.Principal; import eu.eudat.queryable.QueryableList; import eu.eudat.services.ApiContext; import eu.eudat.utilities.builders.DomainModelConverter; import org.json.JSONObject; import java.util.List; import java.util.Map; import java.util.UUID; /** * Created by ikalyvas on 12/15/2017. */ public class DatasetManager { public DataTableData getPaged(ApiContext apiContext, DatasetTableRequest datasetTableRequest, Principal principal) throws IllegalAccessException, InstantiationException{ UserInfo userInfo = new UserInfo(); userInfo.setId(principal.getId()); QueryableList items = apiContext.getDatabaseRepository().getDatasetDao().getWithCriteria(datasetTableRequest.getCriteria()); QueryableList authItems = apiContext.getDatabaseRepository().getDatasetDao().getAuthenticated(items,userInfo); QueryableList pagedItems = PaginationManager.applyPaging( authItems ,datasetTableRequest); if(datasetTableRequest.getWithHint())pagedItems.withHint("datasetFullyDetailed"); List datasets = new DomainModelConverter().fromDataModel( pagedItems.toList(), DatasetListingModel.class); DataTableData dataTable = new DataTableData(); dataTable.setData(datasets); dataTable.setTotalCount(items.count()); return dataTable; } public DatasetWizardModel getSingle(DatasetDao datatasetRepository, String id) throws InstantiationException, IllegalAccessException{ DatasetWizardModel dataset = new DatasetWizardModel(); eu.eudat.entities.Dataset datasetEntity = datatasetRepository.find(UUID.fromString(id)); eu.eudat.models.user.composite.DatasetProfile datasetprofile = UserManager.generateDatasetProfileModel(datasetEntity.getProfile()); datasetprofile.setStatus(dataset.getStatus()); if(datasetEntity.getProperties()!=null){ JSONObject jobject = new JSONObject(datasetEntity.getProperties()); Map properties = (Map)jobject.toMap(); datasetprofile.fromJsonObject(properties); } dataset.setDatasetProfileDefinition(datasetprofile); dataset.fromDataModel(datasetEntity); return dataset; } public static eu.eudat.entities.Dataset createOrUpdate(ApiContext apiContext, DatasetWizardModel profile) throws InstantiationException, IllegalAccessException{ eu.eudat.entities.Dataset dataset = profile.toDataModel(); createRegistriesIfTheyDontExist(apiContext.getDatabaseRepository().getRegistryDao(),dataset); createDataRepositoriesIfTheyDontExist(apiContext.getDatabaseRepository().getDataRepositoryDao(),dataset); createServicesIfTheyDontExist(apiContext.getDatabaseRepository().getServiceDao(),dataset); return apiContext.getDatabaseRepository().getDatasetDao().createOrUpdate(dataset); } 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()); List entries = registryDao.listBy(criteria); if(entries!=null&&!entries.isEmpty())registry.setId( entries.get(0).getId()); else registry = registryDao.create(registry); } } } 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()); List entries = serviceDao.listBy(criteria); if(entries!=null&&!entries.isEmpty())service.setId(entries.get(0).getId()); else service = serviceDao.create(service); } } } 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()); List entries = dataRepositoryDao.listBy(criteria); if(entries!=null&&!entries.isEmpty())dataRepo.setId(entries.get(0).getId()); else dataRepo = dataRepositoryDao.createOrUpdate(dataRepo); } } } }