Search in sources :

Example 1 with Paging

use of eu.openminted.registry.core.domain.Paging in project resource-catalogue by madgeek-arc.

the class StatisticsManager method events.

public Map<DateTime, Map<String, Long>> events(Event.UserActionType type, Date from, Date to, Interval by) {
    Map<DateTime, Map<String, Long>> results = new LinkedHashMap<>();
    Paging<Resource> resources = searchService.cqlQuery(String.format("type=\"%s\" AND creation_date > %s AND creation_date < %s", type, from.toInstant().toEpochMilli(), to.toInstant().toEpochMilli()), "event", maxQuantity, 0, "creation_date", "ASC");
    List<Event> events = resources.getResults().stream().map(resource -> parserService.deserialize(resource, Event.class)).collect(Collectors.toList());
    DateTime start = new DateTime(from);
    DateTime stop = new DateTime(to);
    Map<DateTime, List<Event>> eventsByDate = new LinkedHashMap<>();
    start.plusWeeks(1);
    while (start.getMillis() <= stop.getMillis()) {
        DateTime endDate = addInterval(start, by);
        List<Event> weekEvents = new LinkedList<>();
        events = events.stream().map(event -> {
            if (endDate.isAfter(event.getInstant())) {
                weekEvents.add(event);
                return null;
            } else
                return event;
        }).filter(Objects::nonNull).collect(Collectors.toList());
        // weekEvents.sort(Comparator.comparing(Event::getService));
        eventsByDate.put(start, weekEvents);
        start = endDate;
    }
    for (Map.Entry<DateTime, List<Event>> weekEntry : eventsByDate.entrySet()) {
        Map<String, Long> weekResults = weekEntry.getValue().stream().collect(Collectors.groupingBy(Event::getService, Collectors.counting()));
        weekResults = weekResults.entrySet().stream().sorted(Map.Entry.comparingByKey()).collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (oldValue, newValue) -> oldValue, LinkedHashMap::new));
        results.put(weekEntry.getKey(), weekResults);
    }
    return results;
}
Also used : Resource(eu.openminted.registry.core.domain.Resource) MapValues(eu.einfracentral.dto.MapValues) Cacheable(org.springframework.cache.annotation.Cacheable) InfraServiceManager(eu.einfracentral.registry.manager.InfraServiceManager) NamedParameterJdbcTemplate(org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate) Autowired(org.springframework.beans.factory.annotation.Autowired) Service(eu.einfracentral.domain.Service) QueryBuilders(org.elasticsearch.index.query.QueryBuilders) PgArray(org.postgresql.jdbc.PgArray) ServiceException(eu.openminted.registry.core.service.ServiceException) Logger(org.apache.log4j.Logger) SearchResponse(org.elasticsearch.action.search.SearchResponse) RequestOptions(org.elasticsearch.client.RequestOptions) DateHistogramInterval(org.elasticsearch.search.aggregations.bucket.histogram.DateHistogramInterval) SearchType(org.elasticsearch.action.search.SearchType) Paging(eu.openminted.registry.core.domain.Paging) Terms(org.elasticsearch.search.aggregations.bucket.terms.Terms) ProviderService(eu.einfracentral.registry.service.ProviderService) FacetFilter(eu.openminted.registry.core.domain.FacetFilter) PlaceCount(eu.einfracentral.dto.PlaceCount) Collectors(java.util.stream.Collectors) ParserService(eu.openminted.registry.core.service.ParserService) PipelineAggregatorBuilders(org.elasticsearch.search.aggregations.PipelineAggregatorBuilders) ProviderBundle(eu.einfracentral.domain.ProviderBundle) StatisticsService(eu.einfracentral.service.StatisticsService) MultiBucketsAggregation(org.elasticsearch.search.aggregations.bucket.MultiBucketsAggregation) CACHE_VISITS(eu.einfracentral.config.CacheConfig.CACHE_VISITS) Authentication(org.springframework.security.core.Authentication) java.util(java.util) SearchService(eu.openminted.registry.core.service.SearchService) SimpleValue(org.elasticsearch.search.aggregations.pipeline.SimpleValue) Histogram(org.elasticsearch.search.aggregations.bucket.histogram.Histogram) MapSqlParameterSource(org.springframework.jdbc.core.namedparam.MapSqlParameterSource) SearchRequest(org.elasticsearch.action.search.SearchRequest) SQLException(java.sql.SQLException) SearchSourceBuilder(org.elasticsearch.search.builder.SearchSourceBuilder) DataSource(javax.sql.DataSource) Value(eu.einfracentral.dto.Value) EnableScheduling(org.springframework.scheduling.annotation.EnableScheduling) Event(eu.einfracentral.domain.Event) QueryBuilder(org.elasticsearch.index.query.QueryBuilder) DateTime(org.joda.time.DateTime) ParsedDateHistogram(org.elasticsearch.search.aggregations.bucket.histogram.ParsedDateHistogram) AggregationBuilders(org.elasticsearch.search.aggregations.AggregationBuilders) IOException(java.io.IOException) RestHighLevelClient(org.elasticsearch.client.RestHighLevelClient) DateHistogramAggregationBuilder(org.elasticsearch.search.aggregations.bucket.histogram.DateHistogramAggregationBuilder) Component(org.springframework.stereotype.Component) InfraService(eu.einfracentral.domain.InfraService) AnalyticsService(eu.einfracentral.service.AnalyticsService) LogManager(org.apache.log4j.LogManager) VocabularyService(eu.einfracentral.registry.service.VocabularyService) Resource(eu.openminted.registry.core.domain.Resource) DateTime(org.joda.time.DateTime) Event(eu.einfracentral.domain.Event)

