diff options
author | 2023-03-02 12:06:07 +0530 | |
---|---|---|
committer | 2023-03-10 10:46:55 +0530 | |
commit | 6b8e4f12fc66a64fa5c5498d06891f1f5f1189ac (patch) | |
tree | 6414988944a78393509923a5ace70d66db0b29bd /sdnr/wt/data-provider/provider/src/main/java/org | |
parent | d944abfab1a53a462868ae805ab5372935f854ef (diff) |
Upgrade parents to 2.5.4-SNAPSHOT
Code changes as a result of changes induced by ODL Chlorine SR1
Issue-ID: CCSDK-3856
Signed-off-by: Ravi Pendurty <ravi.pendurty@highstreet-technologies.com>
Change-Id: Ic08786f050e58bdb8371c8f8c25fb0db9f258cd4
Signed-off-by: Ravi Pendurty <ravi.pendurty@highstreet-technologies.com>
Diffstat (limited to 'sdnr/wt/data-provider/provider/src/main/java/org')
22 files changed, 314 insertions, 640 deletions
diff --git a/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/elasticsearch/EsDataObjectReaderWriter2.java b/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/elasticsearch/EsDataObjectReaderWriter2.java index a10864c96..dbb73bdad 100644 --- a/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/elasticsearch/EsDataObjectReaderWriter2.java +++ b/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/elasticsearch/EsDataObjectReaderWriter2.java @@ -28,7 +28,6 @@ import java.lang.reflect.InvocationTargetException; import java.util.List; import javax.annotation.Nonnull; import javax.annotation.Nullable; -import org.eclipse.jdt.annotation.NonNull; import org.onap.ccsdk.features.sdnr.wt.common.database.DatabaseClient; import org.onap.ccsdk.features.sdnr.wt.common.database.SearchHit; import org.onap.ccsdk.features.sdnr.wt.common.database.SearchResult; @@ -36,7 +35,6 @@ import org.onap.ccsdk.features.sdnr.wt.common.database.queries.QueryBuilder; import org.onap.ccsdk.features.sdnr.wt.yang.mapper.YangToolsMapper2; import org.onap.ccsdk.features.sdnr.wt.yang.mapper.YangToolsMapperHelper; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.Entity; -import org.opendaylight.yangtools.concepts.Builder; import org.opendaylight.yangtools.yang.binding.DataObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -60,7 +58,7 @@ public class EsDataObjectReaderWriter2<T extends DataObject> { private String dataTypeName; /** Elasticsearch Database client to be used **/ - private DatabaseClient db; + protected DatabaseClient db; /** Mapper with configuration to use opendaylight yang-tools builder pattern for object creation **/ private YangToolsMapper2<T> yangtoolsMapper; diff --git a/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/elasticsearch/data/acessor/DataObjectAcessor.java b/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/elasticsearch/data/acessor/DataObjectAcessor.java index ec467eab1..8319d5d4f 100644 --- a/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/elasticsearch/data/acessor/DataObjectAcessor.java +++ b/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/elasticsearch/data/acessor/DataObjectAcessor.java @@ -57,4 +57,5 @@ public class DataObjectAcessor<T extends DataObject> extends EsDataObjectReaderW SearchResult<T> result = doReadAll(queryBuilder, ignoreException); return new QueryResult<>(queryByFilter, result); } + } diff --git a/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/elasticsearch/data/acessor/DataObjectAcessorInventory.java b/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/elasticsearch/data/acessor/DataObjectAcessorInventory.java new file mode 100644 index 000000000..622333403 --- /dev/null +++ b/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/elasticsearch/data/acessor/DataObjectAcessorInventory.java @@ -0,0 +1,81 @@ +/* + * ============LICENSE_START======================================================= + * ONAP : ccsdk features + * ================================================================================ + * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. + * All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + * + */ +package org.onap.ccsdk.features.sdnr.wt.dataprovider.database.elasticsearch.data.acessor; + +import java.io.IOException; +import org.onap.ccsdk.features.sdnr.wt.common.database.ExtRestClient; +import org.onap.ccsdk.features.sdnr.wt.common.database.HtDatabaseClient; +import org.onap.ccsdk.features.sdnr.wt.common.database.SearchResult; +import org.onap.ccsdk.features.sdnr.wt.common.database.requests.SearchRequest; +import org.onap.ccsdk.features.sdnr.wt.common.database.responses.AggregationEntries; +import org.onap.ccsdk.features.sdnr.wt.common.database.responses.SearchResponse; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.elasticsearch.data.rpctypehelper.QueryByFilter; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.elasticsearch.data.rpctypehelper.QueryResult; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.Entity; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.EntityInput; +import org.opendaylight.yangtools.yang.binding.DataObject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class DataObjectAcessorInventory<T extends DataObject> extends DataObjectAcessorWithId<T> { + + private final Logger LOG = LoggerFactory.getLogger(DataObjectAcessorInventory.class); + + private static final String KEY = "node-id"; + + private ExtRestClient dbClient; + + public DataObjectAcessorInventory(HtDatabaseClient dbClient, Entity entity, Class<T> clazz, + boolean doFullsizeRequest) throws ClassNotFoundException { + super(dbClient, entity, clazz, doFullsizeRequest); + LOG.info("Create DataObjectAcessorInventory"); + this.dbClient = dbClient; + } + + + /** + * get aggregated devices list + * + * @param input filter should be empty/no filter handled, only sortorder for KEY ('node-name') + * @return + * @throws IOException + */ + public QueryResult<String> getDataDeviceList(EntityInput input) { + + QueryByFilter queryByFilter = new QueryByFilter(input); + SearchRequest request = + queryByFilter.getSearchRequestAggregated(KEY,this.getDataTypeName(), this.getDataTypeName(), this.doFullsizeRequest); + try { + SearchResponse response = this.dbClient.search(request); + AggregationEntries aggs = response.getAggregations(KEY); + String[] uuids = + aggs.getKeysAsPagedStringList(queryByFilter.getPageSize(), queryByFilter.getPageStartIndex()); + long totalSize = aggs.size(); + return new QueryResult<String>(queryByFilter.getPage(), queryByFilter.getPageSize(), + new SearchResult<String>(uuids, totalSize)); + } catch (IOException e) { + throw new RuntimeException("problem reading nodes for req=" + request, e); + } + + } + +} diff --git a/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/elasticsearch/data/acessor/DataObjectAcessorPm.java b/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/elasticsearch/data/acessor/DataObjectAcessorPm.java index 04849004f..8e04db07b 100644 --- a/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/elasticsearch/data/acessor/DataObjectAcessorPm.java +++ b/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/elasticsearch/data/acessor/DataObjectAcessorPm.java @@ -72,7 +72,7 @@ public class DataObjectAcessorPm<T extends DataObject> extends DataObjectAcessor public DataObjectAcessorPm(HtDatabaseClient dbClient, Intervall mode, Entity entity, Class<T> clazz, boolean doFullsizeRequest) throws ClassNotFoundException { super(dbClient, entity, clazz, doFullsizeRequest); - LOG.info("DataObjectAcessorPm"); + LOG.info("Create DataObjectAcessorPm"); this.dbClient = dbClient; this.mode = mode; } @@ -113,7 +113,7 @@ public class DataObjectAcessorPm<T extends DataObject> extends DataObjectAcessor QueryByFilter queryByFilter = new QueryByFilter(input); SearchRequest request = - queryByFilter.getSearchRequestBySortOrder(NODE_KEY, UUID_KEY, mode.getIndex(), mode.getType(), this.doFullsizeRequest); + queryByFilter.getSearchRequestAggregated(NODE_KEY, mode.getIndex(), mode.getType(), this.doFullsizeRequest); try { SearchResponse response = this.dbClient.search(request); AggregationEntries aggs = response.getAggregations(KEY); diff --git a/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/elasticsearch/data/entity/FaultEntityManager.java b/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/elasticsearch/data/entity/FaultEntityManager.java index 64156dc07..708467d0d 100644 --- a/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/elasticsearch/data/entity/FaultEntityManager.java +++ b/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/elasticsearch/data/entity/FaultEntityManager.java @@ -21,8 +21,6 @@ */ package org.onap.ccsdk.features.sdnr.wt.dataprovider.database.elasticsearch.data.entity; -import java.util.regex.Matcher; -import java.util.regex.Pattern; import javax.annotation.Nonnull; import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.sqldb.data.entity.DatabaseIdGenerator; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.Fault; @@ -38,7 +36,7 @@ public class FaultEntityManager { /** * Specific problems are not moving into current problem list - * + * * @param problemName to be verified * @return true if problem is current */ @@ -52,7 +50,7 @@ public class FaultEntityManager { /** * Specific problems are not moving into current problem list - * + * * @param fault to be verified * @return true if cleared indication */ @@ -62,7 +60,7 @@ public class FaultEntityManager { /** * Create a specific ES id for the current log. - * + * * @return a string with the generated ES Id */ public static String genSpecificEsId(String nodeName, String objectId, String problemName) { @@ -80,7 +78,7 @@ public class FaultEntityManager { /** * Create Es id - * + * * @param fault used to create uuid for faultcurrent * @return String with Id */ diff --git a/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/elasticsearch/data/entity/HtDatabaseEventsService.java b/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/elasticsearch/data/entity/HtDatabaseEventsService.java index 9cfe4e50d..8367a87d3 100644 --- a/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/elasticsearch/data/entity/HtDatabaseEventsService.java +++ b/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/elasticsearch/data/entity/HtDatabaseEventsService.java @@ -38,7 +38,6 @@ import org.onap.ccsdk.features.sdnr.wt.common.database.queries.BoolQueryBuilder; import org.onap.ccsdk.features.sdnr.wt.common.database.queries.QueryBuilder; import org.onap.ccsdk.features.sdnr.wt.common.database.queries.QueryBuilders; import org.onap.ccsdk.features.sdnr.wt.common.database.queries.RangeQueryBuilder; -import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.DatabaseDataProvider; import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.elasticsearch.EsDataObjectReaderWriter2; import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.ArchiveCleanProvider; import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.DataInconsistencyException; @@ -97,16 +96,11 @@ public class HtDatabaseEventsService implements ArchiveCleanProvider, DataProvid private final EsDataObjectReaderWriter2<GuicutthroughEntity> guiCutThroughDB; private final EsDataObjectReaderWriter2<PmdataEntity> pmData15mDB; private final EsDataObjectReaderWriter2<PmdataEntity> pmData24hDB; - - @SuppressWarnings("unused") - private final DatabaseDataProvider dataProvider; // --- Construct and initialize - public HtDatabaseEventsService(HtDatabaseClient client, DatabaseDataProvider elasticSearchDataProvider) - throws Exception { + public HtDatabaseEventsService(HtDatabaseClient client) throws Exception { LOG.info("Create {} start", HtDatabaseEventsService.class); - this.dataProvider = elasticSearchDataProvider; try { // Create control structure @@ -124,8 +118,8 @@ public class HtDatabaseEventsService implements ArchiveCleanProvider, DataProvid eventRWFaultLogDB = new EsDataObjectReaderWriter2<>(client, Entity.Faultlog, FaultlogEntity.class, FaultlogBuilder.class); - eventRWFCMLogDB = new EsDataObjectReaderWriter2<>(client, Entity.Cmlog, CmlogEntity.class, - CmlogBuilder.class); + eventRWFCMLogDB = + new EsDataObjectReaderWriter2<>(client, Entity.Cmlog, CmlogEntity.class, CmlogBuilder.class); eventRWConnectionLogDB = new EsDataObjectReaderWriter2<>(client, Entity.Connectionlog, ConnectionlogEntity.class, ConnectionlogBuilder.class); @@ -460,7 +454,7 @@ public class HtDatabaseEventsService implements ArchiveCleanProvider, DataProvid @Override public boolean updateNetworkConnection22(NetworkElementConnectionEntity networkElementConnectionEntitiy, String nodeId) { - LOG.info("update networkelement-connection for {} with data {}", nodeId, networkElementConnectionEntitiy); + LOG.debug("update networkelement-connection for {} with data {}", nodeId, networkElementConnectionEntitiy); return this.networkelementConnectionDB.updateOrCreate(networkElementConnectionEntitiy, nodeId, Arrays.asList("is-required", "username", "password")) != null; // NetworkElementConnectionEntity e = @@ -530,7 +524,7 @@ public class HtDatabaseEventsService implements ArchiveCleanProvider, DataProvid QueryBuilder queryFaultLog = EsFaultLogDevicemanager.getQueryForTimeStamp(netconfTimeStamp); numberOfElements += eventRWFaultLogDB.doReadAll(queryFaultLog).getTotal(); - QueryBuilder queryCMLog = EsCMLogDevicemanager.getQueryForTimeStamp(netconfTimeStamp); + QueryBuilder queryCMLog = EsCMLogDevicemanager.getQueryForTimeStamp(netconfTimeStamp); numberOfElements += eventRWFCMLogDB.doReadAll(queryCMLog).getTotal(); return numberOfElements; diff --git a/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/elasticsearch/data/entity/HtDatabaseMaintenanceService.java b/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/elasticsearch/data/entity/HtDatabaseMaintenanceService.java index 9f4c0f399..c280f4fb3 100644 --- a/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/elasticsearch/data/entity/HtDatabaseMaintenanceService.java +++ b/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/elasticsearch/data/entity/HtDatabaseMaintenanceService.java @@ -80,7 +80,7 @@ public class HtDatabaseMaintenanceService implements HtDatabaseMaintenance { if (maintenanceRW.write(m, m.getNodeId()) == null) { throw new IllegalArgumentException("Problem writing to database: " + m.getId()); } - LOG.info("Wrote maintenance object {}", m.toString()); + LOG.debug("Wrote maintenance object {}", m.toString()); } return m; } diff --git a/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/elasticsearch/data/rpctypehelper/QueryByFilter.java b/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/elasticsearch/data/rpctypehelper/QueryByFilter.java index 69f9bcc29..51584484b 100644 --- a/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/elasticsearch/data/rpctypehelper/QueryByFilter.java +++ b/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/elasticsearch/data/rpctypehelper/QueryByFilter.java @@ -130,16 +130,16 @@ public class QueryByFilter { } } - public SearchRequest getSearchRequestBySortOrder(String nodeKey, String uuidKey, String index, String dataType, - boolean doFullsizeRequest) { - Sortorder soNode = getSortOrder(sortOrder, nodeKey); + public SearchRequest getSearchRequestAggregated(String aggregationKey, String index, String dataType, + boolean doFullsizeRequest) { + Sortorder soNode = getSortOrder(sortOrder, aggregationKey); SearchRequest request = new SearchRequest(index, dataType); QueryBuilder query = null; if (soNode != null) { query = QueryBuilders.matchAllQuery().setFullsizeRequest(doFullsizeRequest) - .aggregations(nodeKey, convert(soNode.getSortorder())).size(0); + .aggregations(aggregationKey, convert(soNode.getSortorder())).size(0); } else { - query = QueryBuilders.matchAllQuery().setFullsizeRequest(doFullsizeRequest).aggregations(nodeKey).size(0); + query = QueryBuilders.matchAllQuery().setFullsizeRequest(doFullsizeRequest).aggregations(aggregationKey).size(0); } request.setQuery(query); return request; diff --git a/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/elasticsearch/impl/ElasticSearchDataProvider.java b/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/elasticsearch/impl/ElasticSearchDataProvider.java index 753930cdd..71372275a 100644 --- a/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/elasticsearch/impl/ElasticSearchDataProvider.java +++ b/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/elasticsearch/impl/ElasticSearchDataProvider.java @@ -29,8 +29,8 @@ import java.util.List; import java.util.concurrent.TimeUnit; import org.onap.ccsdk.features.sdnr.wt.common.database.HtDatabaseClient; import org.onap.ccsdk.features.sdnr.wt.common.database.config.HostInfo; -import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.DatabaseDataProvider; import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.elasticsearch.EsConfig; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.elasticsearch.data.acessor.DataObjectAcessorInventory; import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.elasticsearch.data.acessor.DataObjectAcessorPm; import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.elasticsearch.data.acessor.DataObjectAcessorPm.Intervall; import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.elasticsearch.data.acessor.DataObjectAcessorStatus; @@ -38,10 +38,13 @@ import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.elasticsearch.data. import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.elasticsearch.data.entity.HtDatabaseEventsService; import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.elasticsearch.data.entity.HtDatabaseMaintenanceService; import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.elasticsearch.data.rpctypehelper.QueryResult; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.impl.DataTreeProviderImpl; import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.DataProvider; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.DatabaseDataProvider; import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.HtDatabaseMaintenance; import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.HtDatabaseMediatorserver; import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.HtUserdataManager; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.InventoryTreeProvider; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.CreateMaintenanceInput; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.CreateMaintenanceOutputBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.CreateMediatorServerInput; @@ -65,6 +68,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.pro import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadFaultcurrentListOutputBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadFaultlogListOutputBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadGuiCutThroughEntryOutputBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadInventoryDeviceListOutputBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadInventoryListOutputBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadMaintenanceListOutputBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadMediatorServerListOutputBuilder; @@ -82,6 +86,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.pro import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.UpdateMediatorServerOutputBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.UpdateNetworkElementConnectionInput; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.UpdateNetworkElementConnectionOutputBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.inventory.list.output.Data; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -100,7 +105,7 @@ public class ElasticSearchDataProvider implements DatabaseDataProvider { private final DataObjectAcessorWithId<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.mediator.server.list.output.Data> mediatorserverRW; private final DataObjectAcessorWithId<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.maintenance.list.output.Data> maintenanceRW; private final DataObjectAcessorWithId<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.gui.cut.through.entry.output.Data> guicutthroughRW; - private final DataObjectAcessorWithId<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.inventory.list.output.Data> equipmentRW; + private final DataObjectAcessorInventory<Data> equipmentRW; private final DataObjectAcessorWithId<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.connectionlog.list.output.Data> connnectionlogRW; private final DataObjectAcessorWithId<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.eventlog.list.output.Data> eventlogRW; private final DataObjectAcessorWithId<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.network.element.connection.list.output.Data> networkelementConnectionRW; @@ -111,6 +116,7 @@ public class ElasticSearchDataProvider implements DatabaseDataProvider { private final HtDatabaseEventsService databaseService; private final HtDatabaseMaintenanceService databaseMaintenanceService; private final HtUserdataManager usermanager; + private final InventoryTreeProvider inventoryTreeProvider; private final HtDatabaseMediatorserver dbMediatorServerService = new HtDatabaseMediatorserver() { @@ -158,7 +164,7 @@ public class ElasticSearchDataProvider implements DatabaseDataProvider { doFullsizeRequests); this.guicutthroughRW.setWriteInterface(Guicutthrough.class); - this.equipmentRW = new DataObjectAcessorWithId<>(dbClient, Entity.Inventoryequipment, + this.equipmentRW = new DataObjectAcessorInventory<>(dbClient, Entity.Inventoryequipment, org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.inventory.list.output.Data.class, doFullsizeRequests); @@ -197,9 +203,10 @@ public class ElasticSearchDataProvider implements DatabaseDataProvider { this.readStatus = new DataObjectAcessorStatus(dbClient, Entity.Faultcurrent, doFullsizeRequests); - this.databaseService = new HtDatabaseEventsService(dbClient, this); + this.databaseService = new HtDatabaseEventsService(dbClient); this.databaseMaintenanceService = new HtDatabaseMaintenanceService(dbClient); this.usermanager = new HtUserdataManagerImpl(this.dbClient); + this.inventoryTreeProvider = new DataTreeProviderImpl(this.dbClient); } /*------------------------- @@ -297,6 +304,17 @@ public class ElasticSearchDataProvider implements DatabaseDataProvider { } @Override + public ReadInventoryDeviceListOutputBuilder readInventoryDeviceList(EntityInput input) { + ReadInventoryDeviceListOutputBuilder outputBuilder = new ReadInventoryDeviceListOutputBuilder(); + QueryResult<String> result = equipmentRW.getDataDeviceList(input); + outputBuilder.setPagination( + new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.inventory.device.list.output.PaginationBuilder( + result.getPagination()).build()); + outputBuilder.setData(result.getResult().getHitSets()); + return outputBuilder; + } + + @Override public ReadConnectionlogListOutputBuilder readConnectionlogList(EntityInput input) { ReadConnectionlogListOutputBuilder outputBuilder = new ReadConnectionlogListOutputBuilder(); QueryResult<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.connectionlog.list.output.Data> result = @@ -547,5 +565,9 @@ public class ElasticSearchDataProvider implements DatabaseDataProvider { return this.usermanager; } + @Override + public InventoryTreeProvider getInventoryTreeProvider() { + return this.inventoryTreeProvider; + } } diff --git a/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/nodb/NoDbDatabaseDataProvider.java b/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/nodb/NoDbDatabaseDataProvider.java index 54cf32ce0..02b58bf72 100644 --- a/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/nodb/NoDbDatabaseDataProvider.java +++ b/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/nodb/NoDbDatabaseDataProvider.java @@ -24,11 +24,12 @@ package org.onap.ccsdk.features.sdnr.wt.dataprovider.database.nodb; import java.io.IOException; import java.util.concurrent.TimeUnit; import org.onap.ccsdk.features.sdnr.wt.common.database.HtDatabaseClient; -import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.DatabaseDataProvider; import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.DataProvider; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.DatabaseDataProvider; import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.HtDatabaseMaintenance; import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.HtDatabaseMediatorserver; import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.HtUserdataManager; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.InventoryTreeProvider; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.CreateMaintenanceInput; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.CreateMaintenanceOutputBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.CreateMediatorServerInput; @@ -48,6 +49,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.pro import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadFaultcurrentListOutputBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadFaultlogListOutputBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadGuiCutThroughEntryOutputBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadInventoryDeviceListOutputBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadInventoryListOutputBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadMaintenanceListOutputBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadMediatorServerListOutputBuilder; @@ -72,12 +74,14 @@ public class NoDbDatabaseDataProvider implements DatabaseDataProvider { private final HtDatabaseMediatorserver mediatorserver; private final HtDatabaseMaintenance maintenance; private final DataProvider dataprovider; + private final InventoryTreeProvider inventoryTreeProvider; public NoDbDatabaseDataProvider() { this.usermanger = new NoDbHtUserdataManager(); this.mediatorserver = new NoDbHtDatabaseMediatorserver(); this.maintenance = new NoDbHtDatabaseMaintenance(); this.dataprovider = new NoDbDataProvider(); + this.inventoryTreeProvider = new NoDbInventoryTreeProvider(); } @Override public HtDatabaseClient getRawClient() { @@ -241,4 +245,14 @@ public class NoDbDatabaseDataProvider implements DatabaseDataProvider { public HtUserdataManager getUserManager() { return this.usermanger; } + + @Override + public InventoryTreeProvider getInventoryTreeProvider() { + return this.inventoryTreeProvider; + } + + @Override + public ReadInventoryDeviceListOutputBuilder readInventoryDeviceList(EntityInput input) { + return new ReadInventoryDeviceListOutputBuilder(); + } } diff --git a/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/nodb/NoDbInventoryTreeProvider.java b/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/nodb/NoDbInventoryTreeProvider.java new file mode 100644 index 000000000..ad2960f64 --- /dev/null +++ b/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/database/nodb/NoDbInventoryTreeProvider.java @@ -0,0 +1,35 @@ +/* + * ============LICENSE_START======================================================= + * ONAP : ccsdk features + * ================================================================================ + * Copyright (C) 2023 highstreet technologies GmbH Intellectual Property. + * All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + * + */ +package org.onap.ccsdk.features.sdnr.wt.dataprovider.database.nodb; + +import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.InventoryTreeProvider; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.types.DataTreeObject; + +import java.io.IOException; +import java.util.List; + +public class NoDbInventoryTreeProvider implements InventoryTreeProvider { + @Override + public DataTreeObject readInventoryTree(List<String> tree, String filter) throws IOException { + return new DataTreeObject("",""); + } +} diff --git a/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/http/DataTreeChildObject.java b/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/http/DataTreeChildObject.java deleted file mode 100644 index 05e6d2f13..000000000 --- a/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/http/DataTreeChildObject.java +++ /dev/null @@ -1,187 +0,0 @@ -/* - * ============LICENSE_START======================================================= - * ONAP : ccsdk features - * ================================================================================ - * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property. - * All rights reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END========================================================= - * - */ -package org.onap.ccsdk.features.sdnr.wt.dataprovider.http; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; -import org.json.JSONObject; - -public class DataTreeChildObject { - - private final String label; -// private final String ownSeverity; -// private final String childrenSeveritySummary; - private final boolean isMatch; - private final Map<String, DataTreeChildObject> children; - private final Map<String, Object> properties; - - public boolean isMatch() { - return this.isMatch; - } - - public DataTreeChildObject(String label, boolean isMatch, Map<String, DataTreeChildObject> children, - String ownSeverity, String childrenSeveritySummary) { - this.label = label; - this.isMatch = isMatch; - this.children = children; -// this.ownSeverity = ownSeverity; -// this.childrenSeveritySummary = childrenSeveritySummary; - this.properties = new HashMap<>(); - } - - public DataTreeChildObject setProperty(String key, Object value) { - this.properties.put(key, value); - return this; - } - - public Object getProperty(String key, Object defaultValue) { - return this.properties.getOrDefault(key, defaultValue); - } - - /** - * @param string - * @param b - */ - public DataTreeChildObject(String label, boolean isMatch) { - this(label, isMatch, new HashMap<>(), null, null); - } - - /** - * @param treeLevel - * @param id - * @param data - * @param childKey - * @param parentKey - * @return - */ - public boolean putChild(long treeLevel, String id, DataTreeChildObject data, String parentKey, String childKey) { - Object itemValue; - Object itemValueToMatch = data.getProperty(parentKey, null); - if (itemValueToMatch == null) { - return false; - } - if (treeLevel > 0) { - if (this.children != null) { - for (DataTreeChildObject child : this.children.values()) { - if (child.putChild(treeLevel - 1, id, data, parentKey, childKey)) { - return true; - } - } - } - } else { - itemValue = this.getProperty(childKey, null); - if (itemValue != null && itemValue.equals(itemValueToMatch)) { - this.children.put(id, data); - return true; - } - } - return false; - } - - /** - * @param treeLevel - * @param id - * @param data - * @param parentKey - * @param childKey - * @return - */ - public boolean putChildIfNotExists(long treeLevel, String id, DataTreeChildObject data, String parentKey, - String childKey) { - Object itemValue; - Object itemValueToMatch = data.getProperty(parentKey, null); - if (itemValueToMatch == null) { - return false; - } - if (treeLevel > 0) { - if (this.children != null) { - for (DataTreeChildObject child : this.children.values()) { - if (child.putChildIfNotExists(treeLevel - 1, id, data, parentKey, childKey)) { - return true; - } - } - } - } else { - itemValue = this.getProperty(childKey, null); - if (itemValue != null && itemValue.equals(itemValueToMatch)) { - if (!this.children.containsKey(id)) { - this.children.put(id, data); - } - } - } - return false; - } - - /** - * @return - */ - public JSONObject toJSONObject() { - JSONObject o = new JSONObject(); - o.put("label", this.label); - o.put("isMatch", this.isMatch); - JSONObject c = new JSONObject(); - if (this.children != null) { - for (Entry<String, DataTreeChildObject> entry : this.children.entrySet()) { - c.put(entry.getKey(), entry.getValue().toJSONObject()); - } - } - o.put("children", c); - //o.put("ownSeverity", null); - //o.put("childrenSeveritySummary", null); - return o; - } - - public boolean hasChildMatching() { - boolean match = false; - for (DataTreeChildObject child : this.children.values()) { - match = match || child.hasChildMatching() || this.isMatch; - if (match) { - break; - } - } - return match; - } - - /** - * - */ - public void removeUnmatchedPaths() { - List<String> toRemove = new ArrayList<>(); - for (Entry<String, DataTreeChildObject> entry : this.children.entrySet()) { - if (!(entry.getValue().hasChildMatching() || entry.getValue().isMatch)) { - toRemove.add(entry.getKey()); - } else { - entry.getValue().removeUnmatchedPaths(); - } - } - for (String key : toRemove) { - this.children.remove(key); - } - } - - public boolean hasChildren() { - return this.children!=null && !this.children.isEmpty(); - } -} diff --git a/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/http/DataTreeHttpServlet.java b/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/http/DataTreeHttpServlet.java index 3c4a7621b..2f7b9e3fc 100644 --- a/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/http/DataTreeHttpServlet.java +++ b/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/http/DataTreeHttpServlet.java @@ -32,14 +32,18 @@ import java.util.List; import java.util.Optional; import java.util.regex.Matcher; import java.util.regex.Pattern; +import javax.servlet.Servlet; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.json.JSONObject; -import org.onap.ccsdk.features.sdnr.wt.common.database.HtDatabaseClient; -import org.onap.ccsdk.features.sdnr.wt.dataprovider.impl.DataTreeProviderImpl; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.InventoryTreeProvider; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.types.DataTreeObject; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.Entity; +import org.osgi.service.component.annotations.Component; +import org.osgi.service.http.whiteboard.propertytypes.HttpWhiteboardServletName; +import org.osgi.service.http.whiteboard.propertytypes.HttpWhiteboardServletPattern; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -47,22 +51,22 @@ import org.slf4j.LoggerFactory; * @author Michael Dürre * */ + +@HttpWhiteboardServletPattern("/tree/*") +@HttpWhiteboardServletName("DataTreeHttpServlet") +@Component(service = Servlet.class) public class DataTreeHttpServlet extends HttpServlet { private static final long serialVersionUID = 1L; - private final DataTreeProviderImpl dataTreeProvider; + private InventoryTreeProvider dataTreeProvider; private static final Logger LOG = LoggerFactory.getLogger(DataTreeHttpServlet.class); public DataTreeHttpServlet() { super(); - this.dataTreeProvider = new DataTreeProviderImpl(); } - /** - * @param client - */ - public void setDatabaseClient(HtDatabaseClient client) { - this.dataTreeProvider.setDatabaseClient(client); + public void setInventoryTreeProvider(InventoryTreeProvider provider) { + this.dataTreeProvider = provider; } @@ -109,7 +113,7 @@ public class DataTreeHttpServlet extends HttpServlet { LOG.debug("GET request for {}", uri); final EntityWithTree e = getEntity(uri); if (e != null) { - LOG.info("GET request for {} to e={} with tree={}", uri, e.entity, e.tree); + LOG.debug("GET request for {} to e={} with tree={}", uri, e.entity, e.tree); switch (e.entity) { case Inventoryequipment: DataTreeObject o = this.dataTreeProvider.readInventoryTree(e.tree, null); @@ -170,7 +174,7 @@ public class DataTreeHttpServlet extends HttpServlet { final Matcher matcher = pattern.matcher(uri); if (matcher.find() && matcher.groupCount() > 0) { try { - Optional<Entity> oe = Entity.forName(matcher.group(1)); + Optional<Entity> oe = Optional.ofNullable(Entity.forName(matcher.group(1))); if (oe.isPresent()) { return new EntityWithTree(oe.get(), matcher.groupCount() > 1 ? matcher.group(2) : null); } else { diff --git a/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/http/DataTreeObject.java b/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/http/DataTreeObject.java deleted file mode 100644 index f12ff3deb..000000000 --- a/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/http/DataTreeObject.java +++ /dev/null @@ -1,148 +0,0 @@ -/* - * ============LICENSE_START======================================================= - * ONAP : ccsdk features - * ================================================================================ - * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property. - * All rights reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END========================================================= - * - */ -package org.onap.ccsdk.features.sdnr.wt.dataprovider.http; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import org.json.JSONObject; - -public class DataTreeObject extends HashMap<String, DataTreeChildObject> { - - private static final long serialVersionUID = 1L; - private final String parentKey; - private final String childKey; - - public DataTreeObject createTreeByPath(String[] pathFilter) { - - if (pathFilter != null && pathFilter.length > 0) { - for (String key : this.keySet()) { - if (key.equals(pathFilter[0])) { - DataTreeChildObject o = this.getChildElemByPath(this.get(key), slice(pathFilter, 1)); - DataTreeObject r = new DataTreeObject(this.parentKey, this.childKey); - r.put(key, o); - return r; - } - } - } - - return null; - - } - - private DataTreeChildObject getChildElemByPath(DataTreeChildObject source, String[] pathFilter) { - - if (pathFilter != null && pathFilter.length > 0) { - // for(String key:source..keySet()) { - // if(key.equals(pathFilter[0])){ - // DataTreeChildObject o= this.getChildElemByPath(this.get(key),slice(pathFilter,1)); - // } - // } - } - - return null; - } - - public DataTreeObject(String parentKey, String childKey) { - this.parentKey = parentKey; - this.childKey = childKey; - } - - /** - * @param treeLevel - * @param id - * @param data - */ - public void put(long treeLevel, String id, DataTreeChildObject data) { - for (DataTreeChildObject entry : this.values()) { - if (entry.putChild(treeLevel, id, data, this.parentKey, this.childKey)) { - break; - } - } - - } - - /** - * - */ - public String toJSON() { - JSONObject o = new JSONObject(); - for (Entry<String, DataTreeChildObject> entry : this.entrySet()) { - o.put(entry.getKey(), entry.getValue().toJSONObject()); - } - return o.toString(); - } - - /** - * - */ - public void removeUnmatchedPaths() { - List<String> toRemove = new ArrayList<>(); - for (Entry<String,DataTreeChildObject> entry : this.entrySet()) { - entry.getValue().removeUnmatchedPaths(); - if(!entry.getValue().isMatch() && !entry.getValue().hasChildren()) { - toRemove.add(entry.getKey()); - } - } - for(String toRemoveKey:toRemove) { - this.remove(toRemoveKey); - } - - } - - /** - * @param treeLevel - * @param id - * @param setProperty - */ - public void putIfNotExists(long treeLevel, String id, DataTreeChildObject data) { - for (DataTreeChildObject entry : this.values()) { - if (entry.putChildIfNotExists(treeLevel, id, data, this.parentKey, this.childKey)) { - break; - } - } - } - - /** - * @param id - * @param data - */ - public void putIfNotExists(String id, DataTreeChildObject data) { - if (!this.containsKey(id)) { - this.put(id, data); - } - } - - /** - * @param source - * @param i - * @return - */ - public static String[] slice(String[] source, int start) { - String[] r = new String[source.length - start]; - for (int i = 0; i < r.length; i++) { - r[i] = source[i + start]; - } - return r; - - } -} diff --git a/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/http/MsServlet.java b/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/http/MsServlet.java index 103dec70d..85658d439 100644 --- a/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/http/MsServlet.java +++ b/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/http/MsServlet.java @@ -22,15 +22,22 @@ package org.onap.ccsdk.features.sdnr.wt.dataprovider.http; import java.io.IOException; +import javax.servlet.Servlet; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.onap.ccsdk.features.sdnr.wt.common.http.BaseServlet; import org.onap.ccsdk.features.sdnr.wt.dataprovider.impl.MediatorServerDataProvider; import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.HtDatabaseMediatorserver; +import org.osgi.service.component.annotations.Component; +import org.osgi.service.http.whiteboard.propertytypes.HttpWhiteboardServletName; +import org.osgi.service.http.whiteboard.propertytypes.HttpWhiteboardServletPattern; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +@HttpWhiteboardServletPattern("/ms/*") +@HttpWhiteboardServletName("MsServlet") +@Component(service = Servlet.class) public class MsServlet extends BaseServlet { /** diff --git a/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/http/UserdataHttpServlet.java b/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/http/UserdataHttpServlet.java index b51d2a6df..92bccce6f 100644 --- a/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/http/UserdataHttpServlet.java +++ b/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/http/UserdataHttpServlet.java @@ -26,6 +26,7 @@ import java.nio.charset.StandardCharsets; import java.util.Base64; import java.util.regex.Matcher; import java.util.regex.Pattern; +import javax.servlet.Servlet; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; @@ -33,9 +34,15 @@ import javax.servlet.http.HttpServletResponse; import org.json.JSONObject; import org.onap.ccsdk.features.sdnr.wt.common.http.BaseHTTPClient; import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.HtUserdataManager; +import org.osgi.service.component.annotations.Component; +import org.osgi.service.http.whiteboard.propertytypes.HttpWhiteboardServletName; +import org.osgi.service.http.whiteboard.propertytypes.HttpWhiteboardServletPattern; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +@HttpWhiteboardServletPattern({"/userdata","/userdata/*"}) +@HttpWhiteboardServletName("UserdataHttpServlet") +@Component(service = Servlet.class) public class UserdataHttpServlet extends HttpServlet { private static final long serialVersionUID = 1L; @@ -50,10 +57,10 @@ public class UserdataHttpServlet extends HttpServlet { final String uri = req.getRequestURI(); final Matcher matcher = PATTERN.matcher(uri); if (matcher.find()) { - LOG.info("GET found match"); + LOG.debug("GET found match"); this.handleGetRequest(req, resp, matcher.groupCount() > 0 ? matcher.group(1) : null); } else { - LOG.info("no valid request"); + LOG.debug("no valid request"); super.doGet(req, resp); } } @@ -63,11 +70,11 @@ public class UserdataHttpServlet extends HttpServlet { final String uri = req.getRequestURI(); final Matcher matcher = PATTERN.matcher(uri); if (matcher.find()) { - LOG.info("PUT found match"); + LOG.debug("PUT found match"); final String payload = getPayload(req); this.handlePutRequest(req, resp, payload, matcher.groupCount() > 0 ? matcher.group(1) : null); } else { - LOG.info("no valid request"); + LOG.debug("no valid request"); super.doPut(req, resp); } } @@ -81,10 +88,10 @@ public class UserdataHttpServlet extends HttpServlet { final String uri = req.getRequestURI(); final Matcher matcher = PATTERN.matcher(uri); if (matcher.find()) { - LOG.info("DELETE found match"); + LOG.debug("DELETE found match"); this.handleDeleteRequest(req, resp, matcher.groupCount() > 0 ? matcher.group(1) : null); } else { - LOG.info("no valid request"); + LOG.debug("no valid request"); super.doPut(req, resp); } } diff --git a/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/http/about/AboutHttpServlet.java b/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/http/about/AboutHttpServlet.java index 40a46e6fb..45bd80cd6 100644 --- a/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/http/about/AboutHttpServlet.java +++ b/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/http/about/AboutHttpServlet.java @@ -29,6 +29,7 @@ import java.util.Map; import java.util.Map.Entry; import java.util.jar.Attributes; import java.util.jar.Manifest; +import javax.servlet.Servlet; import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServlet; @@ -41,9 +42,16 @@ import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.types.NetconfTimeStamp import org.osgi.framework.Bundle; import org.osgi.framework.BundleContext; import org.osgi.framework.FrameworkUtil; +import org.osgi.service.component.annotations.Component; +import org.osgi.service.component.annotations.ServiceScope; +import org.osgi.service.http.whiteboard.propertytypes.HttpWhiteboardServletName; +import org.osgi.service.http.whiteboard.propertytypes.HttpWhiteboardServletPattern; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +@HttpWhiteboardServletPattern("/about") +@HttpWhiteboardServletName("AboutHttpServlet") +@Component(service = Servlet.class) public class AboutHttpServlet extends HttpServlet { /** @@ -98,7 +106,6 @@ public class AboutHttpServlet extends HttpServlet { this.BUNDLESTATE_LUT.put(Bundle.STARTING, "starting"); this.BUNDLESTATE_LUT.put(Bundle.STOPPING, "stopping"); this.BUNDLESTATE_LUT.put(Bundle.ACTIVE, "active"); - } protected String getGroupIdOrDefault(String def) { diff --git a/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/http/about/ODLVersionLUT.java b/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/http/about/ODLVersionLUT.java index 868bf7ec6..c623d9955 100644 --- a/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/http/about/ODLVersionLUT.java +++ b/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/http/about/ODLVersionLUT.java @@ -72,6 +72,8 @@ public class ODLVersionLUT { } if(odlMdsalVersionLUT==null) { odlMdsalVersionLUT = new HashMap<>(); + odlMdsalVersionLUT.put("10.0.2","chlorine-SR0 (0.17.0)"); + odlMdsalVersionLUT.put("9.0.5","sulfur-SR2 (0.16.2)"); odlMdsalVersionLUT.put("9.0.4","sulfur-SR1 (0.16.1)"); odlMdsalVersionLUT.put("9.0.2","sulfur-SR0 (0.16.0)"); odlMdsalVersionLUT.put("8.0.11","phosphorus-SR2 (0.15.2)"); diff --git a/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/http/yangschema/YangSchemaHttpServlet.java b/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/http/yangschema/YangSchemaHttpServlet.java index 86f67b1de..f9fa2e931 100644 --- a/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/http/yangschema/YangSchemaHttpServlet.java +++ b/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/http/yangschema/YangSchemaHttpServlet.java @@ -23,13 +23,21 @@ package org.onap.ccsdk.features.sdnr.wt.dataprovider.http.yangschema; import java.io.IOException; import java.text.ParseException; +import javax.servlet.Servlet; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; + +import org.osgi.service.component.annotations.Component; +import org.osgi.service.http.whiteboard.propertytypes.HttpWhiteboardServletName; +import org.osgi.service.http.whiteboard.propertytypes.HttpWhiteboardServletPattern; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +@HttpWhiteboardServletPattern("/yang-schema/*") +@HttpWhiteboardServletName("YangSchemaHttpServlet") +@Component(service = Servlet.class) public class YangSchemaHttpServlet extends HttpServlet { /** * diff --git a/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/impl/DataProviderImpl.java b/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/impl/DataProviderImpl.java index e06a1a9a2..66ffdf8b3 100644 --- a/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/impl/DataProviderImpl.java +++ b/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/impl/DataProviderImpl.java @@ -87,7 +87,7 @@ public class DataProviderImpl implements IEntityDataProvider, AutoCloseable { try { // Start RPC Service this.rpcApiService = new DataProviderServiceImpl(rpcProviderService, this.mediatorServerServlet, this.dataBroker); - this.treeServlet.setDatabaseClient(this.rpcApiService.getRawClient()); + this.treeServlet.setInventoryTreeProvider(this.rpcApiService.getInventoryTreeProvider()); this.userdataServlet.setDatabaseClient(this.rpcApiService.getHtDatabaseUserManager()); LOG.info("Session Initiated end. Initialization done"); } catch (Exception e) { @@ -109,7 +109,7 @@ public class DataProviderImpl implements IEntityDataProvider, AutoCloseable { /** * Used to close all Services, that should support AutoCloseable Pattern * - * @param toClose + * @param toCloseList * @throws Exception */ private void close(AutoCloseable... toCloseList) throws Exception { diff --git a/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/impl/DataProviderServiceImpl.java b/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/impl/DataProviderServiceImpl.java index b75108ab2..d21d50f83 100644 --- a/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/impl/DataProviderServiceImpl.java +++ b/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/impl/DataProviderServiceImpl.java @@ -27,9 +27,6 @@ import com.google.common.util.concurrent.ListenableFuture; import java.io.IOException; import java.io.PrintWriter; import java.io.StringWriter; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.util.Arrays; import java.util.Map; import java.util.Optional; import java.util.Set; @@ -39,15 +36,16 @@ import java.util.stream.Collectors; import org.eclipse.jdt.annotation.NonNull; import org.onap.ccsdk.features.sdnr.wt.common.configuration.ConfigurationFileRepresentation; import org.onap.ccsdk.features.sdnr.wt.common.database.HtDatabaseClient; -import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.DatabaseDataProvider; import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.elasticsearch.impl.ElasticSearchDataProvider; import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.nodb.NoDbDatabaseDataProvider; import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.sqldb.data.SqlDBDataProvider; import org.onap.ccsdk.features.sdnr.wt.dataprovider.http.MsServlet; import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.DataProvider; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.DatabaseDataProvider; import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.HtDatabaseMaintenance; import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.HtUserdataManager; import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.IEsConfig; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.InventoryTreeProvider; import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.SdnrDbType; import org.onap.ccsdk.features.sdnr.wt.yang.mapper.YangToolsMapperHelper; import org.opendaylight.mdsal.binding.api.DataBroker; @@ -82,6 +80,8 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.pro import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadFaultlogListOutput; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadGuiCutThroughEntryInput; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadGuiCutThroughEntryOutput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadInventoryDeviceListInput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadInventoryDeviceListOutput; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadInventoryListInput; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadInventoryListOutput; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadMaintenanceListInput; @@ -141,7 +141,6 @@ public class DataProviderServiceImpl implements DataProviderService, AutoCloseab private final DatabaseDataProvider dataProvider; private final ConfigurationFileRepresentation configuration; private final DataProviderConfig dbConfig; - private final HtUserdataManager dbUserManager; private final DataBroker dataBroker; private final MsServlet mediatorServerServlet; @@ -161,7 +160,6 @@ public class DataProviderServiceImpl implements DataProviderService, AutoCloseab else { this.dataProvider = new NoDbDatabaseDataProvider(); } - this.dbUserManager = this.dataProvider.getUserManager(); this.dataProvider.waitForYellowDatabaseStatus(DATABASE_TIMEOUT_MS, TimeUnit.MILLISECONDS); mediatorServerServlet.setDataProvider(this.dataProvider.getHtDatabaseMediatorServer()); // Register ourselves as the REST API RPC implementation @@ -296,6 +294,15 @@ public class DataProviderServiceImpl implements DataProviderService, AutoCloseab } @Override + public ListenableFuture<RpcResult<ReadInventoryDeviceListOutput>> readInventoryDeviceList( + ReadInventoryDeviceListInput input) { + LOG.debug("RPC Request: readInventoryDeviceList with input {}", input); + RpcResultBuilder<ReadInventoryDeviceListOutput> result = + read(() -> DataProviderServiceImpl.this.dataProvider.readInventoryDeviceList(input)); + return result.buildFuture(); + } + + @Override public ListenableFuture<RpcResult<ReadPmdata15mLtpListOutput>> readPmdata15mLtpList( ReadPmdata15mLtpListInput input) { LOG.debug("RPC Request: readPmdata15mLtpList with input {}", input); @@ -495,6 +502,10 @@ public class DataProviderServiceImpl implements DataProviderService, AutoCloseab return buf.toString(); } + public InventoryTreeProvider getInventoryTreeProvider() { + return this.dataProvider.getInventoryTreeProvider(); + } + private interface GetEntityInput<O extends DataObject,B> { B get() throws IOException; } @@ -515,7 +526,7 @@ public class DataProviderServiceImpl implements DataProviderService, AutoCloseab public HtUserdataManager getHtDatabaseUserManager() { - return this.dbUserManager; + return this.dataProvider.getUserManager(); } diff --git a/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/impl/DataTreeProviderImpl.java b/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/impl/DataTreeProviderImpl.java index cb62e3326..f5f1e4583 100644 --- a/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/impl/DataTreeProviderImpl.java +++ b/sdnr/wt/data-provider/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/dataprovider/impl/DataTreeProviderImpl.java @@ -21,294 +21,114 @@ */ package org.onap.ccsdk.features.sdnr.wt.dataprovider.impl; -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; -import org.json.JSONObject; import org.onap.ccsdk.features.sdnr.wt.common.database.HtDatabaseClient; -import org.onap.ccsdk.features.sdnr.wt.common.database.SearchHit; +import org.onap.ccsdk.features.sdnr.wt.common.database.SearchResult; import org.onap.ccsdk.features.sdnr.wt.common.database.queries.BoolQueryBuilder; import org.onap.ccsdk.features.sdnr.wt.common.database.queries.QueryBuilder; import org.onap.ccsdk.features.sdnr.wt.common.database.queries.QueryBuilders; import org.onap.ccsdk.features.sdnr.wt.common.database.queries.SortOrder; -import org.onap.ccsdk.features.sdnr.wt.common.database.requests.Search7Request; import org.onap.ccsdk.features.sdnr.wt.common.database.requests.SearchRequest; import org.onap.ccsdk.features.sdnr.wt.common.database.responses.AggregationEntries; import org.onap.ccsdk.features.sdnr.wt.common.database.responses.SearchResponse; -import org.onap.ccsdk.features.sdnr.wt.dataprovider.http.DataTreeChildObject; -import org.onap.ccsdk.features.sdnr.wt.dataprovider.http.DataTreeObject; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.elasticsearch.data.acessor.DataObjectAcessorWithId; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.BaseInventoryTreeProvider; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.Entity; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.Inventory; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.InventoryEntity; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; /** * @author Michael Dürre - * */ -public class DataTreeProviderImpl { +public class DataTreeProviderImpl extends BaseInventoryTreeProvider { + private static final Logger LOG = LoggerFactory.getLogger(DataTreeProviderImpl.class); private static final long MAXSIZE_PERSEARCH = 10; - private HtDatabaseClient dbClient; - private static final String INVENTORY_PROPERTY_TREELEVEL = "tree-level"; - private static final String INVENTORY_PROPERTY_NODEID = "node-id"; - private static final String INVENTORY_PROPERTY_UUID = "uuid"; - private static final String INVENTORY_PROPERTY_PARENTUUID = "parent-uuid"; - private static final String INVENTORY_PROPERTY_FOR_LABEL_CHILD = "uuid"; - private static final String INVENTORY_PROPERTY_FOR_LABEL = "uuid"; - - private List<SearchHit> search(Entity e, String filter, String propTreeLevel) throws IOException { - return this.search(e, filter, null, null, null, null, null, null, propTreeLevel); - } - - private List<SearchHit> search(Entity e, String filter, String nodeKey, String nodeId, String parentKey, - String parentValue, String childKey, String childValue, String propTreeLevel) throws IOException { - QueryBuilder query = - filter == null ? QueryBuilders.matchAllQuery() : QueryBuilders.searchAllFieldsQuery(filter); - if ((nodeId != null && nodeKey != null) || (parentKey != null && parentValue != null)) { - BoolQueryBuilder bquery = new BoolQueryBuilder(); - if (filter != null) { - bquery.must(query); - } - if (nodeId != null) { - bquery.must(QueryBuilders.matchQuery(nodeKey, nodeId)); - } - query = bquery; - + private final HtDatabaseClient dbClient; + private final DataObjectAcessorWithId<Inventory> dbReader; + + public DataTreeProviderImpl(HtDatabaseClient dbClient) { + this.dbClient = dbClient; + try { + this.dbReader = new DataObjectAcessorWithId<>(dbClient,Entity.Inventoryequipment,Inventory.class,true); + } catch (ClassNotFoundException e) { + throw new RuntimeException(e); } - return this.search(e, query, propTreeLevel); } - private List<SearchHit> search(Entity e, QueryBuilder query, String propTreeLevel) throws IOException { - List<SearchHit> list = new ArrayList<SearchHit>(); - query.sort(propTreeLevel, SortOrder.ASCENDING); - SearchRequest request = new Search7Request(Entity.Inventoryequipment.getName()); + private List<InventoryEntity> search(QueryBuilder query) { + query.size(MAXSIZE_PERSEARCH); - request.setQuery(query); - SearchResponse response = this.dbClient.search(request); - SearchHit[] matches = response.getHits(); - for (SearchHit hit : matches) { - list.add(hit); - } + SearchResult<Inventory> response = null; + response = this.dbReader.doReadAll(query); + List<Inventory> matches = response.getHits(); + List<InventoryEntity> list = new ArrayList<>(); + list.addAll(matches); if (response.getTotal() > MAXSIZE_PERSEARCH) { long todo = response.getTotal(); long from = MAXSIZE_PERSEARCH; while (todo > from) { - request.setQuery(query.from(from)); + query.from(from); from += MAXSIZE_PERSEARCH; //merge into list - response = this.dbClient.search(request); + response = this.dbReader.doReadAll(query); matches = response.getHits(); - for (SearchHit hit : matches) { - list.add(hit); - } + list.addAll(matches); } } return list; } - /** - * @param iNVENTORY_PROPERTY_NODEID2 - * @return - * @throws IOException - */ - private AggregationEntries searchAggregated(Entity e, String key) throws IOException { - QueryBuilder query = QueryBuilders.matchAllQuery().aggregations(key).size(MAXSIZE_PERSEARCH); - SearchRequest request = new Search7Request(e.getName()); - request.setQuery(query); - SearchResponse response = this.dbClient.search(request); - return response.getAggregations(key); - } - - /** - * - * @param tree - * @param filter - * @param - * @return - * @throws IOException - */ - public DataTreeObject readInventoryTree(List<String> tree, String filter) throws IOException { - //root nodes will be node-information -> below inventory - if (tree == null || tree.size() <= 0) { - return this.readInventoryTreeWithNode(filter); - } - //root node will be inventory on tree-level if sliced treePath - else { - return this.readInventoryTreeForNode(tree.get(0), tree.subList(0, tree.size() - 1), filter); + @Override + protected List<String> getAllNodeIds() { + QueryBuilder query = QueryBuilders.matchAllQuery().setFullsizeRequest(true).aggregations(INVENTORY_PROPERTY_NODEID).size(0); + SearchRequest request = new SearchRequest(Entity.Inventoryequipment.getName(),Entity.Inventoryequipment.getName()); + request.setQuery(query); + try { + SearchResponse response = this.dbClient.search(request); + AggregationEntries aggs = response.getAggregations(INVENTORY_PROPERTY_NODEID); + return new ArrayList<>(aggs.keySet()); + } catch (IOException e) { + LOG.warn("problem reading nodes of inventory: ", e); } - + return List.of(); } - /** - * @param string - * @param slice - * @param filter - * @param mode - * @return - */ - private DataTreeObject readInventoryTreeForNode(String nodeId, List<String> list, String filter) - throws IOException { - DataTreeObject tree = new DataTreeObject(INVENTORY_PROPERTY_PARENTUUID, INVENTORY_PROPERTY_UUID); - final String parentUuid = list.size() > 1 ? list.get(list.size() - 2) : null; - final String uuid = list.size() > 0 ? list.get(list.size() - 1) : null; - List<SearchHit> matches = this.search(Entity.Inventoryequipment, filter, INVENTORY_PROPERTY_NODEID, nodeId, - INVENTORY_PROPERTY_PARENTUUID, parentUuid, INVENTORY_PROPERTY_UUID, uuid, INVENTORY_PROPERTY_TREELEVEL); - - //tree.a(subtreePath); - List<SearchHit> others = this.search(Entity.Inventoryequipment, (String) null, INVENTORY_PROPERTY_NODEID, nodeId, - null, null, null, null, INVENTORY_PROPERTY_TREELEVEL); - if (matches.size() > 0) { - int treeLevelToStart = (list == null || list.size() <= 0) ? 0 : list.size() - 1; - //build tree - JSONObject hitData; - //fill root elems - for (SearchHit hit : matches) { - hitData = hit.getSource(); - if (hitData.getLong(INVENTORY_PROPERTY_TREELEVEL) == treeLevelToStart) { - tree.put(hit.getId(), - new DataTreeChildObject(hitData.getString(INVENTORY_PROPERTY_FOR_LABEL), true) - .setProperty(INVENTORY_PROPERTY_UUID, hitData.getString(INVENTORY_PROPERTY_UUID)) - .setProperty(INVENTORY_PROPERTY_PARENTUUID, - hitData.getString(INVENTORY_PROPERTY_PARENTUUID))); - } - } - for (SearchHit hit : others) { - hitData = hit.getSource(); - if (hitData.getLong(INVENTORY_PROPERTY_TREELEVEL) == treeLevelToStart) { - tree.putIfNotExists(hit.getId(), - new DataTreeChildObject(hitData.getString(INVENTORY_PROPERTY_FOR_LABEL), false) - .setProperty(INVENTORY_PROPERTY_UUID, hitData.getString(INVENTORY_PROPERTY_UUID)) - .setProperty(INVENTORY_PROPERTY_PARENTUUID, - hitData.getString(INVENTORY_PROPERTY_PARENTUUID))); - } - } - //fill child elems - for (SearchHit hit : matches) { - hitData = hit.getSource(); - if (hitData.getLong(INVENTORY_PROPERTY_TREELEVEL) > treeLevelToStart) { - tree.put(hitData.getLong(INVENTORY_PROPERTY_TREELEVEL) - treeLevelToStart - 1, hit.getId(), - new DataTreeChildObject(hitData.getString(INVENTORY_PROPERTY_FOR_LABEL), true) - .setProperty(INVENTORY_PROPERTY_UUID, hitData.getString(INVENTORY_PROPERTY_UUID)) - .setProperty(INVENTORY_PROPERTY_PARENTUUID, - hitData.getString(INVENTORY_PROPERTY_PARENTUUID))); - } - } - for (SearchHit hit : others) { - hitData = hit.getSource(); - if (hitData.getLong(INVENTORY_PROPERTY_TREELEVEL) > treeLevelToStart) { - tree.putIfNotExists(hitData.getLong(INVENTORY_PROPERTY_TREELEVEL) - treeLevelToStart - 1, hit.getId(), - new DataTreeChildObject(hitData.getString(INVENTORY_PROPERTY_FOR_LABEL), false) - .setProperty(INVENTORY_PROPERTY_UUID, hitData.getString(INVENTORY_PROPERTY_UUID)) - .setProperty(INVENTORY_PROPERTY_PARENTUUID, - hitData.getString(INVENTORY_PROPERTY_PARENTUUID))); - } - } - tree.removeUnmatchedPaths(); - } - return tree; + @Override + protected List<InventoryEntity> search(String filter, String sortOrderProperty, SortOrder sortOrder) { + return this.search(filter, null, null, null, sortOrderProperty, sortOrder); } - /** - * node will be root elements inventory information below from level-1 - * - * @param filter - * @return - * @throws IOException - */ - private DataTreeObject readInventoryTreeWithNode(String filter) throws IOException { - DataTreeObject tree = new DataTreeObject(INVENTORY_PROPERTY_PARENTUUID, INVENTORY_PROPERTY_UUID); - - List<SearchHit> matches = this.search(Entity.Inventoryequipment, filter, INVENTORY_PROPERTY_TREELEVEL); - List<SearchHit> others = null; - if (matches.size() > 0) { + @Override + protected List<InventoryEntity> search(String filter, String nodeId, String parentUuid, String uuid, String sortOrderProperty, SortOrder sortOrder) { + QueryBuilder query = + filter == null ? QueryBuilders.matchAllQuery() : QueryBuilders.searchAllFieldsQuery(filter); + if ((nodeId != null) || (parentUuid != null)) { + BoolQueryBuilder bquery = new BoolQueryBuilder(); if (filter != null) { - //find all parents up to tree-level 0 - String nodeId = ""; - List<String> alreadyInList = new ArrayList<>(); - BoolQueryBuilder query2 = QueryBuilders.boolQuery(); - for (SearchHit hit : matches) { - nodeId = hit.getSource().getString(INVENTORY_PROPERTY_NODEID); - if (alreadyInList.contains(nodeId)) { - continue; - } - query2.should(QueryBuilders.matchQuery(INVENTORY_PROPERTY_NODEID, nodeId)); - alreadyInList.add(nodeId); - tree.put(nodeId, - new DataTreeChildObject(nodeId, false).setProperty(INVENTORY_PROPERTY_UUID, nodeId)); - - } - others = this.search(Entity.Inventoryequipment, query2, INVENTORY_PROPERTY_TREELEVEL); - } else { - AggregationEntries nodes = this.searchAggregated(Entity.Inventoryequipment, INVENTORY_PROPERTY_NODEID); - for (String node : nodes.keySet()) { - tree.put(node, new DataTreeChildObject(node, false).setProperty(INVENTORY_PROPERTY_UUID, node)); - } - } - - //build tree - JSONObject hitData; - //fill root elems - for (SearchHit hit : matches) { - hitData = hit.getSource(); - if (hitData.getLong(INVENTORY_PROPERTY_TREELEVEL) == 0) { - tree.put(0, hit.getId(), - new DataTreeChildObject(hitData.getString(INVENTORY_PROPERTY_FOR_LABEL), true) - .setProperty(INVENTORY_PROPERTY_UUID, hitData.getString(INVENTORY_PROPERTY_UUID)) - .setProperty(INVENTORY_PROPERTY_PARENTUUID, - hitData.getString(INVENTORY_PROPERTY_NODEID))); - } - } - if (others != null) { - for (SearchHit hit : others) { - hitData = hit.getSource(); - if (hitData.getLong(INVENTORY_PROPERTY_TREELEVEL) == 0) { - tree.putIfNotExists(0, hit.getId(), - new DataTreeChildObject(hitData.getString(INVENTORY_PROPERTY_FOR_LABEL), false) - .setProperty(INVENTORY_PROPERTY_UUID, - hitData.getString(INVENTORY_PROPERTY_UUID)) - .setProperty(INVENTORY_PROPERTY_PARENTUUID, - hitData.getString(INVENTORY_PROPERTY_NODEID))); - } - } - } - //fill child elements - for (SearchHit hit : matches) { - hitData = hit.getSource(); - long treeLevel = hitData.getLong(INVENTORY_PROPERTY_TREELEVEL); - if (treeLevel > 0) { - tree.put(treeLevel, hit.getId(), - new DataTreeChildObject(hitData.getString(INVENTORY_PROPERTY_FOR_LABEL_CHILD), true) - .setProperty(INVENTORY_PROPERTY_UUID, hitData.getString(INVENTORY_PROPERTY_UUID)) - .setProperty(INVENTORY_PROPERTY_PARENTUUID, - hitData.getString(INVENTORY_PROPERTY_PARENTUUID))); - } + bquery.must(query); } - if (others != null) { - for (SearchHit hit : others) { - hitData = hit.getSource(); - long treeLevel = hitData.getLong(INVENTORY_PROPERTY_TREELEVEL); - if (hitData.getLong(INVENTORY_PROPERTY_TREELEVEL) > 0) { - tree.putIfNotExists(treeLevel, hit.getId(), - new DataTreeChildObject(hitData.getString(INVENTORY_PROPERTY_FOR_LABEL_CHILD), false) - .setProperty(INVENTORY_PROPERTY_UUID, - hitData.getString(INVENTORY_PROPERTY_UUID)) - .setProperty(INVENTORY_PROPERTY_PARENTUUID, - hitData.getString(INVENTORY_PROPERTY_PARENTUUID))); - } - } + if (nodeId != null) { + bquery.must(QueryBuilders.matchQuery(INVENTORY_PROPERTY_NODEID, nodeId)); } - tree.removeUnmatchedPaths(); + query = bquery; } - return tree; + query.sort(sortOrderProperty, sortOrder); + return this.search(query); } - - - /** - * @param client - */ - public void setDatabaseClient(HtDatabaseClient client) { - this.dbClient = client; - + @Override + protected List<InventoryEntity> getItemsForNodes(List<String> nodeIds, String sortOrderProperty, SortOrder sortOrder) { + BoolQueryBuilder query = QueryBuilders.boolQuery(); + nodeIds.forEach(e->query.should(QueryBuilders.matchQuery(INVENTORY_PROPERTY_NODEID,e))); + return this.search(query); } + } |