114 lines
5.1 KiB
Java
114 lines
5.1 KiB
Java
package eu.eudat.controllers.publicapi.managers;
|
|
|
|
import eu.eudat.commons.enums.DescriptionStatus;
|
|
import eu.eudat.commons.enums.IsActive;
|
|
import eu.eudat.commons.types.descriptiontemplate.DefinitionEntity;
|
|
import eu.eudat.controllers.publicapi.models.listingmodels.DatasetPublicListingModel;
|
|
import eu.eudat.controllers.publicapi.request.dataset.DatasetPublicTableRequest;
|
|
import eu.eudat.controllers.publicapi.response.DataTableData;
|
|
import eu.eudat.data.DescriptionEntity;
|
|
import eu.eudat.data.DescriptionTemplateEntity;
|
|
import eu.eudat.data.query.definition.helpers.ColumnOrderings;
|
|
import eu.eudat.logic.managers.PaginationManager;
|
|
import eu.eudat.logic.services.ApiContext;
|
|
import eu.eudat.logic.services.operations.DatabaseRepository;
|
|
import eu.eudat.commons.types.xml.XmlBuilder;
|
|
import eu.eudat.models.HintedModelFactory;
|
|
import eu.eudat.models.data.user.composite.PagedDatasetProfile;
|
|
import eu.eudat.controllers.publicapi.models.overviewmodels.DatasetPublicModel;
|
|
import eu.eudat.queryable.QueryableList;
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.LoggerFactory;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.stereotype.Component;
|
|
import org.w3c.dom.Document;
|
|
import org.w3c.dom.Element;
|
|
|
|
import jakarta.transaction.Transactional;
|
|
import java.util.*;
|
|
import java.util.stream.Collectors;
|
|
|
|
@Component
|
|
public class DatasetPublicManager {
|
|
private static final Logger logger = LoggerFactory.getLogger(DatasetPublicManager.class);
|
|
|
|
private DatabaseRepository databaseRepository;
|
|
|
|
@Autowired
|
|
public DatasetPublicManager(ApiContext apiContext){
|
|
this.databaseRepository = apiContext.getOperationsContext().getDatabaseRepository();
|
|
}
|
|
|
|
public DataTableData<DatasetPublicListingModel> getPublicPaged(DatasetPublicTableRequest datasetTableRequest) throws Exception {
|
|
Long count = 0L;
|
|
|
|
datasetTableRequest.setQuery(databaseRepository.getDatasetDao().asQueryable().withHint(DatasetPublicListingModel.getHint()));
|
|
QueryableList<DescriptionEntity> items;
|
|
|
|
items = datasetTableRequest.applyCriteria();
|
|
|
|
List<String> strings = new ArrayList<>();
|
|
strings.add("-dmp:publishedAt|join|");
|
|
if(datasetTableRequest.getOrderings() != null) {
|
|
datasetTableRequest.getOrderings().setFields(strings);
|
|
}
|
|
else{
|
|
datasetTableRequest.setOrderings(new ColumnOrderings());
|
|
datasetTableRequest.getOrderings().setFields(strings);
|
|
}
|
|
count = items.count();
|
|
QueryableList<DescriptionEntity> pagedItems = PaginationManager.applyPaging(items, datasetTableRequest);
|
|
DataTableData<DatasetPublicListingModel> dataTable = new DataTableData<>();
|
|
|
|
List<DatasetPublicListingModel> datasetLists = pagedItems.
|
|
select(this::mapPublicModel);
|
|
|
|
dataTable.setData(datasetLists.stream().filter(Objects::nonNull).collect(Collectors.toList()));
|
|
dataTable.setTotalCount(count);
|
|
return dataTable;
|
|
}
|
|
|
|
public DatasetPublicModel getOverviewSinglePublic(String id) throws Exception {
|
|
DescriptionEntity descriptionEntityEntity = databaseRepository.getDatasetDao().find(UUID.fromString(id));
|
|
if (descriptionEntityEntity.getIsActive() == IsActive.Inactive) {
|
|
throw new Exception("Dataset is deleted.");
|
|
}
|
|
DatasetPublicModel dataset = new DatasetPublicModel();
|
|
dataset.setDatasetProfileDefinition(this.getPagedProfile(dataset.getStatus(), descriptionEntityEntity));
|
|
dataset.fromDataModel(descriptionEntityEntity);
|
|
|
|
return dataset;
|
|
}
|
|
|
|
@Transactional
|
|
private DatasetPublicListingModel mapPublicModel(DescriptionEntity item) {
|
|
DatasetPublicListingModel listingPublicModel = new DatasetPublicListingModel().fromDataModel(item);
|
|
return listingPublicModel;
|
|
}
|
|
|
|
private PagedDatasetProfile getPagedProfile(DescriptionStatus status, DescriptionEntity descriptionEntityEntity){
|
|
//TODO
|
|
// eu.eudat.models.data.user.composite.DatasetProfile datasetprofile = this.generateDatasetProfileModel(descriptionEntityEntity.getProfile());
|
|
// datasetprofile.setStatus(status.getValue());
|
|
// if (descriptionEntityEntity.getProperties() != null) {
|
|
// JSONObject jObject = new JSONObject(descriptionEntityEntity.getProperties());
|
|
// Map<String, Object> properties = jObject.toMap();
|
|
// datasetprofile.fromJsonObject(properties);
|
|
// }
|
|
PagedDatasetProfile pagedDatasetProfile = new PagedDatasetProfile();
|
|
// pagedDatasetProfile.buildPagedDatasetProfile(datasetprofile);
|
|
return pagedDatasetProfile;
|
|
}
|
|
|
|
private eu.eudat.models.data.user.composite.DatasetProfile generateDatasetProfileModel(DescriptionTemplateEntity profile) {
|
|
Document viewStyleDoc = XmlBuilder.fromXml(profile.getDefinition());
|
|
Element root = (Element) viewStyleDoc.getDocumentElement();
|
|
DefinitionEntity viewstyle = new DefinitionEntity().fromXml(root);
|
|
|
|
eu.eudat.models.data.user.composite.DatasetProfile datasetprofile = new eu.eudat.models.data.user.composite.DatasetProfile();
|
|
datasetprofile.buildProfile(viewstyle);
|
|
|
|
return datasetprofile;
|
|
}
|
|
}
|