Example 2 with Paging

use of eu.openminted.registry.core.domain.Paging in project resource-catalogue by madgeek-arc.

the class ProviderController method getAll.

@ApiOperation(value = "Filter a list of Providers based on a set of filters or get a list of all Providers in the Catalogue.")
@ApiImplicitParams({ @ApiImplicitParam(name = "query", value = "Keyword to refine the search", dataType = "string", paramType = "query"), @ApiImplicitParam(name = "from", value = "Starting index in the result set", dataType = "string", paramType = "query"), @ApiImplicitParam(name = "quantity", value = "Quantity to be fetched", dataType = "string", paramType = "query"), @ApiImplicitParam(name = "order", value = "asc / desc", dataType = "string", paramType = "query"), @ApiImplicitParam(name = "orderField", value = "Order field", dataType = "string", paramType = "query") })
@GetMapping(path = "all", produces = { MediaType.APPLICATION_JSON_VALUE, MediaType.APPLICATION_XML_VALUE })
public ResponseEntity<Paging<Provider>> getAll(@ApiIgnore @RequestParam Map<String, Object> allRequestParams, @ApiIgnore Authentication auth) {
    FacetFilter ff = new FacetFilter();
    ff.setKeyword(allRequestParams.get("query") != null ? (String) allRequestParams.remove("query") : "");
    ff.setFrom(allRequestParams.get("from") != null ? Integer.parseInt((String) allRequestParams.remove("from")) : 0);
    ff.setQuantity(allRequestParams.get("quantity") != null ? Integer.parseInt((String) allRequestParams.remove("quantity")) : 10);
    Map<String, Object> sort = new HashMap<>();
    Map<String, Object> order = new HashMap<>();
    String orderDirection = allRequestParams.get("order") != null ? (String) allRequestParams.remove("order") : "asc";
    String orderField = allRequestParams.get("orderField") != null ? (String) allRequestParams.remove("orderField") : null;
    if (orderField != null) {
        order.put("order", orderDirection);
        sort.put(orderField, order);
        ff.setOrderBy(sort);
    }
    ff.setFilter(allRequestParams);
    List<Provider> providerList = new LinkedList<>();
    Paging<ProviderBundle> providerBundlePaging = providerManager.getAll(ff, auth);
    for (ProviderBundle providerBundle : providerBundlePaging.getResults()) {
        providerList.add(providerBundle.getProvider());
    }
    Paging<Provider> providerPaging = new Paging<>(providerBundlePaging.getTotal(), providerBundlePaging.getFrom(), providerBundlePaging.getTo(), providerList, providerBundlePaging.getFacets());
    return new ResponseEntity<>(providerPaging, HttpStatus.OK);
}
Also used : FacetFilter(eu.openminted.registry.core.domain.FacetFilter) Paging(eu.openminted.registry.core.domain.Paging) ResponseEntity(org.springframework.http.ResponseEntity) ApiImplicitParams(io.swagger.annotations.ApiImplicitParams) ApiOperation(io.swagger.annotations.ApiOperation)

