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

107 lines
5.4 KiB
Java

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.text.ParseException;
import java.util.List;
import java.util.Map;
import java.util.UUID;
/**
* Created by ikalyvas on 12/15/2017.
*/
public class DatasetManager {
public DataTableData<DatasetListingModel> getPaged(ApiContext apiContext, DatasetTableRequest datasetTableRequest, Principal principal) throws IllegalAccessException, InstantiationException{
UserInfo userInfo = new UserInfo();
userInfo.setId(principal.getId());
QueryableList<eu.eudat.entities.Dataset> items = apiContext.getDatabaseRepository().getDatasetDao().getWithCriteria(datasetTableRequest.getCriteria());
QueryableList<eu.eudat.entities.Dataset> authItems = apiContext.getDatabaseRepository().getDatasetDao().getAuthenticated(items,userInfo);
QueryableList<eu.eudat.entities.Dataset> pagedItems = PaginationManager.applyPaging( authItems ,datasetTableRequest);
if(datasetTableRequest.getWithHint())pagedItems.withHint("datasetFullyDetailed");
List<DatasetListingModel> datasets = new DomainModelConverter<eu.eudat.entities.Dataset, DatasetListingModel>().fromDataModel( pagedItems.toList(), DatasetListingModel.class);
DataTableData<DatasetListingModel> dataTable = new DataTableData<DatasetListingModel>();
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<String,Object> properties = (Map<String, Object>)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 Exception {
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<eu.eudat.entities.Registry> 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<eu.eudat.entities.Service> 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<eu.eudat.entities.DataRepository> entries = dataRepositoryDao.listBy(criteria);
if(entries!=null&&!entries.isEmpty())dataRepo.setId(entries.get(0).getId());
else dataRepo = dataRepositoryDao.createOrUpdate(dataRepo);
}
}
}
}