2 * ============LICENSE_START=======================================================
3 * ONAP : ccsdk features
4 * ================================================================================
5 * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property.
7 * ================================================================================
8 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
12 * http://www.apache.org/licenses/LICENSE-2.0
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
19 * ============LICENSE_END=========================================================
22 package org.onap.ccsdk.features.sdnr.wt.dataprovider.impl;
24 import org.onap.ccsdk.features.sdnr.wt.common.database.HtDatabaseClient;
25 import org.onap.ccsdk.features.sdnr.wt.common.database.SearchResult;
26 import org.onap.ccsdk.features.sdnr.wt.common.database.queries.BoolQueryBuilder;
27 import org.onap.ccsdk.features.sdnr.wt.common.database.queries.QueryBuilder;
28 import org.onap.ccsdk.features.sdnr.wt.common.database.queries.QueryBuilders;
29 import org.onap.ccsdk.features.sdnr.wt.common.database.queries.SortOrder;
30 import org.onap.ccsdk.features.sdnr.wt.common.database.requests.SearchRequest;
31 import org.onap.ccsdk.features.sdnr.wt.common.database.responses.AggregationEntries;
32 import org.onap.ccsdk.features.sdnr.wt.common.database.responses.SearchResponse;
33 import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.elasticsearch.data.acessor.DataObjectAcessorWithId;
34 import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.BaseInventoryTreeProvider;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.Entity;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.Inventory;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.InventoryEntity;
38 import org.slf4j.Logger;
39 import org.slf4j.LoggerFactory;
41 import java.io.IOException;
42 import java.util.ArrayList;
43 import java.util.List;
46 * @author Michael Dürre
48 public class DataTreeProviderImpl extends BaseInventoryTreeProvider {
50 private static final Logger LOG = LoggerFactory.getLogger(DataTreeProviderImpl.class);
51 private static final long MAXSIZE_PERSEARCH = 10;
52 private final HtDatabaseClient dbClient;
53 private final DataObjectAcessorWithId<Inventory> dbReader;
55 public DataTreeProviderImpl(HtDatabaseClient dbClient) {
56 this.dbClient = dbClient;
58 this.dbReader = new DataObjectAcessorWithId<>(dbClient,Entity.Inventoryequipment,Inventory.class,true);
59 } catch (ClassNotFoundException e) {
60 throw new RuntimeException(e);
64 private List<InventoryEntity> search(QueryBuilder query) {
66 query.size(MAXSIZE_PERSEARCH);
67 SearchResult<Inventory> response = null;
68 response = this.dbReader.doReadAll(query);
69 List<Inventory> matches = response.getHits();
70 List<InventoryEntity> list = new ArrayList<>();
72 if (response.getTotal() > MAXSIZE_PERSEARCH) {
73 long todo = response.getTotal();
74 long from = MAXSIZE_PERSEARCH;
77 from += MAXSIZE_PERSEARCH;
79 response = this.dbReader.doReadAll(query);
80 matches = response.getHits();
89 protected List<String> getAllNodeIds() {
90 QueryBuilder query = QueryBuilders.matchAllQuery().setFullsizeRequest(true).aggregations(INVENTORY_PROPERTY_NODEID).size(0);
91 SearchRequest request = new SearchRequest(Entity.Inventoryequipment.getName(),Entity.Inventoryequipment.getName());
92 request.setQuery(query);
94 SearchResponse response = this.dbClient.search(request);
95 AggregationEntries aggs = response.getAggregations(INVENTORY_PROPERTY_NODEID);
96 return new ArrayList<>(aggs.keySet());
97 } catch (IOException e) {
98 LOG.warn("problem reading nodes of inventory: ", e);
104 protected List<InventoryEntity> search(String filter, String sortOrderProperty, SortOrder sortOrder) {
105 return this.search(filter, null, null, null, sortOrderProperty, sortOrder);
109 protected List<InventoryEntity> search(String filter, String nodeId, String parentUuid, String uuid, String sortOrderProperty, SortOrder sortOrder) {
111 filter == null ? QueryBuilders.matchAllQuery() : QueryBuilders.searchAllFieldsQuery(filter);
112 if ((nodeId != null) || (parentUuid != null)) {
113 BoolQueryBuilder bquery = new BoolQueryBuilder();
114 if (filter != null) {
117 if (nodeId != null) {
118 bquery.must(QueryBuilders.matchQuery(INVENTORY_PROPERTY_NODEID, nodeId));
123 query.sort(sortOrderProperty, sortOrder);
124 return this.search(query);
128 protected List<InventoryEntity> getItemsForNodes(List<String> nodeIds, String sortOrderProperty, SortOrder sortOrder) {
129 BoolQueryBuilder query = QueryBuilders.boolQuery();
130 nodeIds.forEach(e->query.should(QueryBuilders.matchQuery(INVENTORY_PROPERTY_NODEID,e)));
131 return this.search(query);