Example 3 with Paging

use of eu.openminted.registry.core.domain.Paging in project resource-catalogue by madgeek-arc.

the class ProviderController method getRandomProviders.

@ApiImplicitParams({ @ApiImplicitParam(name = "query", value = "Keyword to refine the search", dataType = "string", paramType = "query"), @ApiImplicitParam(name = "from", value = "Starting index in the result set", dataType = "string", paramType = "query"), @ApiImplicitParam(name = "quantity", value = "Quantity to be fetched", dataType = "string", paramType = "query") })
@GetMapping(path = "randomProviders", produces = { MediaType.APPLICATION_JSON_VALUE, MediaType.APPLICATION_XML_VALUE })
@PreAuthorize("hasRole('ROLE_ADMIN') or hasRole('ROLE_EPOT')")
public ResponseEntity<Paging<ProviderBundle>> getRandomProviders(@ApiIgnore @RequestParam Map<String, Object> allRequestParams, @ApiIgnore Authentication auth) {
    FacetFilter ff = new FacetFilter();
    ff.setKeyword(allRequestParams.get("query") != null ? (String) allRequestParams.remove("query") : "");
    ff.setFrom(allRequestParams.get("from") != null ? Integer.parseInt((String) allRequestParams.remove("from")) : 0);
    ff.setQuantity(allRequestParams.get("quantity") != null ? Integer.parseInt((String) allRequestParams.remove("quantity")) : 10);
    ff.setFilter(allRequestParams);
    List<ProviderBundle> providerList = new LinkedList<>();
    Paging<ProviderBundle> providerBundlePaging = providerManager.getRandomProviders(ff, auditingInterval, auth);
    for (ProviderBundle providerBundle : providerBundlePaging.getResults()) {
        providerList.add(providerBundle);
    }
    Paging<ProviderBundle> providerPaging = new Paging<>(providerBundlePaging.getTotal(), providerBundlePaging.getFrom(), providerBundlePaging.getTo(), providerList, providerBundlePaging.getFacets());
    return new ResponseEntity<>(providerPaging, HttpStatus.OK);
}
Also used : ResponseEntity(org.springframework.http.ResponseEntity) FacetFilter(eu.openminted.registry.core.domain.FacetFilter) Paging(eu.openminted.registry.core.domain.Paging) ApiImplicitParams(io.swagger.annotations.ApiImplicitParams) PreAuthorize(org.springframework.security.access.prepost.PreAuthorize)

Example 4 with Paging

use of eu.openminted.registry.core.domain.Paging in project resource-catalogue by madgeek-arc.

the class SecureResponseAdvice method beforeBodyWrite.

@Override
public T beforeBodyWrite(T t, MethodParameter methodParameter, MediaType mediaType, Class<? extends HttpMessageConverter<?>> aClass, ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse) {
    Authentication auth = SecurityContextHolder.getContext().getAuthentication();
    if (t != null && !securityService.hasRole(auth, "ROLE_ADMIN") && !securityService.hasRole(auth, "ROLE_EPOT")) {
        logger.trace("User is not Admin nor EPOT: attempting to remove sensitive information");
        if (Collection.class.isAssignableFrom(t.getClass())) {
            for (T object : ((Collection<T>) t)) {
                modifyContent(object, auth);
            }
        } else if (Paging.class.isAssignableFrom(t.getClass())) {
            for (T object : ((Paging<T>) t).getResults()) {
                modifyContent(object, auth);
            }
        } else {
            modifyContent(t, auth);
        }
        logger.debug("Final Object: {}", t);
    }
    return t;
}
Also used : Authentication(org.springframework.security.core.Authentication) Paging(eu.openminted.registry.core.domain.Paging)

