f5f1e45832d2041e8a163fb9bc0f9ab54fcd82dc
[ccsdk/features.git] /
1 /*
2  * ============LICENSE_START=======================================================
3  * ONAP : ccsdk features
4  * ================================================================================
5  * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property.
6  * All rights reserved.
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
11  *
12  *     http://www.apache.org/licenses/LICENSE-2.0
13  *
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=========================================================
20  *
21  */
22 package org.onap.ccsdk.features.sdnr.wt.dataprovider.impl;
23
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;
40
41 import java.io.IOException;
42 import java.util.ArrayList;
43 import java.util.List;
44
45 /**
46  * @author Michael Dürre
47  */
48 public class DataTreeProviderImpl extends BaseInventoryTreeProvider {
49
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;
54
55     public DataTreeProviderImpl(HtDatabaseClient dbClient) {
56         this.dbClient = dbClient;
57         try {
58             this.dbReader = new DataObjectAcessorWithId<>(dbClient,Entity.Inventoryequipment,Inventory.class,true);
59         } catch (ClassNotFoundException e) {
60             throw new RuntimeException(e);
61         }
62     }
63
64     private List<InventoryEntity> search(QueryBuilder query)  {
65
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<>();
71        list.addAll(matches);
72         if (response.getTotal() > MAXSIZE_PERSEARCH) {
73             long todo = response.getTotal();
74             long from = MAXSIZE_PERSEARCH;
75             while (todo > from) {
76                 query.from(from);
77                 from += MAXSIZE_PERSEARCH;
78                 //merge into list
79                 response = this.dbReader.doReadAll(query);
80                 matches = response.getHits();
81                 list.addAll(matches);
82             }
83         }
84         return list;
85     }
86
87
88     @Override
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);
93         try {
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);
99         }
100         return List.of();
101     }
102
103     @Override
104     protected List<InventoryEntity> search(String filter, String sortOrderProperty, SortOrder sortOrder) {
105         return this.search(filter, null, null, null, sortOrderProperty, sortOrder);
106     }
107
108     @Override
109     protected List<InventoryEntity> search(String filter, String nodeId, String parentUuid, String uuid, String sortOrderProperty, SortOrder sortOrder) {
110         QueryBuilder query =
111                 filter == null ? QueryBuilders.matchAllQuery() : QueryBuilders.searchAllFieldsQuery(filter);
112         if ((nodeId != null) || (parentUuid != null)) {
113             BoolQueryBuilder bquery = new BoolQueryBuilder();
114             if (filter != null) {
115                 bquery.must(query);
116             }
117             if (nodeId != null) {
118                 bquery.must(QueryBuilders.matchQuery(INVENTORY_PROPERTY_NODEID, nodeId));
119             }
120             query = bquery;
121
122         }
123         query.sort(sortOrderProperty, sortOrder);
124         return this.search(query);
125     }
126
127     @Override
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);
132     }
133
134 }