81 lines
4.8 KiB
Java
81 lines
4.8 KiB
Java
package eu.eudat.logic.managers;
|
|
|
|
import com.jayway.jsonpath.DocumentContext;
|
|
import com.jayway.jsonpath.JsonPath;
|
|
import eu.eudat.logic.builders.model.models.DataTableDataBuilder;
|
|
import eu.eudat.data.dao.entities.DatasetProfileDao;
|
|
import eu.eudat.data.entities.DatasetProfile;
|
|
import eu.eudat.data.query.items.item.datasetprofile.DatasetProfileAutocompleteRequest;
|
|
import eu.eudat.data.query.items.table.datasetprofile.DatasetProfileTableRequestItem;
|
|
import eu.eudat.models.data.components.commons.datafield.AutoCompleteData;
|
|
import eu.eudat.models.data.datasetprofile.DatasetProfileAutocompleteItem;
|
|
import eu.eudat.models.data.datasetprofile.DatasetProfileListingModel;
|
|
import eu.eudat.models.data.entities.xmlmodels.datasetprofiledefinition.Field;
|
|
import eu.eudat.models.data.helpermodels.Tuple;
|
|
import eu.eudat.models.data.helpers.common.DataTableData;
|
|
import eu.eudat.queryable.QueryableList;
|
|
import eu.eudat.logic.services.ApiContext;
|
|
import eu.eudat.logic.utilities.builders.XmlBuilder;
|
|
import org.springframework.http.*;
|
|
import org.springframework.web.client.RestTemplate;
|
|
import org.w3c.dom.Document;
|
|
import org.w3c.dom.Element;
|
|
|
|
import javax.xml.xpath.*;
|
|
import java.util.Collections;
|
|
import java.util.LinkedList;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
|
|
|
|
public class DatasetProfileManager {
|
|
|
|
public static List<DatasetProfileAutocompleteItem> getWithCriteria(DatasetProfileDao datasetProfileRepository, DatasetProfileAutocompleteRequest datasetProfileAutocompleteRequest) throws IllegalAccessException, InstantiationException {
|
|
QueryableList<DatasetProfile> items = datasetProfileRepository.getWithCriteria(datasetProfileAutocompleteRequest.getCriteria());
|
|
List<DatasetProfileAutocompleteItem> datasetProfiles = items.select(item -> new DatasetProfileAutocompleteItem().fromDataModel(item));
|
|
return datasetProfiles;
|
|
}
|
|
|
|
public static DataTableData<DatasetProfileListingModel> getPaged(ApiContext apiContext, DatasetProfileTableRequestItem datasetProfileTableRequestItem) throws Exception {
|
|
QueryableList<DatasetProfile> items = apiContext.getOperationsContext().getDatabaseRepository().getDatasetProfileDao().getWithCriteria(datasetProfileTableRequestItem.getCriteria());
|
|
QueryableList<DatasetProfile> pagedItems = PaginationManager.applyPaging(items, datasetProfileTableRequestItem);
|
|
List<DatasetProfileListingModel> datasetProfiles = pagedItems.select(item -> new DatasetProfileListingModel().fromDataModel(item));
|
|
return apiContext.getOperationsContext().getBuilderFactory().getBuilder(DataTableDataBuilder.class).data(datasetProfiles).totalCount(items.count()).build();
|
|
}
|
|
|
|
public static List<DatasetProfileListingModel> getAll(DatasetProfileDao datasetProfileRepository) throws IllegalAccessException, InstantiationException {
|
|
QueryableList<DatasetProfile> items = datasetProfileRepository.getAll();
|
|
List<DatasetProfileListingModel> datasetProfiles = items.select(item -> new DatasetProfileListingModel().fromDataModel(item));
|
|
return datasetProfiles;
|
|
}
|
|
|
|
public static eu.eudat.models.data.entities.xmlmodels.datasetprofiledefinition.Field queryForField(String xml, String fieldId) throws XPathExpressionException {
|
|
eu.eudat.models.data.entities.xmlmodels.datasetprofiledefinition.Field field = new Field();
|
|
Document document = XmlBuilder.fromXml(xml);
|
|
XPathFactory xpathFactory = XPathFactory.newInstance();
|
|
XPath xpath = xpathFactory.newXPath();
|
|
XPathExpression expr =
|
|
xpath.compile("//field[@id='" + fieldId + "']");
|
|
Element name = (Element) expr.evaluate(document, XPathConstants.NODE);
|
|
field.fromXml(name);
|
|
return field;
|
|
}
|
|
|
|
public static List<Tuple<String, String>> getAutocomplete(AutoCompleteData data, String like) {
|
|
List<Tuple<String, String>> result = new LinkedList<>();
|
|
RestTemplate restTemplate = new RestTemplate();
|
|
HttpHeaders headers = new HttpHeaders();
|
|
headers.setAccept(Collections.singletonList(MediaType.valueOf("application/vnd.api+json; charset=utf-8")));
|
|
headers.setContentType(MediaType.APPLICATION_JSON);
|
|
HttpEntity<String> entity = new HttpEntity<>("parameters", headers);
|
|
|
|
ResponseEntity<Object> response = restTemplate.exchange(data.getUrl() + "?search=" + like, HttpMethod.GET, entity, Object.class);
|
|
DocumentContext jsonContext = JsonPath.parse(response.getBody());
|
|
|
|
List<Map<String, String>> jsonItems = jsonContext.read(data.getOptionsRoot() + "['" + data.getAutoCompleteOptions().getLabel() + "','" + data.getAutoCompleteOptions().getValue() + "']");
|
|
jsonItems.forEach(item -> result.add(new Tuple<>(item.get(data.getAutoCompleteOptions().getValue()), item.get(data.getAutoCompleteOptions().getLabel()))));
|
|
return result;
|
|
}
|
|
|
|
}
|