Example 5 with Paging

use of eu.openminted.registry.core.domain.Paging in project resource-catalogue by madgeek-arc.

the class ServiceController method getRandomResources.

@ApiImplicitParams({ @ApiImplicitParam(name = "query", value = "Keyword to refine the search", dataType = "string", paramType = "query"), @ApiImplicitParam(name = "from", value = "Starting index in the result set", dataType = "string", paramType = "query"), @ApiImplicitParam(name = "quantity", value = "Quantity to be fetched", dataType = "string", paramType = "query") })
@GetMapping(path = "randomResources", produces = { MediaType.APPLICATION_JSON_VALUE, MediaType.APPLICATION_XML_VALUE })
@PreAuthorize("hasRole('ROLE_ADMIN') or hasRole('ROLE_EPOT')")
public ResponseEntity<Paging<InfraService>> getRandomResources(@ApiIgnore @RequestParam Map<String, Object> allRequestParams, @ApiIgnore Authentication auth) {
    FacetFilter ff = new FacetFilter();
    ff.setKeyword(allRequestParams.get("query") != null ? (String) allRequestParams.remove("query") : "");
    ff.setFrom(allRequestParams.get("from") != null ? Integer.parseInt((String) allRequestParams.remove("from")) : 0);
    ff.setQuantity(allRequestParams.get("quantity") != null ? Integer.parseInt((String) allRequestParams.remove("quantity")) : 10);
    ff.setFilter(allRequestParams);
    List<InfraService> serviceList = new LinkedList<>();
    Paging<InfraService> infraServicePaging = infraService.getRandomResources(ff, auditingInterval, auth);
    for (InfraService infraService : infraServicePaging.getResults()) {
        serviceList.add(infraService);
    }
    Paging<InfraService> servicePaging = new Paging<>(infraServicePaging.getTotal(), infraServicePaging.getFrom(), infraServicePaging.getTo(), serviceList, infraServicePaging.getFacets());
    return new ResponseEntity<>(servicePaging, HttpStatus.OK);
}
Also used : ResponseEntity(org.springframework.http.ResponseEntity) FacetFilter(eu.openminted.registry.core.domain.FacetFilter) Paging(eu.openminted.registry.core.domain.Paging) ApiImplicitParams(io.swagger.annotations.ApiImplicitParams) PreAuthorize(org.springframework.security.access.prepost.PreAuthorize)

Aggregations

Paging (eu.openminted.registry.core.domain.Paging)5 FacetFilter (eu.openminted.registry.core.domain.FacetFilter)4 ApiImplicitParams (io.swagger.annotations.ApiImplicitParams)3 ResponseEntity (org.springframework.http.ResponseEntity)3 Authentication (org.springframework.security.core.Authentication)2 CACHE_VISITS (eu.einfracentral.config.CacheConfig.CACHE_VISITS)1 Event (eu.einfracentral.domain.Event)1 InfraService (eu.einfracentral.domain.InfraService)1 ProviderBundle (eu.einfracentral.domain.ProviderBundle)1 Service (eu.einfracentral.domain.Service)1 MapValues (eu.einfracentral.dto.MapValues)1 PlaceCount (eu.einfracentral.dto.PlaceCount)1 Value (eu.einfracentral.dto.Value)1 InfraServiceManager (eu.einfracentral.registry.manager.InfraServiceManager)1 ProviderService (eu.einfracentral.registry.service.ProviderService)1 VocabularyService (eu.einfracentral.registry.service.VocabularyService)1 AnalyticsService (eu.einfracentral.service.AnalyticsService)1 StatisticsService (eu.einfracentral.service.StatisticsService)1 Resource (eu.openminted.registry.core.domain.Resource)1 ParserService (eu.openminted.registry.core.service.ParserService)1